Reformat and clean up the automake files
[synfig.git] / synfig-studio / trunk / src / gtkmm / layertreestore.cpp
index 04e5814..16b7fc8 100644 (file)
@@ -38,6 +38,7 @@
 #include <synfigapp/instance.h>
 #include "app.h"
 #include "instance.h"
+#include <synfig/layer_pastecanvas.h>
 #include <synfigapp/action_system.h>
 
 #include <gtk/gtkversion.h>
@@ -308,7 +309,7 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column,
                        if(new_desc==layer->get_description())
                                return;
 
-                       synfigapp::Action::Handle action(synfigapp::Action::create("layer_set_desc"));
+                       synfigapp::Action::Handle action(synfigapp::Action::create("LayerSetDesc"));
 
                        if(!action)
                                return;
@@ -331,7 +332,7 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column,
                        g_value_init(x.gobj(),model.active.type());
                        g_value_copy(value.gobj(),x.gobj());
 
-                       synfigapp::Action::Handle action(synfigapp::Action::create("layer_activate"));
+                       synfigapp::Action::Handle action(synfigapp::Action::create("LayerActivate"));
 
                        if(!action)
                                return;
@@ -350,7 +351,7 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column,
        }
        catch(std::exception x)
        {
-               g_warning(x.what());
+               g_warning("%s", x.what());
        }
 }
 
@@ -517,7 +518,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk
                                if(dest_canvas==src->get_canvas() && dest_layer_depth==src->get_depth())
                                        continue;
 
-                               synfigapp::Action::Handle action(synfigapp::Action::create("layer_move"));
+                               synfigapp::Action::Handle action(synfigapp::Action::create("LayerMove"));
                                action->set_param("canvas",dest_canvas);
                                action->set_param("canvas_interface",canvas_interface());
                                action->set_param("layer",src);
@@ -536,7 +537,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk
                        {
 
                                synfigapp::Action::Handle action;
-                               action=synfigapp::Action::create("layer_remove");
+                               action=synfigapp::Action::create("LayerRemove");
                                action->set_param("canvas",Canvas::Handle(src->get_canvas()));
                                if(!action->set_param("canvas_interface",App::get_instance(src->get_canvas())->find_canvas_interface(src->get_canvas())))
                                        action->set_param("canvas_interface",canvas_interface());
@@ -548,7 +549,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk
                                        return false;
                                }
 
-                               action=synfigapp::Action::create("layer_add");
+                               action=synfigapp::Action::create("LayerAdd");
                                action->set_param("canvas",dest_canvas);
                                action->set_param("canvas_interface",canvas_interface());
                                action->set_param("new",src);
@@ -561,7 +562,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk
 
                                if(dest_layer_depth!=0)
                                {
-                                       action=synfigapp::Action::create("layer_move");
+                                       action=synfigapp::Action::create("LayerMove");
                                        action->set_param("canvas",dest_canvas);
                                        action->set_param("canvas_interface",canvas_interface());
                                        action->set_param("layer",src);
@@ -605,6 +606,12 @@ LayerTreeStore::rebuild()
 {
        if (queued) queued = false;
 
+       // disconnect any subcanvas_changed connections
+       std::map<synfig::Layer::Handle, sigc::connection>::iterator iter;
+       for (iter = subcanvas_changed_connections.begin(); iter != subcanvas_changed_connections.end(); iter++)
+               iter->second.disconnect();
+       subcanvas_changed_connections.clear();
+
        //etl::clock timer;timer.reset();
 
        //synfig::warning("---------rebuilding layer table---------");
@@ -614,7 +621,7 @@ LayerTreeStore::rebuild()
        // Clear out the current list
        clear();
 
-       // Go ahead and and add all the layers
+       // Go ahead and add all the layers
        std::for_each(
                canvas_interface()->get_canvas()->rbegin(), canvas_interface()->get_canvas()->rend(),
                sigc::mem_fun(*this, &studio::LayerTreeStore::on_layer_added)
@@ -753,6 +760,12 @@ LayerTreeStore::set_row_layer(Gtk::TreeRow &row,synfig::Layer::Handle &handle)
 void
 LayerTreeStore::on_layer_added(synfig::Layer::Handle layer)
 {
+       if (etl::handle<Layer_PasteCanvas>::cast_dynamic(layer))
+               subcanvas_changed_connections[layer] =
+                       (etl::handle<Layer_PasteCanvas>::cast_dynamic(layer))->signal_subcanvas_changed().connect(
+                               sigc::mem_fun(*this,&studio::LayerTreeStore::queue_rebuild)
+                       );
+
        assert(layer);
        Gtk::TreeRow row;
        if(canvas_interface()->get_canvas()==layer->get_canvas())
@@ -775,6 +788,11 @@ LayerTreeStore::on_layer_added(synfig::Layer::Handle layer)
 void
 LayerTreeStore::on_layer_removed(synfig::Layer::Handle handle)
 {
+       if (etl::handle<Layer_PasteCanvas>::cast_dynamic(handle))
+       {
+               subcanvas_changed_connections[handle].disconnect();
+               subcanvas_changed_connections.erase(handle);
+       }
        Gtk::TreeModel::Children::iterator iter;
        if(find_layer_row(handle,iter))
                erase(iter);