Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-studio / trunk / src / gtkmm / layerparamtreestore.cpp
index 4f5278f..8fe850a 100644 (file)
@@ -6,6 +6,7 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007, 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
@@ -78,7 +79,7 @@ LayerParamTreeStore::LayerParamTreeStore(etl::loose_handle<synfigapp::CanvasInte
        CanvasTreeStore                 (canvas_interface_),
        layer_tree                              (layer_tree)
 {
-       queued=false;
+       queued=0;
        // Connect all the signals
        canvas_interface()->signal_value_node_changed().connect(sigc::mem_fun(*this,&studio::LayerParamTreeStore::on_value_node_changed));
        canvas_interface()->signal_value_node_renamed().connect(sigc::mem_fun(*this,&studio::LayerParamTreeStore::on_value_node_renamed));
@@ -104,7 +105,9 @@ LayerParamTreeStore::~LayerParamTreeStore()
                changed_connection_list.back().disconnect();
                changed_connection_list.pop_back();
        }
-       synfig::info("LayerParamTreeStore::~LayerParamTreeStore(): Deleted");
+
+       if (getenv("SYNFIG_DEBUG_DESTRUCTORS"))
+               synfig::info("LayerParamTreeStore::~LayerParamTreeStore(): Deleted");
 }
 
 Glib::RefPtr<LayerParamTreeStore>
@@ -264,7 +267,7 @@ LayerParamTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int co
                        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;
@@ -283,7 +286,7 @@ LayerParamTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int co
        }
        catch(std::exception x)
        {
-               g_warning(x.what());
+               g_warning("%s", x.what());
        }
 }
 
@@ -300,7 +303,7 @@ void
 LayerParamTreeStore::rebuild()
 {
        // Profiler profiler("LayerParamTreeStore::rebuild()");
-       if(queued)queued=false;
+       if(queued)queued=0;
        clear();
        layer_list=layer_tree->get_selected_layers();
 
@@ -319,6 +322,7 @@ LayerParamTreeStore::rebuild()
        struct REBUILD_HELPER
        {
                ParamVocab vocab;
+               Layer::Handle layer_0;
 
                static ParamVocab::iterator find_param_desc(ParamVocab& vocab, const synfig::String& x)
                {
@@ -330,14 +334,17 @@ LayerParamTreeStore::rebuild()
                        return iter;
                }
 
-               void process_vocab(ParamVocab x)
+               void process_vocab(synfig::Layer::Handle layer_n)
                {
+                       ParamVocab x = layer_n->get_param_vocab();
                        ParamVocab::iterator iter;
 
                        for(iter=vocab.begin();iter!=vocab.end();++iter)
                        {
-                               ParamVocab::iterator iter2(find_param_desc(x,iter->get_name()));
-                               if(iter2==x.end())
+                               String name(iter->get_name());
+                               ParamVocab::iterator iter2(find_param_desc(x,name));
+                               if(iter2==x.end() ||
+                                  layer_0->get_param(name).get_type() != layer_n->get_param(name).get_type())
                                {
                                        // remove it and start over
                                        vocab.erase(iter);
@@ -354,10 +361,11 @@ LayerParamTreeStore::rebuild()
        {
                LayerList::iterator iter(layer_list.begin());
                rebuild_helper.vocab=(*iter)->get_param_vocab();
+               rebuild_helper.layer_0=*iter;
 
                for(++iter;iter!=layer_list.end();++iter)
                {
-                       rebuild_helper.process_vocab((*iter)->get_param_vocab());
+                       rebuild_helper.process_vocab(*iter);
                        changed_connection_list.push_back(
                                (*iter)->signal_changed().connect(
                                        sigc::mem_fun(
@@ -466,7 +474,7 @@ LayerParamTreeStore::queue_rebuild()
 void
 LayerParamTreeStore::refresh()
 {
-       if(queued)queued=false;
+       if(queued)queued=0;
 
        Gtk::TreeModel::Children children_(children());