summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/styledialog.cpp
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-05-01 19:44:35 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-06-02 09:50:16 +0000
commit561899728b334830f9e0299b4bf0d40448632f64 (patch)
treee6c1e2a8e9b97c7301e35893aedd473dcae4ac2c /src/ui/dialog/styledialog.cpp
parentfix merge (diff)
downloadinkscape-561899728b334830f9e0299b4bf0d40448632f64.tar.gz
inkscape-561899728b334830f9e0299b4bf0d40448632f64.zip
working on new UI
Diffstat (limited to 'src/ui/dialog/styledialog.cpp')
-rw-r--r--src/ui/dialog/styledialog.cpp143
1 files changed, 84 insertions, 59 deletions
diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp
index a8994047a..17a448d2f 100644
--- a/src/ui/dialog/styledialog.cpp
+++ b/src/ui/dialog/styledialog.cpp
@@ -13,6 +13,7 @@
*/
#include "styledialog.h"
+#include "io/resource.h"
#include "verbs.h"
#include "selection.h"
#include "attribute-rel-svg.h"
@@ -25,6 +26,7 @@
#include "xml/attribute-record.h"
#include "xml/node-observer.h"
+#include <gtkmm/builder.h>
#include <glibmm/i18n.h>
#include <glibmm/regex.h>
@@ -164,30 +166,6 @@ StyleDialog::_nodeChanged( Inkscape::XML::Node &object ) {
_filterRow();
}
-StyleDialog::TreeStore::TreeStore()
-= default;
-
-
-// This is only here to handle updating style element after a drag and drop.
-void
-StyleDialog::TreeStore::on_row_deleted(const TreeModel::Path& path)
-{
- if (_styledialog->_updating) return; // Don't write if we deleted row (other than from DND)
-
- g_debug("on_row_deleted");
-
- _styledialog->_writeStyleElement();
-}
-
-
-Glib::RefPtr<StyleDialog::TreeStore> StyleDialog::TreeStore::create(StyleDialog *styledialog)
-{
- StyleDialog::TreeStore * store = new StyleDialog::TreeStore();
- store->_styledialog = styledialog;
- store->set_column_types( store->_styledialog->_mColumns );
- return Glib::RefPtr<StyleDialog::TreeStore>( store );
-}
-
/**
* Constructor
* A treeview and a set of two buttons are added to the dialog. _addSelector
@@ -201,25 +179,12 @@ StyleDialog::StyleDialog() :
_desktopTracker()
{
g_debug("StyleDialog::StyleDialog");
- _store = TreeStore::create(this);
- _modelfilter = Gtk::TreeModelFilter::create(_store);
- _modelfilter->set_visible_column(_mColumns._colVisible);
- _treeView.set_model(_modelfilter);
- _treeView.set_headers_visible(false);
- _treeView.set_grid_lines (Gtk::TREE_VIEW_GRID_LINES_HORIZONTAL);
- _treeView.enable_model_drag_source();
- _treeView.enable_model_drag_dest( Gdk::ACTION_MOVE );
- _treeView.append_column("CSS Selector", _mColumns._colData);
-
// Pack widgets
- _paned.set_orientation(Gtk::ORIENTATION_VERTICAL);
- _paned.pack1(_mainBox, Gtk::SHRINK);
+ _mainBox.pack_start(_scrolledWindow, Gtk::PACK_EXPAND_WIDGET);
+ _scrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+ _scrolledWindow.add(_styleBox);
_mainBox.set_orientation(Gtk::ORIENTATION_VERTICAL);
-
- _mainBox.pack_start(_treeView, Gtk::PACK_EXPAND_WIDGET);
- _getContents()->pack_start(_paned, Gtk::PACK_EXPAND_WIDGET);
-
-
+ _getContents()->pack_start(_mainBox, Gtk::PACK_EXPAND_WIDGET);
// Document & Desktop
_desktop_changed_connection = _desktopTracker.connectDesktopChanged(
sigc::mem_fun(*this, &StyleDialog::_handleDesktopChanged) );
@@ -306,6 +271,18 @@ Inkscape::XML::Node* StyleDialog::_getStyleTextNode()
return textNode;
}
+void StyleDialog::_hideRootToggle( Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter)
+{
+ //Get the value from the model and show it appropriately in the view:
+ Gtk::CellRendererToggle* toggle = dynamic_cast<Gtk::CellRendererToggle*>(renderer);
+ Gtk::TreeModel::Row row = *iter;
+ Gtk::TreeModel::iterator parent = row->parent();
+ if (parent) {
+ toggle->set_visible(true);
+ } else {
+ toggle->set_visible(false);
+ }
+}
/**
* Fill the Gtk::TreeStore from the svg:style element.
@@ -353,10 +330,10 @@ void StyleDialog::_readStyleElement()
_updating = false;
return;
}
- _store->clear();
for (unsigned i = 0; i < tokens.size()-1; i += 2) {
+
Glib::ustring selector = tokens[i];
REMOVE_SPACES(selector); // Remove leading/trailing spaces
std::vector<Glib::ustring> tokensplus = Glib::Regex::split_simple("[,]+", selector);
@@ -377,20 +354,66 @@ void StyleDialog::_readStyleElement()
std::cerr << "StyleDialog::_readStyleElement: Missing values "
"for last selector!" << std::endl;
}
- Gtk::TreeModel::Row row = *(_store->append());
- row[_mColumns._colData] = selector;
- row[_mColumns._colObj] = objVec;
- row[_mColumns._colVisible] = true;
- row[_mColumns._colProperties] = properties;
+ Glib::ustring gladefile = get_filename(Inkscape::IO::Resource::UIS, "dialog-css.ui");
+ Glib::RefPtr<Gtk::Builder> _builder;
+ try {
+ _builder = Gtk::Builder::create_from_file(gladefile);
+ } catch (const Glib::Error &ex) {
+ 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);
+ CSSSelector->set_text(selector);
+ Gtk::TreeView *CSSTree;
+ _builder->get_widget("CSSTree", CSSTree);
+ Glib::RefPtr<Gtk::TreeStore> store = Gtk::TreeStore::create(_mColumns);
+ CSSTree->set_model(store);
+ Gtk::CellRendererToggle *active = Gtk::manage(new Gtk::CellRendererToggle);
+ int addCol = CSSTree->append_column("", *active) - 1;
+ Gtk::TreeViewColumn *col = CSSTree->get_column(addCol);
+ if (col) {
+ col->add_attribute(active->property_active(), _mColumns._colActive);
+ }
+ //col->set_cell_data_func(*active, sigc::mem_fun(*this, &StyleDialog::_hideRootToggle));
+ CSSTree->set_headers_visible(false);
+ Gtk::CellRendererText *label = Gtk::manage(new Gtk::CellRendererText());
+ CSSTree->set_reorderable(false);
+ label->property_editable() = true;
+ addCol = CSSTree->append_column("CSS Selector", *label) - 1;
+ col = CSSTree->get_column(addCol);
+ if (col) {
+ col->add_attribute(label->property_text(), _mColumns._colLabel);
+ }
+ Gtk::CellRendererText *value = Gtk::manage(new Gtk::CellRendererText());
+ CSSTree->set_reorderable(false);
+ value->property_editable() = true;
+ addCol = CSSTree->append_column("CSS Selector", *value) - 1;
+ col = CSSTree->get_column(addCol);
+ if (col) {
+ col->add_attribute(value->property_text(), _mColumns._colValue);
+ }
std::vector<Glib::ustring> properties_data = Glib::Regex::split_simple(";", properties);
for (auto property : properties_data) {
property = REMOVE_SPACES(property);
- Gtk::TreeModel::Row childrow = *(_store->append(row->children()));
- childrow[_mColumns._colData] = Glib::ustring(property);
- childrow[_mColumns._colObj] = {};
- childrow[_mColumns._colProperties] = ""; // Unused
- childrow[_mColumns._colVisible] = true; // Unused
+ if (!property.empty()) {
+ std::vector<Glib::ustring> pairdata = Glib::Regex::split_simple(":", property);
+ if (pairdata.size() == 2) {
+ Gtk::TreeModel::Row row = *(store->append());
+ row[_mColumns._colActive] = true;
+ row[_mColumns._colSelector] = selector;
+ row[_mColumns._colLabel] = pairdata[0];
+ row[_mColumns._colValue] = pairdata[1];
+ }
+ }
}
+ CSSSelectorContainer->unparent();
+ _styleBox.set_orientation(Gtk::ORIENTATION_VERTICAL);
+ _styleBox.pack_start(*CSSSelectorContainer, Gtk::PACK_EXPAND_WIDGET);
+ _mainBox.show_all_children();
+
}
_updating = false;
}
@@ -406,8 +429,11 @@ void StyleDialog::_writeStyleElement()
_updating = true;
Glib::ustring styleContent;
- for (auto& row: _store->children()) {
+/* for (auto& row: _store->children()) {
Glib::ustring selector = row[_mColumns._colData];
+ if (!row[_mColumns._colExpand]) {
+ selector = selector.erase(selector.size()-1);
+ } */
/*
REMOVE_SPACES(selector);
/* size_t len = selector.size();
@@ -415,8 +441,8 @@ void StyleDialog::_writeStyleElement()
selector.erase(len-1);
}
row[_mColumns._colData] = selector; */
- styleContent = styleContent + selector + " { " + row[_mColumns._colProperties] + " }\n";
- }
+ /* styleContent = styleContent + selector + " { " + row[_mColumns._colProperties] + " }\n";
+ } */
// We could test if styleContent is empty and then delete the style node here but there is no
// harm in keeping it around ...
@@ -429,7 +455,6 @@ void StyleDialog::_writeStyleElement()
g_debug("StyleDialog::_writeStyleElement(): | %s |", styleContent.c_str());
}
-
void StyleDialog::_addWatcherRecursive(Inkscape::XML::Node *node) {
g_debug("StyleDialog::_addWatcherRecursive()");
@@ -598,13 +623,13 @@ void StyleDialog::_filterRow()
std::cerr << "StyleDialog::_selectRow: SP_ACTIVE_DESKTOP != getDesktop()" << std::endl;
return;
}
- Gtk::TreeModel::Children children = _store->children();
+ //Gtk::TreeModel::Children children = _store->children();
Inkscape::Selection* selection = getDesktop()->getSelection();
SPObject *obj = nullptr;
if(selection->objects().size() == 1) {
obj = selection->objects().back();
}
- for (auto row : children) {
+ /* for (auto row : children) {
std::vector<SPObject *> objVec = row[_mColumns._colObj];
if (obj) {
for (auto & i : objVec) {
@@ -617,7 +642,7 @@ void StyleDialog::_filterRow()
}
}
}
- _modelfilter->refilter();
+ _modelfilter->refilter(); */
}
} // namespace Dialog