X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fsynfigapp%2Faction.h;h=1dec9c57eed879457d73274b00738aeda45870ed;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=b2d9e773e8758dcbbecace35194d3897cd201db5;hpb=dee84efa006428fdfbf0e84b66ee94eb23113ad9;p=synfig.git diff --git a/synfig-studio/trunk/src/synfigapp/action.h b/synfig-studio/trunk/src/synfigapp/action.h index b2d9e77..1dec9c5 100644 --- a/synfig-studio/trunk/src/synfigapp/action.h +++ b/synfig-studio/trunk/src/synfigapp/action.h @@ -2,10 +2,11 @@ /*! \file action.h ** \brief Template File ** -** $Id: action.h,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 @@ -74,10 +75,14 @@ #define ACTION_SET_CVS_ID(class,x) const char class::cvs_id__[]=x -#define ACTION_INIT(class) \ - Action::Base* class::create() { return new class(); } \ - synfig::String class::get_name()const { return name__; } \ - synfig::String class::get_local_name()const { return local_name__; } \ +//! don't define get_local_name() - allow the action code to define its own +#define ACTION_INIT_NO_GET_LOCAL_NAME(class) \ + Action::Base* class::create() { return new class(); } \ + synfig::String class::get_name()const { return name__; } + +#define ACTION_INIT(class) \ + ACTION_INIT_NO_GET_LOCAL_NAME(class) \ + synfig::String class::get_local_name()const { return dgettext("synfigstudio",local_name__); } /* === T Y P E D E F S ===================================================== */ @@ -92,11 +97,11 @@ namespace synfigapp { class Instance; class Main; - -namespace Action { + +namespace Action { class System; - + //! Exception class, thrown when redoing or undoing an action class Error @@ -119,7 +124,7 @@ private: synfig::String desc_; public: - + Error(Type type, const char *format, ...): type_(type) { @@ -140,10 +145,10 @@ public: type_(type) { } - + Type get_type()const { return type_; } synfig::String get_desc()const { return desc_; } - + }; // END of class Action::Error class Param; @@ -163,11 +168,12 @@ enum Category CATEGORY_VALUENODE =(1<<5), CATEGORY_KEYFRAME =(1<<6), CATEGORY_GROUP =(1<<7), + CATEGORY_BEZIER =(1<<8), CATEGORY_OTHER =(1<<12), CATEGORY_DRAG =(1<<24), - + CATEGORY_HIDDEN =(1<<31), CATEGORY_ALL =(~0)-(1<<31) //!< All categories (EXCEPT HIDDEN) }; // END of enum Category @@ -177,36 +183,38 @@ inline Category operator|(Category lhs, Category rhs) -//! Action Base Class +//! Top-level base class for all actions /*! An action should implement the following functions: -** static bool is_candidate(const ParamList &x); +** - static bool is_candidate(const ParamList &x); ** - Checks the ParamList to see if this action could be performed. -** static ParamVocab get_param_vocab(); +** - static ParamVocab get_param_vocab(); ** - Yields the ParamVocab object which describes what ** this action needs before it can perform the act. -** static Action::Base* create(); +** - static Action::Base* create(); ** - Factory for creating this action from a ParamList ** */ -class Base : public etl::shared_object +class Base : public etl::shared_object { protected: Base() { } - + public: virtual ~Base() { }; //! This function will throw an Action::Error() on failure virtual void perform()=0; - - virtual bool set_param(const synfig::String& name, const Param &) { return false; } + + virtual bool set_param(const synfig::String& /*name*/, const Param &) { return false; } virtual bool is_ready()const=0; - + virtual synfig::String get_name()const =0; virtual synfig::String get_local_name()const { return get_name(); } void set_param_list(const ParamList &); - + + static synfig::String get_layer_descriptions(const std::list layers, synfig::String singular_prefix = "", synfig::String plural_prefix = ""); + static synfig::String get_layer_descriptions(const std::list > layers, synfig::String singular_prefix = "", synfig::String plural_prefix = ""); }; // END of class Action::Base typedef Action::Base* (*Factory)(); @@ -237,7 +245,7 @@ public: }; // END of class Action::Undoable //! Action base class for canvas-specific actions -class CanvasSpecific +class CanvasSpecific { private: bool is_dirty_; @@ -251,8 +259,8 @@ protected: CanvasSpecific():is_dirty_(true), mode_(MODE_UNDEFINED) { } virtual ~CanvasSpecific() { }; - - + + public: void set_canvas(synfig::Canvas::Handle x) { canvas_=x; } @@ -268,10 +276,10 @@ public: EditMode get_edit_mode()const; void set_edit_mode(EditMode x) { mode_=x; } - + bool is_dirty()const { return is_dirty_; } void set_dirty(bool x=true) { is_dirty_=x; } - + }; // END of class Action::Undoable typedef std::list< etl::handle > ActionList; @@ -294,9 +302,9 @@ public: virtual void prepare()=0; void clear() { action_list().clear(); } - + bool first_time()const { return action_list_.empty(); } - + void add_action(etl::handle action); void add_action_front(etl::handle action); @@ -322,7 +330,7 @@ public: virtual void prepare() { }; - virtual bool set_param(const synfig::String& name, const Param &)const { return false; } + virtual bool set_param(const synfig::String& /*name*/, const Param &)const { return false; } virtual bool is_ready()const { return ready_; } void set_name(std::string&x) { name_=x; } @@ -342,8 +350,8 @@ struct BookEntry Category category; Factory factory; CandidateChecker is_candidate; - GetParamVocab get_param_vocab; - + GetParamVocab get_param_vocab; + bool operator<(const BookEntry &rhs)const { return priority