blob: b03a1d2e1a239266f4baef821cdad4861165decc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/** @file
* @brief A dialog for CSS selectors
*/
/* Authors:
* Kamalpreet Kaur Grewal
*
* Copyright (C) Kamalpreet Kaur Grewal 2016 <grewalkamal005@gmail.com>
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#ifndef STYLEDIALOG_H
#define STYLEDIALOG_H
#include <ui/widget/panel.h>
#include <gtkmm/treeview.h>
#include <gtkmm/treestore.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/dialog.h>
#include <gtkmm/treeselection.h>
#include <gtkmm/paned.h>
#include "desktop.h"
#include "document.h"
#include "ui/dialog/cssdialog.h"
namespace Inkscape {
namespace UI {
namespace Dialog {
/**
* @brief The StyleDialog class
* A list of CSS selectors will show up in this dialog. This dialog allows to
* add and delete selectors. Objects can be added to and removed from the selectors
* in the dialog. Besides, selection of any selector row selects the matching
* objects in the drawing and vice-versa.
*/
typedef std::pair<std::pair<std::string, std::vector<SPObject *> >, std::string>
_selectorVecType;
class StyleDialog : public UI::Widget::Panel
{
public:
StyleDialog();
~StyleDialog();
static StyleDialog &getInstance() { return *new StyleDialog(); }
void setDesktop(SPDesktop* desktop);
private:
void _styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip);
std::string _setClassAttribute(std::vector<SPObject *>);
class InkSelector {
public:
std::string _selector;
std::vector<SPObject *> _matchingObjs;
std::string _xmlContent;
};
InkSelector inkSelector;
std::vector<InkSelector> _selectorVec;
std::vector<InkSelector> _getSelectorVec();
std::string _populateTree(std::vector<InkSelector>);
bool _handleButtonEvent(GdkEventButton *event);
void _buttonEventsSelectObjs(GdkEventButton *event);
void _selectObjects(int, int);
void _checkAllChildren(Gtk::TreeModel::Children& children);
Inkscape::XML::Node *_styleElementNode();
void _updateStyleContent();
void _selectRow(Selection *);
class ModelColumns : public Gtk::TreeModel::ColumnRecord
{
public:
ModelColumns()
{ add(_selectorLabel); add(_colAddRemove); add(_colObj); }
Gtk::TreeModelColumn<Glib::ustring> _selectorLabel;
Gtk::TreeModelColumn<bool> _colAddRemove;
Gtk::TreeModelColumn<std::vector<SPObject *> > _colObj;
};
SPDesktop* _desktop;
SPDesktop* _targetDesktop;
ModelColumns _mColumns;
Gtk::VPaned _paned;
Gtk::VBox _mainBox;
Gtk::HBox _buttonBox;
Gtk::TreeView _treeView;
Glib::RefPtr<Gtk::TreeStore> _store;
Gtk::ScrolledWindow _scrolledWindow;
Gtk::Button* del;
Gtk::Button* create;
SPDocument* _document;
bool _styleExists;
Inkscape::XML::Node *_styleChild;
std::string _selectorName;
std::string _selectorValue;
bool _newDrawing;
CssDialog *_cssPane;
void _selAdd(Gtk::TreeModel::Row row);
// Signal handlers
void _addSelector();
void _delSelector();
void _selChanged();
// Signal handler for CssDialog
void _handleEdited(const Glib::ustring& path, const Glib::ustring& new_text);
bool _delProperty(GdkEventButton *event);
};
} // namespace Dialog
} // namespace UI
} // namespace Inkscape
#endif // STYLEDIALOG_H
|