From c0317efc1e86f75ee72d6f65b978bfe634bd3b2c Mon Sep 17 00:00:00 2001 From: Patrick Storz Date: Wed, 7 Aug 2019 02:28:50 +0200 Subject: Re-implement get_param() locally using get_widgets() --- src/extension/extension.cpp | 93 ++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 48 deletions(-) (limited to 'src/extension/extension.cpp') diff --git a/src/extension/extension.cpp b/src/extension/extension.cpp index 1da909594..256f1d99a 100644 --- a/src/extension/extension.cpp +++ b/src/extension/extension.cpp @@ -410,26 +410,58 @@ const char *Extension::get_translation(const char *msgid, const char *msgctxt) { } } +/** + \brief A function to get the parameters in a string form + \return An array with all the parameters in it. + +*/ +void +Extension::paramListString (std::list &retlist) +{ + // first collect all widgets in the current extension + std::vector widget_list; + for (auto widget : _widgets) { + widget->get_widgets(widget_list); + } + + // then build a list of parameter strings from parameter names and values, as '--name=value' + for (auto widget : widget_list) { + InxParameter *parameter = dynamic_cast(widget); // filter InxParameters from InxWidgets + if (parameter) { + const char *name = parameter->name(); + std::string value = parameter->value_to_string(); + + if (name && !value.empty()) { // TODO: Shouldn't empty string values be allowed? + std::string parameter_string; + parameter_string += "--"; + parameter_string += name; + parameter_string += "="; + parameter_string += value; + retlist.push_back(parameter_string); + } + } + } + + return; +} + InxParameter *Extension::get_param(const gchar *name) { - if (name == nullptr) { + if (!name || _widgets.empty()) { throw Extension::param_not_exist(); } - if (this->_widgets.empty()) { - throw Extension::param_not_exist(); + + // first collect all widgets in the current extension + std::vector widget_list; + for (auto widget : _widgets) { + widget->get_widgets(widget_list); } - for(auto widget : _widgets) { + // then search for a parameter with a matching name + for (auto widget : widget_list) { InxParameter *parameter = dynamic_cast(widget); // filter InxParameters from InxWidgets - if (parameter) { - if (!strcmp(parameter->name(), name)) { - return parameter; - } else { - InxParameter *subparam = parameter->get_param(name); - if (subparam) { - return subparam; - } - } + if (parameter && !strcmp(parameter->name(), name)) { + return parameter; } } @@ -758,41 +790,6 @@ Extension::autogui (SPDocument *doc, Inkscape::XML::Node *node, sigc::signal &retlist) -{ - // first collect all widgets in the current extension - std::vector widget_list; - for (auto widget : _widgets) { - widget->get_widgets(widget_list); - } - - // then build a list of parameter strings from parameter names and values, as '--name=value' - for (auto widget : widget_list) { - const InxParameter *parameter = dynamic_cast(widget); // filter InxParameters from InxWidgets - if (parameter) { - const char *name = parameter->name(); - std::string value = parameter->value_to_string(); - - if (name && !value.empty()) { // TODO: Shouldn't empty string values be allowed? - std::string parameter_string; - parameter_string += "--"; - parameter_string += name; - parameter_string += "="; - parameter_string += value; - retlist.push_back(parameter_string); - } - } - } - - return; -} - /* Extension editor dialog stuff */ Gtk::VBox * -- cgit v1.2.3