Code

Merge from trunk
[inkscape.git] / src / selection-describer.cpp
index bd84030543fb2a6a62b45046a16fe464c1d28613..9321ea0efba3a742ddb67ffe6e8805afad8de04f 100644 (file)
@@ -39,7 +39,9 @@ const gchar *
 type2term(GType type)
 {
     if (type == SP_TYPE_ANCHOR)
-       // TRANSLATORS: only translate and put "Link" in the translation. It means internet link (anchor)
+        //TRANSLATORS: only translate "string" in "context|string".
+        // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS
+       // "Link" means internet link (anchor)
         { return Q_("web|Link"); }
     if (type == SP_TYPE_CIRCLE)
         { return _("Circle"); }
@@ -65,9 +67,10 @@ type2term(GType type)
         { return _("3D Box"); }
     if (type == SP_TYPE_TEXT)
         { return _("Text"); }
-    // TRANSLATORS: only translate "string" in "context|string".
-    // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS
     if (type == SP_TYPE_USE)
+        // TRANSLATORS: only translate "string" in "context|string".
+        // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS
+        // "Clone" is a noun, type of object
         { return Q_("object|Clone"); }
     if (type == SP_TYPE_ARC)
         { return _("Ellipse"); }
@@ -94,27 +97,38 @@ GSList *collect_terms (GSList *items)
 
 namespace Inkscape {
 
-SelectionDescriber::SelectionDescriber(Inkscape::Selection *selection, MessageStack *stack)
-: _context(stack)
+SelectionDescriber::SelectionDescriber(Inkscape::Selection *selection, MessageStack *stack, char *when_selected, char *when_nothing)
+    : _context(stack),
+      _when_selected (when_selected),
+      _when_nothing (when_nothing)
 {
     _selection_changed_connection = new sigc::connection (
              selection->connectChanged(
                  sigc::mem_fun(*this, &SelectionDescriber::_updateMessageFromSelection)));
+    _selection_modified_connection = new sigc::connection (
+             selection->connectModified(
+                 sigc::mem_fun(*this, &SelectionDescriber::_selectionModified)));
     _updateMessageFromSelection(selection);
 }
 
 SelectionDescriber::~SelectionDescriber()
 {
     _selection_changed_connection->disconnect();
+    _selection_modified_connection->disconnect();
     delete _selection_changed_connection;
+    delete _selection_modified_connection;
+}
+
+void SelectionDescriber::_selectionModified(Inkscape::Selection *selection, guint /*flags*/)
+{
+    _updateMessageFromSelection(selection);
 }
 
 void SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *selection) {
     GSList const *items = selection->itemList();
 
-    char const *when_selected = _("Click selection to toggle scale/rotation handles");
     if (!items) { // no items
-        _context.set(Inkscape::NORMAL_MESSAGE, _("No objects selected. Click, Shift+click, or drag around objects to select."));
+        _context.set(Inkscape::NORMAL_MESSAGE, _when_nothing);
     } else {
         SPItem *item = SP_ITEM(items->data);
         SPObject *layer = selection->desktop()->layerForObject (SP_OBJECT (item));
@@ -144,7 +158,7 @@ void SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *select
 
         // Parent name
         SPObject *parent = SP_OBJECT_PARENT (item);
-        gchar *parent_label = SP_OBJECT_ID(parent);
+        gchar const *parent_label = parent->getId();
         char *quoted_parent_label = xml_quote_strdup(parent_label);
         gchar *parent_name = g_strdup_printf(_("<i>%s</i>"), quoted_parent_label);
         g_free(quoted_parent_label);
@@ -172,18 +186,18 @@ void SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *select
             if (SP_IS_USE(item) || (SP_IS_OFFSET(item) && SP_OFFSET (item)->sourceHref)) {
                 _context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s. %s.",
                               item_desc, in_phrase,
-                              _("Use <b>Shift+D</b> to look up original"), when_selected);
+                              _("Use <b>Shift+D</b> to look up original"), _when_selected);
             } else if (SP_IS_TEXT_TEXTPATH(item)) {
                 _context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s. %s.",
                               item_desc, in_phrase,
-                              _("Use <b>Shift+D</b> to look up path"), when_selected);
+                              _("Use <b>Shift+D</b> to look up path"), _when_selected);
             } else if (SP_IS_FLOWTEXT(item) && !SP_FLOWTEXT(item)->has_internal_frame()) {
                 _context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s. %s.",
                               item_desc, in_phrase,
-                              _("Use <b>Shift+D</b> to look up frame"), when_selected);
+                              _("Use <b>Shift+D</b> to look up frame"), _when_selected);
             } else {
                 _context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s.",
-                              item_desc, in_phrase, when_selected);
+                              item_desc, in_phrase, _when_selected);
             }
             g_free(item_desc);
         } else { // multiple items
@@ -220,7 +234,7 @@ void SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *select
             }
             g_slist_free (terms);
 
-            _context.setF(Inkscape::NORMAL_MESSAGE, _("%s%s. %s."), objects_str, in_phrase, when_selected);
+            _context.setF(Inkscape::NORMAL_MESSAGE, _("%s%s. %s."), objects_str, in_phrase, _when_selected);
 
             if (objects_str)
                 g_free ((gchar *) objects_str);