Added copyright lines for files I've edited this year.
[synfig.git] / synfig-studio / trunk / src / synfigapp / actions / valuedescdisconnect.cpp
index c387f1b..0501f8f 100644 (file)
@@ -6,6 +6,7 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2008 Chris Moore
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -36,6 +37,7 @@
 #include "valuedescdisconnect.h"
 #include <synfigapp/canvasinterface.h>
 #include <synfig/valuenode_const.h>
+#include <synfig/valuenode_duplicate.h>
 
 #include <synfigapp/general.h>
 
@@ -49,7 +51,7 @@ using namespace Action;
 
 /* === M A C R O S ========================================================= */
 
-ACTION_INIT(Action::ValueDescDisconnect);
+ACTION_INIT_NO_GET_LOCAL_NAME(Action::ValueDescDisconnect);
 ACTION_SET_NAME(Action::ValueDescDisconnect,"value_desc_disconnect");
 ACTION_SET_LOCAL_NAME(Action::ValueDescDisconnect,N_("Disconnect"));
 ACTION_SET_TASK(Action::ValueDescDisconnect,"disconnect");
@@ -69,6 +71,16 @@ Action::ValueDescDisconnect::ValueDescDisconnect():
 {
 }
 
+synfig::String
+Action::ValueDescDisconnect::get_local_name()const
+{
+  // TRANSLATORS: This is used in the History dialog when a ValueNode is disconnected.
+  return strprintf(_("Disconnect %s"),
+                   value_desc
+                   ? value_desc.get_description().c_str()
+                   : _("ValueDesc"));
+}
+
 Action::ParamVocab
 Action::ValueDescDisconnect::get_param_vocab()
 {
@@ -102,6 +114,12 @@ Action::ValueDescDisconnect::is_candidate(const ParamList &x)
                        return false;
                if(value_desc.is_value_node() && ValueNode_Const::Handle::cast_dynamic(value_desc.get_value_node()))
                        return false;
+               // don't allow Duplicate ValueNodes in the Children dialog to be disconnected
+               if(value_desc.is_value_node() &&
+                  ValueNode_Duplicate::Handle::cast_dynamic(value_desc.get_value_node()) &&
+                  !value_desc.parent_is_layer_param() &&
+                  !value_desc.parent_is_value_node())
+                       return false;
                return true;
        }
        return false;