X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fsynfigapp%2Faction.cpp;h=7a982524d00e1f29d4c73070c95a5463afc28778;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=f22de864fea12d6b009d68f3118814beefc49283;hpb=ce408de81ca266b1f334ee9bc6c8fb7ba1492ed4;p=synfig.git diff --git a/synfig-studio/trunk/src/synfigapp/action.cpp b/synfig-studio/trunk/src/synfigapp/action.cpp index f22de86..7a98252 100644 --- a/synfig-studio/trunk/src/synfigapp/action.cpp +++ b/synfig-studio/trunk/src/synfigapp/action.cpp @@ -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 @@ -67,11 +68,15 @@ #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" @@ -110,6 +119,8 @@ #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 ¶m_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 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::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 > 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 >::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 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 ¶m) 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 ¶m) 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; }