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