Added copyright lines for files I've edited this year.
[synfig.git] / synfig-studio / trunk / src / gtkmm / layerparamtreestore.cpp
index 0403160..610c2bb 100644 (file)
@@ -1,11 +1,12 @@
 /* === S Y N F I G ========================================================= */
-/*!    \file childrentreestore.cpp
+/*!    \file layerparamtreestore.cpp
 **     \brief Template File
 **
-**     $Id: layerparamtreestore.cpp,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $
+**     $Id$
 **
 **     \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
@@ -30,7 +31,7 @@
 #endif
 
 #include "layerparamtreestore.h"
-#include "iconcontroler.h"
+#include "iconcontroller.h"
 #include <gtkmm/button.h>
 #include <synfig/paramdesc.h>
 #include "layertree.h"
@@ -39,6 +40,8 @@
 #include "app.h"
 #include <ETL/clock>
 
+#include "general.h"
+
 #endif
 
 /* === U S I N G =========================================================== */
@@ -79,6 +82,7 @@ LayerParamTreeStore::LayerParamTreeStore(etl::loose_handle<synfigapp::CanvasInte
        queued=false;
        // 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));
        canvas_interface()->signal_value_node_added().connect(sigc::mem_fun(*this,&studio::LayerParamTreeStore::on_value_node_added));
        canvas_interface()->signal_value_node_deleted().connect(sigc::mem_fun(*this,&studio::LayerParamTreeStore::on_value_node_deleted));
        canvas_interface()->signal_value_node_replaced().connect(sigc::mem_fun(*this,&studio::LayerParamTreeStore::on_value_node_replaced));
@@ -86,10 +90,10 @@ LayerParamTreeStore::LayerParamTreeStore(etl::loose_handle<synfigapp::CanvasInte
 
        canvas_interface()->signal_value_node_child_added().connect(sigc::mem_fun(*this,&studio::LayerParamTreeStore::on_value_node_child_added));
        canvas_interface()->signal_value_node_child_removed().connect(sigc::mem_fun(*this,&studio::LayerParamTreeStore::on_value_node_child_removed));
-       
-       
+
+
        layer_tree->get_selection()->signal_changed().connect(sigc::mem_fun(*this,&LayerParamTreeStore::queue_rebuild));
-       
+
        signal_changed().connect(sigc::mem_fun(*this,&LayerParamTreeStore::queue_refresh));
        rebuild();
 }
@@ -101,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>
@@ -120,7 +126,7 @@ LayerParamTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int
                synfig::error("LayerParamTreeStore::get_value_vfunc(): Bad column!");
                return;
        }
-       
+
 /*     if(column==model.label.index())
        {
                synfig::Layer::Handle layer((*iter)[model.layer]);
@@ -130,12 +136,8 @@ LayerParamTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int
                Glib::Value<Glib::ustring> x;
                g_value_init(x.gobj(),x.value_type());
 
+               x.set(layer->get_non_empty_description());
 
-               if(!layer->get_description().empty())
-                       x.set(layer->get_description());
-               else
-                       x.set(layer->get_local_name());
-               
                g_value_init(value.gobj(),x.value_type());
                g_value_copy(x.gobj(),value.gobj());
        }
@@ -145,23 +147,23 @@ LayerParamTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int
        {
                synfigapp::ValueDesc value_desc((*iter)[model.value_desc]);
                Glib::ustring label;
-               
+
                if(!(*iter)[model.is_toplevel])
                        return CanvasTreeStore::get_value_vfunc(iter,column,value);
                synfig::ParamDesc param_desc((*iter)[model.param_desc]);
                label=param_desc.get_local_name();
-               
+
                if(!(*iter)[model.is_inconsistent])
                if(value_desc.is_value_node() && value_desc.get_value_node()->is_exported())
                {
                        label+=strprintf(" (%s)",value_desc.get_value_node()->get_id().c_str());
                }
-               
+
                Glib::Value<Glib::ustring> x;
                g_value_init(x.gobj(),x.value_type());
 
                x.set(label);
-               
+
                g_value_init(value.gobj(),x.value_type());
                g_value_copy(x.gobj(),value.gobj());
        }
@@ -172,9 +174,9 @@ LayerParamTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int
                g_value_init(x.gobj(),x.value_type());
 
                TreeModel::Path path(get_path(iter));
-               
+
                x.set(path.get_depth()<=1);
-               
+
                g_value_init(value.gobj(),x.value_type());
                g_value_copy(x.gobj(),value.gobj());
        }
@@ -186,12 +188,12 @@ LayerParamTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int
                        CanvasTreeStore::get_value_vfunc(iter,column,value);
                        return;
                }
-               
+
                Glib::Value<bool> x;
                g_value_init(x.gobj(),x.value_type());
 
                x.set(false);
-               
+
                g_value_init(value.gobj(),x.value_type());
                g_value_copy(x.gobj(),value.gobj());
        }
@@ -226,7 +228,7 @@ LayerParamTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int co
                        Glib::Value<synfig::ValueBase> x;
                        g_value_init(x.gobj(),model.value.type());
                        g_value_copy(value.gobj(),x.gobj());
-                       
+
                        if((bool)(*iter)[model.is_toplevel])
                        {
                                synfigapp::Action::PassiveGrouper group(canvas_interface()->get_instance().get(),_("Set Layer Params"));
@@ -234,7 +236,7 @@ LayerParamTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int co
                                synfig::ParamDesc param_desc((*iter)[model.param_desc]);
 
                                LayerList::iterator iter2(layer_list.begin());
-                               
+
                                for(;iter2!=layer_list.end();++iter2)
                                {
                                        if(!canvas_interface()->change_value(synfigapp::ValueDesc(*iter2,param_desc.get_name()),x.get()))
@@ -242,7 +244,7 @@ LayerParamTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int co
                                                // ERROR!
                                                group.cancel();
                                                App::dialog_error_blocking(_("Error"),_("Unable to set all layer parameters."));
-                                               
+
                                                return;
                                        }
                                }
@@ -258,23 +260,23 @@ LayerParamTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int co
                if(column==model.active.index())
                {
                        synfig::Layer::Handle layer((*iter)[model.layer]);
-                       
+
                        if(!layer)return;
 
                        Glib::Value<bool> x;
                        g_value_init(x.gobj(),model.active.type());
                        g_value_copy(value.gobj(),x.gobj());
-                       
+
                        synfigapp::Action::Handle action(synfigapp::Action::create("layer_activate"));
-                       
+
                        if(!action)
                                return;
-                       
+
                        action->set_param("canvas",canvas_interface()->get_canvas());
                        action->set_param("canvas_interface",canvas_interface());
                        action->set_param("layer",layer);
                        action->set_param("new_status",bool(x.get()));
-                       
+
                        canvas_interface()->get_instance()->perform_action(action);
                        return;
                }
@@ -285,7 +287,7 @@ LayerParamTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int co
        catch(std::exception x)
        {
                g_warning(x.what());
-       }       
+       }
 }
 
 
@@ -300,14 +302,14 @@ LayerParamTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int co
 void
 LayerParamTreeStore::rebuild()
 {
-       Profiler profiler("LayerParamTreeStore::rebuild()");
+       // Profiler profiler("LayerParamTreeStore::rebuild()");
        if(queued)queued=false;
        clear();
        layer_list=layer_tree->get_selected_layers();
-       
+
        if(layer_list.size()<=0)
                return;
-       
+
        // Get rid of all the connections,
        // and clear the connection map.
        //while(!connection_map.empty())connection_map.begin()->second.disconnect(),connection_map.erase(connection_map.begin());
@@ -324,17 +326,17 @@ LayerParamTreeStore::rebuild()
                static ParamVocab::iterator find_param_desc(ParamVocab& vocab, const synfig::String& x)
                {
                        ParamVocab::iterator iter;
-       
+
                        for(iter=vocab.begin();iter!=vocab.end();++iter)
                                if(iter->get_name()==x)
                                        break;
                        return iter;
                }
-               
+
                void process_vocab(ParamVocab x)
                {
                        ParamVocab::iterator iter;
-       
+
                        for(iter=vocab.begin();iter!=vocab.end();++iter)
                        {
                                ParamVocab::iterator iter2(find_param_desc(x,iter->get_name()));
@@ -348,14 +350,14 @@ LayerParamTreeStore::rebuild()
                                }
                        }
                }
-               
+
        } rebuild_helper;
 
-       
+
        {
                LayerList::iterator iter(layer_list.begin());
                rebuild_helper.vocab=(*iter)->get_param_vocab();
-               
+
                for(++iter;iter!=layer_list.end();++iter)
                {
                        rebuild_helper.process_vocab((*iter)->get_param_vocab());
@@ -369,13 +371,13 @@ LayerParamTreeStore::rebuild()
                        );
                }
        }
-       
+
        ParamVocab::iterator iter;
        for(iter=rebuild_helper.vocab.begin();iter!=rebuild_helper.vocab.end();++iter)
        {
                if(iter->get_hidden())
                        continue;
-               
+
                /*
                if(iter->get_animation_only())
                {
@@ -400,8 +402,9 @@ LayerParamTreeStore::rebuild()
                }
                if(value_desc.get_value_type()==ValueBase::TYPE_CANVAS)
                {
-                       changed_connection_list.push_back(
-                               value_desc.get_value().get(Canvas::Handle())->signal_changed().connect(
+                       Canvas::Handle canvas_handle = value_desc.get_value().get(Canvas::Handle());
+                       if(canvas_handle) changed_connection_list.push_back(
+                               canvas_handle->signal_changed().connect(
                                        sigc::mem_fun(
                                                this,
                                                &LayerParamTreeStore::changed
@@ -423,11 +426,12 @@ LayerParamTreeStore::rebuild()
                        if(value!=((*iter2)->get_param(iter->get_name())))
                        {
                                row[model.is_inconsistent] = true;
-                               while(!row.children().empty() && erase(row.children().begin()));
+                               while(!row.children().empty() && erase(row.children().begin()))
+                                       ;
                                break;
-                       }       
+                       }
                }
-       }       
+       }
 }
 
 void
@@ -466,11 +470,11 @@ void
 LayerParamTreeStore::refresh()
 {
        if(queued)queued=false;
-       
+
        Gtk::TreeModel::Children children_(children());
-       
+
        Gtk::TreeModel::Children::iterator iter;
-       
+
        if(!children_.empty())
                for(iter = children_.begin(); iter && iter != children_.end(); ++iter)
                {
@@ -486,7 +490,7 @@ LayerParamTreeStore::refresh_row(Gtk::TreeModel::Row &row)
        {
                row[model.is_inconsistent] = false;
                ParamDesc param_desc(row[model.param_desc]);
-               
+
                LayerList::iterator iter2(layer_list.begin());
                ValueBase value((*iter2)->get_param(param_desc.get_name()));
                for(++iter2;iter2!=layer_list.end();++iter2)
@@ -494,9 +498,10 @@ LayerParamTreeStore::refresh_row(Gtk::TreeModel::Row &row)
                        if(value!=((*iter2)->get_param(param_desc.get_name())))
                        {
                                row[model.is_inconsistent] = true;
-                               while(!row.children().empty() && erase(row.children().begin()));
+                               while(!row.children().empty() && erase(row.children().begin()))
+                                       ;
                                return;
-                       }       
+                       }
                }
        }
 
@@ -512,49 +517,56 @@ void
 LayerParamTreeStore::set_row(Gtk::TreeRow row,synfigapp::ValueDesc value_desc)
 {
        Gtk::TreeModel::Children children = row.children();
-       while(!children.empty() && erase(children.begin()));
+       while(!children.empty() && erase(children.begin()))
+               ;
 
        CanvasTreeStore::set_row(row,value_desc);
 }
 
 void
-LayerParamTreeStore::on_value_node_added(ValueNode::Handle value_node)
+LayerParamTreeStore::on_value_node_added(synfig::ValueNode::Handle /*value_node*/)
 {
 //     queue_refresh();
 }
 
 void
-LayerParamTreeStore::on_value_node_deleted(etl::handle<ValueNode> value_node)
+LayerParamTreeStore::on_value_node_deleted(synfig::ValueNode::Handle /*value_node*/)
 {
 //     queue_refresh();
 }
 
 void
-LayerParamTreeStore::on_value_node_child_added(synfig::ValueNode::Handle value_node,synfig::ValueNode::Handle child)
+LayerParamTreeStore::on_value_node_child_added(synfig::ValueNode::Handle /*value_node*/,synfig::ValueNode::Handle /*child*/)
 {
        queue_rebuild();
 }
 
 void
-LayerParamTreeStore::on_value_node_child_removed(synfig::ValueNode::Handle value_node,synfig::ValueNode::Handle child)
+LayerParamTreeStore::on_value_node_child_removed(synfig::ValueNode::Handle /*value_node*/,synfig::ValueNode::Handle /*child*/)
 {
        rebuild();
 }
 
 void
-LayerParamTreeStore::on_value_node_changed(etl::handle<ValueNode> value_node)
+LayerParamTreeStore::on_value_node_changed(synfig::ValueNode::Handle /*value_node*/)
 {
        queue_refresh();
 }
 
 void
-LayerParamTreeStore::on_value_node_replaced(synfig::ValueNode::Handle replaced_value_node,synfig::ValueNode::Handle new_value_node)
+LayerParamTreeStore::on_value_node_renamed(synfig::ValueNode::Handle /*value_node*/)
+{
+       rebuild();
+}
+
+void
+LayerParamTreeStore::on_value_node_replaced(synfig::ValueNode::Handle /*replaced_value_node*/,synfig::ValueNode::Handle /*new_value_node*/)
 {
        queue_rebuild();
 }
 
 void
-LayerParamTreeStore::on_layer_param_changed(synfig::Layer::Handle handle,synfig::String param_name)
+LayerParamTreeStore::on_layer_param_changed(synfig::Layer::Handle /*handle*/,synfig::String /*param_name*/)
 {
        queue_refresh();
 }