Remove spaces and tabs at end of lines.
[synfig.git] / synfig-studio / trunk / src / gtkmm / layertree.cpp
index 1317124..a69f234 100644 (file)
@@ -2,10 +2,11 @@
 /*!    \file layertree.cpp
 **     \brief Template File
 **
-**     $Id: layertree.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
 #include "instance.h"
 #include <gtkmm/treemodelsort.h>
 
+#ifdef TIMETRACK_IN_PARAMS_PANEL
+#  include <synfig/timepointcollect.h>
+#endif // TIMETRACK_IN_PARAMS_PANEL
+
+#include "general.h"
+
 #endif
 
 /* === U S I N G =========================================================== */
@@ -116,9 +123,6 @@ LayerTree::LayerTree():
        attach(*layer_amount_hscale, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK, 1, 1);
        layer_amount_adjustment_.signal_value_changed().connect(sigc::mem_fun(*this, &studio::LayerTree::on_amount_value_changed));
 
-
-
-
        Gtk::Image *icon;
        //Gtk::IconSize iconsize(Gtk::IconSize::from_name("synfig-small_icon"));
        Gtk::IconSize iconsize(Gtk::ICON_SIZE_SMALL_TOOLBAR);
@@ -126,35 +130,34 @@ LayerTree::LayerTree():
        SMALL_BUTTON(button_raise,"gtk-go-up","Raise");
        SMALL_BUTTON(button_lower,"gtk-go-down","Lower");
        SMALL_BUTTON(button_duplicate,"synfig-duplicate","Duplicate");
+       SMALL_BUTTON(button_encapsulate,"synfig-encapsulate","Encapsulate");
        SMALL_BUTTON(button_delete,"gtk-delete","Delete");
 
        hbox->pack_start(*button_raise,Gtk::PACK_SHRINK);
        hbox->pack_start(*button_lower,Gtk::PACK_SHRINK);
        hbox->pack_start(*button_duplicate,Gtk::PACK_SHRINK);
+       hbox->pack_start(*button_encapsulate,Gtk::PACK_SHRINK);
        hbox->pack_start(*button_delete,Gtk::PACK_SHRINK);
 
-       button_raise->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_raise_pressed));
-       button_lower->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_lower_pressed));
-       button_duplicate->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_duplicate_pressed));
-       button_delete->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_delete_pressed));
+       // button_raise->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_raise_pressed));
+       // button_lower->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_lower_pressed));
+       // button_duplicate->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_duplicate_pressed));
+       // button_encapsulate->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_encapsulate_pressed));
+       // button_delete->signal_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_delete_pressed));
 
        button_raise->set_sensitive(false);
        button_lower->set_sensitive(false);
        button_duplicate->set_sensitive(false);
+       button_encapsulate->set_sensitive(false);
        button_delete->set_sensitive(false);
 
-
-
-
        get_selection()->signal_changed().connect(sigc::mem_fun(*this, &studio::LayerTree::on_selection_changed));
 
-
        get_layer_tree_view().set_reorderable(true);
        get_selection()->set_mode(Gtk::SELECTION_MULTIPLE);
        //get_param_tree_view().get_selection()->set_mode(Gtk::SELECTION_MULTIPLE);
        get_layer_tree_view().show();
-       param_tree_view().show();
-
+       get_param_tree_view().show();
 
        hbox->show();
        layer_amount_hscale->show();
@@ -163,10 +166,6 @@ LayerTree::LayerTree():
        tooltips_.enable();
        disable_amount_changed_signal=false;
 
-
-
-
-
        blend_method_widget.set_param_desc(ParamDesc(Color::BlendMethod(),"blend_method"));
 
        blend_method_widget.set_value((int)Color::BLEND_COMPOSITE);
@@ -175,10 +174,10 @@ LayerTree::LayerTree():
        blend_method_widget.signal_activate().connect(sigc::mem_fun(*this, &studio::LayerTree::on_blend_method_changed));
 }
 
-
 LayerTree::~LayerTree()
 {
-       synfig::info("LayerTree::~LayerTree(): Deleted");
+       if (getenv("SYNFIG_DEBUG_DESTRUCTORS"))
+               synfig::info("LayerTree::~LayerTree(): Deleted");
 }
 
 Gtk::Widget*
@@ -186,7 +185,6 @@ LayerTree::create_layer_tree()
 {
        const LayerTreeStore::Model model;
 
-
        {       // --- O N / O F F ----------------------------------------------------
                //int index;
                //index=get_layer_tree_view().append_column_editable(_(" "),layer_model.active);
@@ -209,8 +207,7 @@ LayerTree::create_layer_tree()
                Gtk::TreeView::Column* column = get_layer_tree_view().get_column(index-1);
                get_layer_tree_view().set_expander_column(*column);
 
-
-               column->set_sort_column_id(layer_model.z_depth);
+               column->set_sort_column(layer_model.z_depth);
                //column->set_reorderable();
                //column->set_resizable();
                //column->set_clickable();
@@ -221,27 +218,27 @@ LayerTree::create_layer_tree()
        }
        //get_layer_tree_view().append_column(_("Z"),layer_model.z_depth);
        {       // --- N A M E --------------------------------------------------------
-               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Layer")) );
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Name")) );
 
                // Set up the icon cell-renderer
                Gtk::CellRendererText* cellrenderer = Gtk::manage( new Gtk::CellRendererText() );
+               column->pack_start(*cellrenderer,false);
+               column->add_attribute(cellrenderer->property_text(), layer_model.label);
                cellrenderer->signal_edited().connect(sigc::mem_fun(*this, &studio::LayerTree::on_layer_renamed));
                cellrenderer->property_editable()=true;
 
-               column->pack_start(*cellrenderer,false);
-               column->add_attribute(cellrenderer->property_text(), layer_model.label);
+               column->set_reorderable();
+               // column->set_resizable();
+               column->set_clickable(true);
+               column->set_sort_column(layer_model.label);
+
                get_layer_tree_view().append_column(*column);
 
                //              int index;
 //             index=get_layer_tree_view().append_column_editable(_("Layer"),layer_model.label);
                //Gtk::TreeView::Column* column = get_layer_tree_view().get_column(index-1);
 
-               //column->set_sort_column_id(layer_model.index);
-
                //get_layer_tree_view().set_expander_column(*column);
-               //column->set_reorderable();
-               //column->set_resizable();
-               //column->set_clickable(false);
 
                //Gtk::CellRendererPixbuf* icon_cellrenderer = Gtk::manage( new Gtk::CellRendererPixbuf() );
                //column->pack_start(*icon_cellrenderer,false);
@@ -256,7 +253,7 @@ LayerTree::create_layer_tree()
                column_z_depth->set_resizable();
                column_z_depth->set_clickable();
 
-               column_z_depth->set_sort_column_id(layer_model.z_depth);
+               column_z_depth->set_sort_column(layer_model.z_depth);
        }
 
        get_layer_tree_view().set_enable_search(true);
@@ -267,7 +264,6 @@ LayerTree::create_layer_tree()
        listTargets.push_back( Gtk::TargetEntry("LAYER") );
        get_layer_tree_view().drag_dest_set(listTargets);
 
-
        // This makes things easier to read.
        get_layer_tree_view().set_rules_hint();
 
@@ -277,8 +273,6 @@ LayerTree::create_layer_tree()
        get_layer_tree_view().signal_event().connect(sigc::mem_fun(*this, &studio::LayerTree::on_layer_tree_event));
        get_layer_tree_view().show();
 
-
-
        Gtk::ScrolledWindow *scroll = manage(new class Gtk::ScrolledWindow());
        scroll->set_flags(Gtk::CAN_FOCUS);
        scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
@@ -303,7 +297,7 @@ LayerTree::create_param_tree()
        Gtk::IconSize icon_size(Gtk::ICON_SIZE_SMALL_TOOLBAR);
 
        {       // --- N A M E --------------------------------------------------------
-               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Param")) );
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Name")) );
 
                // Set up the icon cell-renderer
                Gtk::CellRendererPixbuf* icon_cellrenderer = Gtk::manage( new Gtk::CellRendererPixbuf() );
@@ -334,65 +328,77 @@ LayerTree::create_param_tree()
                column->set_resizable();
                column->set_clickable();
 
-               param_tree_view().append_column(*column);
+               get_param_tree_view().append_column(*column);
        }
        {       // --- V A L U E  -----------------------------------------------------
-               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("ValueBase")) );
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Value")) );
 
                // Set up the value cell-renderer
                cellrenderer_value=LayerParamTreeStore::add_cell_renderer_value(column);
                cellrenderer_value->signal_edited().connect(sigc::mem_fun(*this, &studio::LayerTree::on_edited_value));
                cellrenderer_value->property_value()=synfig::ValueBase();
                column->add_attribute(cellrenderer_value->property_param_desc(), param_model.param_desc);
-               column->add_attribute(cellrenderer_value->property_inconsistant(),param_model.is_inconsistent);
+               column->add_attribute(cellrenderer_value->property_inconsistent(),param_model.is_inconsistent);
                //cellrenderer_value->property_canvas()=canvas_interface->get_canvas(); // Is this line necessary?
                cellrenderer_value->property_attributes()=attr_list;
 
                // Finish setting up the column
-               param_tree_view().append_column(*column);
+               get_param_tree_view().append_column(*column);
                column->set_sizing(Gtk::TREE_VIEW_COLUMN_AUTOSIZE);
                column->set_clickable();
                column->set_min_width(120);
                column->set_reorderable();
                column->set_resizable();
        }
-       /*{     // --- T I M E   T R A C K --------------------------------------------
+       {       // --- T Y P E --------------------------------------------------------
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Type")) );
+               Gtk::CellRendererText* text_cellrenderer = Gtk::manage( new Gtk::CellRendererText() );
+               column->pack_start(*text_cellrenderer,false);
+               column->add_attribute(text_cellrenderer->property_text(), param_model.type);
+               text_cellrenderer->property_attributes()=attr_list;
+               get_param_tree_view().append_column(*column);
+               column->set_reorderable();
+               column->set_resizable();
+               column->set_clickable();
+               column->set_sort_column(param_model.type);
+       }
+#ifdef TIMETRACK_IN_PARAMS_PANEL
+       {       // --- T I M E   T R A C K --------------------------------------------
                Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Time Track")) );
                column_time_track=column;
 
                // Set up the value-node cell-renderer
                cellrenderer_time_track=LayerParamTreeStore::add_cell_renderer_value_node(column);
                cellrenderer_time_track->property_mode()=Gtk::CELL_RENDERER_MODE_ACTIVATABLE;
-               cellrenderer_time_track->signal_waypoint_clicked().connect(sigc::mem_fun(*this, &studio::LayerTree::on_waypoint_clicked) );
+               cellrenderer_time_track->signal_waypoint_clicked_cellrenderer().connect(sigc::mem_fun(*this, &studio::LayerTree::on_waypoint_clicked_layertree) );
                cellrenderer_time_track->signal_waypoint_changed().connect(sigc::mem_fun(*this, &studio::LayerTree::on_waypoint_changed) );
                column->add_attribute(cellrenderer_time_track->property_value_desc(), param_model.value_desc);
                column->add_attribute(cellrenderer_time_track->property_canvas(), param_model.canvas);
-               //column->add_attribute(cellrenderer_time_track->property_visible(), model.is_value_node);
-
-               //column->pack_start(*cellrenderer_time_track);
+               column->add_attribute(cellrenderer_time_track->property_visible(), param_model.is_value_node);
 
                // Finish setting up the column
                column->set_reorderable();
                column->set_resizable();
                column->set_min_width(200);
-               //param_tree_view().append_column(*column);
-       }*/
-
 
+               if (!getenv("SYNFIG_DISABLE_PARAMS_PANEL_TIMETRACK"))
+                       get_param_tree_view().append_column(*column);
+       }
+#endif // TIMETRACK_IN_PARAMS_PANEL
 
        // This makes things easier to read.
-       param_tree_view().set_rules_hint();
+       get_param_tree_view().set_rules_hint();
 
        // Make us more sensitive to several events
-       param_tree_view().add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::BUTTON1_MOTION_MASK | Gdk::BUTTON2_MOTION_MASK|Gdk::POINTER_MOTION_MASK);
+       get_param_tree_view().add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::BUTTON1_MOTION_MASK | Gdk::BUTTON2_MOTION_MASK|Gdk::POINTER_MOTION_MASK);
 
-       param_tree_view().signal_event().connect(sigc::mem_fun(*this, &studio::LayerTree::on_param_tree_event));
-       param_tree_view().show();
+       get_param_tree_view().signal_event().connect(sigc::mem_fun(*this, &studio::LayerTree::on_param_tree_event));
+       get_param_tree_view().show();
 
        Gtk::ScrolledWindow *scroll = manage(new class Gtk::ScrolledWindow());
        scroll->set_flags(Gtk::CAN_FOCUS);
        scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-       //scroll->add(param_tree_view());
+       //scroll->add(get_param_tree_view());
        scroll->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
        scroll->show();
 
@@ -411,11 +417,11 @@ LayerTree::on_waypoint_changed( synfig::Waypoint waypoint , synfig::ValueNode::H
        param_list.add("waypoint",waypoint);
 //     param_list.add("time",canvas_interface()->get_time());
 
-       etl::handle<studio::Instance>::cast_static(layer_tree_store_->canvas_interface()->get_instance())->process_action("waypoint_set_smart", param_list);
+       etl::handle<studio::Instance>::cast_static(layer_tree_store_->canvas_interface()->get_instance())->process_action("WaypointSetSmart", param_list);
 }
 
 void
-LayerTree::select_layer(Layer::Handle layer)
+LayerTree::select_layer(synfig::Layer::Handle layer)
 {
        Gtk::TreeModel::Children::iterator iter;
        if(layer_tree_store_->find_layer_row(layer,iter))
@@ -510,18 +516,6 @@ LayerTree::clear_selected_layers()
        get_layer_tree_view().get_selection()->unselect_all();
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
 void
 LayerTree::set_show_timetrack(bool x)
 {
@@ -535,7 +529,6 @@ LayerTree::set_model(Glib::RefPtr<LayerTreeStore> layer_tree_store)
 {
        layer_tree_store_=layer_tree_store;
 
-
        if(false)
        {
                sorted_layer_tree_store_=Gtk::TreeModelSort::create(layer_tree_store);
@@ -543,7 +536,7 @@ LayerTree::set_model(Glib::RefPtr<LayerTreeStore> layer_tree_store)
                sorted_layer_tree_store_->set_default_sort_func(sigc::ptr_fun(&studio::LayerTreeStore::z_sorter));
 
                //sorted_store->set_sort_func(model.time.index(),sigc::mem_fun(&studio::KeyframeTreeStore::time_sorter));
-               //sorted_store->set_sort_column_id(model.time.index(), Gtk::SORT_ASCENDING);
+               //sorted_store->set_sort_column(model.time.index(), Gtk::SORT_ASCENDING);
 
                get_layer_tree_view().set_model(sorted_layer_tree_store_);
        }
@@ -556,29 +549,30 @@ LayerTree::set_model(Glib::RefPtr<LayerTreeStore> layer_tree_store)
 
        layer_tree_store_->canvas_interface()->signal_time_changed().connect(
                sigc::mem_fun(
-                       &param_tree_view(),
+                       &get_param_tree_view(),
                        &Gtk::Widget::queue_draw
                )
        );
        if(!param_tree_store_)
        {
                param_tree_store_=LayerParamTreeStore::create(layer_tree_store_->canvas_interface(), this);
-               param_tree_view().set_model(param_tree_store_);
+               get_param_tree_view().set_model(param_tree_store_);
        }
 
-/*     if(cellrenderer_time_track && layer_tree_store_ && layer_tree_store_->canvas_interface())
-       {
+#ifdef TIMETRACK_IN_PARAMS_PANEL
+       if(cellrenderer_time_track && layer_tree_store_ && layer_tree_store_->canvas_interface())
                cellrenderer_time_track->set_canvas_interface(layer_tree_store_->canvas_interface());
-       }
-*/
+#endif // TIMETRACK_IN_PARAMS_PANEL
 }
 
 void
 LayerTree::set_time_adjustment(Gtk::Adjustment &adjustment)
 {
-       //cellrenderer_time_track->set_adjustment(adjustment);
-       adjustment.signal_value_changed().connect(sigc::mem_fun(param_tree_view(),&Gtk::TreeView::queue_draw));
-       adjustment.signal_changed().connect(sigc::mem_fun(param_tree_view(),&Gtk::TreeView::queue_draw));
+#ifdef TIMETRACK_IN_PARAMS_PANEL
+       cellrenderer_time_track->set_adjustment(adjustment);
+#endif // TIMETRACK_IN_PARAMS_PANEL
+       adjustment.signal_value_changed().connect(sigc::mem_fun(get_param_tree_view(),&Gtk::TreeView::queue_draw));
+       adjustment.signal_changed().connect(sigc::mem_fun(get_param_tree_view(),&Gtk::TreeView::queue_draw));
 }
 
 void
@@ -618,7 +612,6 @@ LayerTree::on_selection_changed()
                }
        }
 
-
        {
                if(!layer_list.empty())
                {
@@ -631,12 +624,12 @@ LayerTree::on_selection_changed()
                }
        }
 
-
        if(layer_list.empty())
        {
                button_raise->set_sensitive(false);
                button_lower->set_sensitive(false);
                button_duplicate->set_sensitive(false);
+               button_encapsulate->set_sensitive(false);
                button_delete->set_sensitive(false);
                layer_amount_hscale->set_sensitive(false);
                blend_method_widget.set_sensitive(false);
@@ -646,9 +639,10 @@ LayerTree::on_selection_changed()
        button_raise->set_sensitive(true);
        button_lower->set_sensitive(true);
        button_duplicate->set_sensitive(true);
+       button_encapsulate->set_sensitive(true);
        button_delete->set_sensitive(true);
 
-       if(layer_list.size()==1 && (*layer_list.begin())->get_param("amount").is_valid()&& (*layer_list.begin())->get_param("amount").same_as(Real()))
+       if(layer_list.size()==1 && (*layer_list.begin())->get_param("amount").is_valid()&& (*layer_list.begin())->get_param("amount").same_type_as(Real()))
        {
                quick_layer=*layer_list.begin();
        }
@@ -678,7 +672,6 @@ LayerTree::on_selection_changed()
        }
 }
 
-
 void
 LayerTree::on_blend_method_changed()
 {
@@ -708,13 +701,12 @@ LayerTree::on_amount_value_changed()
        disable_amount_changed_signal=false;
 }
 
-
 void
 LayerTree::on_edited_value(const Glib::ustring&path_string,synfig::ValueBase value)
 {
        Gtk::TreePath path(path_string);
 
-       const Gtk::TreeRow row = *(param_tree_view().get_model()->get_iter(path));
+       const Gtk::TreeRow row = *(get_param_tree_view().get_model()->get_iter(path));
        if(!row)
                return;
        row[param_model.value]=value;
@@ -730,6 +722,7 @@ LayerTree::on_layer_renamed(const Glib::ustring&path_string,const Glib::ustring&
        if(!row)
                return;
        row[layer_model.label]=value;
+       get_layer_tree_view().columns_autosize();
 }
 
 void
@@ -742,17 +735,32 @@ LayerTree::on_layer_toggle(const Glib::ustring& path_string)
        row[layer_model.active]=!active;
 }
 
+#ifdef TIMETRACK_IN_PARAMS_PANEL
 void
-LayerTree::on_waypoint_clicked(const Glib::ustring &path_string, synfig::Waypoint waypoint,int button)
+LayerTree::on_waypoint_clicked_layertree(const etl::handle<synfig::Node>& node __attribute__ ((unused)),
+                                                                                const synfig::Time& time __attribute__ ((unused)),
+                                                                                const synfig::Time& time_offset __attribute__ ((unused)),
+                                                                                int button __attribute__ ((unused)))
 {
-       Gtk::TreePath path(path_string);
+       std::set<synfig::Waypoint, std::less<UniqueID> > waypoint_set;
+       synfig::waypoint_collect(waypoint_set,time,node);
 
-       const Gtk::TreeRow row = *(param_tree_view().get_model()->get_iter(path));
-       if(!row)
-               return;
+       synfigapp::ValueDesc value_desc;
 
-       signal_waypoint_clicked()(static_cast<synfigapp::ValueDesc>(row[param_model.value_desc]),waypoint,button);
+       if (waypoint_set.size() == 1)
+       {
+               ValueNode::Handle value_node(waypoint_set.begin()->get_parent_value_node());
+               assert(value_node);
+
+               Gtk::TreeRow row;
+               if (param_tree_store_->find_first_value_node(value_node, row) && row)
+                       value_desc = static_cast<synfigapp::ValueDesc>(row[param_tree_store_->model.value_desc]);
+       }
+
+       if (!waypoint_set.empty())
+               signal_waypoint_clicked_layertree()(value_desc,waypoint_set,button);
 }
+#endif // TIMETRACK_IN_PARAMS_PANEL
 
 bool
 LayerTree::on_layer_tree_event(GdkEvent *event)
@@ -773,10 +781,12 @@ LayerTree::on_layer_tree_event(GdkEvent *event)
                        ) break;
                        const Gtk::TreeRow row = *(get_layer_tree_view().get_model()->get_iter(path));
 
-                       //if(column->get_first_cell_renderer()==cellrenderer_time_track)
-                       //      return signal_layer_user_click()(event->button.button,row,COLUMNID_TIME_TRACK);
-                       //else
-                               if(column->get_first_cell_renderer()==cellrenderer_value)
+#ifdef TIMETRACK_IN_PARAMS_PANEL
+                       if(column->get_first_cell_renderer()==cellrenderer_time_track)
+                               return signal_layer_user_click()(event->button.button,row,COLUMNID_TIME_TRACK);
+                       else
+#endif // TIMETRACK_IN_PARAMS_PANEL
+                       if(column->get_first_cell_renderer()==cellrenderer_value)
                                return signal_layer_user_click()(event->button.button,row,COLUMNID_VALUE);
                        else
                                return signal_layer_user_click()(event->button.button,row,COLUMNID_NAME);
@@ -802,14 +812,12 @@ LayerTree::on_layer_tree_event(GdkEvent *event)
 
                        Gtk::TreeRow row = *(get_layer_tree_view().get_model()->get_iter(path));
 
-                       /*
+#ifdef TIMETRACK_IN_PARAMS_PANEL
                        if(cellrenderer_time_track==column->get_first_cell_renderer())
-                       {
                                // Movement on TimeLine
                                return true;
-                       }
                        else
-                               */
+#endif // TIMETRACK_IN_PARAMS_PANEL
                        if(last_tooltip_path.get_depth()<=0 || path!=last_tooltip_path)
                        {
                                tooltips_.unset_tip(*this);
@@ -831,7 +839,6 @@ LayerTree::on_layer_tree_event(GdkEvent *event)
        return false;
 }
 
-
 bool
 LayerTree::on_param_tree_event(GdkEvent *event)
 {
@@ -842,28 +849,30 @@ LayerTree::on_param_tree_event(GdkEvent *event)
                        Gtk::TreeModel::Path path;
                        Gtk::TreeViewColumn *column;
                        int cell_x, cell_y;
-                       if(!param_tree_view().get_path_at_pos(
+                       if(!get_param_tree_view().get_path_at_pos(
                                int(event->button.x),int(event->button.y),      // x, y
                                path, // TreeModel::Path&
                                column, //TreeViewColumn*&
                                cell_x,cell_y //int&cell_x,int&cell_y
                                )
                        ) break;
-                       const Gtk::TreeRow row = *(param_tree_view().get_model()->get_iter(path));
+                       const Gtk::TreeRow row = *(get_param_tree_view().get_model()->get_iter(path));
 
-/*                     if(column && column->get_first_cell_renderer()==cellrenderer_time_track)
+#ifdef TIMETRACK_IN_PARAMS_PANEL
+                       if(column && column->get_first_cell_renderer()==cellrenderer_time_track)
                        {
                                Gdk::Rectangle rect;
-                               param_tree_view().get_cell_area(path,*column,rect);
+                               get_param_tree_view().get_cell_area(path,*column,rect);
                                cellrenderer_time_track->property_value_desc()=row[param_model.value_desc];
                                cellrenderer_time_track->property_canvas()=row[param_model.canvas];
                                cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
-                               param_tree_view().queue_draw_area(rect.get_x(),rect.get_y(),rect.get_width(),rect.get_height());
+                               get_param_tree_view().queue_draw_area(rect.get_x(),rect.get_y(),rect.get_width(),rect.get_height());
                                return true;
                                //return signal_param_user_click()(event->button.button,row,COLUMNID_TIME_TRACK);
                        }
                        else
-*/                     {
+#endif // TIMETRACK_IN_PARAMS_PANEL
+                       {
                                if(event->button.button==3)
                                {
                                        LayerList layer_list(get_selected_layers());
@@ -871,11 +880,13 @@ LayerTree::on_param_tree_event(GdkEvent *event)
                                        {
                                                synfigapp::ValueDesc value_desc(row[param_model.value_desc]);
                                                Gtk::Menu* menu(manage(new Gtk::Menu()));
+                                               menu->signal_hide().connect(sigc::bind(sigc::ptr_fun(&delete_widget), menu));
                                                App::get_instance(param_tree_store_->canvas_interface()->get_canvas())->make_param_menu(menu,param_tree_store_->canvas_interface()->get_canvas(),value_desc,0.5f);
                                                menu->popup(event->button.button,gtk_get_current_event_time());
                                                return true;
                                        }
                                        Gtk::Menu* menu(manage(new Gtk::Menu()));
+                                       menu->signal_hide().connect(sigc::bind(sigc::ptr_fun(&delete_widget), menu));
                                        std::list<synfigapp::ValueDesc> value_desc_list;
                                        ParamDesc param_desc(row[param_model.param_desc]);
                                        for(;!layer_list.empty();layer_list.pop_back())
@@ -900,7 +911,7 @@ LayerTree::on_param_tree_event(GdkEvent *event)
                        Gtk::TreeModel::Path path;
                        Gtk::TreeViewColumn *column;
                        int cell_x, cell_y;
-                       if(!param_tree_view().get_path_at_pos(
+                       if(!get_param_tree_view().get_path_at_pos(
                                (int)event->motion.x,(int)event->motion.y,      // x, y
                                path, // TreeModel::Path&
                                column, //TreeViewColumn*&
@@ -908,24 +919,26 @@ LayerTree::on_param_tree_event(GdkEvent *event)
                                )
                        ) break;
 
-                       if(!param_tree_view().get_model()->get_iter(path))
+                       if(!get_param_tree_view().get_model()->get_iter(path))
                                break;
 
-                       Gtk::TreeRow row = *(param_tree_view().get_model()->get_iter(path));
+                       Gtk::TreeRow row = *(get_param_tree_view().get_model()->get_iter(path));
 
-/*                     if((event->motion.state&GDK_BUTTON1_MASK ||event->motion.state&GDK_BUTTON3_MASK) && column && cellrenderer_time_track==column->get_first_cell_renderer())
+#ifdef TIMETRACK_IN_PARAMS_PANEL
+                       if((event->motion.state&GDK_BUTTON1_MASK ||event->motion.state&GDK_BUTTON3_MASK) && column && cellrenderer_time_track==column->get_first_cell_renderer())
                        {
                                Gdk::Rectangle rect;
-                               param_tree_view().get_cell_area(path,*column,rect);
+                               get_param_tree_view().get_cell_area(path,*column,rect);
                                cellrenderer_time_track->property_value_desc()=row[param_model.value_desc];
                                cellrenderer_time_track->property_canvas()=row[param_model.canvas];
                                cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
-                               param_tree_view().queue_draw();
-                               //param_tree_view().queue_draw_area(rect.get_x(),rect.get_y(),rect.get_width(),rect.get_height());
+                               get_param_tree_view().queue_draw();
+                               //get_param_tree_view().queue_draw_area(rect.get_x(),rect.get_y(),rect.get_width(),rect.get_height());
                                return true;
                        }
                        else
-*/                     if(last_tooltip_path.get_depth()<=0 || path!=last_tooltip_path)
+#endif // TIMETRACK_IN_PARAMS_PANEL
+                       if(last_tooltip_path.get_depth()<=0 || path!=last_tooltip_path)
                        {
                                tooltips_.unset_tip(*this);
                                Glib::ustring tooltips_string(row[layer_model.tooltip]);
@@ -943,7 +956,7 @@ LayerTree::on_param_tree_event(GdkEvent *event)
                        Gtk::TreeModel::Path path;
                        Gtk::TreeViewColumn *column;
                        int cell_x, cell_y;
-                       if(!param_tree_view().get_path_at_pos(
+                       if(!get_param_tree_view().get_path_at_pos(
                                (int)event->button.x,(int)event->button.y,      // x, y
                                path, // TreeModel::Path&
                                column, //TreeViewColumn*&
@@ -951,24 +964,25 @@ LayerTree::on_param_tree_event(GdkEvent *event)
                                )
                        ) break;
 
-                       if(!param_tree_view().get_model()->get_iter(path))
+                       if(!get_param_tree_view().get_model()->get_iter(path))
                                break;
 
-                       Gtk::TreeRow row = *(param_tree_view().get_model()->get_iter(path));
+                       Gtk::TreeRow row = *(get_param_tree_view().get_model()->get_iter(path));
 
-/*                     if(column && cellrenderer_time_track==column->get_first_cell_renderer())
+#ifdef TIMETRACK_IN_PARAMS_PANEL
+                       if(column && cellrenderer_time_track==column->get_first_cell_renderer())
                        {
                                Gdk::Rectangle rect;
-                               param_tree_view().get_cell_area(path,*column,rect);
+                               get_param_tree_view().get_cell_area(path,*column,rect);
                                cellrenderer_time_track->property_value_desc()=row[param_model.value_desc];
                                cellrenderer_time_track->property_canvas()=row[param_model.canvas];
                                cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
-                               param_tree_view().queue_draw();
-                               param_tree_view().queue_draw_area(rect.get_x(),rect.get_y(),rect.get_width(),rect.get_height());
+                               get_param_tree_view().queue_draw();
+                               get_param_tree_view().queue_draw_area(rect.get_x(),rect.get_y(),rect.get_width(),rect.get_height());
                                return true;
 
                        }
-*/
+#endif // TIMETRACK_IN_PARAMS_PANEL
                }
                break;
        default:
@@ -977,107 +991,109 @@ LayerTree::on_param_tree_event(GdkEvent *event)
        return false;
 }
 
-void
-LayerTree::on_raise_pressed()
-{
-       synfigapp::Action::ParamList param_list;
-       param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
-       param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
-       param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
-
-       {
-               synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
-               synfigapp::SelectionManager::LayerList::iterator iter;
-
-               for(iter=layer_list.begin();iter!=layer_list.end();++iter)
-                       param_list.add("layer",Layer::Handle(*iter));
-       }
-       synfigapp::Action::Handle action(synfigapp::Action::create("layer_raise"));
-       action->set_param_list(param_list);
-       layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
-}
-
-void
-LayerTree::on_lower_pressed()
-{
-       synfigapp::Action::ParamList param_list;
-       param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
-       param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
-       param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
-
-       {
-               synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
-               synfigapp::SelectionManager::LayerList::iterator iter;
-
-               for(iter=layer_list.begin();iter!=layer_list.end();++iter)
-                       param_list.add("layer",Layer::Handle(*iter));
-       }
-
-       synfigapp::Action::Handle action(synfigapp::Action::create("layer_lower"));
-       action->set_param_list(param_list);
-       layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
-}
-
-void
-LayerTree::on_duplicate_pressed()
-{
-       synfigapp::Action::ParamList param_list;
-       param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
-       param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
-       param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
-
-       {
-               synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
-               synfigapp::SelectionManager::LayerList::iterator iter;
-
-               for(iter=layer_list.begin();iter!=layer_list.end();++iter)
-                       param_list.add("layer",Layer::Handle(*iter));
-       }
-
-       synfigapp::Action::Handle action(synfigapp::Action::create("layer_duplicate"));
-       action->set_param_list(param_list);
-       layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
-}
-
-void
-LayerTree::on_delete_pressed()
-{
-       synfigapp::Action::ParamList param_list;
-       param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
-       param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
-       param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
-
-       {
-               synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
-               synfigapp::SelectionManager::LayerList::iterator iter;
-
-               for(iter=layer_list.begin();iter!=layer_list.end();++iter)
-                       param_list.add("layer",Layer::Handle(*iter));
-       }
-
-       synfigapp::Action::Handle action(synfigapp::Action::create("layer_remove"));
-       action->set_param_list(param_list);
-       layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+// void
+// LayerTree::on_raise_pressed()
+// {
+//     synfigapp::Action::ParamList param_list;
+//     param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
+//     param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
+//     param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
+//
+//     {
+//             synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
+//             synfigapp::SelectionManager::LayerList::iterator iter;
+//
+//             for(iter=layer_list.begin();iter!=layer_list.end();++iter)
+//                     param_list.add("layer",Layer::Handle(*iter));
+//     }
+//     synfigapp::Action::Handle action(synfigapp::Action::create("LayerRaise"));
+//     action->set_param_list(param_list);
+//     layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
+// }
+
+// void
+// LayerTree::on_lower_pressed()
+// {
+//     synfigapp::Action::ParamList param_list;
+//     param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
+//     param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
+//     param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
+//
+//     {
+//             synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
+//             synfigapp::SelectionManager::LayerList::iterator iter;
+//
+//             for(iter=layer_list.begin();iter!=layer_list.end();++iter)
+//                     param_list.add("layer",Layer::Handle(*iter));
+//     }
+//
+//     synfigapp::Action::Handle action(synfigapp::Action::create("LayerLower"));
+//     action->set_param_list(param_list);
+//     layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
+// }
+
+// void
+// LayerTree::on_duplicate_pressed()
+// {
+//     synfigapp::Action::ParamList param_list;
+//     param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
+//     param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
+//     param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
+//
+//     {
+//             synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
+//             synfigapp::SelectionManager::LayerList::iterator iter;
+//
+//             for(iter=layer_list.begin();iter!=layer_list.end();++iter)
+//                     param_list.add("layer",Layer::Handle(*iter));
+//     }
+//
+//     synfigapp::Action::Handle action(synfigapp::Action::create("LayerDuplicate"));
+//     action->set_param_list(param_list);
+//     layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
+// }
+
+// void
+// LayerTree::on_encapsulate_pressed()
+// {
+//     synfigapp::Action::ParamList param_list;
+//     param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
+//     param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
+//     param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
+//
+//     {
+//             synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
+//             synfigapp::SelectionManager::LayerList::iterator iter;
+//
+//             for(iter=layer_list.begin();iter!=layer_list.end();++iter)
+//                     param_list.add("layer",Layer::Handle(*iter));
+//     }
+//
+//     synfigapp::Action::Handle action(synfigapp::Action::create("LayerEncapsulate"));
+//     action->set_param_list(param_list);
+//     layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
+// }
+
+// void
+// LayerTree::on_delete_pressed()
+// {
+//     synfigapp::Action::ParamList param_list;
+//     param_list.add("time",layer_tree_store_->canvas_interface()->get_time());
+//     param_list.add("canvas",layer_tree_store_->canvas_interface()->get_canvas());
+//     param_list.add("canvas_interface",layer_tree_store_->canvas_interface());
+//
+//     {
+//             synfigapp::SelectionManager::LayerList layer_list(get_selection_manager()->get_selected_layers());
+//             synfigapp::SelectionManager::LayerList::iterator iter;
+//
+//             for(iter=layer_list.begin();iter!=layer_list.end();++iter)
+//                     param_list.add("layer",Layer::Handle(*iter));
+//     }
+//
+//     synfigapp::Action::Handle action(synfigapp::Action::create("LayerRemove"));
+//     action->set_param_list(param_list);
+//     layer_tree_store_->canvas_interface()->get_instance()->perform_action(action);
+// }
 
 /*
 void
@@ -1087,24 +1103,19 @@ LayerTree::on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>&context, Gtk::S
        synfig::info("Dragged data of target \"%s\"",gdk_atom_name(selection_data->target));
        synfig::info("Dragged selection=\"%s\"",gdk_atom_name(selection_data->selection));
 
-       DEBUGPOINT();
-
        Gtk::TreeModel::Path path;
        Gtk::TreeViewColumn *column;
        int cell_x, cell_y;
        if(get_selection()
        Gtk::TreeRow row = *(get_selection()->get_selected());
-       DEBUGPOINT();
 
        if(synfig::String(gdk_atom_name(selection_data->target))=="LAYER" && (bool)row[model.is_layer])
        {
-               DEBUGPOINT();
                Layer* layer(((Layer::Handle)row[model.layer]).get());
                assert(layer);
                selection_data.set(8, reinterpret_cast<const guchar*>(&layer), sizeof(layer));
                return;
        }
-       DEBUGPOINT();
 }
 
 void
@@ -1135,7 +1146,6 @@ LayerTree::on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& cont
 
        Gtk::TreeRow row = *(get_model()->get_iter(path));
 
-
        if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
        {
                if(synfig::String(selection_data.get_data_type())=="LAYER")do
@@ -1161,7 +1171,7 @@ LayerTree::on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& cont
                                if(!dest_layer || dest_layer==src)
                                        break;
 
-                               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",layer_tree_store_->canvas_interface());
                                action->set_param("layer",src);