1 /*
2 * Inkscape::Widgets::LayerSelector - layer selector widget
3 *
4 * Authors:
5 * MenTaLguY <mental@rydia.net>
6 *
7 * Copyright (C) 2004 MenTaLguY
8 *
9 * Released under GNU GPL, read the file 'COPYING' for more information
10 */
12 #ifndef SEEN_INKSCAPE_WIDGETS_LAYER_SELECTOR
13 #define SEEN_INKSCAPE_WIDGETS_LAYER_SELECTOR
15 #include <gtkmm/box.h>
16 #include <gtkmm/combobox.h>
17 #include <gtkmm/togglebutton.h>
18 #include <gtkmm/tooltips.h>
19 #include <gtkmm/cellrenderertext.h>
20 #include <gtkmm/treemodel.h>
21 #include <gtkmm/liststore.h>
22 #include <sigc++/slot.h>
23 #include "util/list.h"
25 class SPDesktop;
26 class SPDocument;
27 class SPObject;
28 namespace Inkscape {
29 namespace XML {
30 class Node;
31 }
32 }
35 namespace Inkscape {
36 namespace Widgets {
38 class DocumentTreeModel;
40 class LayerSelector : public Gtk::HBox {
41 public:
42 LayerSelector(SPDesktop *desktop = NULL);
43 ~LayerSelector();
45 SPDesktop *desktop() { return _desktop; }
46 void setDesktop(SPDesktop *desktop);
48 private:
49 class LayerModelColumns : public Gtk::TreeModel::ColumnRecord {
50 public:
51 Gtk::TreeModelColumn<unsigned> depth;
52 Gtk::TreeModelColumn<SPObject *> object;
53 Gtk::TreeModelColumn<Inkscape::XML::Node *> repr;
54 Gtk::TreeModelColumn<void *> callbacks;
56 LayerModelColumns() {
57 add(depth); add(object); add(repr); add(callbacks);
58 }
59 };
61 SPDesktop *_desktop;
63 Gtk::Tooltips _tooltips;
64 Gtk::ComboBox _selector;
65 Gtk::ToggleButton _visibility_toggle;
66 Gtk::ToggleButton _lock_toggle;
68 LayerModelColumns _model_columns;
69 Gtk::CellRendererText _label_renderer;
70 Glib::RefPtr<Gtk::ListStore> _layer_model;
72 // sigc::connection _desktop_shutdown_connection;
73 sigc::connection _layer_changed_connection;
74 sigc::connection _selection_changed_connection;
75 sigc::connection _visibility_toggled_connection;
76 sigc::connection _lock_toggled_connection;
78 SPObject *_layer;
80 void _selectLayer(SPObject *layer);
81 void _setDesktopLayer();
83 void _buildEntry(unsigned depth, SPObject &object);
84 void _buildEntries(unsigned depth,
85 Inkscape::Util::List<SPObject &> hierarchy);
86 void _buildSiblingEntries(unsigned depth,
87 SPObject &parent,
88 Inkscape::Util::List<SPObject &> hierarchy);
89 void _protectUpdate(sigc::slot<void> slot);
90 void _destroyEntry(Gtk::ListStore::iterator const &row);
91 void _hideLayer(bool hide);
92 void _lockLayer(bool lock);
94 void _prepareLabelRenderer(Gtk::TreeModel::const_iterator const &row);
95 };
97 }
98 }
100 #endif
101 /*
102 Local Variables:
103 mode:c++
104 c-file-style:"stroustrup"
105 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
106 indent-tabs-mode:nil
107 fill-column:99
108 End:
109 */
110 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :