summaryrefslogtreecommitdiffstats
path: root/src/extension/param/description.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2017-04-26 09:16:33 +0000
committerjabiertxof <info@marker.es>2017-04-26 09:16:33 +0000
commitb84137c431a7e236131f71a17f8f2c71e26c6162 (patch)
tree04cbe26ab83d5a7ddf1fde8d2da153cc9039306b /src/extension/param/description.cpp
parentAllow set and reset default values of LPE parameters (diff)
parentImprove 0.92 support for Clone Original LPE (diff)
downloadinkscape-b84137c431a7e236131f71a17f8f2c71e26c6162.tar.gz
inkscape-b84137c431a7e236131f71a17f8f2c71e26c6162.zip
Update to trunk
(bzr r15620.1.2)
Diffstat (limited to 'src/extension/param/description.cpp')
-rw-r--r--src/extension/param/description.cpp80
1 files changed, 40 insertions, 40 deletions
diff --git a/src/extension/param/description.cpp b/src/extension/param/description.cpp
index 480a0898a..cf94918f7 100644
--- a/src/extension/param/description.cpp
+++ b/src/extension/param/description.cpp
@@ -29,41 +29,60 @@ namespace Extension {
/** \brief Initialize the object, to do that, copy the data. */
ParamDescription::ParamDescription(const gchar * name,
- const gchar * guitext,
- const gchar * desc,
- const Parameter::_scope_t scope,
- bool gui_hidden,
- const gchar * gui_tip,
+ const gchar * text,
+ const gchar * description,
+ bool hidden,
int indent,
Inkscape::Extension::Extension * ext,
Inkscape::XML::Node * xml,
AppearanceMode mode)
- : Parameter(name, guitext, desc, scope, gui_hidden, gui_tip, indent, ext)
+ : Parameter(name, text, description, hidden, indent, ext)
, _value(NULL)
, _mode(mode)
- , _preserve_whitespace(false)
{
- Glib::ustring defaultval;
+ // construct the text content by concatenating all (non-empty) text nodes,
+ // removing all other nodes (e.g. comment nodes) and replacing <extension:br> elements with "<br/>"
+ Glib::ustring value;
Inkscape::XML::Node * cur_child = xml->firstChild();
while (cur_child != NULL) {
if (cur_child->type() == XML::TEXT_NODE && cur_child->content() != NULL) {
- defaultval += cur_child->content();
+ value += cur_child->content();
} else if (cur_child->type() == XML::ELEMENT_NODE && !g_strcmp0(cur_child->name(), "extension:br")) {
- defaultval += "<br/>";
+ value += "<br/>";
}
cur_child = cur_child->next();
}
- if (defaultval != Glib::ustring("")) {
- _value = g_strdup(defaultval.c_str());
+ // if there is no text content we can return immediately (the description will be invisible)
+ if (value == Glib::ustring("")) {
+ return;
}
- _context = xml->attribute("msgctxt");
-
+ // do replacements in the source string to account for the attribute xml:space="preserve"
+ // (those should match replacements potentially performed by xgettext to allow for proper translation)
if (g_strcmp0(xml->attribute("xml:space"), "preserve") == 0) {
- _preserve_whitespace = true;
+ // xgettext copies the source string verbatim in this case, so no changes needed
+ } else {
+ // remove all whitespace from start/end of string and replace intermediate whitespace with a single space
+ value = Glib::Regex::create("^\\s+|\\s+$")->replace_literal(value, 0, "", (Glib::RegexMatchFlags)0);
+ value = Glib::Regex::create("\\s+")->replace_literal(value, 0, " ", (Glib::RegexMatchFlags)0);
+ }
+
+ // translate if underscored version (_param) was used
+ if (g_str_has_prefix(xml->name(), "extension:_")) {
+ const gchar * context = xml->attribute("msgctxt");
+ if (context != NULL) {
+ value = g_dpgettext2(NULL, context, value.c_str());
+ } else {
+ value = _(value.c_str());
+ }
}
+ // finally replace all remaining <br/> with a real newline character
+ value = Glib::Regex::create("<br/>")->replace_literal(value, 0, "\n", (Glib::RegexMatchFlags)0);
+
+ _value = g_strdup(value.c_str());
+
return;
}
@@ -71,44 +90,25 @@ ParamDescription::ParamDescription(const gchar * name,
Gtk::Widget *
ParamDescription::get_widget (SPDocument * /*doc*/, Inkscape::XML::Node * /*node*/, sigc::signal<void> * /*changeSignal*/)
{
- if (_gui_hidden) {
+ if (_hidden) {
return NULL;
}
if (_value == NULL) {
return NULL;
}
- Glib::ustring newguitext = _value;
-
- // do replacements in the source string matching those performed by xgettext to allow for proper translation
- if (_preserve_whitespace) {
- // xgettext copies the source string verbatim in this case, so no changes needed
- } else {
- // remove all whitespace from start/end of string and replace intermediate whitespace with a single space
- newguitext = Glib::Regex::create("^\\s+|\\s+$")->replace_literal(newguitext, 0, "", (Glib::RegexMatchFlags)0);
- newguitext = Glib::Regex::create("\\s+")->replace_literal(newguitext, 0, " ", (Glib::RegexMatchFlags)0);
- }
-
- // translate
- if (_context != NULL) {
- newguitext = g_dpgettext2(NULL, _context, newguitext.c_str());
- } else {
- newguitext = _(newguitext.c_str());
- }
-
- // finally replace all remaining <br/> with a real newline character
- newguitext = Glib::Regex::create("<br/>")->replace_literal(newguitext, 0, "\n", (Glib::RegexMatchFlags)0);
+ Glib::ustring newtext = _value;
Gtk::Label * label = Gtk::manage(new Gtk::Label());
if (_mode == HEADER) {
- label->set_markup(Glib::ustring("<b>") + Glib::Markup::escape_text(newguitext) + Glib::ustring("</b>"));
+ label->set_markup(Glib::ustring("<b>") + Glib::Markup::escape_text(newtext) + Glib::ustring("</b>"));
label->set_margin_top(5);
label->set_margin_bottom(5);
} else if (_mode == URL) {
- Glib::ustring escaped_url = Glib::Markup::escape_text(newguitext);
+ Glib::ustring escaped_url = Glib::Markup::escape_text(newtext);
label->set_markup(Glib::ustring::compose("<a href='%1'>%1</a>", escaped_url));
} else {
- label->set_text(newguitext);
+ label->set_text(newtext);
}
label->set_line_wrap();
#if (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION >= 16)
@@ -125,7 +125,7 @@ ParamDescription::get_widget (SPDocument * /*doc*/, Inkscape::XML::Node * /*node
// - Here we set a lower limit of GUI_MAX_LINE_LENGTH characters per line that long texts will always use
// This means texts can not shrink anymore (they can still grow, though) and it's also necessary
// to prevent https://bugzilla.gnome.org/show_bug.cgi?id=773572
- int len = newguitext.length();
+ int len = newtext.length();
label->set_width_chars(len > Parameter::GUI_MAX_LINE_LENGTH ? Parameter::GUI_MAX_LINE_LENGTH : len);
label->show();