diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-05-28 09:13:27 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-06-02 09:50:17 +0000 |
| commit | 817e61de278c79c005b3970fe4acaebcda20aabb (patch) | |
| tree | cd487796d3729006aac1075ac3969237348b6797 /src | |
| parent | Fixes locatesd with Thomas at Hakfest (diff) | |
| download | inkscape-817e61de278c79c005b3970fe4acaebcda20aabb.tar.gz inkscape-817e61de278c79c005b3970fe4acaebcda20aabb.zip | |
working on selector dialog
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/dialog/attrdialog.cpp | 28 | ||||
| -rw-r--r-- | src/ui/dialog/attrdialog.h | 1 | ||||
| -rw-r--r-- | src/ui/dialog/selectordialog.cpp | 20 | ||||
| -rw-r--r-- | src/ui/dialog/styledialog.cpp | 156 |
4 files changed, 118 insertions, 87 deletions
diff --git a/src/ui/dialog/attrdialog.cpp b/src/ui/dialog/attrdialog.cpp index ce24e3272..974a1189a 100644 --- a/src/ui/dialog/attrdialog.cpp +++ b/src/ui/dialog/attrdialog.cpp @@ -20,6 +20,7 @@ #include "message-stack.h" #include "ui/icon-loader.h" #include "ui/widget/iconrenderer.h" +#include "style.h" #include "xml/node-event-vector.h" #include "xml/attribute-record.h" @@ -280,6 +281,7 @@ void AttrDialog::onAttrDelete(Glib::ustring path) this->_store->erase(row); this->_repr->setAttribute(name.c_str(), nullptr, false); this->setUndo(_("Delete attribute")); + reloadStyles(name); } } } @@ -308,6 +310,7 @@ bool AttrDialog::onKeyPressed(GdkEventKey *event) this->_store->erase(row); this->_repr->setAttribute(name.c_str(), nullptr, false); this->setUndo(_("Delete attribute")); + reloadStyles(name); } return true; } @@ -363,6 +366,28 @@ void AttrDialog::nameEdited (const Glib::ustring& path, const Glib::ustring& nam * @return * Called when the value is edited in the TreeView editable column */ +void AttrDialog::reloadStyles(Glib::ustring name) +{ + SPDocument *document = this->_desktop->doc(); + SPObject *obj = document->getObjectById(_repr->attribute("id")); + if (obj) { + for (auto iter : obj->style->properties()) { + if (iter->style_src != SP_STYLE_SRC_UNSET) { + if( iter->name == name) { + obj->style->readFromObject(obj); + obj->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); + } + } + } + } +} + +/** + * @brief AttrDialog::valueEdited + * @param event + * @return + * Called when the value is edited in the TreeView editable column + */ void AttrDialog::valueEdited (const Glib::ustring& path, const Glib::ustring& value) { Gtk::TreeModel::Row row = *_store->get_iter(path); @@ -377,7 +402,8 @@ void AttrDialog::valueEdited (const Glib::ustring& path, const Glib::ustring& va if(!value.empty()) { row[_attrColumns._attributeValue] = value; } - + reloadStyles(name); + this->setUndo(_("Change attribute value")); } } diff --git a/src/ui/dialog/attrdialog.h b/src/ui/dialog/attrdialog.h index 68ea14cc9..61493cc80 100644 --- a/src/ui/dialog/attrdialog.h +++ b/src/ui/dialog/attrdialog.h @@ -98,6 +98,7 @@ public: void onAttrDelete(Glib::ustring path); bool onAttrCreate(GdkEventButton *event); bool onKeyPressed(GdkEventKey *event); + void reloadStyles(Glib::ustring name); void nameEdited(const Glib::ustring &path, const Glib::ustring &name); void valueEdited(const Glib::ustring &path, const Glib::ustring &value); diff --git a/src/ui/dialog/selectordialog.cpp b/src/ui/dialog/selectordialog.cpp index 319ed1bda..4dedd02df 100644 --- a/src/ui/dialog/selectordialog.cpp +++ b/src/ui/dialog/selectordialog.cpp @@ -284,7 +284,7 @@ SelectorDialog::SelectorDialog(bool stylemode) : del = manage( new Gtk::Button() ); _styleButton(*del, "list-remove", "Remove a CSS Selector"); del->signal_clicked().connect(sigc::mem_fun(*this, &SelectorDialog::_delSelector)); - del->set_sensitive(false); + del->hide(); _mainBox.pack_end(_buttonBox, Gtk::PACK_SHRINK); _buttonBox.pack_start(*create, Gtk::PACK_SHRINK); @@ -327,7 +327,7 @@ SelectorDialog::SelectorDialog(bool stylemode) : _selectRow(); if (!_stylemode && !_store->children().empty()) { - del->set_sensitive(true); + del->show(); } } @@ -895,8 +895,8 @@ void SelectorDialog::_selectObjects(int eventX, int eventY) if (iter) { Gtk::TreeModel::Row row = *iter; Gtk::TreeModel::Children children = row.children(); - if (children.empty() && !_stylemode) { - del->set_sensitive(true); + if ((children.empty() || children.size() == 1) && !_stylemode) { + del->show(); } std::vector<SPObject *> objVec = row[_mColumns._colObj]; @@ -981,7 +981,7 @@ void SelectorDialog::_addSelector() */ selectorValue = textEditPtr->get_text(); if (!_stylemode) { - del->set_sensitive(true); + del->show(); } std::vector<Glib::ustring> tokensplus = Glib::Regex::split_simple("[,]+", selectorValue); bool unhandled = false; @@ -1077,7 +1077,7 @@ void SelectorDialog::_delSelector() Gtk::TreeModel::iterator iter = refTreeSelection->get_selected(); if (iter) { Gtk::TreeModel::Row row = *iter; - if (!row.children().empty()) { + if (row.children().size() > 2) { return; } _updating = true; @@ -1085,7 +1085,7 @@ void SelectorDialog::_delSelector() _updating = false; _writeStyleElement(); if (!_stylemode) { - del->set_sensitive(false); + del->hide(); } } } @@ -1226,7 +1226,7 @@ void SelectorDialog::_buttonEventsSelectObjs(GdkEventButton* event ) _treeView.get_selection()->set_mode(Gtk::SELECTION_SINGLE); _updating = true; if (!_stylemode) { - del->set_sensitive(true); + del->show(); } if (event->type == GDK_BUTTON_RELEASE && event->button == 1) { int x = static_cast<int>(event->x); @@ -1245,7 +1245,9 @@ void SelectorDialog::_selectRow() { g_debug("SelectorDialog::_selectRow: updating: %s", (_updating ? "true" : "false")); if (!_stylemode) { - del->set_sensitive(false); + del->hide(); + } else { + del->show(); } if (_updating || !getDesktop()) return; // Avoid updating if we have set row via dialog. if (SP_ACTIVE_DESKTOP != getDesktop()) { diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp index 6e60897a4..42ecda6e4 100644 --- a/src/ui/dialog/styledialog.cpp +++ b/src/ui/dialog/styledialog.cpp @@ -411,33 +411,33 @@ void StyleDialog::_readStyleElement() g_warning("Glade file loading failed for filter effect dialog"); return; } - Gtk::Box *CSSSelectorContainer; - _builder->get_widget("CSSSelectorContainer", CSSSelectorContainer); - Gtk::Label *CSSSelector; - _builder->get_widget("CSSSelector", CSSSelector); - Gtk::EventBox *CSSSelectorEventAdd; - _builder->get_widget("CSSSelectorEventAdd", CSSSelectorEventAdd); - CSSSelectorEventAdd->add_events(Gdk::BUTTON_RELEASE_MASK); - CSSSelector->set_text("element"); - Gtk::TreeView *CSSTree; - _builder->get_widget("CSSTree", CSSTree); + Gtk::Box *css_selector_container; + _builder->get_widget("CSSSelectorContainer", css_selector_container); + Gtk::Label *css_selector; + _builder->get_widget("CSSSelector", css_selector); + Gtk::EventBox *css_selector_event_add; + _builder->get_widget("CSSSelectorEventAdd", css_selector_event_add); + css_selector_event_add->add_events(Gdk::BUTTON_RELEASE_MASK); + css_selector->set_text("element"); + Gtk::TreeView *css_tree; + _builder->get_widget("CSSTree", css_tree); Glib::RefPtr<Gtk::TreeStore> store = Gtk::TreeStore::create(_mColumns); - CSSTree->set_model(store); + css_tree->set_model(store); // We need to handle comments on SPStyle to activate /* Gtk::CellRendererToggle *active = Gtk::manage(new Gtk::CellRendererToggle); - int addCol = CSSTree->append_column("", *active) - 1; - Gtk::TreeViewColumn *col = CSSTree->get_column(addCol); + int addCol = css_tree->append_column("", *active) - 1; + Gtk::TreeViewColumn *col = css_tree->get_column(addCol); if (col) { col->add_attribute(active->property_active(), _mColumns._colActive); } */ - CSSSelectorEventAdd->signal_button_release_event().connect( + css_selector_event_add->signal_button_release_event().connect( sigc::bind<Glib::RefPtr<Gtk::TreeStore>, Glib::ustring, gint>( sigc::mem_fun(*this, &StyleDialog::_addRow), store, "style_properties", 0)); Inkscape::UI::Widget::IconRenderer * addRenderer = manage(new Inkscape::UI::Widget::IconRenderer()); addRenderer->add_icon("edit-delete"); - int addCol = CSSTree->append_column("Delete row", *addRenderer) - 1; - Gtk::TreeViewColumn *col = CSSTree->get_column(addCol); + int addCol = css_tree->append_column("Delete row", *addRenderer) - 1; + Gtk::TreeViewColumn *col = css_tree->get_column(addCol); if (col) { addRenderer->signal_activated().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_onPropDelete), store)); } @@ -445,18 +445,18 @@ void StyleDialog::_readStyleElement() label->property_placeholder_text() = _("property"); label->property_editable() = true; label->signal_edited().connect(sigc::bind< Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_nameEdited), store)); - addCol = CSSTree->append_column("CSS Property", *label) - 1; - col = CSSTree->get_column(addCol); + addCol = css_tree->append_column("CSS Property", *label) - 1; + col = css_tree->get_column(addCol); if (col) { col->add_attribute(label->property_text(), _mColumns._colName); } Gtk::CellRendererText *value = Gtk::manage(new Gtk::CellRendererText()); value->property_placeholder_text() = _("value"); value->property_editable() = true; - value->signal_edited().connect(sigc::bind< Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_valueEdited), store)); - CSSTree->set_focus_vadjustment(_scrolledWindow.get_vadjustment()); - addCol = CSSTree->append_column("CSS Value", *value) - 1; - col = CSSTree->get_column(addCol); + value->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_valueEdited), store)); + css_tree->set_focus_vadjustment(_scrolledWindow.get_vadjustment()); + addCol = css_tree->append_column("CSS Value", *value) - 1; + col = css_tree->get_column(addCol); if (col) { col->add_attribute(value->property_text(), _mColumns._colValue); col->add_attribute(value->property_strikethrough(), _mColumns._colStrike); @@ -501,7 +501,7 @@ void StyleDialog::_readStyleElement() contract = false; } } */ - _styleBox.pack_start(*CSSSelectorContainer, Gtk::PACK_EXPAND_WIDGET); + _styleBox.pack_start(*css_selector_container, Gtk::PACK_EXPAND_WIDGET); bool hasattributes = false; Glib::RefPtr<Gtk::Builder> _builder; try { @@ -510,14 +510,14 @@ void StyleDialog::_readStyleElement() g_warning("Glade file loading failed for filter effect dialog"); return; } - Gtk::Label *CSSSelector; - _builder->get_widget("CSSSelector", CSSSelector); - CSSSelector->set_text("element.attributes"); - Gtk::Box *CSSSelectorContainer; - _builder->get_widget("CSSSelectorContainer", CSSSelectorContainer); - Gtk::EventBox *CSSSelectorEventAdd; - _builder->get_widget("CSSSelectorEventAdd", CSSSelectorEventAdd); - CSSSelectorEventAdd->add_events(Gdk::BUTTON_RELEASE_MASK); + Gtk::Label *css_selector; + _builder->get_widget("CSSSelector", css_selector); + css_selector->set_text("element.attributes"); + Gtk::Box *css_selector_container; + _builder->get_widget("CSSSelectorContainer", css_selector_container); + Gtk::EventBox *css_selector_event_add; + _builder->get_widget("CSSSelectorEventAdd", css_selector_event_add); + css_selector_event_add->add_events(Gdk::BUTTON_RELEASE_MASK); Glib::RefPtr<Gtk::TreeStore> store = Gtk::TreeStore::create(_mColumns); bool show = false; for (auto iter : obj->style->properties()) { @@ -526,26 +526,26 @@ void StyleDialog::_readStyleElement() const gchar *attr = obj->getRepr()->attribute(iter->name.c_str()); if (attr) { if (!hasattributes) { - Gtk::TreeView *CSSTree; - _builder->get_widget("CSSTree", CSSTree); - CSSTree->set_model(store); - CSSSelectorEventAdd->signal_button_release_event().connect( + Gtk::TreeView *css_tree; + _builder->get_widget("CSSTree", css_tree); + css_tree->set_model(store); + css_selector_event_add->signal_button_release_event().connect( sigc::bind<Glib::RefPtr<Gtk::TreeStore>, Glib::ustring, gint>( sigc::mem_fun(*this, &StyleDialog::_addRow), store, "style_properties", 0)); Inkscape::UI::Widget::IconRenderer * addRenderer = manage(new Inkscape::UI::Widget::IconRenderer()); addRenderer->add_icon("edit-delete"); - int addCol = CSSTree->append_column("Delete row", *addRenderer) - 1; - Gtk::TreeViewColumn *col = CSSTree->get_column(addCol); + int addCol = css_tree->append_column("Delete row", *addRenderer) - 1; + Gtk::TreeViewColumn *col = css_tree->get_column(addCol); if (col) { addRenderer->signal_activated().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_onPropDelete), store)); } Gtk::CellRendererText *label = Gtk::manage(new Gtk::CellRendererText()); label->property_placeholder_text() = _("property"); label->property_editable() = true; - label->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_nameEdited), store)); - addCol = CSSTree->append_column("CSS Property", *label) - 1; - col = CSSTree->get_column(addCol); + label->signal_edited().connect(sigc::bind< Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_nameEdited), store)); + addCol = css_tree->append_column("CSS Property", *label) - 1; + col = css_tree->get_column(addCol); if (col) { col->add_attribute(label->property_text(), _mColumns._colName); } @@ -553,9 +553,9 @@ void StyleDialog::_readStyleElement() value->property_placeholder_text() = _("value"); value->property_editable() = true; value->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_valueEdited), store)); - CSSTree->set_focus_vadjustment(_scrolledWindow.get_vadjustment()); - addCol = CSSTree->append_column("CSS Value", *value) - 1; - col = CSSTree->get_column(addCol); + css_tree->set_focus_vadjustment(_scrolledWindow.get_vadjustment()); + addCol = css_tree->append_column("CSS Value", *value) - 1; + col = css_tree->get_column(addCol); if (col) { col->add_attribute(value->property_text(), _mColumns._colValue); col->add_attribute(value->property_strikethrough(), _mColumns._colStrike); @@ -579,7 +579,7 @@ void StyleDialog::_readStyleElement() } } if (show) { - _styleBox.pack_start(*CSSSelectorContainer, Gtk::PACK_EXPAND_WIDGET); + _styleBox.pack_start(*css_selector_container, Gtk::PACK_EXPAND_WIDGET); } } gint selectorpos = -1; @@ -623,28 +623,28 @@ void StyleDialog::_readStyleElement() g_warning("Glade file loading failed for filter effect dialog"); return; } - Gtk::Box *CSSSelectorContainer; - _builder->get_widget("CSSSelectorContainer", CSSSelectorContainer); - Gtk::Label *CSSSelector; - _builder->get_widget("CSSSelector", CSSSelector); - Gtk::EventBox *CSSSelectorEventAdd; - _builder->get_widget("CSSSelectorEventAdd", CSSSelectorEventAdd); - CSSSelectorEventAdd->add_events(Gdk::BUTTON_RELEASE_MASK); - CSSSelector->set_text(selector); - Gtk::TreeView *CSSTree; - _builder->get_widget("CSSTree", CSSTree); + Gtk::Box *css_selector_container; + _builder->get_widget("CSSSelectorContainer", css_selector_container); + Gtk::Label *css_selector; + _builder->get_widget("CSSSelector", css_selector); + Gtk::EventBox *css_selector_event_add; + _builder->get_widget("CSSSelectorEventAdd", css_selector_event_add); + css_selector_event_add->add_events(Gdk::BUTTON_RELEASE_MASK); + css_selector->set_text(selector); + Gtk::TreeView *css_tree; + _builder->get_widget("CSSTree", css_tree); Glib::RefPtr<Gtk::TreeStore> store = Gtk::TreeStore::create(_mColumns); - CSSTree->set_model(store); + css_tree->set_model(store); Inkscape::UI::Widget::IconRenderer * addRenderer = manage(new Inkscape::UI::Widget::IconRenderer()); addRenderer->add_icon("edit-delete"); - int addCol = CSSTree->append_column("Delete row", *addRenderer) - 1; - Gtk::TreeViewColumn *col = CSSTree->get_column(addCol); + int addCol = css_tree->append_column("Delete row", *addRenderer) - 1; + Gtk::TreeViewColumn *col = css_tree->get_column(addCol); if (col) { addRenderer->signal_activated().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_onPropDelete), store)); } Gtk::CellRendererToggle *active = Gtk::manage(new Gtk::CellRendererToggle); - addCol = CSSTree->append_column("Active Property", *active) - 1; - col = CSSTree->get_column(addCol); + addCol = css_tree->append_column("Active Property", *active) - 1; + col = css_tree->get_column(addCol); if (col) { col->add_attribute(active->property_active(), _mColumns._colActive); active->signal_toggled().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_activeToggled), store)); @@ -653,9 +653,9 @@ void StyleDialog::_readStyleElement() Gtk::CellRendererText *label = Gtk::manage(new Gtk::CellRendererText()); label->property_placeholder_text() = _("property"); label->property_editable() = true; - label->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_nameEdited), store)); - addCol = CSSTree->append_column("CSS Selector", *label) - 1; - col = CSSTree->get_column(addCol); + label->signal_edited().connect(sigc::bind< Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_nameEdited), store)); + addCol = css_tree->append_column("CSS Selector", *label) - 1; + col = css_tree->get_column(addCol); if (col) { col->add_attribute(label->property_text(), _mColumns._colName); } @@ -663,9 +663,9 @@ void StyleDialog::_readStyleElement() value->property_editable() = true; value->signal_edited().connect(sigc::bind<Glib::RefPtr<Gtk::TreeStore> >(sigc::mem_fun(*this, &StyleDialog::_valueEdited), store)); value->property_placeholder_text() = _("value"); - CSSTree->set_focus_vadjustment(_scrolledWindow.get_vadjustment()); - addCol = CSSTree->append_column("CSS Value", *value) - 1; - col = CSSTree->get_column(addCol); + css_tree->set_focus_vadjustment(_scrolledWindow.get_vadjustment()); + addCol = css_tree->append_column("CSS Value", *value) - 1; + col = css_tree->get_column(addCol); if (col) { col->add_attribute(value->property_text(), _mColumns._colValue); col->add_attribute(value->property_strikethrough(), _mColumns._colStrike); @@ -683,7 +683,7 @@ void StyleDialog::_readStyleElement() } } std::map<Glib::ustring, Glib::ustring> attr_prop_styleshet = parseStyle(style); - CSSSelectorEventAdd->signal_button_release_event().connect( + css_selector_event_add->signal_button_release_event().connect( sigc::bind<Glib::RefPtr<Gtk::TreeStore>, Glib::ustring, gint>( sigc::mem_fun(*this, &StyleDialog::_addRow), store, selector, selectorpos)); @@ -717,7 +717,7 @@ void StyleDialog::_readStyleElement() row[_mColumns._colStrike] = true; } } - _styleBox.pack_start(*CSSSelectorContainer, Gtk::PACK_EXPAND_WIDGET); + _styleBox.pack_start(*css_selector_container, Gtk::PACK_EXPAND_WIDGET); } } _mainBox.show_all_children(); @@ -862,6 +862,17 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store, Glib::u g_debug("StyleDialog::_writeStyleElement(): | %s |", styleContent.c_str()); } +bool StyleDialog::_addRow(GdkEventButton *evt, Glib::RefPtr<Gtk::TreeStore> store, Glib::ustring selector, gint pos) { + Gtk::TreeModel::Row rowadded = *(store->append()); + rowadded[_mColumns._colSelector] = selector; + rowadded[_mColumns._colSelectorPos] = pos; + rowadded[_mColumns._colActive] = false; + rowadded[_mColumns._colName] = ""; + rowadded[_mColumns._colValue] = ""; + rowadded[_mColumns._colStrike] = false; + return false; +} + /** * @brief StyleDialog::nameEdited @@ -872,6 +883,7 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store, Glib::u void StyleDialog::_nameEdited (const Glib::ustring& path, const Glib::ustring& name, Glib::RefPtr<Gtk::TreeStore> store) { Gtk::TreeModel::Row row = *store->get_iter(path); + Gtk::TreeModel::Path pathel = (Gtk::TreeModel::Path)*store->get_iter(path); if(row) { Glib::ustring value = row[_mColumns._colValue]; Glib::ustring selector = row[_mColumns._colSelector]; @@ -883,16 +895,6 @@ void StyleDialog::_nameEdited (const Glib::ustring& path, const Glib::ustring& n } } -bool StyleDialog::_addRow(GdkEventButton *evt, Glib::RefPtr<Gtk::TreeStore> store, Glib::ustring selector, gint pos) { - Gtk::TreeModel::Row rowadded = *(store->append()); - rowadded[_mColumns._colSelector] = selector; - rowadded[_mColumns._colSelectorPos] = pos; - rowadded[_mColumns._colActive] = false; - rowadded[_mColumns._colName] = ""; - rowadded[_mColumns._colValue] = ""; - rowadded[_mColumns._colStrike] = false; - return false; -} /** * @brief StyleDialog::valueEdited |
