summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorkamalpreetgrewal <grewalkamal005@gmail.com>2016-07-08 11:49:12 +0000
committerkamalpreetgrewal <grewalkamal005@gmail.com>2016-07-08 11:49:12 +0000
commit67f04a5e0e1bff0523a97d4aa16357849e51e1d8 (patch)
tree032b6fb5de1a4f5215b1d5ef5232c7f4422394e3 /src/ui
parentMerge changes from trunk (diff)
downloadinkscape-67f04a5e0e1bff0523a97d4aa16357849e51e1d8.tar.gz
inkscape-67f04a5e0e1bff0523a97d4aa16357849e51e1d8.zip
Selects matching objects for single as well as double click on selector
(bzr r14949.1.42)
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/dialog/styledialog.cpp89
-rw-r--r--src/ui/dialog/styledialog.h4
2 files changed, 59 insertions, 34 deletions
diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp
index 72fea5dc6..7e0cb135f 100644
--- a/src/ui/dialog/styledialog.cpp
+++ b/src/ui/dialog/styledialog.cpp
@@ -113,9 +113,10 @@ StyleDialog::StyleDialog() :
_handleButtonEvent),
false);
- _treeView.signal_row_activated().connect(sigc::mem_fun(*this,
- &StyleDialog::
- _selectedRowCallback));
+ _treeView.signal_button_press_event().connect_notify(sigc::mem_fun
+ (*this, &StyleDialog::
+ _buttonEventsSelectObjs),
+ false);
}
StyleDialog::~StyleDialog()
@@ -548,18 +549,14 @@ bool StyleDialog::_handleButtonEvent(GdkEventButton *event)
if (iter)
{
path = _treeView.get_model()->get_path(iter);
- int i = atoi(path.to_string().c_str());
Gtk::TreeModel::Row row = *iter;
std::string childStyle;
-
if (_selectorVec.size() != 0) {
if (!row.parent()) {
Gtk::TreeModel::Row childrow;
childrow = *(_store->append(row->children()));
- std::cout << "_store->children() " << _store->children()
- ->children().size() << std::endl;
-
- childrow[_mColumns._selectorLabel] = obj->getId();
+ childrow[_mColumns._selectorLabel] = "#" +
+ std::string(obj->getId());
childrow[_mColumns._colAddRemove] = false;
childrow[_mColumns._colObj] = _desktop->selection->list();
childStyle = "#" + std::string(obj->getId()) + "{" +
@@ -588,27 +585,59 @@ bool StyleDialog::_handleButtonEvent(GdkEventButton *event)
}
/**
- * @brief StyleDialog::_selected_row_callback
- * @param path
+ * @brief StyleDialog::_selectObjects
+ * @param event
+ * This function detects single or double click on a selector in any row. Single
+ * click on a selector selects the matching objects. A double click on any
+ * selector selects the matching objects as well as will open CSS dialog. It
+ * calls _selectObjects to add objects to selection.
+ * TODO: Open CSS dialog on double click.
+ */
+void StyleDialog::_buttonEventsSelectObjs(GdkEventButton* event )
+{
+ if (event->type == GDK_BUTTON_PRESS && event->button == 1) {
+ int x = static_cast<int>(event->x);
+ int y = static_cast<int>(event->y);
+ _selectObjects(x, y);
+ }
+ else if (event->type == GDK_2BUTTON_PRESS && event->button == 1) {
+ int x = static_cast<int>(event->x);
+ int y = static_cast<int>(event->y);
+ _selectObjects(x, y);
+ //Open CSS dialog here.
+ }
+}
+
+/**
+ * @brief StyleDialog::_selectObjects
+ * @param eventX
+ * @param eventY
* This function selects objects in the drawing corresponding to the selector
* selected in the treeview.
*/
-void StyleDialog::_selectedRowCallback(const Gtk::TreeModel::Path& path,
- Gtk::TreeViewColumn* column )
+void StyleDialog::_selectObjects(int eventX, int eventY)
{
_desktop->selection->clear();
- if (column == _treeView.get_column(1)) {
- Gtk::TreeModel::iterator iter = _store->get_iter(path);
- if (iter) {
- Gtk::TreeModel::Row row = *iter;
- Gtk::TreeModel::Children children = row.children();
- std::vector<SPObject *> objVec = row[_mColumns._colObj];
- for (unsigned i = 0; i < objVec.size(); ++i) {
- SPObject *obj = objVec[i];
- _desktop->selection->add(obj);
- }
- if (children) {
- _checkAllChildren(children);
+ Gtk::TreeViewColumn *col = _treeView.get_column(1);
+ Gtk::TreeModel::Path path;
+ int x = eventX;
+ int y = eventY;
+ int x2 = 0;
+ int y2 = 0;
+ if (_treeView.get_path_at_pos(x, y, path, col, x2, y2)) {
+ if (col == _treeView.get_column(1)) {
+ Gtk::TreeModel::iterator iter = _store->get_iter(path);
+ if (iter) {
+ Gtk::TreeModel::Row row = *iter;
+ Gtk::TreeModel::Children children = row.children();
+ std::vector<SPObject *> objVec = row[_mColumns._colObj];
+ for (unsigned i = 0; i < objVec.size(); ++i) {
+ SPObject *obj = objVec[i];
+ _desktop->selection->add(obj);
+ }
+ if (children) {
+ _checkAllChildren(children);
+ }
}
}
}
@@ -641,7 +670,6 @@ void StyleDialog::_checkAllChildren(Gtk::TreeModel::Children& children)
void StyleDialog::_selectRow(Selection */*sel*/)
{
SPObject *obj = NULL;
- bool objExists = false;
if (!_desktop->selection->list().empty()) {
std::vector<SPObject*> selected = _desktop->getSelection()->list();
obj = selected.back();
@@ -665,7 +693,6 @@ void StyleDialog::_selectRow(Selection */*sel*/)
for (unsigned i = 0; i < objVec.size(); ++i) {
if (obj->getId() == objVec[i]->getId()) {
_treeView.get_selection()->select(row);
- objExists = true;
}
}
@@ -678,15 +705,13 @@ void StyleDialog::_selectRow(Selection */*sel*/)
for (unsigned j = 0; j < childObjVec.size(); ++j) {
if (obj->getId() == childObjVec[j]->getId()) {
_treeView.get_selection()->select(childRow);
- objExists = true;
}
}
}
}
-
- if (!objExists) {
- _treeView.get_selection()->unselect_all();
- }
+ }
+ else {
+ _treeView.get_selection()->unselect_all();
}
}
diff --git a/src/ui/dialog/styledialog.h b/src/ui/dialog/styledialog.h
index e47fbc96d..08061d923 100644
--- a/src/ui/dialog/styledialog.h
+++ b/src/ui/dialog/styledialog.h
@@ -50,8 +50,8 @@ private:
std::vector<_selectorVecType> _getSelectorVec();
std::string _populateTree(std::vector<_selectorVecType>);
bool _handleButtonEvent(GdkEventButton *event);
- void _selectedRowCallback(const Gtk::TreeModel::Path& path,
- Gtk::TreeViewColumn* /* column */);
+ void _buttonEventsSelectObjs(GdkEventButton *event);
+ void _selectObjects(int, int);
void _checkAllChildren(Gtk::TreeModel::Children& children);
Inkscape::XML::Node *_styleElementNode();
void _updateStyleContent();