Revision: 2222
          http://synfig.svn.sourceforge.net/synfig/?rev=2222&view=rev
Author:   dooglus
Date:     2008-11-19 13:45:05 +0000 (Wed, 19 Nov 2008)

Log Message:
-----------
Use the functions from the last two revisions to rebuild the layer tree 
whenever a PasteCanvas layer in the tree has its subcanvas changed.

Modified Paths:
--------------
    synfig-studio/trunk/src/gtkmm/layertreestore.cpp
    synfig-studio/trunk/src/gtkmm/layertreestore.h

Modified: synfig-studio/trunk/src/gtkmm/layertreestore.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/layertreestore.cpp    2008-11-19 13:44:24 UTC 
(rev 2221)
+++ synfig-studio/trunk/src/gtkmm/layertreestore.cpp    2008-11-19 13:45:05 UTC 
(rev 2222)
@@ -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>
@@ -605,6 +606,12 @@
 {
        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---------");
@@ -753,6 +760,12 @@
 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 @@
 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);

Modified: synfig-studio/trunk/src/gtkmm/layertreestore.h
===================================================================
--- synfig-studio/trunk/src/gtkmm/layertreestore.h      2008-11-19 13:44:24 UTC 
(rev 2221)
+++ synfig-studio/trunk/src/gtkmm/layertreestore.h      2008-11-19 13:45:05 UTC 
(rev 2222)
@@ -107,6 +107,8 @@
 
        sigc::connection queue_connection;
 
+       std::map<synfig::Layer::Handle, sigc::connection> 
subcanvas_changed_connections;
+
        etl::loose_handle<synfigapp::CanvasInterface> canvas_interface_;
 
        Glib::RefPtr<Gdk::Pixbuf> layer_icon;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to