Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-studio / trunk / src / synfigapp / action_system.cpp
index 8495dc9..7aef925 100644 (file)
@@ -2,7 +2,7 @@
 /*!    \file action_system.cpp
 **     \brief Template File
 **
-**     $Id: action_system.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
@@ -33,6 +33,8 @@
 #include "instance.h"
 #include "canvasinterface.h"
 
+#include "general.h"
+
 #endif
 
 /* === U S I N G =========================================================== */
@@ -64,31 +66,34 @@ Action::System::~System()
 }
 
 bool
-Action::System::perform_action(handle<Action::Base> action)
+Action::System::perform_action(etl::handle<Action::Base> action)
 {
+       //// debug actions
+       // synfig::info("%s:%d perform_action: '%s'", __FILE__, __LINE__, action->get_name().c_str());
+
        handle<UIInterface> uim(get_ui_interface());
-       
+
        assert(action);
-       
+
        if(!action->is_ready())
        {
-               uim->error(action->get_name()+": "+_("Action is not ready."));
+               uim->error(action->get_local_name()+": "+_("Action is not ready."));
                return false;
-       }       
-       
+       }
+
        most_recent_action_=action;
-       
+
        static bool inuse=false;
 
        if(inuse) return false;
 
        inuse=true;
        try {
-               
+
        assert(action);
-       
+
        Action::CanvasSpecific* canvas_specific(dynamic_cast<Action::CanvasSpecific*>(action.get()));
-       
+
        if(canvas_specific && canvas_specific->get_canvas())
        {
                handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas_specific->get_canvas());
@@ -97,13 +102,13 @@ Action::System::perform_action(handle<Action::Base> action)
        }
 
        handle<Action::Undoable> undoable_action=handle<Action::Undoable>::cast_dynamic(action);
-       
+
        // If we cannot undo this action, make sure
        // that the user knows this.
        if(!undoable_action)
        {
                if(uim->yes_no(
-                       action->get_name(),
+                       action->get_local_name(),
                        _("This action cannot be undone! Are you sure you want to continue?"),
                        UIInterface::RESPONSE_NO
                        ) == UIInterface::RESPONSE_NO
@@ -123,15 +128,15 @@ Action::System::perform_action(handle<Action::Base> action)
        try { action->perform(); }
        catch(Action::Error err)
        {
-               uim->task(action->get_name()+' '+_("Failed"));
+               uim->task(action->get_local_name()+' '+_("Failed"));
                inuse=false;
 
                if(err.get_type()!=Action::Error::TYPE_UNABLE)
                {
                        if(err.get_desc().empty())
-                               uim->error(action->get_name()+": "+strprintf("%d",err.get_type()));             
+                               uim->error(action->get_local_name()+": "+strprintf("%d",err.get_type()));
                        else
-                               uim->error(action->get_name()+": "+err.get_desc());             
+                               uim->error(action->get_local_name()+": "+err.get_desc());
                }
 
                // If action failed for whatever reason, just return false and do
@@ -140,10 +145,10 @@ Action::System::perform_action(handle<Action::Base> action)
        }
        catch(std::exception err)
        {
-               uim->task(action->get_name()+' '+_("Failed"));
+               uim->task(action->get_local_name()+' '+_("Failed"));
                inuse=false;
 
-               uim->error(action->get_name()+": "+err.what());         
+               uim->error(action->get_local_name()+": "+err.what());
 
                // If action failed for whatever reason, just return false and do
                // not add the action onto the list
@@ -151,7 +156,7 @@ Action::System::perform_action(handle<Action::Base> action)
        }
        catch(...)
        {
-               uim->task(action->get_name()+' '+_("Failed"));
+               uim->task(action->get_local_name()+' '+_("Failed"));
                inuse=false;
 
                // If action failed for whatever reason, just return false and do
@@ -161,19 +166,19 @@ Action::System::perform_action(handle<Action::Base> action)
 
        // Clear the redo stack
        if(clear_redo_stack_on_new_action_)
-               clear_redo_stack();     
+               clear_redo_stack();
 
        if(!group_stack_.empty())
                group_stack_.front()->inc_depth();
        else
                inc_action_count();
-       
+
        // Push this action onto the action list if we can undo it
        if(undoable_action)
        {
                // If necessary, signal the change in status of undo
                if(undo_action_stack_.empty()) signal_undo_status_(true);
-               
+
                // Add it to the list
                undo_action_stack_.push_front(undoable_action);
 
@@ -181,10 +186,10 @@ Action::System::perform_action(handle<Action::Base> action)
                if(group_stack_.empty())
                        signal_new_action()(undoable_action);
        }
-               
+
        inuse=false;
 
-       uim->task(action->get_name()+' '+_("Successful"));
+       uim->task(action->get_local_name()+' '+_("Successful"));
 
        // If the action has "dirtied" the preview, signal it.
        if(0)if(canvas_specific && canvas_specific->is_dirty())
@@ -196,7 +201,6 @@ Action::System::perform_action(handle<Action::Base> action)
                {
                        handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas);
                        assert(canvas_interface);
-                       DEBUGPOINT();
                        //canvas_interface->signal_dirty_preview()();
                }
        }
@@ -207,20 +211,20 @@ Action::System::perform_action(handle<Action::Base> action)
 }
 
 bool
-synfigapp::Action::System::undo_(handle<UIInterface> uim)
+synfigapp::Action::System::undo_(etl::handle<UIInterface> uim)
 {
        handle<Action::Undoable> action(undo_action_stack().front());
        most_recent_action_=action;
-       
+
        try { if(action->is_active()) action->undo(); }
        catch(Action::Error err)
        {
                if(err.get_type()!=Action::Error::TYPE_UNABLE)
                {
                        if(err.get_desc().empty())
-                               uim->error(action->get_name()+_(" (Undo): ")+strprintf("%d",err.get_type()));           
+                               uim->error(action->get_local_name()+_(" (Undo): ")+strprintf("%d",err.get_type()));
                        else
-                               uim->error(action->get_name()+_(" (Undo): ")+err.get_desc());           
+                               uim->error(action->get_local_name()+_(" (Undo): ")+err.get_desc());
                }
 
                return false;
@@ -280,13 +284,13 @@ synfigapp::Action::System::undo()
 
        if(!undo_(uim))
        {
-               uim->error(undo_action_stack_.front()->get_name()+": "+_("Failed to undo."));
+               uim->error(undo_action_stack_.front()->get_local_name()+": "+_("Failed to undo."));
                inuse=false;
                return false;
        }
 
        inuse=false;
-       
+
        // If the action has "dirtied" the preview, signal it.
        if(0)if(action->is_active() && canvas_specific && canvas_specific->is_dirty())
        {
@@ -297,7 +301,6 @@ synfigapp::Action::System::undo()
                {
                        handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas);
                        assert(canvas_interface);
-                       //DEBUGPOINT();
                        //canvas_interface->signal_dirty_preview()();
                }
        }
@@ -306,7 +309,7 @@ synfigapp::Action::System::undo()
 }
 
 bool
-Action::System::redo_(handle<UIInterface> uim)
+Action::System::redo_(etl::handle<UIInterface> uim)
 {
        handle<Action::Undoable> action(redo_action_stack().front());
        most_recent_action_=action;
@@ -317,9 +320,9 @@ Action::System::redo_(handle<UIInterface> uim)
                if(err.get_type()!=Action::Error::TYPE_UNABLE)
                {
                        if(err.get_desc().empty())
-                               uim->error(action->get_name()+_(" (Redo): ")+strprintf("%d",err.get_type()));           
+                               uim->error(action->get_local_name()+_(" (Redo): ")+strprintf("%d",err.get_type()));
                        else
-                               uim->error(action->get_name()+_(" (Redo): ")+err.get_desc());           
+                               uim->error(action->get_local_name()+_(" (Redo): ")+err.get_desc());
                }
 
                return false;
@@ -379,7 +382,7 @@ Action::System::redo()
 
        if(!redo_(uim))
        {
-               uim->error(redo_action_stack_.front()->get_name()+": "+_("Failed to redo."));
+               uim->error(redo_action_stack_.front()->get_local_name()+": "+_("Failed to redo."));
                inuse=false;
                return false;
        }
@@ -396,7 +399,6 @@ Action::System::redo()
                {
                        handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas);
                        assert(canvas_interface);
-                       //DEBUGPOINT();
                        //canvas_interface->signal_dirty_preview()();
                }
        }
@@ -442,7 +444,7 @@ Action::System::clear_undo_stack()
        signal_undo_status_(false);
        signal_undo_stack_cleared_();
 }
-       
+
 void
 Action::System::clear_redo_stack()
 {
@@ -457,7 +459,7 @@ Action::System::set_action_status(etl::handle<Action::Undoable> action, bool x)
 {
        Stack::iterator iter;
        int failed=false;
-       
+
        if(action->is_active()==x)
                return true;
 
@@ -466,7 +468,7 @@ Action::System::set_action_status(etl::handle<Action::Undoable> action, bool x)
        Action::CanvasSpecific* canvas_specific(dynamic_cast<Action::CanvasSpecific*>(action.get()));
 
        handle<UIInterface> uim=new ConfidentUIInterface();
-       
+
        iter=find(undo_action_stack_.begin(),undo_action_stack_.end(),action);
        if(iter!=undo_action_stack_.end())
        {
@@ -476,12 +478,12 @@ Action::System::set_action_status(etl::handle<Action::Undoable> action, bool x)
                        {
                                return false;
                        }
-               } 
+               }
                if(!undo_(uim))
                {
                        return false;
                }
-               
+
                action->set_active(x);
 
                if(redo_(get_ui_interface()))
@@ -493,8 +495,8 @@ Action::System::set_action_status(etl::handle<Action::Undoable> action, bool x)
                        action->set_active(!x);
                        failed=true;
                }
-               
-               
+
+
                while(undo_action_stack_.front()!=cur_pos)
                {
                        if(!redo_(uim))
@@ -509,7 +511,6 @@ Action::System::set_action_status(etl::handle<Action::Undoable> action, bool x)
                        Canvas::Handle canvas=canvas_specific->get_canvas();
                        handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas);
                        assert(canvas_interface);
-                       //DEBUGPOINT();
                        //canvas_interface->signal_dirty_preview()();
                }
 
@@ -530,7 +531,6 @@ Action::System::set_action_status(etl::handle<Action::Undoable> action, bool x)
                        Canvas::Handle canvas=canvas_specific->get_canvas();
                        handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas);
                        assert(canvas_interface);
-                       DEBUGPOINT();
                        //canvas_interface->signal_dirty_preview()();
                }
 
@@ -540,7 +540,7 @@ Action::System::set_action_status(etl::handle<Action::Undoable> action, bool x)
        return false;
 }
 
-Action::PassiveGrouper::PassiveGrouper(etl::loose_handle<Action::System> instance_,synfig::String name_):
+Action::PassiveGrouper::PassiveGrouper(etl::loose_handle<System> instance_,synfig::String name_):
        instance_(instance_),
        name_(name_),
        redraw_requested_(false),
@@ -551,14 +551,12 @@ Action::PassiveGrouper::PassiveGrouper(etl::loose_handle<Action::System> instanc
 }
 
 void
-Action::PassiveGrouper::request_redraw(handle<CanvasInterface> x)
+Action::PassiveGrouper::request_redraw(etl::handle<CanvasInterface> x)
 {
-/*     DEBUGPOINT();
-       if(instance_->group_stack_.empty())
+/*     if(instance_->group_stack_.empty())
        {
                if(x!=canvas_interface_)
                {
-                       DEBUGPOINT();
                        x->signal_dirty_preview()();
                }
 
@@ -566,21 +564,16 @@ Action::PassiveGrouper::request_redraw(handle<CanvasInterface> x)
        }
        else
        {
-               DEBUGPOINT();
                if(instance_->group_stack_.back()==this)
                {
-                       DEBUGPOINT();
                        redraw_requested_=true;
                }
                else
                {
-                       DEBUGPOINT();
                        instance_->group_stack_.back()->request_redraw(x);
                        redraw_requested_=false;
                }
-               DEBUGPOINT();
        }
-       DEBUGPOINT();
 */
        if(x)
        {
@@ -592,7 +585,7 @@ Action::PassiveGrouper::request_redraw(handle<CanvasInterface> x)
 Action::PassiveGrouper::~PassiveGrouper()
 {
        assert(instance_->group_stack_.front()==this);
-       
+
        // Remove this group from the group stack
        instance_->group_stack_.pop_front();
 
@@ -613,11 +606,11 @@ Action::PassiveGrouper::~PassiveGrouper()
                else
                {
                        Action::CanvasSpecific* canvas_specific(dynamic_cast<Action::CanvasSpecific*>(action.get()));
-                       
+
                        if(0)if(canvas_specific && canvas_specific->is_dirty() && canvas_specific->get_canvas_interface())
                        {
                                if(instance_->group_stack_.empty())
-                                       request_redraw(canvas_specific->get_canvas_interface());                                        
+                                       request_redraw(canvas_specific->get_canvas_interface());
                        }
                }
 
@@ -634,34 +627,34 @@ Action::PassiveGrouper::~PassiveGrouper()
        if(depth_>0)
        {
                group=new Action::Group(name_);
-               
+
                for(int i=0;i<depth_;i++)
        //      for(;depth_;depth_--)
                {
                        handle<Action::Undoable> action(instance_->undo_action_stack_.front());
                        Action::CanvasSpecific* canvas_specific(dynamic_cast<Action::CanvasSpecific*>(action.get()));
-                       
+
                        if(0)if(canvas_specific && canvas_specific->is_dirty())
                        {
                                group->set_dirty(true);
                                group->set_canvas(canvas_specific->get_canvas());
                                group->set_canvas_interface(canvas_specific->get_canvas_interface());
                        }
-                       
+
                        // Copy the action from the undo stack to the group
                        group->add_action_front(action);
-       
+
                        // Remove the action from the undo stack
                        instance_->undo_action_stack_.pop_front();
                }
-                       
+
                // Push the group onto the stack
                instance_->undo_action_stack_.push_front(group);
-       
+
                if(0)if(group->is_dirty())
                        request_redraw(group->get_canvas_interface());
                //      group->get_canvas_interface()->signal_dirty_preview()();
-       
+
                if(instance_->group_stack_.empty())
                {
                        instance_->inc_action_count();
@@ -670,13 +663,12 @@ Action::PassiveGrouper::~PassiveGrouper()
                else
                        instance_->group_stack_.front()->inc_depth();
        }
-       
+
        if(0)if(redraw_requested_)
        {
                if(instance_->group_stack_.empty())
                {
                        assert(canvas_interface_);
-                       DEBUGPOINT();
                        canvas_interface_->signal_dirty_preview()();
                }
                else
@@ -695,16 +687,16 @@ Action::PassiveGrouper::cancel()
        // Cancel any groupers that may be on top of us first
        //while(instance_->group_stack_.front()!=this)
        //      instance_->group_stack_.front()->cancel();
-       
+
        synfig::warning("Cancel depth: %d",depth_);
-       
+
        while(depth_)
                if(!instance_->undo())
                {
                        error=true;
                        break;
                }
-       
+
        if(error)
                instance_->get_ui_interface()->error(_("State restore failure"));
        else