From 196ee9ba84df3f88e0cd0d200c17cf7b34ecd033 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Wed, 18 Sep 2019 01:59:17 +0200 Subject: Add prefs switcher --- src/ui/dialog/livepatheffect-add.cpp | 142 +++++++++++++++++++++++++++++------ src/ui/dialog/livepatheffect-add.h | 9 ++- 2 files changed, 124 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/livepatheffect-add.cpp b/src/ui/dialog/livepatheffect-add.cpp index 06cde1e12..4ea581989 100644 --- a/src/ui/dialog/livepatheffect-add.cpp +++ b/src/ui/dialog/livepatheffect-add.cpp @@ -96,10 +96,13 @@ LivePathEffectAdd::LivePathEffectAdd() _builder->get_widget("LPEExperimental", _LPEExperimental); _builder->get_widget("LPEScrolled", _LPEScrolled); _builder->get_widget("LPESelectorEffectEventFavShow", _LPESelectorEffectEventFavShow); - _builder->get_widget("LPESelectorEffectEventHamburgerTooggle", _LPESelectorEffectEventHamburgerTooggle); _builder->get_widget("LPESelectorEffectInfoEventBox", _LPESelectorEffectInfoEventBox); + _builder->get_widget("LPESelectorEffectRadioList", _LPESelectorEffectRadioList); + _builder->get_widget("LPESelectorEffectRadioPackLess", _LPESelectorEffectRadioPackLess); + _builder->get_widget("LPESelectorEffectRadioPackMore", _LPESelectorEffectRadioPackMore); - _LPEFilter->signal_search_changed().connect(sigc::mem_fun(*this, &LivePathEffectAdd::on_search)); + + _LPEFilter->signal_search_changed().connect(sigc::bind(sigc::mem_fun(*this, &LivePathEffectAdd::on_search), false)); _LPEDialogSelector->add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK | Gdk::KEY_PRESS_MASK); _LPESelectorFlowBox->signal_set_focus_child().connect(sigc::mem_fun(*this, &LivePathEffectAdd::on_focus)); @@ -190,8 +193,12 @@ LivePathEffectAdd::LivePathEffectAdd() _LPESelectorFlowBox->set_activate_on_single_click(false); _visiblelpe = _LPESelectorFlowBox->get_children().size(); _LPEInfo->set_visible(false); - _LPESelectorEffectEventHamburgerTooggle->signal_button_press_event().connect( - sigc::mem_fun(*this, &LivePathEffectAdd::togglelist)); + _LPESelectorEffectRadioList->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, + &LivePathEffectAdd::viewChanged), 2) ); + _LPESelectorEffectRadioPackLess->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, + &LivePathEffectAdd::viewChanged), 1) ); + _LPESelectorEffectRadioPackMore->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, + &LivePathEffectAdd::viewChanged), 0) ); _LPESelectorEffectEventFavShow->signal_enter_notify_event().connect(sigc::bind( sigc::mem_fun(*this, &LivePathEffectAdd::mouseover), GTK_WIDGET(_LPESelectorEffectEventFavShow->gobj()))); _LPESelectorEffectEventFavShow->signal_leave_notify_event().connect(sigc::bind( @@ -215,22 +222,64 @@ LivePathEffectAdd::LivePathEffectAdd() _LPESelectorFlowBox->set_focus_vadjustment(_LPEScrolled->get_vadjustment()); _LPEDialogSelector->show_all_children(); _lasteffect = nullptr; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + gint mode = prefs->getInt("/dialogs/livepatheffect/dialogmode", 0); + switch (mode) { + case 0: + _LPESelectorEffectRadioPackLess->set_active(); + break; + case 1: + _LPESelectorEffectRadioPackMore->set_active(); + break; + default: + _LPESelectorEffectRadioList->set_active(); + + } } const LivePathEffect::EnumEffectData *LivePathEffectAdd::getActiveData() { return instance()._to_add; } -bool LivePathEffectAdd::togglelist(GdkEventButton *evt) +void LivePathEffectAdd::viewChanged(gint mode) { - if (_LPEDialogSelector->get_style_context()->has_class("LPElist")) { - _LPEDialogSelector->get_style_context()->remove_class("LPElist"); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + if (mode == 2 && + !_LPEDialogSelector->get_style_context()->has_class("LPEList")) + { + _LPEDialogSelector->get_style_context()->add_class("LPEList"); + _LPEDialogSelector->get_style_context()->remove_class("LPEPackLess"); + _LPEDialogSelector->get_style_context()->remove_class("LPEPackMore"); + _LPESelectorEffectRadioList->get_style_context()->add_class("active"); + _LPESelectorEffectRadioPackLess->get_style_context()->remove_class("active"); + _LPESelectorEffectRadioPackMore->get_style_context()->remove_class("active"); _LPESelectorFlowBox->set_max_children_per_line(1); - } else { - _LPEDialogSelector->get_style_context()->add_class("LPElist"); + prefs->setInt("/dialogs/livepatheffect/dialogmode", 2); + on_search(true); + } else if (mode == 1 && + !_LPEDialogSelector->get_style_context()->has_class("LPEPackMore")) + { + _LPESelectorEffectRadioList->get_style_context()->remove_class("active"); + _LPESelectorEffectRadioPackLess->get_style_context()->remove_class("active"); + _LPESelectorEffectRadioPackMore->get_style_context()->add_class("active"); + _LPEDialogSelector->get_style_context()->remove_class("LPEList"); + _LPEDialogSelector->get_style_context()->remove_class("LPEPackLess"); + _LPEDialogSelector->get_style_context()->add_class("LPEPackMore"); + _LPESelectorFlowBox->set_max_children_per_line(30); + prefs->setInt("/dialogs/livepatheffect/dialogmode", 1); + on_search(true); + } else if (!_LPEDialogSelector->get_style_context()->has_class("LPEPackLess")) + { + _LPESelectorEffectRadioList->get_style_context()->remove_class("active"); + _LPESelectorEffectRadioPackLess->get_style_context()->add_class("active"); + _LPESelectorEffectRadioPackMore->get_style_context()->remove_class("active"); + _LPEDialogSelector->get_style_context()->remove_class("LPEList"); + _LPEDialogSelector->get_style_context()->add_class("LPEPackLess"); + _LPEDialogSelector->get_style_context()->remove_class("LPEPackMore"); _LPESelectorFlowBox->set_max_children_per_line(30); + prefs->setInt("/dialogs/livepatheffect/dialogmode", 0); + on_search(true); } - return true; } void LivePathEffectAdd::on_focus(Gtk::Widget *widget) @@ -436,11 +485,35 @@ bool LivePathEffectAdd::on_filter(Gtk::FlowBoxChild *child) } child->set_valign(Gtk::ALIGN_START); Gtk::EventBox *eventbox = dynamic_cast(child->get_child()); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + gint mode = prefs->getInt("/dialogs/livepatheffect/dialogmode", 0); + if (mode == 2) { + eventbox->set_halign(Gtk::ALIGN_START); + } else { + eventbox->set_halign(Gtk::ALIGN_CENTER); + } if (eventbox) { Gtk::Box *box = dynamic_cast(eventbox->get_child()); + if (mode == 2) { + box->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + } else { + box->set_orientation(Gtk::ORIENTATION_VERTICAL); + } if (box) { std::vector contents = box->get_children(); + Gtk::Overlay *overlay = dynamic_cast(contents[0]); + std::vector content_overlay = overlay->get_children(); + Gtk::Label *lpename = dynamic_cast(contents[1]); + if (lpename) { + if (mode == 2) { + lpename->set_justify(Gtk::JUSTIFY_LEFT); + lpename->set_halign(Gtk::ALIGN_START); + } else { + lpename->set_justify(Gtk::JUSTIFY_CENTER); + lpename->set_halign(Gtk::ALIGN_CENTER); + } + } if (!sp_has_fav(lpename->get_text()) && _showfavs) { return false; } @@ -450,25 +523,48 @@ bool LivePathEffectAdd::on_filter(Gtk::FlowBoxChild *child) return false; } } - if (_LPEFilter->get_text().length() < 1) { - _visiblelpe++; - return true; + Gtk::Image *icon = dynamic_cast(content_overlay[0]); + if (icon) { + if (mode == 2) { + icon->set_pixel_size(40); + } else { + icon->set_pixel_size(60); + } } - if (lpename) { - size_t s = lpename->get_text().uppercase().find(_LPEFilter->get_text().uppercase(), 0); - if (s != -1) { - _visiblelpe++; - return true; + Gtk::EventBox *lpemore = dynamic_cast(contents[4]); + if (lpemore) { + if (mode == 2) { + lpemore->hide(); + } else { + lpemore->show(); } } Gtk::Label *lpedesc = dynamic_cast(contents[2]); if (lpedesc) { + if (mode == 2) { + lpedesc->show(); + lpedesc->set_ellipsize(Pango::ELLIPSIZE_END); + } else { + lpedesc->hide(); + lpedesc->set_ellipsize(Pango::ELLIPSIZE_NONE); + } size_t s = lpedesc->get_text().uppercase().find(_LPEFilter->get_text().uppercase(), 0); if (s != -1) { _visiblelpe++; return true; } } + if (_LPEFilter->get_text().length() < 1) { + _visiblelpe++; + return true; + } + if (lpename) { + size_t s = lpename->get_text().uppercase().find(_LPEFilter->get_text().uppercase(), 0); + if (s != -1) { + _visiblelpe++; + return true; + } + } } } return false; @@ -500,7 +596,7 @@ void LivePathEffectAdd::reload_effect_list() } } -void LivePathEffectAdd::on_search() +void LivePathEffectAdd::on_search(bool nowarn) { _visiblelpe = 0; _LPESelectorFlowBox->invalidate_filter(); @@ -510,11 +606,6 @@ void LivePathEffectAdd::on_search() _LPEInfo->set_visible(true); _LPEInfo->get_style_context()->add_class("lpeinfowarn"); } else { - if (_LPEFilter->get_text().empty()) { - _LPEInfo->set_text(_("This is your favorite effects")); - } else { - _LPEInfo->set_text(_("This is your favorite effects search result")); - } _LPEInfo->set_visible(true); _LPEInfo->get_style_context()->add_class("lpeinfowarn"); } @@ -528,6 +619,9 @@ void LivePathEffectAdd::on_search() _LPEInfo->get_style_context()->remove_class("lpeinfowarn"); } } + if (nowarn) { + _LPEInfo->set_visible(false); + } } int LivePathEffectAdd::on_sort(Gtk::FlowBoxChild *child1, Gtk::FlowBoxChild *child2) diff --git a/src/ui/dialog/livepatheffect-add.h b/src/ui/dialog/livepatheffect-add.h index 89f834dbe..db362ff5e 100644 --- a/src/ui/dialog/livepatheffect-add.h +++ b/src/ui/dialog/livepatheffect-add.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -64,7 +65,7 @@ class LivePathEffectAdd { void onClose(); bool on_filter(Gtk::FlowBoxChild *child); int on_sort(Gtk::FlowBoxChild *child1, Gtk::FlowBoxChild *child2); - void on_search(); + void on_search(bool nowarn); void on_focus(Gtk::Widget *widg); bool pop_description(GdkEventCrossing *evt, Glib::RefPtr builder_effect); bool hide_pop_description(GdkEventCrossing *evt); @@ -75,7 +76,7 @@ class LivePathEffectAdd { const LivePathEffect::EnumEffectData *to_add); bool expand(GdkEventButton *evt, Glib::RefPtr builder_effect); bool show_fav_toggler(GdkEventButton *evt); - bool togglelist(GdkEventButton *evt); + void viewChanged(gint mode); bool mouseover(GdkEventCrossing *evt, GtkWidget *wdg); bool mouseout(GdkEventCrossing *evt, GtkWidget *wdg); void reload_effect_list(); @@ -101,7 +102,9 @@ private: Gtk::Popover *_LPESelectorEffectInfoPop; Gtk::EventBox *_LPESelectorEffectEventFavShow; Gtk::EventBox *_LPESelectorEffectInfoEventBox; - Gtk::EventBox *_LPESelectorEffectEventHamburgerTooggle; + Gtk::RadioButton *_LPESelectorEffectRadioList; + Gtk::RadioButton *_LPESelectorEffectRadioPackLess; + Gtk::RadioButton *_LPESelectorEffectRadioPackMore; Gtk::Switch *_LPEExperimental; Gtk::SearchEntry *_LPEFilter; Gtk::ScrolledWindow *_LPEScrolled; -- cgit v1.2.3