Code

r11569@tres: ted | 2006-04-29 08:55:02 -0700
[inkscape.git] / src / extension / effect.cpp
index 1d0c4c4af4757bb31063a5437eccf90c5b0157e5..78af878d35d72744a10aac3f4202e66cb998347e 100644 (file)
@@ -42,6 +42,14 @@ Effect::Effect (Inkscape::XML::Node * in_repr, Implementation::Implementation *
                         // printf("Found local effects menu in %s\n", this->get_name());
                         local_effects_menu = sp_repr_children(child_repr);
                     }
+                    if (!strcmp(child_repr->name(), "menu-name")) {
+                        // printf("Found local effects menu in %s\n", this->get_name());
+                        _verb.set_name(sp_repr_children(child_repr)->content());
+                    }
+                    if (!strcmp(child_repr->name(), "menu-tip")) {
+                        // printf("Found local effects menu in %s\n", this->get_name());
+                        _verb.set_tip(sp_repr_children(child_repr)->content());
+                    }
                 } // children of "effect"
                 break; // there can only be one effect
             } // find "effect"
@@ -68,6 +76,7 @@ Effect::merge_menu (Inkscape::XML::Node * base,
                     Inkscape::XML::Node * mergee) {
     Glib::ustring mergename;
     Inkscape::XML::Node * tomerge = NULL;
+    Inkscape::XML::Node * submenu = NULL;
 
     /* printf("Merge menu with '%s' '%s' '%s'\n",
             base != NULL ? base->name() : "NULL",
@@ -89,8 +98,7 @@ Effect::merge_menu (Inkscape::XML::Node * base,
         mergename = _(menuname);
     }
 
-    base->appendChild(tomerge);
-    Inkscape::GC::release(tomerge);
+    int position = -1;
 
     if (start != NULL) {
         Inkscape::XML::Node * menupass;
@@ -116,15 +124,31 @@ Effect::merge_menu (Inkscape::XML::Node * base,
 
             Glib::ustring compare(_(compare_char));
 
+            if (mergename == compare) {
+                Inkscape::GC::release(tomerge);
+                tomerge = NULL;
+                submenu = menupass;
+                break;
+            }
+
             if (mergename < compare) {
-                tomerge->setPosition(menupass->position());
+                position = menupass->position();
                 break;
             }
         } // for menu items
     } // start != NULL
 
+    if (tomerge != NULL) {
+        base->appendChild(tomerge);
+        Inkscape::GC::release(tomerge);
+        if (position != -1)
+            tomerge->setPosition(position);
+    }
+
     if (patern != NULL) {
-        merge_menu(tomerge, tomerge->firstChild(), patern->firstChild(), mergee);
+        if (submenu == NULL)
+            submenu = tomerge;
+        merge_menu(submenu, submenu->firstChild(), patern->firstChild(), mergee);
     }
 
     return;
@@ -165,7 +189,7 @@ Effect::prefs (Inkscape::UI::View::View * doc)
         return true;
     }
 
-    PrefDialog * dialog = new PrefDialog(this->get_name(), controls);
+    PrefDialog * dialog = new PrefDialog(this->get_name(), this->get_help(), controls);
     int response = dialog->run();
     dialog->hide();
 
@@ -237,6 +261,12 @@ Effect::find_effects_list (Inkscape::XML::Node * menustruct)
     return false;
 }
 
+Gtk::VBox *
+Effect::get_info_widget(void)
+{
+    return Extension::get_info_widget();
+}
+
 /** \brief  Create an action for a \c EffectVerb
     \param  view  Which view the action should be created for
     \return The built action.