summaryrefslogtreecommitdiffstats
path: root/src/extension/prefdialog/parameter-notebook.cpp
diff options
context:
space:
mode:
authorPatrick Storz <eduard.braun2@gmx.de>2019-08-06 20:30:54 +0000
committerPatrick Storz <eduard.braun2@gmx.de>2019-08-31 14:50:39 +0000
commit2bdffba8f4da0fe64d4a5b85096d057d389abef8 (patch)
tree24cad4825a1a74efca7d7607724b89fab87e2f4d /src/extension/prefdialog/parameter-notebook.cpp
parentAccept parameter type "bool" (diff)
downloadinkscape-2bdffba8f4da0fe64d4a5b85096d057d389abef8.tar.gz
inkscape-2bdffba8f4da0fe64d4a5b85096d057d389abef8.zip
Make parameter string generation a job of Inkscape::Extension
For this take a first step towards properly tracking children of each parameter and provide functions to look up all widgets.
Diffstat (limited to 'src/extension/prefdialog/parameter-notebook.cpp')
-rw-r--r--src/extension/prefdialog/parameter-notebook.cpp73
1 files changed, 29 insertions, 44 deletions
diff --git a/src/extension/prefdialog/parameter-notebook.cpp b/src/extension/prefdialog/parameter-notebook.cpp
index 50c21b3eb..8566a6dfd 100644
--- a/src/extension/prefdialog/parameter-notebook.cpp
+++ b/src/extension/prefdialog/parameter-notebook.cpp
@@ -46,7 +46,7 @@ ParamNotebook::ParamNotebookPage::ParamNotebookPage(Inkscape::XML::Node *xml, In
if (!strcmp(chname, "param") || !strcmp(chname, "_param")) {
InxParameter *param = InxParameter::make(child_repr, ext);
if (param) {
- parameters.push_back(param);
+ _children.push_back(param);
}
}
@@ -58,15 +58,8 @@ ParamNotebook::ParamNotebookPage::ParamNotebookPage(Inkscape::XML::Node *xml, In
ParamNotebook::ParamNotebookPage::~ParamNotebookPage ()
{
// destroy parameters
- for (auto parameter : parameters) {
- delete parameter;
- }
-}
-
-void ParamNotebook::ParamNotebookPage::build_param_string_list(std::list <std::string> &list) const
-{
- for (auto parameter : parameters) {
- parameter->build_param_string_list(list);
+ for (auto child : _children) {
+ delete child;
}
}
@@ -86,16 +79,16 @@ Gtk::Widget *ParamNotebook::ParamNotebookPage::get_widget(SPDocument *doc, Inksc
vbox->set_spacing(GUI_BOX_SPACING);
// add parameters onto page (if any)
- for (auto parameter : parameters) {
- Gtk::Widget *parameter_widget = parameter->get_widget(doc, node, changeSignal);
- if (parameter_widget) {
- int indent = parameter->get_indent();
- parameter_widget->set_margin_start(indent *GUI_INDENTATION);
- vbox->pack_start(*parameter_widget, false, false, 0);
-
- const char *tooltip = parameter->get_tooltip();
+ for (auto child : _children) {
+ Gtk::Widget *child_widget = child->get_widget(doc, node, changeSignal);
+ if (child_widget) {
+ int indent = child->get_indent();
+ child_widget->set_margin_start(indent *GUI_INDENTATION);
+ vbox->pack_start(*child_widget, false, false, 0);
+
+ const char *tooltip = child->get_tooltip();
if (tooltip) {
- parameter_widget->set_tooltip_text(tooltip);
+ child_widget->set_tooltip_text(tooltip);
}
}
}
@@ -111,14 +104,14 @@ InxParameter *ParamNotebook::ParamNotebookPage::get_param(const char *name)
if (name == nullptr) {
throw Extension::param_not_exist();
}
- if (this->parameters.empty()) {
- // the list of parameters is empty
+ if (_children.empty()) {
throw Extension::param_not_exist();
}
- for (auto param : parameters) {
- if (!strcmp(param->name(), name)) {
- return param;
+ for (auto child : _children) {
+ InxParameter *parameter = dynamic_cast<InxParameter *>(child);
+ if (parameter && !strcmp(parameter->name(), name)) {
+ return parameter;
}
}
@@ -142,14 +135,17 @@ ParamNotebook::ParamNotebook(Inkscape::XML::Node *xml, Inkscape::Extension::Exte
page = new ParamNotebookPage(child_repr, ext);
if (page) {
- pages.push_back(page);
+ _pages.push_back(page);
}
}
child_repr = child_repr->next();
}
}
- if (pages.empty()) {
+ if (_pages.empty()) {
g_warning("No (valid) pages for parameter '%s' in extension '%s'", _name, _extension->get_id());
+ } else {
+ // TODO: We should fully replace _pages with _children eventually; only difference is pointer type.
+ _children.insert(_children.end(), _pages.begin(), _pages.end());
}
// get value (initialize with value of first page if pref is empty)
@@ -159,8 +155,8 @@ ParamNotebook::ParamNotebook(Inkscape::XML::Node *xml, Inkscape::Extension::Exte
g_free(pref_name);
if (_value.empty()) {
- if (!pages.empty()) {
- _value = pages[0]->_name;
+ if (!_pages.empty()) {
+ _value = _pages[0]->_name;
}
}
}
@@ -168,7 +164,7 @@ ParamNotebook::ParamNotebook(Inkscape::XML::Node *xml, Inkscape::Extension::Exte
ParamNotebook::~ParamNotebook ()
{
//destroy pages
- for (auto page : pages) {
+ for (auto page : _pages) {
delete page;
}
}
@@ -187,8 +183,8 @@ ParamNotebook::~ParamNotebook ()
*/
const Glib::ustring& ParamNotebook::set(const int in, SPDocument * /*doc*/, Inkscape::XML::Node * /*node*/)
{
- int i = in < pages.size() ? in : pages.size()-1;
- ParamNotebookPage *page = pages[i];
+ int i = in < _pages.size() ? in : _pages.size()-1;
+ ParamNotebookPage *page = _pages[i];
if (page) {
_value = page->_name;
@@ -202,17 +198,6 @@ const Glib::ustring& ParamNotebook::set(const int in, SPDocument * /*doc*/, Inks
return _value;
}
-void ParamNotebook::build_param_string_list(std::list <std::string> &list) const
-{
- // call base-class method to add the parameter string for the notebook itself
- InxParameter::build_param_string_list(list);
-
- // iterate over notebook pages
- for (auto page : pages) {
- page->build_param_string_list(list);
- }
-}
-
std::string ParamNotebook::value_to_string() const
{
return _value;
@@ -266,7 +251,7 @@ InxParameter *ParamNotebook::get_param(const char *name)
if (name == nullptr) {
throw Extension::param_not_exist();
}
- for (auto page : pages) {
+ for (auto page : _pages) {
InxParameter *subparam = page->get_param(name);
if (subparam) {
return subparam;
@@ -293,7 +278,7 @@ Gtk::Widget *ParamNotebook::get_widget(SPDocument *doc, Inkscape::XML::Node *nod
// add pages (if any) and switch to previously selected page
int current_page = -1;
int selected_page = -1;
- for (auto page : pages) {
+ for (auto page : _pages) {
current_page++;
Gtk::Widget *page_widget = page->get_widget(doc, node, changeSignal);