diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2017-02-23 10:38:44 +0000 |
|---|---|---|
| committer | tavmjong-free <tavmjong@free.fr> | 2017-02-23 10:38:44 +0000 |
| commit | 0fbb73e65a75805633afd4c003a05530c8e77afe (patch) | |
| tree | 93272d6d9610498cafa19bbc114f560f55355e9a /src | |
| parent | [Bug #1666939] Polar grid: reduce height of options dialog. (diff) | |
| download | inkscape-0fbb73e65a75805633afd4c003a05530c8e77afe.tar.gz inkscape-0fbb73e65a75805633afd4c003a05530c8e77afe.zip | |
Display style attribute properties when object row selected. Allow their deletion.
(bzr r15542)
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/dialog/styledialog.cpp | 76 | ||||
| -rw-r--r-- | src/ui/dialog/styledialog.h | 10 |
2 files changed, 66 insertions, 20 deletions
diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp index 7eaef7af0..8d8ebf1b2 100644 --- a/src/ui/dialog/styledialog.cpp +++ b/src/ui/dialog/styledialog.cpp @@ -93,7 +93,7 @@ StyleDialog::TreeStore::row_draggable_vfunc(const Gtk::TreeModel::Path& path) co const_iterator iter = unconstThis->get_iter(path); if (iter) { Gtk::TreeModel::Row row = *iter; - bool is_draggable = row[_styledialog->_mColumns._colAddRemove]; + bool is_draggable = row[_styledialog->_mColumns._colIsSelector]; return is_draggable; } return Gtk::TreeStore::row_draggable_vfunc(path); @@ -169,7 +169,7 @@ StyleDialog::StyleDialog() : int addCol = _treeView.append_column("", *addRenderer) - 1; Gtk::TreeViewColumn *col = _treeView.get_column(addCol); if ( col ) { - col->add_attribute( addRenderer->property_active(), _mColumns._colAddRemove ); + col->add_attribute( addRenderer->property_active(), _mColumns._colIsSelector ); } _treeView.append_column("CSS Selector", _mColumns._colSelector); _treeView.set_expander_column(*(_treeView.get_column(1))); @@ -217,6 +217,9 @@ StyleDialog::StyleDialog() : _treeView.get_selection()->signal_changed().connect( sigc::mem_fun(*this, &StyleDialog::_selChanged)); + _objObserver.signal_changed().connect(sigc::mem_fun(*this, &StyleDialog::_objChanged)); + + // Add CSS dialog _cssPane = new CssDialog; _paned.pack2(*_cssPane, Gtk::SHRINK); @@ -399,7 +402,7 @@ void StyleDialog::_readStyleElement() Gtk::TreeModel::Row row = *(_store->append()); row[_mColumns._colSelector] = selector; - row[_mColumns._colAddRemove] = true; + row[_mColumns._colIsSelector] = true; row[_mColumns._colObj] = objVec; row[_mColumns._colProperties] = properties; @@ -407,7 +410,7 @@ void StyleDialog::_readStyleElement() for (auto& obj: objVec) { Gtk::TreeModel::Row childrow = *(_store->append(row->children())); childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId()); - childrow[_mColumns._colAddRemove] = false; + childrow[_mColumns._colIsSelector] = false; childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj); childrow[_mColumns._colProperties] = ""; // Unused } @@ -482,9 +485,10 @@ void StyleDialog::_addToSelector(Gtk::TreeModel::Row row) // Add child row Gtk::TreeModel::Row childrow = *(_store->append(row->children())); - childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId()); - childrow[_mColumns._colAddRemove] = false; - childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj); + childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId()); + childrow[_mColumns._colIsSelector] = false; + childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj); + childrow[_mColumns._colProperties] = ""; // Unused } } } @@ -509,9 +513,10 @@ void StyleDialog::_addToSelector(Gtk::TreeModel::Row row) for (auto& obj: objVec) { // Add child row Gtk::TreeModel::Row childrow = *(_store->append(row->children())); - childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId()); - childrow[_mColumns._colAddRemove] = false; - childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj); + childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId()); + childrow[_mColumns._colIsSelector] = false; + childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj); + childrow[_mColumns._colProperties] = ""; // Unused } } @@ -820,16 +825,16 @@ void StyleDialog::_addSelector() // Add entry to GUI tree Gtk::TreeModel::Row row = *(_store->append()); - row[_mColumns._colSelector] = selectorValue; - row[_mColumns._colAddRemove] = true; - row[_mColumns._colObj] = objVec; + row[_mColumns._colSelector] = selectorValue; + row[_mColumns._colIsSelector] = true; + row[_mColumns._colObj] = objVec; // Add as children objects that match selector. for (auto& obj: objVec) { Gtk::TreeModel::Row childrow = *(_store->append(row->children())); - childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId()); - childrow[_mColumns._colAddRemove] = false; - childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj); + childrow[_mColumns._colSelector] = "#" + Glib::ustring(obj->getId()); + childrow[_mColumns._colIsSelector] = false; + childrow[_mColumns._colObj] = std::vector<SPObject *>(1, obj); } // Add entry to style element @@ -906,6 +911,8 @@ void StyleDialog::_updateCSSPanel() #ifdef DEBUG_STYLEDIALOG std::cout << "StyleDialog::_updateCSSPanel" << std::endl; #endif + _updating = true; + // This should probably be in a member function of CSSDialog. _cssPane->_store->clear(); @@ -913,7 +920,17 @@ void StyleDialog::_updateCSSPanel() Gtk::TreeModel::iterator iter = refTreeSelection->get_selected(); if (iter) { Gtk::TreeModel::Row row = *iter; - Glib::ustring properties = row[_mColumns._colProperties]; + Glib::ustring properties; + if (row[_mColumns._colIsSelector]) { + properties = row[_mColumns._colProperties]; + _objObserver.set( NULL ); + } else { + std::vector<SPObject *> objects = row[_mColumns._colObj]; + _objObserver.set( objects[0] ); + if (objects[0] && objects[0]->getAttribute("style") != NULL) { + properties = objects[0]->getAttribute("style"); + } + } REMOVE_SPACES(properties); // Remove leading/trailing spaces std::vector<Glib::ustring> tokens = @@ -926,6 +943,8 @@ void StyleDialog::_updateCSSPanel() } } } + + _updating = false; } @@ -1006,6 +1025,16 @@ void StyleDialog::_selChanged() { #endif } + +void StyleDialog::_objChanged() { +#ifdef DEBUG_STYLEDIALOG + std::cout << "StyleDialog::_objChanged" << std::endl; +#endif + if (_updating) return; + _updateCSSPanel(); +} + + /** * @brief StyleDialog::_handleEdited * @param path @@ -1080,6 +1109,19 @@ bool StyleDialog::_delProperty(GdkEventButton *event) Gtk::TreeModel::Row row = *iter; row[_mColumns._colProperties] = properties; _writeStyleElement(); + + // Update style attribute + if (!row[_mColumns._colIsSelector]) { + std::vector<SPObject *> objects = row[_mColumns._colObj]; + if (objects[0]) { + Glib::ustring properties = row[_mColumns._colProperties]; + if (properties.empty()) { + objects[0]->setAttribute("style", NULL); + } else { + objects[0]->setAttribute("style", properties); + } + } + } } } } diff --git a/src/ui/dialog/styledialog.h b/src/ui/dialog/styledialog.h index 1b3bebae6..f21e81700 100644 --- a/src/ui/dialog/styledialog.h +++ b/src/ui/dialog/styledialog.h @@ -26,6 +26,8 @@ #include "document.h" #include "ui/dialog/cssdialog.h" +#include "xml/helper-observer.h" + namespace Inkscape { namespace UI { namespace Dialog { @@ -61,12 +63,12 @@ private: public: ModelColumns() { add(_colSelector); - add(_colAddRemove); + add(_colIsSelector); add(_colObj); add(_colProperties); } Gtk::TreeModelColumn<Glib::ustring> _colSelector; // Selector or matching object id. - Gtk::TreeModelColumn<bool> _colAddRemove; // Selector row or child object row. + Gtk::TreeModelColumn<bool> _colIsSelector; // Selector row or child object row. Gtk::TreeModelColumn<std::vector<SPObject *> > _colObj; // List of matching objects. Gtk::TreeModelColumn<Glib::ustring> _colProperties; // List of properties. }; @@ -111,7 +113,8 @@ private: SPDocument* _document; bool _updating; // Prevent cyclic actions: read <-> write, select via dialog <-> via desktop Inkscape::XML::Node *_textNode; - + Inkscape::XML::SignalObserver _objObserver; // Track object in selected row (to update CSS panel). + // Reading and writing the style element. Inkscape::XML::Node *_getStyleTextNode(); void _readStyleElement(); @@ -133,6 +136,7 @@ private: void _buttonEventsSelectObjs(GdkEventButton *event); void _selectRow(Selection *); // Select row in tree when selection changed. void _selChanged(); + void _objChanged(); // Signal handlers for CssDialog void _handleEdited(const Glib::ustring& path, const Glib::ustring& new_text); |
