Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-studio / trunk / src / synfigapp / action.cpp
index f22de86..7a98252 100644 (file)
@@ -2,10 +2,11 @@
 /*!    \file action.cpp
 **     \brief Template File
 **
-**     $Id: action.cpp,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $
+**     $Id$
 **
 **     \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
 #include "actions/valuedescconnect.h"
 #include "actions/valuedescdisconnect.h"
 #include "actions/valuedesclink.h"
+#include "actions/valuedescblinelink.h"
 
 #include "actions/waypointadd.h"
 #include "actions/waypointset.h"
 #include "actions/waypointsetsmart.h"
 #include "actions/waypointremove.h"
+#include "actions/waypointconnect.h"
+#include "actions/waypointdisconnect.h"
+// #include "actions/waypointsimpleadd.h"
 
 #include "actions/activepointadd.h"
 #include "actions/activepointset.h"
@@ -79,6 +84,7 @@
 #include "actions/activepointsetoff.h"
 #include "actions/activepointseton.h"
 #include "actions/activepointremove.h"
+// #include "actions/activepointsimpleadd.h"
 
 #include "actions/keyframeadd.h"
 #include "actions/keyframeset.h"
@@ -91,6 +97,9 @@
 #include "actions/timepointscopy.h"
 #include "actions/timepointsdelete.h"
 
+#include "actions/canvasdescriptionset.h"
+#include "actions/canvasidset.h"
+#include "actions/canvasnameset.h"
 #include "actions/canvasrenddescset.h"
 #include "actions/canvasadd.h"
 #include "actions/canvasremove.h"
 
 #include "canvasinterface.h"
 
+#include "general.h"
+
 #endif
 
 using namespace std;
@@ -128,21 +139,21 @@ synfigapp::Action::Book *book_;
 
 #define ADD_ACTION(x) { BookEntry &be(book()[x::name__]); \
        be.name=x::name__; \
-       be.local_name=x::local_name__; \
+       be.local_name=dgettext("synfigstudio",x::local_name__); \
        be.version=x::version__; \
        be.task=x::task__; \
        be.priority=x::priority__; \
        be.category=x::category__; \
        be.factory=x::create; \
        be.get_param_vocab=x::get_param_vocab; \
-       be.is_canidate=x::is_canidate; \
+       be.is_candidate=x::is_candidate; \
        }
-       
+
 
 Action::Main::Main()
 {
        book_=new synfigapp::Action::Book();
-       
+
        ADD_ACTION(Action::LayerRemove);
        ADD_ACTION(Action::LayerMove);
        ADD_ACTION(Action::LayerRaise);
@@ -155,10 +166,10 @@ Action::Main::Main()
        ADD_ACTION(Action::LayerEncapsulate);
        ADD_ACTION(Action::LayerDuplicate);
        ADD_ACTION(Action::LayerSetDesc);
-       
-       ADD_ACTION(Action::ValueNodeConstSet);  
-       ADD_ACTION(Action::ValueNodeAdd);       
-       ADD_ACTION(Action::ValueNodeReplace);   
+
+       ADD_ACTION(Action::ValueNodeConstSet);
+       ADD_ACTION(Action::ValueNodeAdd);
+       ADD_ACTION(Action::ValueNodeReplace);
        ADD_ACTION(Action::ValueNodeLinkConnect);
        ADD_ACTION(Action::ValueNodeLinkDisconnect);
        ADD_ACTION(Action::ValueNodeDynamicListInsert);
@@ -170,18 +181,22 @@ Action::Main::Main()
        ADD_ACTION(Action::ValueNodeDynamicListRotateOrder);
        ADD_ACTION(Action::ValueNodeRename);
        ADD_ACTION(Action::ValueNodeRemove);
-       
+
        ADD_ACTION(Action::ValueDescSet);
        ADD_ACTION(Action::ValueDescExport);
        ADD_ACTION(Action::ValueDescConvert);
        ADD_ACTION(Action::ValueDescConnect);
        ADD_ACTION(Action::ValueDescDisconnect);
        ADD_ACTION(Action::ValueDescLink);
+       ADD_ACTION(Action::ValueDescBLineLink);
 
        ADD_ACTION(Action::WaypointAdd);
        ADD_ACTION(Action::WaypointSet);
        ADD_ACTION(Action::WaypointSetSmart);
        ADD_ACTION(Action::WaypointRemove);
+       ADD_ACTION(Action::WaypointConnect);
+       ADD_ACTION(Action::WaypointDisconnect);
+//     ADD_ACTION(Action::WaypointSimpleAdd);
 
        ADD_ACTION(Action::ActivepointAdd);
        ADD_ACTION(Action::ActivepointSet);
@@ -189,6 +204,7 @@ Action::Main::Main()
        ADD_ACTION(Action::ActivepointSetOn);
        ADD_ACTION(Action::ActivepointSetOff);
        ADD_ACTION(Action::ActivepointRemove);
+//     ADD_ACTION(Action::ActivepointSimpleAdd);
 
        ADD_ACTION(Action::KeyframeAdd);
        ADD_ACTION(Action::KeyframeSet);
@@ -197,6 +213,9 @@ Action::Main::Main()
        ADD_ACTION(Action::KeyframeWaypointSet);
        ADD_ACTION(Action::KeyframeSetDelta);
 
+       ADD_ACTION(Action::CanvasDescriptionSet);
+       ADD_ACTION(Action::CanvasIdSet);
+       ADD_ACTION(Action::CanvasNameSet);
        ADD_ACTION(Action::CanvasRendDescSet);
        ADD_ACTION(Action::CanvasAdd);
        ADD_ACTION(Action::CanvasRemove);
@@ -207,8 +226,9 @@ Action::Main::Main()
        ADD_ACTION(Action::BLinePointTangentSplit);
 
        ADD_ACTION(Action::GradientSet);
-       ADD_ACTION(Action::ColorSet);
-       
+       ADD_ACTION(Action::ColorSetFromOC);
+       ADD_ACTION(Action::ColorSetFromFC);
+
        ADD_ACTION(Action::TimepointsMove);
        ADD_ACTION(Action::TimepointsCopy);
        ADD_ACTION(Action::TimepointsDelete);
@@ -222,7 +242,7 @@ Action::Main::Main()
 Action::Main::~Main()
 {
        delete book_;
-       
+
 }
 
 
@@ -230,19 +250,19 @@ Action::Book& Action::book() { return *book_; }
 
 
 Action::Handle
-Action::create(const String &name)
+Action::create(const synfig::String &name)
 {
        if(!book().count(name))
                return 0; //! \todo perhaps we should throw something instead?
-       return book()[name].factory();  
+       return book()[name].factory();
 }
 
 
-Action::CanidateList
-Action::compile_canidate_list(const ParamList& param_list, Category category)
+Action::CandidateList
+Action::compile_candidate_list(const ParamList& param_list, Category category)
 {
-       Action::CanidateList ret;
-       
+       Action::CandidateList ret;
+
        Book::const_iterator iter;
 
        //synfig::info("param_list.size()=%d",param_list.size());
@@ -251,20 +271,27 @@ Action::compile_canidate_list(const ParamList& param_list, Category category)
        {
                if((iter->second.category&category))
                {
-                       if(iter->second.is_canidate(param_list))
+                       if(iter->second.is_candidate(param_list))
+                       {
+                               //synfig::info("Action \"%s\" is in",iter->second.name.c_str());
                                ret.push_back(iter->second);
+                       }
                        else
                        {
-                               //synfig::info("Action \"%s\" is not a canidate",iter->second.name.c_str());
+                               //synfig::info("Action \"%s\" is not a candidate",iter->second.name.c_str());
                        }
                }
+               else
+               {
+                       //synfig::info("Action \"%s\" has unsuitable category",iter->second.name.c_str());
+               }
        }
-       
+
        return ret;
 }
 
-Action::CanidateList::iterator
-Action::CanidateList::find(const String& x)
+Action::CandidateList::iterator
+Action::CandidateList::find(const synfig::String& x)
 {
        iterator iter;
        for(iter=begin();iter!=end();++iter)
@@ -277,21 +304,89 @@ void
 Action::Base::set_param_list(const ParamList &param_list)
 {
        ParamList::const_iterator iter;
-       
+
        for(iter=param_list.begin();iter!=param_list.end();++iter)
                set_param(iter->first,iter->second);
 }
 
+synfig::String
+Action::Base::get_layer_descriptions(const std::list<synfig::Layer::Handle> layers, synfig::String singular_prefix, synfig::String plural_prefix)
+{
+       String ret;
+       bool first = true;
+
+       if (plural_prefix.empty())
+               plural_prefix = singular_prefix;
+
+       if (layers.empty())
+               return plural_prefix;
+
+       if (layers.size() == 1)
+               ret = singular_prefix;
+       else
+               ret = plural_prefix;
+
+       if (!ret.empty())
+               ret.push_back(' ');
+
+       for(std::list<synfig::Layer::Handle>::const_iterator iter=layers.begin(); iter!=layers.end(); ++iter)
+       {
+               if (first)
+                       first = false;
+               else
+                       ret += ", ";
+
+               ret += strprintf("'%s'", (*iter)->get_non_empty_description().c_str());
+       }
+
+       return ret;
+}
+
+synfig::String
+Action::Base::get_layer_descriptions(const std::list<std::pair<synfig::Layer::Handle,int> > layers, synfig::String singular_prefix, synfig::String plural_prefix)
+{
+       String ret;
+       bool first = true;
+
+       if (plural_prefix.empty())
+               plural_prefix = singular_prefix;
+
+       if (layers.empty())
+               return plural_prefix;
+
+       if (layers.size() == 1)
+               ret = singular_prefix;
+       else
+               ret = plural_prefix;
+
+       if (!ret.empty())
+               ret.push_back(' ');
+
+       for(std::list<std::pair<synfig::Layer::Handle,int> >::const_iterator iter=layers.begin(); iter!=layers.end(); ++iter)
+       {
+               if (first)
+                       first = false;
+               else
+                       ret += ", ";
+
+               ret += strprintf("'%s'", iter->first->get_non_empty_description().c_str());
+       }
+
+       return ret;
+}
+
 void
 Super::perform()
 {
        set_dirty(false);
-       
+
        prepare();
 
        ActionList::const_iterator iter;
        for(iter=action_list_.begin();iter!=action_list_.end();++iter)
        {
+               //// debug actions
+               // synfig::info("%s:%d action: '%s'", __FILE__, __LINE__, (*iter)->get_name().c_str());
                try
                {
                        try
@@ -314,8 +409,10 @@ Super::perform()
                }
                catch(Error x)
                {
-                       throw Error(x.get_type(),((*iter)->get_name()+": "+x.get_desc()).c_str());
+                       //synfig::info("%s:%d caught exception", __FILE__, __LINE__);
+                       throw Error(x.get_type(),((*iter)->get_local_name()+": "+x.get_desc()).c_str());
                }
+               //synfig::info("%s:%d finished action: '%s'", __FILE__, __LINE__, (*iter)->get_name().c_str());
        }
 }
 
@@ -365,7 +462,7 @@ Super::add_action_front(etl::handle<Undoable> action)
 }
 
 
-Group::Group(const std::string &str):
+Group::Group(const synfig::String &str):
        name_(str),
        ready_(true)
 {
@@ -382,7 +479,7 @@ Action::ParamVocab
 Action::CanvasSpecific::get_param_vocab()
 {
        ParamVocab ret;
-       
+
        ret.push_back(ParamDesc("canvas",Param::TYPE_CANVAS)
                .set_local_name(_("Canvas"))
                .set_desc(_("Selected Canvas"))
@@ -393,7 +490,7 @@ Action::CanvasSpecific::get_param_vocab()
                .set_desc(_("Canvas Interface"))
                .set_optional(true)
        );
-       
+
 
        return ret;
 }
@@ -406,7 +503,7 @@ CanvasSpecific::set_param(const synfig::String& name, const Param &param)
                if(!param.get_canvas())
                        return false;
                set_canvas(param.get_canvas());
-               
+
                return true;
        }
        if(name=="canvas_interface" && param.get_type()==Param::TYPE_CANVASINTERFACE)
@@ -416,13 +513,13 @@ CanvasSpecific::set_param(const synfig::String& name, const Param &param)
                set_canvas_interface(param.get_canvas_interface());
                if(!get_canvas())
                        set_canvas(get_canvas_interface()->get_canvas());
-               
+
                return true;
        }
        if(name=="edit_mode" && param.get_type()==Param::TYPE_EDITMODE)
        {
                set_edit_mode(param.get_edit_mode());
-               
+
                return true;
        }
 
@@ -442,9 +539,9 @@ CanvasSpecific::get_edit_mode()const
 {
        if(mode_!=MODE_UNDEFINED)
                return mode_;
-       
+
        if(get_canvas_interface())
                return get_canvas_interface()->get_mode();
-       
+
        return MODE_NORMAL;
 }