diff options
Diffstat (limited to 'src/ui/dialog/livepatheffect-add.cpp')
| -rw-r--r-- | src/ui/dialog/livepatheffect-add.cpp | 284 |
1 files changed, 223 insertions, 61 deletions
diff --git a/src/ui/dialog/livepatheffect-add.cpp b/src/ui/dialog/livepatheffect-add.cpp index 4ea581989..0a4c799cf 100644 --- a/src/ui/dialog/livepatheffect-add.cpp +++ b/src/ui/dialog/livepatheffect-add.cpp @@ -102,7 +102,7 @@ LivePathEffectAdd::LivePathEffectAdd() _builder->get_widget("LPESelectorEffectRadioPackMore", _LPESelectorEffectRadioPackMore); - _LPEFilter->signal_search_changed().connect(sigc::bind(sigc::mem_fun(*this, &LivePathEffectAdd::on_search), false)); + _LPEFilter->signal_search_changed().connect(sigc::mem_fun(*this, &LivePathEffectAdd::on_search)); _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)); @@ -153,9 +153,11 @@ LivePathEffectAdd::LivePathEffectAdd() sigc::mem_fun(*this, &LivePathEffectAdd::pop_description), builder_effect)); Gtk::EventBox *LPESelectorEffectEventFav; builder_effect->get_widget("LPESelectorEffectEventFav", LPESelectorEffectEventFav); + Gtk::Image *fav = dynamic_cast<Gtk::Image *>(LPESelectorEffectEventFav->get_child()); if (sp_has_fav(LPEName->get_text())) { - Gtk::Image *fav = dynamic_cast<Gtk::Image *>(LPESelectorEffectEventFav->get_child()); fav->set_from_icon_name("draw-star", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); + } else { + fav->set_from_icon_name("draw-star-outline", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); } Gtk::EventBox *LPESelectorEffectEventFavTop; builder_effect->get_widget("LPESelectorEffectEventFavTop", LPESelectorEffectEventFavTop); @@ -163,7 +165,12 @@ LivePathEffectAdd::LivePathEffectAdd() sigc::mem_fun(*this, &LivePathEffectAdd::fav_toggler), builder_effect)); LPESelectorEffectEventFavTop->signal_button_press_event().connect(sigc::bind<Glib::RefPtr<Gtk::Builder>>( sigc::mem_fun(*this, &LivePathEffectAdd::fav_toggler), builder_effect)); - + Gtk::Image *favtop = dynamic_cast<Gtk::Image *>(LPESelectorEffectEventFavTop->get_child()); + if (sp_has_fav(LPEName->get_text())) { + favtop->set_from_icon_name("draw-star", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); + } else { + favtop->set_from_icon_name("draw-star-outline", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); + } Gtk::EventBox *LPESelectorEffectEventApply; builder_effect->get_widget("LPESelectorEffectEventApply", LPESelectorEffectEventApply); LPESelectorEffectEventApply->signal_button_press_event().connect( @@ -244,9 +251,11 @@ const LivePathEffect::EnumEffectData<LivePathEffect::EffectType> *LivePathEffect void LivePathEffectAdd::viewChanged(gint mode) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool changed = false; if (mode == 2 && !_LPEDialogSelector->get_style_context()->has_class("LPEList")) { + prefs->setInt("/dialogs/livepatheffect/dialogmode", 2); _LPEDialogSelector->get_style_context()->add_class("LPEList"); _LPEDialogSelector->get_style_context()->remove_class("LPEPackLess"); _LPEDialogSelector->get_style_context()->remove_class("LPEPackMore"); @@ -254,11 +263,11 @@ void LivePathEffectAdd::viewChanged(gint mode) _LPESelectorEffectRadioPackLess->get_style_context()->remove_class("active"); _LPESelectorEffectRadioPackMore->get_style_context()->remove_class("active"); _LPESelectorFlowBox->set_max_children_per_line(1); - prefs->setInt("/dialogs/livepatheffect/dialogmode", 2); - on_search(true); + changed = true; } else if (mode == 1 && !_LPEDialogSelector->get_style_context()->has_class("LPEPackMore")) { + prefs->setInt("/dialogs/livepatheffect/dialogmode", 1); _LPESelectorEffectRadioList->get_style_context()->remove_class("active"); _LPESelectorEffectRadioPackLess->get_style_context()->remove_class("active"); _LPESelectorEffectRadioPackMore->get_style_context()->add_class("active"); @@ -266,10 +275,11 @@ void LivePathEffectAdd::viewChanged(gint mode) _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")) + changed = true; + } else if (mode == 0 && + !_LPEDialogSelector->get_style_context()->has_class("LPEPackLess")) { + prefs->setInt("/dialogs/livepatheffect/dialogmode", 0); _LPESelectorEffectRadioList->get_style_context()->remove_class("active"); _LPESelectorEffectRadioPackLess->get_style_context()->add_class("active"); _LPESelectorEffectRadioPackMore->get_style_context()->remove_class("active"); @@ -277,15 +287,25 @@ void LivePathEffectAdd::viewChanged(gint mode) _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); + changed = true; + + } + if (changed) { + _LPESelectorFlowBox->unset_sort_func(); + _LPESelectorFlowBox->set_sort_func(sigc::mem_fun(this, &LivePathEffectAdd::on_sort)); + std::vector< Gtk::FlowBoxChild* > selected = _LPESelectorFlowBox->get_selected_children(); + if (selected.size() == 1) { + _LPESelectorFlowBox->get_selected_children()[0]->grab_focus(); + } } } void LivePathEffectAdd::on_focus(Gtk::Widget *widget) { Gtk::FlowBoxChild *child = dynamic_cast<Gtk::FlowBoxChild *>(widget); - if (child) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + gint mode = prefs->getInt("/dialogs/livepatheffect/dialogmode", 0); + if (child && mode != 2) { for (auto i : _LPESelectorFlowBox->get_children()) { Gtk::FlowBoxChild *leitem = dynamic_cast<Gtk::FlowBoxChild *>(i); Gtk::EventBox *eventbox = dynamic_cast<Gtk::EventBox *>(leitem->get_child()); @@ -365,12 +385,22 @@ bool LivePathEffectAdd::fav_toggler(GdkEventButton *evt, Glib::RefPtr<Gtk::Build builder_effect->get_widget("LPEName", LPEName); Gtk::Image *LPESelectorEffectFav; builder_effect->get_widget("LPESelectorEffectFav", LPESelectorEffectFav); + Gtk::Image *LPESelectorEffectFavTop; + builder_effect->get_widget("LPESelectorEffectFavTop", LPESelectorEffectFavTop); Gtk::EventBox *LPESelectorEffectEventFavTop; builder_effect->get_widget("LPESelectorEffectEventFavTop", LPESelectorEffectEventFavTop); if (LPESelectorEffectFav && LPESelectorEffectEventFavTop) { if (sp_has_fav(LPEName->get_text())) { - LPESelectorEffectEventFavTop->set_visible(false); - LPESelectorEffectEventFavTop->hide(); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + gint mode = prefs->getInt("/dialogs/livepatheffect/dialogmode", 0); + if (mode == 2) { + LPESelectorEffectEventFavTop->set_visible(true); + LPESelectorEffectEventFavTop->show(); + } else { + LPESelectorEffectEventFavTop->set_visible(false); + LPESelectorEffectEventFavTop->hide(); + } + LPESelectorEffectFavTop->set_from_icon_name("draw-star-outline", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); LPESelectorEffectFav->set_from_icon_name("draw-star-outline", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); sp_remove_fav(LPEName->get_text()); LPESelectorEffect->get_parent()->get_style_context()->remove_class("lpefav"); @@ -382,6 +412,7 @@ bool LivePathEffectAdd::fav_toggler(GdkEventButton *evt, Glib::RefPtr<Gtk::Build } else { LPESelectorEffectEventFavTop->set_visible(true); LPESelectorEffectEventFavTop->show(); + LPESelectorEffectFavTop->set_from_icon_name("draw-star", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); LPESelectorEffectFav->set_from_icon_name("draw-star", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); sp_add_fav(LPEName->get_text()); LPESelectorEffect->get_parent()->get_style_context()->add_class("lpefav"); @@ -485,35 +516,14 @@ bool LivePathEffectAdd::on_filter(Gtk::FlowBoxChild *child) } child->set_valign(Gtk::ALIGN_START); Gtk::EventBox *eventbox = dynamic_cast<Gtk::EventBox *>(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<Gtk::Box *>(eventbox->get_child()); - if (mode == 2) { - box->set_orientation(Gtk::ORIENTATION_HORIZONTAL); - } else { - box->set_orientation(Gtk::ORIENTATION_VERTICAL); - } if (box) { std::vector<Gtk::Widget *> contents = box->get_children(); Gtk::Overlay *overlay = dynamic_cast<Gtk::Overlay *>(contents[0]); std::vector<Gtk::Widget *> content_overlay = overlay->get_children(); Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(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; } @@ -523,31 +533,8 @@ bool LivePathEffectAdd::on_filter(Gtk::FlowBoxChild *child) return false; } } - Gtk::Image *icon = dynamic_cast<Gtk::Image *>(content_overlay[0]); - if (icon) { - if (mode == 2) { - icon->set_pixel_size(40); - } else { - icon->set_pixel_size(60); - } - } - Gtk::EventBox *lpemore = dynamic_cast<Gtk::EventBox *>(contents[4]); - if (lpemore) { - if (mode == 2) { - lpemore->hide(); - } else { - lpemore->show(); - } - } Gtk::Label *lpedesc = dynamic_cast<Gtk::Label *>(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++; @@ -596,7 +583,7 @@ void LivePathEffectAdd::reload_effect_list() } } -void LivePathEffectAdd::on_search(bool nowarn) +void LivePathEffectAdd::on_search() { _visiblelpe = 0; _LPESelectorFlowBox->invalidate_filter(); @@ -619,9 +606,6 @@ void LivePathEffectAdd::on_search(bool nowarn) _LPEInfo->get_style_context()->remove_class("lpeinfowarn"); } } - if (nowarn) { - _LPEInfo->set_visible(false); - } } int LivePathEffectAdd::on_sort(Gtk::FlowBoxChild *child1, Gtk::FlowBoxChild *child2) @@ -629,56 +613,234 @@ int LivePathEffectAdd::on_sort(Gtk::FlowBoxChild *child1, Gtk::FlowBoxChild *chi Glib::ustring name1 = ""; Glib::ustring name2 = ""; Gtk::EventBox *eventbox = dynamic_cast<Gtk::EventBox *>(child1->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<Gtk::Box *>(eventbox->get_child()); + if (mode == 2) { + box->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + } else { + box->set_orientation(Gtk::ORIENTATION_VERTICAL); + } if (box) { std::vector<Gtk::Widget *> contents = box->get_children(); Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(contents[1]); name1 = lpename->get_text(); + if (lpename) { + if (mode == 2) { + lpename->set_justify(Gtk::JUSTIFY_LEFT); + lpename->set_halign(Gtk::ALIGN_START); + lpename->set_valign(Gtk::ALIGN_CENTER); + lpename->set_width_chars(-1); + lpename->set_max_width_chars(-1); + } else { + lpename->set_justify(Gtk::JUSTIFY_CENTER); + lpename->set_halign(Gtk::ALIGN_CENTER); + lpename->set_valign(Gtk::ALIGN_CENTER); + lpename->set_width_chars(14); + lpename->set_max_width_chars(23); + } + } + Gtk::EventBox *lpemore = dynamic_cast<Gtk::EventBox *>(contents[4]); + if (lpemore) { + if (mode == 2) { + lpemore->hide(); + } else { + if (child1->is_selected()) { + lpemore->hide(); + } else { + lpemore->show(); + } + } + } + Gtk::ButtonBox *lpebuttonbox = dynamic_cast<Gtk::ButtonBox *>(contents[5]); + if (lpebuttonbox) { + if (mode == 2) { + lpebuttonbox->hide(); + } else { + if (child1->is_selected()) { + lpebuttonbox->show(); + } else { + lpebuttonbox->hide(); + } + } + } + Gtk::Label *lpedesc = dynamic_cast<Gtk::Label *>(contents[2]); + if (lpedesc) { + if (mode == 2) { + lpedesc->show(); + lpedesc->set_justify(Gtk::JUSTIFY_LEFT); + lpedesc->set_halign(Gtk::ALIGN_START); + lpedesc->set_valign(Gtk::ALIGN_CENTER); + lpedesc->set_ellipsize(Pango::ELLIPSIZE_END); + } else { + lpedesc->hide(); + lpedesc->set_justify(Gtk::JUSTIFY_CENTER); + lpedesc->set_halign(Gtk::ALIGN_CENTER); + lpedesc->set_valign(Gtk::ALIGN_CENTER); + lpedesc->set_ellipsize(Pango::ELLIPSIZE_NONE); + } + } Gtk::Overlay *overlay = dynamic_cast<Gtk::Overlay *>(contents[0]); if (overlay) { std::vector<Gtk::Widget *> contents_overlay = overlay->get_children(); + Gtk::Image *icon = dynamic_cast<Gtk::Image *>(contents_overlay[0]); + if (icon) { + if (mode == 2) { + icon->set_pixel_size(40); + icon->set_margin_right(25); + overlay->set_margin_right(5); + } else { + icon->set_pixel_size(60); + icon->set_margin_right(0); + overlay->set_margin_right(0); + } + } Gtk::EventBox *LPESelectorEffectEventFavTop = dynamic_cast<Gtk::EventBox *>(contents_overlay[1]); if (LPESelectorEffectEventFavTop) { + Gtk::Image *fav = dynamic_cast<Gtk::Image *>(LPESelectorEffectEventFavTop->get_child()); if (sp_has_fav(name1)) { + fav->set_from_icon_name("draw-star", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); LPESelectorEffectEventFavTop->set_visible(true); LPESelectorEffectEventFavTop->show(); child1->get_style_context()->add_class("lpefav"); child1->get_style_context()->remove_class("lpenormal"); } else if (!sp_has_fav(name1)) { + fav->set_from_icon_name("draw-star-outline", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); LPESelectorEffectEventFavTop->set_visible(false); LPESelectorEffectEventFavTop->hide(); child1->get_style_context()->remove_class("lpefav"); child1->get_style_context()->add_class("lpenormal"); } + if (mode == 2) { + LPESelectorEffectEventFavTop->set_visible(true); + LPESelectorEffectEventFavTop->show(); + LPESelectorEffectEventFavTop->set_halign(Gtk::ALIGN_END); + LPESelectorEffectEventFavTop->set_valign(Gtk::ALIGN_CENTER); + } else { + LPESelectorEffectEventFavTop->set_halign(Gtk::ALIGN_END); + LPESelectorEffectEventFavTop->set_valign(Gtk::ALIGN_START); + } child1->get_style_context()->add_class("lpe"); } } } } eventbox = dynamic_cast<Gtk::EventBox *>(child2->get_child()); + if (mode == 2) { + eventbox->set_halign(Gtk::ALIGN_START); + } else { + eventbox->set_halign(Gtk::ALIGN_CENTER); + } if (eventbox) { Gtk::Box *box = dynamic_cast<Gtk::Box *>(eventbox->get_child()); + if (mode == 2) { + box->set_orientation(Gtk::ORIENTATION_HORIZONTAL); + } else { + box->set_orientation(Gtk::ORIENTATION_VERTICAL); + } if (box) { std::vector<Gtk::Widget *> contents = box->get_children(); Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(contents[1]); name2 = lpename->get_text(); + if (lpename) { + if (mode == 2) { + lpename->set_justify(Gtk::JUSTIFY_LEFT); + lpename->set_halign(Gtk::ALIGN_START); + lpename->set_valign(Gtk::ALIGN_CENTER); + lpename->set_width_chars(-1); + lpename->set_max_width_chars(-1); + } else { + lpename->set_justify(Gtk::JUSTIFY_CENTER); + lpename->set_halign(Gtk::ALIGN_CENTER); + lpename->set_valign(Gtk::ALIGN_CENTER); + lpename->set_width_chars(14); + lpename->set_max_width_chars(23); + } + } + Gtk::EventBox *lpemore = dynamic_cast<Gtk::EventBox *>(contents[4]); + if (lpemore) { + if (mode == 2) { + lpemore->hide(); + } else { + if (child2->is_selected()) { + lpemore->hide(); + } else { + lpemore->show(); + } + } + } + Gtk::ButtonBox *lpebuttonbox = dynamic_cast<Gtk::ButtonBox *>(contents[5]); + if (lpebuttonbox) { + if (mode == 2) { + lpebuttonbox->hide(); + } else { + if (child2->is_selected()) { + lpebuttonbox->show(); + } else { + lpebuttonbox->hide(); + } + } + } + Gtk::Label *lpedesc = dynamic_cast<Gtk::Label *>(contents[2]); + if (lpedesc) { + if (mode == 2) { + lpedesc->show(); + lpedesc->set_justify(Gtk::JUSTIFY_LEFT); + lpedesc->set_halign(Gtk::ALIGN_START); + lpedesc->set_valign(Gtk::ALIGN_CENTER); + lpedesc->set_ellipsize(Pango::ELLIPSIZE_END); + } else { + lpedesc->hide(); + lpedesc->set_justify(Gtk::JUSTIFY_CENTER); + lpedesc->set_halign(Gtk::ALIGN_CENTER); + lpedesc->set_valign(Gtk::ALIGN_CENTER); + lpedesc->set_ellipsize(Pango::ELLIPSIZE_NONE); + } + } Gtk::Overlay *overlay = dynamic_cast<Gtk::Overlay *>(contents[0]); if (overlay) { std::vector<Gtk::Widget *> contents_overlay = overlay->get_children(); + Gtk::Image *icon = dynamic_cast<Gtk::Image *>(contents_overlay[0]); + if (icon) { + if (mode == 2) { + icon->set_pixel_size(33); + icon->set_margin_right(40); + } else { + icon->set_pixel_size(60); + icon->set_margin_right(0); + } + } Gtk::EventBox *LPESelectorEffectEventFavTop = dynamic_cast<Gtk::EventBox *>(contents_overlay[1]); + Gtk::Image *fav = dynamic_cast<Gtk::Image *>(LPESelectorEffectEventFavTop->get_child()); if (LPESelectorEffectEventFavTop) { if (sp_has_fav(name2)) { + fav->set_from_icon_name("draw-star", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); LPESelectorEffectEventFavTop->set_visible(true); LPESelectorEffectEventFavTop->show(); child2->get_style_context()->add_class("lpefav"); child2->get_style_context()->remove_class("lpenormal"); } else if (!sp_has_fav(name2)) { + fav->set_from_icon_name("draw-star-outline", Gtk::IconSize(Gtk::ICON_SIZE_SMALL_TOOLBAR)); LPESelectorEffectEventFavTop->set_visible(false); LPESelectorEffectEventFavTop->hide(); child2->get_style_context()->remove_class("lpefav"); child2->get_style_context()->add_class("lpenormal"); } + if (mode == 2) { + LPESelectorEffectEventFavTop->set_visible(true); + LPESelectorEffectEventFavTop->show(); + LPESelectorEffectEventFavTop->set_halign(Gtk::ALIGN_END); + LPESelectorEffectEventFavTop->set_valign(Gtk::ALIGN_CENTER); + } else { + LPESelectorEffectEventFavTop->set_halign(Gtk::ALIGN_END); + LPESelectorEffectEventFavTop->set_valign(Gtk::ALIGN_START); + } child2->get_style_context()->add_class("lpe"); } } |
