From 223dd8606cfef68f6cc762e7a8d02115c0141240 Mon Sep 17 00:00:00 2001 From: joncruz Date: Tue, 23 May 2006 09:17:37 +0000 Subject: [PATCH] Panel refactoring --- ChangeLog | 12 ++++ src/dialogs/layers-panel.cpp | 2 +- src/dialogs/swatches.cpp | 36 +++++++++- src/dialogs/swatches.h | 2 +- src/preferences-skeleton.h | 3 + src/ui/previewfillable.h | 2 + src/ui/previewholder.cpp | 27 ++++++- src/ui/previewholder.h | 3 + src/ui/widget/panel.cpp | 127 ++++++++++++++++++++++++--------- src/ui/widget/panel.h | 7 +- src/verbs.cpp | 2 + src/widgets/desktop-widget.cpp | 2 +- 12 files changed, 183 insertions(+), 42 deletions(-) diff --git a/ChangeLog b/ChangeLog index 83d3e06e7..2c5669781 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-05-22 Jon A. Cruz +1234567890123456789012345678901234567890123456789012345678901234567890123456 + * src/dialogs/layers-panel.cpp, src/dialogs/swatches.cpp, + src/dialogs/swatches.h, src/preferences-skeleton.h, + src/ui/previewfillable.h, src/ui/previewholder.cpp, + src/ui/previewholder.h, src/ui/widget/panel.cpp, + src/ui/widget/panel.h, src/verbs.cpp, + src/widgets/desktop-widget.cpp: + Refactored panels. + Fixes RFE #1453153. Fixes RFE #1453152. + + 2006-05-23 MenTaLguY * src/extension/internal/ps.cpp: diff --git a/src/dialogs/layers-panel.cpp b/src/dialogs/layers-panel.cpp index 21b3102ef..ad2678141 100644 --- a/src/dialogs/layers-panel.cpp +++ b/src/dialogs/layers-panel.cpp @@ -581,7 +581,7 @@ void LayersPanel::_handleRowChange( Gtk::TreeModel::Path const& path, Gtk::TreeM * Constructor */ LayersPanel::LayersPanel() : - Inkscape::UI::Widget::Panel( "dialogs.layers" ), + Inkscape::UI::Widget::Panel( Glib::ustring(), "dialogs.layers" ), _maxNestDepth(20), _mgr(0), _desktop(0), diff --git a/src/dialogs/swatches.cpp b/src/dialogs/swatches.cpp index 31e91562b..dc9b6fdd6 100644 --- a/src/dialogs/swatches.cpp +++ b/src/dialogs/swatches.cpp @@ -30,6 +30,7 @@ #include "path-prefix.h" #include "swatches.h" #include "sp-item.h" +#include "prefs-utils.h" #include "eek-preview.h" @@ -915,15 +916,33 @@ SwatchesPanel& SwatchesPanel::getInstance() /** * Constructor */ -SwatchesPanel::SwatchesPanel() : - Inkscape::UI::Widget::Panel( "dialogs.swatches", true ), +SwatchesPanel::SwatchesPanel(gchar const* prefsPath) : + Inkscape::UI::Widget::Panel( Glib::ustring(), prefsPath, true ), _holder(0) { + Gtk::RadioMenuItem* hotItem = 0; _holder = new PreviewHolder(); loadEmUp(); if ( !possible.empty() ) { - JustForNow* first = possible.front(); + JustForNow* first = 0; + gchar const* targetName = 0; + if ( _prefs_path ) { + targetName = prefs_get_string_attribute( _prefs_path, "palette" ); + if ( targetName ) { + for ( std::vector::iterator iter = possible.begin(); iter != possible.end(); ++iter ) { + if ( (*iter)->_name == targetName ) { + first = *iter; + break; + } + } + } + } + + if ( !first ) { + first = possible.front(); + } + if ( first->_prefWidth > 0 ) { _holder->setColumnPref( first->_prefWidth ); } @@ -938,6 +957,9 @@ SwatchesPanel::SwatchesPanel() : for ( std::vector::iterator it = possible.begin(); it != possible.end(); it++ ) { JustForNow* curr = *it; Gtk::RadioMenuItem* single = manage(new Gtk::RadioMenuItem(groupOne, curr->_name)); + if ( curr == first ) { + hotItem = single; + } _regItem( single, 3, i ); i++; } @@ -951,6 +973,9 @@ SwatchesPanel::SwatchesPanel() : show_all_children(); restorePanelPrefs(); + if ( hotItem ) { + hotItem->set_active(); + } } SwatchesPanel::~SwatchesPanel() @@ -976,6 +1001,11 @@ void SwatchesPanel::_handleAction( int setId, int itemId ) if ( itemId >= 0 && itemId < static_cast(possible.size()) ) { _holder->clear(); JustForNow* curr = possible[itemId]; + + if ( _prefs_path ) { + prefs_set_string_attribute( _prefs_path, "palette", curr->_name.c_str() ); + } + if ( curr->_prefWidth > 0 ) { _holder->setColumnPref( curr->_prefWidth ); } diff --git a/src/dialogs/swatches.h b/src/dialogs/swatches.h index 7e1357c48..02861781f 100644 --- a/src/dialogs/swatches.h +++ b/src/dialogs/swatches.h @@ -89,7 +89,7 @@ private: class SwatchesPanel : public Inkscape::UI::Widget::Panel { public: - SwatchesPanel(); + SwatchesPanel(gchar const* prefsPath = "dialogs.swatches"); virtual ~SwatchesPanel(); static SwatchesPanel& getInstance(); diff --git a/src/preferences-skeleton.h b/src/preferences-skeleton.h index d65f89a37..a330eb9a7 100644 --- a/src/preferences-skeleton.h +++ b/src/preferences-skeleton.h @@ -113,6 +113,9 @@ static char const preferences_skeleton[] = " \n" " \n" " \n" +" \n" +" \n" +" \n" " \n" " \n" " \n" diff --git a/src/ui/previewfillable.h b/src/ui/previewfillable.h index e73edbf63..95662732a 100644 --- a/src/ui/previewfillable.h +++ b/src/ui/previewfillable.h @@ -31,6 +31,8 @@ public: virtual void setOrientation( Gtk::AnchorType how ) = 0; virtual Inkscape::IconSize getPreviewSize() const = 0; virtual ViewType getPreviewType() const = 0; + virtual void setWrap( bool b ) = 0; + virtual bool getWrap() const = 0; }; diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index bcb4d0282..5d87eb4f5 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -36,7 +36,8 @@ PreviewHolder::PreviewHolder() : _updatesFrozen(false), _anchor(Gtk::ANCHOR_CENTER), _baseSize(Inkscape::ICON_SIZE_MENU), - _view(VIEW_TYPE_LIST) + _view(VIEW_TYPE_LIST), + _wrap(false) { _scroller = manage(new Gtk::ScrolledWindow()); _insides = manage(new Gtk::Table( 1, 2 )); @@ -142,7 +143,7 @@ void PreviewHolder::setOrientation( Gtk::AnchorType how ) case Gtk::ANCHOR_NORTH: case Gtk::ANCHOR_SOUTH: { - dynamic_cast(_scroller)->set_policy( Gtk::POLICY_ALWAYS, Gtk::POLICY_AUTOMATIC ); + dynamic_cast(_scroller)->set_policy( Gtk::POLICY_ALWAYS, _wrap ? Gtk::POLICY_AUTOMATIC : Gtk::POLICY_NEVER ); } break; @@ -162,6 +163,28 @@ void PreviewHolder::setOrientation( Gtk::AnchorType how ) } } +void PreviewHolder::setWrap( bool b ) +{ + if ( b != _wrap ) { + _wrap = b; + switch ( _anchor ) + { + case Gtk::ANCHOR_NORTH: + case Gtk::ANCHOR_SOUTH: + { + dynamic_cast(_scroller)->set_policy( Gtk::POLICY_ALWAYS, _wrap ? Gtk::POLICY_AUTOMATIC : Gtk::POLICY_NEVER ); + } + break; + default: + { + (void)0; + // do nothing; + } + } + rebuildUI(); + } +} + void PreviewHolder::setColumnPref( int cols ) { _prefCols = cols; diff --git a/src/ui/previewholder.h b/src/ui/previewholder.h index 42f5b119b..046cdf7c7 100644 --- a/src/ui/previewholder.h +++ b/src/ui/previewholder.h @@ -38,6 +38,8 @@ public: virtual void setColumnPref( int cols ); virtual Inkscape::IconSize getPreviewSize() const { return _baseSize; } virtual ViewType getPreviewType() const { return _view; } + virtual void setWrap( bool b ); + virtual bool getWrap() const { return _wrap; } protected: virtual void on_size_allocate( Gtk::Allocation& allocation ); @@ -56,6 +58,7 @@ private: Gtk::AnchorType _anchor; Inkscape::IconSize _baseSize; ViewType _view; + bool _wrap; }; } //namespace UI diff --git a/src/ui/widget/panel.cpp b/src/ui/widget/panel.cpp index 2112ea7b2..4ecbda1b8 100644 --- a/src/ui/widget/panel.cpp +++ b/src/ui/widget/panel.cpp @@ -25,23 +25,17 @@ namespace Inkscape { namespace UI { namespace Widget { +static const int PANEL_SETTING_SIZE = 0; +static const int PANEL_SETTING_MODE = 1; +static const int PANEL_SETTING_WRAP = 2; +static const int PANEL_SETTING_NEXTFREE = 3; + /** * Construct a Panel * * \param label Label. */ -Panel::Panel( const gchar *prefs_path, bool menuDesired ) : - _prefs_path(NULL), - _menuDesired(menuDesired), - _tempArrow( Gtk::ARROW_LEFT, Gtk::SHADOW_ETCHED_OUT ), - menu(0), - _fillable(0) -{ - _prefs_path = prefs_path; - init(); -} - Panel::Panel() : _prefs_path(NULL), _menuDesired(false), @@ -52,14 +46,14 @@ Panel::Panel() : init(); } -Panel::Panel( Glib::ustring const &label, bool menuDesired ) : - _prefs_path(NULL), +Panel::Panel( Glib::ustring const &label, gchar const* prefs_path, bool menuDesired ) : + _prefs_path(prefs_path), _menuDesired(menuDesired), + label(label), _tempArrow( Gtk::ARROW_LEFT, Gtk::SHADOW_ETCHED_OUT ), menu(0), _fillable(0) { - this->label = label; init(); } @@ -84,12 +78,17 @@ void Panel::init() guint panel_size = 0; if (_prefs_path) { - panel_size = prefs_get_int_attribute_limited (_prefs_path, "panel_size", 1, 0, 10); + panel_size = prefs_get_int_attribute_limited( _prefs_path, "panel_size", 1, 0, 10 ); } guint panel_mode = 0; if (_prefs_path) { - panel_mode = prefs_get_int_attribute_limited (_prefs_path, "panel_mode", 1, 0, 10); + panel_mode = prefs_get_int_attribute_limited( _prefs_path, "panel_mode", 1, 0, 10 ); + } + + guint panel_wrap = 0; + if (_prefs_path) { + panel_wrap = prefs_get_int_attribute_limited( _prefs_path, "panel_wrap", 0, 0, 1 ); } menu = new Gtk::Menu(); @@ -109,7 +108,7 @@ void Panel::init() if ( i == panel_size ) { single->set_active(true); } - single->signal_activate().connect( sigc::bind( sigc::mem_fun(*this, &Panel::bounceCall), 0, i) ); + single->signal_activate().connect( sigc::bind( sigc::mem_fun(*this, &Panel::bounceCall), PANEL_SETTING_SIZE, i) ); } } menu->append( *manage(new Gtk::SeparatorMenuItem()) ); @@ -126,12 +125,33 @@ void Panel::init() } menu->append( *one ); + nonHorizontal.push_back( one ); menu->append( *two ); - menu->append( *manage(new Gtk::SeparatorMenuItem()) ); - one->signal_activate().connect( sigc::bind( sigc::mem_fun(*this, &Panel::bounceCall), 1, 0) ); - two->signal_activate().connect( sigc::bind( sigc::mem_fun(*this, &Panel::bounceCall), 1, 1) ); + nonHorizontal.push_back( two ); + Gtk::MenuItem* sep = manage( new Gtk::SeparatorMenuItem()); + menu->append( *sep ); + nonHorizontal.push_back( sep ); + one->signal_activate().connect( sigc::bind( sigc::mem_fun(*this, &Panel::bounceCall), PANEL_SETTING_MODE, 0) ); + two->signal_activate().connect( sigc::bind( sigc::mem_fun(*this, &Panel::bounceCall), PANEL_SETTING_MODE, 1) ); + + { + Glib::ustring wrapLab(_("Wrap")); + Gtk::CheckMenuItem *check = manage(new Gtk::CheckMenuItem(wrapLab)); + check->set_active( panel_wrap ); + menu->append( *check ); + nonVertical.push_back(check); + + check->signal_toggled().connect( sigc::bind(sigc::mem_fun(*this, &Panel::_wrapToggled), check) ); + + sep = manage( new Gtk::SeparatorMenuItem()); + menu->append( *sep ); + nonVertical.push_back( sep ); + } menu->show_all_children(); + for ( std::vector::iterator iter = nonVertical.begin(); iter != nonVertical.end(); ++iter ) { + (*iter)->hide(); + } //closeButton.set_label("X"); @@ -160,8 +180,9 @@ void Panel::init() show_all_children(); - bounceCall (0, panel_size); - bounceCall (1, panel_mode); + bounceCall( PANEL_SETTING_SIZE, panel_size ); + bounceCall( PANEL_SETTING_MODE, panel_mode ); + bounceCall( PANEL_SETTING_WRAP, panel_wrap ); } void Panel::setLabel(Glib::ustring const &label) @@ -185,14 +206,31 @@ void Panel::setOrientation( Gtk::AnchorType how ) topBar.remove(menuPopper); rightBar.pack_start(menuPopper, false, false); menuPopper.unreference(); - } + for ( std::vector::iterator iter = nonHorizontal.begin(); iter != nonHorizontal.end(); ++iter ) { + (*iter)->hide(); + } + for ( std::vector::iterator iter = nonVertical.begin(); iter != nonVertical.end(); ++iter ) { + (*iter)->show(); + } + } + // Ensure we are not in "list" mode + bounceCall( PANEL_SETTING_MODE, 1 ); topBar.remove(tabTitle); } break; default: - ; // nothing for now + { + if ( _menuDesired ) { + for ( std::vector::iterator iter = nonHorizontal.begin(); iter != nonHorizontal.end(); ++iter ) { + (*iter)->show(); + } + for ( std::vector::iterator iter = nonVertical.begin(); iter != nonVertical.end(); ++iter ) { + (*iter)->hide(); + } + } + } } } } @@ -200,7 +238,7 @@ void Panel::setOrientation( Gtk::AnchorType how ) void Panel::_regItem( Gtk::MenuItem* item, int group, int id ) { menu->append( *item ); - item->signal_activate().connect( sigc::bind( sigc::mem_fun(*this, &Panel::bounceCall), group + 2, id) ); + item->signal_activate().connect( sigc::bind( sigc::mem_fun(*this, &Panel::bounceCall), group + PANEL_SETTING_NEXTFREE, id) ); item->show(); } @@ -214,16 +252,23 @@ void Panel::restorePanelPrefs() if (_prefs_path) { panel_mode = prefs_get_int_attribute_limited (_prefs_path, "panel_mode", 1, 0, 10); } - bounceCall (0, panel_size); - bounceCall (1, panel_mode); + guint panel_wrap = 0; + if (_prefs_path) { + panel_wrap = prefs_get_int_attribute_limited( _prefs_path, "panel_wrap", 0, 0, 1 ); + } + bounceCall( PANEL_SETTING_SIZE, panel_size ); + bounceCall( PANEL_SETTING_MODE, panel_mode ); + bounceCall( PANEL_SETTING_WRAP, panel_wrap ); } void Panel::bounceCall(int i, int j) { menu->set_active(0); switch ( i ) { - case 0: - if (_prefs_path) prefs_set_int_attribute (_prefs_path, "panel_size", j); + case PANEL_SETTING_SIZE: + if (_prefs_path) { + prefs_set_int_attribute( _prefs_path, "panel_size", j ); + } if ( _fillable ) { ViewType currType = _fillable->getPreviewType(); switch ( j ) { @@ -257,8 +302,10 @@ void Panel::bounceCall(int i, int j) } } break; - case 1: - if (_prefs_path) prefs_set_int_attribute (_prefs_path, "panel_mode", j); + case PANEL_SETTING_MODE: + if (_prefs_path) { + prefs_set_int_attribute (_prefs_path, "panel_mode", j); + } if ( _fillable ) { Inkscape::IconSize currSize = _fillable->getPreviewSize(); switch ( j ) { @@ -277,8 +324,24 @@ void Panel::bounceCall(int i, int j) } } break; + case PANEL_SETTING_WRAP: + if (_prefs_path) { + prefs_set_int_attribute (_prefs_path, "panel_wrap", j ? 1 : 0); + } + if ( _fillable ) { + _fillable->setWrap( j ); + } + break; default: - _handleAction( i - 2, j ); + _handleAction( i - PANEL_SETTING_NEXTFREE, j ); + } +} + + +void Panel::_wrapToggled(Gtk::CheckMenuItem* toggler) +{ + if ( toggler ) { + bounceCall( PANEL_SETTING_WRAP, toggler->get_active() ? 1 : 0 ); } } diff --git a/src/ui/widget/panel.h b/src/ui/widget/panel.h index cf201d6da..e091c82a1 100644 --- a/src/ui/widget/panel.h +++ b/src/ui/widget/panel.h @@ -14,6 +14,7 @@ #ifndef SEEN_INKSCAPE_UI_WIDGET_PANEL_H #define SEEN_INKSCAPE_UI_WIDGET_PANEL_H +#include #include #include #include @@ -34,8 +35,7 @@ class Panel : public Gtk::VBox public: Panel(); virtual ~Panel(); - Panel(Glib::ustring const &label, bool menuDesired = false ); - Panel(const gchar *prefs_path, bool menuDesired = false ); + Panel(Glib::ustring const &label, gchar const *prefs_path = 0, bool menuDesired = false ); void setLabel(Glib::ustring const &label); Glib::ustring const &getLabel() const; @@ -60,6 +60,7 @@ private: void bounceCall(int i, int j); void _popper(GdkEventButton* btn); + void _wrapToggled(Gtk::CheckMenuItem* toggler); Glib::ustring label; @@ -71,6 +72,8 @@ private: Gtk::EventBox menuPopper; Gtk::Button closeButton; Gtk::Menu* menu; + std::vector nonHorizontal; + std::vector nonVertical; PreviewFillable *_fillable; }; diff --git a/src/verbs.cpp b/src/verbs.cpp index 079f851b4..ec56dc45e 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -1406,7 +1406,9 @@ TextVerb::perform(SPAction *action, void *data, void *pdata) return; SPDocument *doc = sp_desktop_document(dt); + (void)doc; Inkscape::XML::Node *repr = SP_OBJECT_REPR(dt->namedview); + (void)repr; } /** \brief Decode the verb code and take appropriate action */ diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index b80da8aa4..7141d7ff7 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -182,7 +182,7 @@ sp_desktop_widget_init (SPDesktopWidget *dtw) { using Inkscape::UI::Dialogs::SwatchesPanel; - SwatchesPanel* swatches = new SwatchesPanel(); + SwatchesPanel* swatches = new SwatchesPanel("embedded.swatches"); swatches->setOrientation( Gtk::ANCHOR_SOUTH ); dtw->panels = GTK_WIDGET(swatches->gobj()); gtk_box_pack_end( GTK_BOX( dtw->vbox ), dtw->panels, FALSE, TRUE, 0 ); -- 2.30.2