diff options
| author | Stefano Facchini <stefano.facchini@gmail.com> | 2017-10-21 18:44:02 +0000 |
|---|---|---|
| committer | Tavmjong Bah <tavmjong@free.fr> | 2018-01-17 08:37:02 +0000 |
| commit | b75e52c16bfaccf56621883ac0a9f27bf99c8661 (patch) | |
| tree | 4b31e71c4067c664f5ad3e07f3b789b47c7bc085 /src/ui/widget/panel.cpp | |
| parent | Pull a copy of desktop-gtk3 (diff) | |
| download | inkscape-b75e52c16bfaccf56621883ac0a9f27bf99c8661.tar.gz inkscape-b75e52c16bfaccf56621883ac0a9f27bf99c8661.zip | |
Move code related to SwatchesPanel where it belongs
panel.cpp contains a lot of code which is actually used to build the
SwatchesPanel. Move it to swatches.cpp.
This is mostly just a cut-n-paste, plus some includes cleanup.
Diffstat (limited to 'src/ui/widget/panel.cpp')
| -rw-r--r-- | src/ui/widget/panel.cpp | 454 |
1 files changed, 5 insertions, 449 deletions
diff --git a/src/ui/widget/panel.cpp b/src/ui/widget/panel.cpp index c97543371..7ace6bf9e 100644 --- a/src/ui/widget/panel.cpp +++ b/src/ui/widget/panel.cpp @@ -16,33 +16,19 @@ #endif #include <gtkmm/dialog.h> // for Gtk::RESPONSE_* -#include <gtkmm/menu.h> -#include <gtkmm/checkmenuitem.h> -#include <gtkmm/radiomenuitem.h> -#include <gtkmm/separatormenuitem.h> #include <glibmm/i18n.h> #include "panel.h" -#include "preferences.h" #include "desktop.h" #include "inkscape.h" #include "widgets/eek-preview.h" -#include "ui/previewfillable.h" 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_SHAPE = 2; -static const int PANEL_SETTING_WRAP = 3; -static const int PANEL_SETTING_BORDER = 4; -static const int PANEL_SETTING_NEXTFREE = 5; - - void Panel::prep() { GtkIconSize sizes[] = { GTK_ICON_SIZE_MENU, @@ -55,281 +41,25 @@ void Panel::prep() { eek_preview_set_size_mappings( G_N_ELEMENTS(sizes), sizes ); } -Panel::Panel(gchar const *prefs_path, - int verb_num, - bool menu_desired) : +Panel::Panel(gchar const *prefs_path, int verb_num) : _prefs_path(prefs_path), - _menu_desired(menu_desired), _desktop(SP_ACTIVE_DESKTOP), _verb_num(verb_num), - _temp_arrow(), - _menu(0), - _action_area(0), - _fillable(0) + _action_area(0) { set_name( "InkscapePanel" ); set_orientation( Gtk::ORIENTATION_VERTICAL ); - _init(); -} - -Panel::~Panel() -{ - delete _menu; -} - -void Panel::_popper(GdkEventButton* event) -{ - if ( (event->type == GDK_BUTTON_PRESS) && (event->button == 3 || event->button == 1) ) { - if (_menu) { -#if GTKMM_CHECK_VERSION(3,22,0) - _menu->popup_at_pointer(reinterpret_cast<GdkEvent *>(event)); -#else - _menu->popup(event->button, event->time); -#endif - } - } -} - -void Panel::_init() -{ - _anchor = SP_ANCHOR_CENTER; - - guint panel_size = 0, panel_mode = 0, panel_ratio = 100, panel_border = 0; - bool panel_wrap = 0; - if (!_prefs_path.empty()) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - panel_wrap = prefs->getBool(_prefs_path + "/panel_wrap"); - panel_size = prefs->getIntLimited(_prefs_path + "/panel_size", 1, 0, PREVIEW_SIZE_HUGE); - panel_mode = prefs->getIntLimited(_prefs_path + "/panel_mode", 1, 0, 10); - panel_ratio = prefs->getIntLimited(_prefs_path + "/panel_ratio", 100, 0, 500 ); - panel_border = prefs->getIntLimited(_prefs_path + "/panel_border", BORDER_NONE, 0, 2 ); - } - - _menu = new Gtk::Menu(); - - { - Gtk::RadioMenuItem::Group group; - Glib::ustring one_label(_("List")); - Glib::ustring two_label(_("Grid")); - Gtk::RadioMenuItem *one = Gtk::manage(new Gtk::RadioMenuItem(group, one_label)); - Gtk::RadioMenuItem *two = Gtk::manage(new Gtk::RadioMenuItem(group, two_label)); - - if (panel_mode == 0) { - one->set_active(true); - } else if (panel_mode == 1) { - two->set_active(true); - } - - _menu->append(*one); - _non_horizontal.push_back(one); - _menu->append(*two); - _non_horizontal.push_back(two); - Gtk::MenuItem* sep = Gtk::manage(new Gtk::SeparatorMenuItem()); - _menu->append(*sep); - _non_horizontal.push_back(sep); - one->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_MODE, 0)); - two->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_MODE, 1)); - } - - { - Glib::ustring heightItemLabel(C_("Swatches", "Size")); - - //TRANSLATORS: Indicates size of colour swatches - const gchar *heightLabels[] = { - NC_("Swatches height", "Tiny"), - NC_("Swatches height", "Small"), - NC_("Swatches height", "Medium"), - NC_("Swatches height", "Large"), - NC_("Swatches height", "Huge") - }; - - Gtk::MenuItem *sizeItem = Gtk::manage(new Gtk::MenuItem(heightItemLabel)); - Gtk::Menu *sizeMenu = Gtk::manage(new Gtk::Menu()); - sizeItem->set_submenu(*sizeMenu); - - Gtk::RadioMenuItem::Group heightGroup; - for (unsigned int i = 0; i < G_N_ELEMENTS(heightLabels); i++) { - Glib::ustring _label(g_dpgettext2(NULL, "Swatches height", heightLabels[i])); - Gtk::RadioMenuItem* _item = Gtk::manage(new Gtk::RadioMenuItem(heightGroup, _label)); - sizeMenu->append(*_item); - if (i == panel_size) { - _item->set_active(true); - } - _item->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_SIZE, i)); - } - - _menu->append(*sizeItem); - } - - { - Glib::ustring widthItemLabel(C_("Swatches", "Width")); - - //TRANSLATORS: Indicates width of colour swatches - const gchar *widthLabels[] = { - NC_("Swatches width", "Narrower"), - NC_("Swatches width", "Narrow"), - NC_("Swatches width", "Medium"), - NC_("Swatches width", "Wide"), - NC_("Swatches width", "Wider") - }; - - Gtk::MenuItem *item = Gtk::manage( new Gtk::MenuItem(widthItemLabel)); - Gtk::Menu *type_menu = Gtk::manage(new Gtk::Menu()); - item->set_submenu(*type_menu); - _menu->append(*item); - - Gtk::RadioMenuItem::Group widthGroup; - - guint values[] = {0, 25, 50, 100, 200, 400}; - guint hot_index = 3; - for ( guint i = 0; i < G_N_ELEMENTS(widthLabels); ++i ) { - // Assume all values are in increasing order - if ( values[i] <= panel_ratio ) { - hot_index = i; - } - } - for ( guint i = 0; i < G_N_ELEMENTS(widthLabels); ++i ) { - Glib::ustring _label(g_dpgettext2(NULL, "Swatches width", widthLabels[i])); - Gtk::RadioMenuItem *_item = Gtk::manage(new Gtk::RadioMenuItem(widthGroup, _label)); - type_menu->append(*_item); - if ( i <= hot_index ) { - _item->set_active(true); - } - _item->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_SHAPE, values[i])); - } - } - - { - Glib::ustring widthItemLabel(C_("Swatches", "Border")); - - //TRANSLATORS: Indicates border of colour swatches - const gchar *widthLabels[] = { - NC_("Swatches border", "None"), - NC_("Swatches border", "Solid"), - NC_("Swatches border", "Wide"), - }; - - Gtk::MenuItem *item = Gtk::manage( new Gtk::MenuItem(widthItemLabel)); - Gtk::Menu *type_menu = Gtk::manage(new Gtk::Menu()); - item->set_submenu(*type_menu); - _menu->append(*item); - - Gtk::RadioMenuItem::Group widthGroup; - - guint values[] = {0, 1, 2}; - guint hot_index = 0; - for ( guint i = 0; i < G_N_ELEMENTS(widthLabels); ++i ) { - // Assume all values are in increasing order - if ( values[i] <= panel_border ) { - hot_index = i; - } - } - for ( guint i = 0; i < G_N_ELEMENTS(widthLabels); ++i ) { - Glib::ustring _label(g_dpgettext2(NULL, "Swatches border", widthLabels[i])); - Gtk::RadioMenuItem *_item = Gtk::manage(new Gtk::RadioMenuItem(widthGroup, _label)); - type_menu->append(*_item); - if ( i <= hot_index ) { - _item->set_active(true); - } - _item->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_BORDER, values[i])); - } - } - - { - //TRANSLATORS: "Wrap" indicates how colour swatches are displayed - Glib::ustring wrap_label(C_("Swatches","Wrap")); - Gtk::CheckMenuItem *check = Gtk::manage(new Gtk::CheckMenuItem(wrap_label)); - check->set_active(panel_wrap); - _menu->append(*check); - _non_vertical.push_back(check); - - check->signal_toggled().connect(sigc::bind<Gtk::CheckMenuItem*>(sigc::mem_fun(*this, &Panel::_wrapToggled), check)); - } - - Gtk::SeparatorMenuItem *sep; - sep = Gtk::manage(new Gtk::SeparatorMenuItem()); - _menu->append(*sep); - - _menu->show_all_children(); - for ( std::vector<Gtk::Widget*>::iterator iter = _non_vertical.begin(); iter != _non_vertical.end(); ++iter ) { - (*iter)->hide(); - } - - if ( _menu_desired ) { - _top_bar.pack_end(_menu_popper, false, false); - gint width = 0; - gint height = 0; - gtk_image_set_from_icon_name(_temp_arrow.gobj(), - "pan-start-symbolic", - GTK_ICON_SIZE_SMALL_TOOLBAR); - _menu_popper.add(_temp_arrow); - _menu_popper.signal_button_press_event().connect_notify(sigc::mem_fun(*this, &Panel::_popper)); - } - - pack_start(_top_bar, false, false); - - Gtk::HBox* boxy = Gtk::manage(new Gtk::HBox()); - boxy->set_name( "PanelBoxY" ); - _contents.set_name( "PanelContents" ); - _right_bar.set_name( "PanelRightBar" ); - _top_bar.set_name( "PanelTopBar" ); - boxy->pack_start(_contents, true, true); - boxy->pack_start(_right_bar, false, true); - - pack_start(*boxy, true, true); signalResponse().connect(sigc::mem_fun(*this, &Panel::_handleResponse)); - signalActivateDesktop().connect(sigc::mem_fun(*this, &Panel::setDesktop)); - show_all_children(); + pack_start(_contents, true, true); - _bounceCall(PANEL_SETTING_SIZE, panel_size); - _bounceCall(PANEL_SETTING_MODE, panel_mode); - _bounceCall(PANEL_SETTING_SHAPE, panel_ratio); - _bounceCall(PANEL_SETTING_WRAP, panel_wrap); - _bounceCall(PANEL_SETTING_BORDER, panel_border); + show_all_children(); } -void Panel::setOrientation(SPAnchorType how) +Panel::~Panel() { - if (_anchor != how) { - _anchor = how; - switch (_anchor) { - case SP_ANCHOR_NORTH: - case SP_ANCHOR_SOUTH: - { - if (_menu_desired) { - _menu_popper.reference(); - _top_bar.remove(_menu_popper); - _right_bar.pack_start(_menu_popper, false, false); - _menu_popper.unreference(); - - for (std::vector<Gtk::Widget*>::iterator iter = _non_horizontal.begin(); iter != _non_horizontal.end(); ++iter) { - (*iter)->hide(); - } - for (std::vector<Gtk::Widget*>::iterator iter = _non_vertical.begin(); iter != _non_vertical.end(); ++iter) { - (*iter)->show(); - } - } - // Ensure we are not in "list" mode - _bounceCall(PANEL_SETTING_MODE, 1); - } - break; - - default: - { - if ( _menu_desired ) { - for (std::vector<Gtk::Widget*>::iterator iter = _non_horizontal.begin(); iter != _non_horizontal.end(); ++iter) { - (*iter)->show(); - } - for (std::vector<Gtk::Widget*>::iterator iter = _non_vertical.begin(); iter != _non_vertical.end(); ++iter) { - (*iter)->hide(); - } - } - } - } - } } void Panel::present() @@ -337,26 +67,6 @@ void Panel::present() _signal_present.emit(); } - -void Panel::restorePanelPrefs() -{ - guint panel_size = 0, panel_mode = 0, panel_ratio = 100, panel_border = 0; - bool panel_wrap = 0; - if (!_prefs_path.empty()) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - panel_wrap = prefs->getBool(_prefs_path + "/panel_wrap"); - panel_size = prefs->getIntLimited(_prefs_path + "/panel_size", 1, 0, PREVIEW_SIZE_HUGE); - panel_mode = prefs->getIntLimited(_prefs_path + "/panel_mode", 1, 0, 10); - panel_ratio = prefs->getIntLimited(_prefs_path + "/panel_ratio", 000, 0, 500 ); - panel_border = prefs->getIntLimited(_prefs_path + "/panel_border", BORDER_NONE, 0, 2 ); - } - _bounceCall(PANEL_SETTING_SIZE, panel_size); - _bounceCall(PANEL_SETTING_MODE, panel_mode); - _bounceCall(PANEL_SETTING_SHAPE, panel_ratio); - _bounceCall(PANEL_SETTING_WRAP, panel_wrap); - _bounceCall(PANEL_SETTING_BORDER, panel_border); -} - sigc::signal<void, int> &Panel::signalResponse() { return _signal_response; @@ -367,142 +77,6 @@ sigc::signal<void> &Panel::signalPresent() return _signal_present; } -void Panel::_bounceCall(int i, int j) -{ - _menu->set_active(0); - switch (i) { - case PANEL_SETTING_SIZE: - if (!_prefs_path.empty()) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt(_prefs_path + "/panel_size", j); - } - if (_fillable) { - ViewType curr_type = _fillable->getPreviewType(); - guint curr_ratio = _fillable->getPreviewRatio(); - ::BorderStyle curr_border = _fillable->getPreviewBorder(); - - switch (j) { - case 0: - { - _fillable->setStyle(::PREVIEW_SIZE_TINY, curr_type, curr_ratio, curr_border); - } - break; - case 1: - { - _fillable->setStyle(::PREVIEW_SIZE_SMALL, curr_type, curr_ratio, curr_border); - } - break; - case 2: - { - _fillable->setStyle(::PREVIEW_SIZE_MEDIUM, curr_type, curr_ratio, curr_border); - } - break; - case 3: - { - _fillable->setStyle(::PREVIEW_SIZE_BIG, curr_type, curr_ratio, curr_border); - } - break; - case 4: - { - _fillable->setStyle(::PREVIEW_SIZE_HUGE, curr_type, curr_ratio, curr_border); - } - break; - default: - ; - } - } - break; - case PANEL_SETTING_MODE: - if (!_prefs_path.empty()) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt(_prefs_path + "/panel_mode", j); - } - if (_fillable) { - ::PreviewSize curr_size = _fillable->getPreviewSize(); - guint curr_ratio = _fillable->getPreviewRatio(); - ::BorderStyle curr_border = _fillable->getPreviewBorder(); - switch (j) { - case 0: - { - _fillable->setStyle(curr_size, VIEW_TYPE_LIST, curr_ratio, curr_border); - } - break; - case 1: - { - _fillable->setStyle(curr_size, VIEW_TYPE_GRID, curr_ratio, curr_border); - } - break; - default: - break; - } - } - break; - case PANEL_SETTING_SHAPE: - if (!_prefs_path.empty()) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt(_prefs_path + "/panel_ratio", j); - } - if ( _fillable ) { - ViewType curr_type = _fillable->getPreviewType(); - ::PreviewSize curr_size = _fillable->getPreviewSize(); - ::BorderStyle curr_border = _fillable->getPreviewBorder(); - - _fillable->setStyle(curr_size, curr_type, j, curr_border); - } - break; - case PANEL_SETTING_BORDER: - if (!_prefs_path.empty()) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt(_prefs_path + "/panel_border", j); - } - if ( _fillable ) { - ::PreviewSize curr_size = _fillable->getPreviewSize(); - ViewType curr_type = _fillable->getPreviewType(); - guint curr_ratio = _fillable->getPreviewRatio(); - - switch (j) { - case 0: - { - _fillable->setStyle(curr_size, curr_type, curr_ratio, BORDER_NONE); - } - break; - case 1: - { - _fillable->setStyle(curr_size, curr_type, curr_ratio, BORDER_SOLID); - } - break; - case 2: - { - _fillable->setStyle(curr_size, curr_type, curr_ratio, BORDER_WIDE); - } - break; - default: - break; - } - } - break; - case PANEL_SETTING_WRAP: - if (!_prefs_path.empty()) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setBool(_prefs_path + "/panel_wrap", j); - } - if ( _fillable ) { - _fillable->setWrap(j); - } - break; - default: - _handleAction(i - PANEL_SETTING_NEXTFREE, j); - } -} - - -void Panel::_wrapToggled(Gtk::CheckMenuItem* toggler) -{ - if (toggler) { - _bounceCall(PANEL_SETTING_WRAP, toggler->get_active() ? 1 : 0); - } -} - gchar const *Panel::getPrefsPath() const { return _prefs_path.data(); @@ -518,24 +92,6 @@ void Panel::setDesktop(SPDesktop *desktop) _desktop = desktop; } -void Panel::_setTargetFillable(PreviewFillable *target) -{ - _fillable = target; -} - -void Panel::_regItem(Gtk::MenuItem* item, int group, int id) -{ - _menu->append(*item); - item->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), group + PANEL_SETTING_NEXTFREE, id)); - item->show(); - -} - -void Panel::_handleAction(int /*set_id*/, int /*item_id*/) -{ -// for subclasses to override -} - void Panel::_apply() { g_warning("Apply button clicked for panel [Panel::_apply()]"); |
