1 // SPDX-License-Identifier: GPL-2.0-or-later 2 #ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_ORIGINALITEMARRAY_H 3 #define INKSCAPE_LIVEPATHEFFECT_PARAMETER_ORIGINALITEMARRAY_H 4 5 /* 6 * Inkscape::LivePathEffectParameters 7 * 8 * Copyright (C) Theodore Janeczko 2012 <flutterguy317@gmail.com> 9 * 10 * Released under GNU GPL v2+, read the file 'COPYING' for more information. 11 */ 12 13 #include <vector> 14 15 #include <gtkmm/box.h> 16 #include <gtkmm/treeview.h> 17 #include <gtkmm/treestore.h> 18 #include <gtkmm/scrolledwindow.h> 19 20 #include "live_effects/parameter/parameter.h" 21 #include "live_effects/parameter/item-reference.h" 22 23 #include "svg/svg.h" 24 #include "svg/stringstream.h" 25 #include "item-reference.h" 26 27 class SPObject; 28 29 namespace Inkscape { 30 31 namespace LivePathEffect { 32 33 class ItemAndActive { 34 public: ItemAndActive(SPObject * owner)35 ItemAndActive(SPObject *owner) 36 : href(nullptr), 37 ref(owner), 38 actived(true) 39 { 40 41 } 42 gchar *href; 43 URIReference ref; 44 bool actived; 45 46 sigc::connection linked_changed_connection; 47 sigc::connection linked_delete_connection; 48 sigc::connection linked_modified_connection; 49 sigc::connection linked_transformed_connection; 50 }; 51 52 class OriginalItemArrayParam : public Parameter { 53 public: 54 class ModelColumns; 55 56 OriginalItemArrayParam( const Glib::ustring& label, 57 const Glib::ustring& tip, 58 const Glib::ustring& key, 59 Inkscape::UI::Widget::Registry* wr, 60 Effect* effect); 61 62 ~OriginalItemArrayParam() override; 63 64 Gtk::Widget * param_newWidget() override; 65 bool param_readSVGValue(const gchar * strvalue) override; 66 Glib::ustring param_getSVGValue() const override; 67 Glib::ustring param_getDefaultSVGValue() const override; 68 void param_set_default() override; param_update_default(const gchar * default_value)69 void param_update_default(const gchar * default_value) override{}; 70 /** Disable the canvas indicators of parent class by overriding this method */ param_editOncanvas(SPItem *,SPDesktop *)71 void param_editOncanvas(SPItem * /*item*/, SPDesktop * /*dt*/) override {}; 72 /** Disable the canvas indicators of parent class by overriding this method */ addCanvasIndicators(SPLPEItem const *,std::vector<Geom::PathVector> &)73 void addCanvasIndicators(SPLPEItem const* /*lpeitem*/, std::vector<Geom::PathVector> & /*hp_vec*/) override {}; 74 75 std::vector<ItemAndActive*> _vector; 76 77 protected: 78 bool _updateLink(const Gtk::TreeIter& iter, ItemAndActive* pd); 79 bool _selectIndex(const Gtk::TreeIter& iter, int* i); 80 void unlink(ItemAndActive* to); 81 void remove_link(ItemAndActive* to); 82 void setItem(SPObject *linked_obj, guint flags, ItemAndActive* to); 83 84 void linked_changed(SPObject *old_obj, SPObject *new_obj, ItemAndActive* to); 85 void linked_modified(SPObject *linked_obj, guint flags, ItemAndActive* to); linked_transformed(Geom::Affine const *,SPItem *,ItemAndActive *)86 void linked_transformed(Geom::Affine const *, SPItem *, ItemAndActive*) {} 87 void linked_delete(SPObject *deleted, ItemAndActive* to); 88 89 ModelColumns *_model; 90 Glib::RefPtr<Gtk::TreeStore> _store; 91 Gtk::TreeView _tree; 92 Gtk::CellRendererText *_text_renderer; 93 Gtk::CellRendererToggle *_toggle_active; 94 Gtk::TreeView::Column *_name_column; 95 Gtk::ScrolledWindow _scroller; 96 97 void on_link_button_click(); 98 void on_remove_button_click(); 99 void on_up_button_click(); 100 void on_down_button_click(); 101 void on_active_toggled(const Glib::ustring& item); 102 103 private: 104 void update(); 105 OriginalItemArrayParam(const OriginalItemArrayParam&); 106 OriginalItemArrayParam& operator=(const OriginalItemArrayParam&); 107 }; 108 109 } //namespace LivePathEffect 110 111 } //namespace Inkscape 112 113 #endif 114 115 /* 116 Local Variables: 117 mode:c++ 118 c-file-style:"stroustrup" 119 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) 120 indent-tabs-mode:nil 121 fill-column:99 122 End: 123 */ 124 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : 125