Move docks into subfolder
authorNikita Kitaev <nikitakit@gmail.com>
Sat, 17 Apr 2010 04:59:56 +0000 (21:59 -0700)
committerNikita Kitaev <nikitakit@gmail.com>
Sat, 17 Apr 2010 04:59:56 +0000 (21:59 -0700)
95 files changed:
synfig-studio/src/gui/Makefile.am
synfig-studio/src/gui/app.cpp
synfig-studio/src/gui/dialog_tooloptions.cpp [deleted file]
synfig-studio/src/gui/dialog_tooloptions.h [deleted file]
synfig-studio/src/gui/dialogs/dialog_soundselect.h
synfig-studio/src/gui/dock_canvases.cpp [deleted file]
synfig-studio/src/gui/dock_canvases.h [deleted file]
synfig-studio/src/gui/dock_canvasspecific.cpp [deleted file]
synfig-studio/src/gui/dock_canvasspecific.h [deleted file]
synfig-studio/src/gui/dock_children.cpp [deleted file]
synfig-studio/src/gui/dock_children.h [deleted file]
synfig-studio/src/gui/dock_curves.cpp [deleted file]
synfig-studio/src/gui/dock_curves.h [deleted file]
synfig-studio/src/gui/dock_history.cpp [deleted file]
synfig-studio/src/gui/dock_history.h [deleted file]
synfig-studio/src/gui/dock_info.cpp [deleted file]
synfig-studio/src/gui/dock_info.h [deleted file]
synfig-studio/src/gui/dock_keyframes.cpp [deleted file]
synfig-studio/src/gui/dock_keyframes.h [deleted file]
synfig-studio/src/gui/dock_layergroups.cpp [deleted file]
synfig-studio/src/gui/dock_layergroups.h [deleted file]
synfig-studio/src/gui/dock_layers.cpp [deleted file]
synfig-studio/src/gui/dock_layers.h [deleted file]
synfig-studio/src/gui/dock_metadata.cpp [deleted file]
synfig-studio/src/gui/dock_metadata.h [deleted file]
synfig-studio/src/gui/dock_navigator.cpp [deleted file]
synfig-studio/src/gui/dock_navigator.h [deleted file]
synfig-studio/src/gui/dock_params.cpp [deleted file]
synfig-studio/src/gui/dock_params.h [deleted file]
synfig-studio/src/gui/dock_timetrack.cpp [deleted file]
synfig-studio/src/gui/dock_timetrack.h [deleted file]
synfig-studio/src/gui/dockable.cpp [deleted file]
synfig-studio/src/gui/dockable.h [deleted file]
synfig-studio/src/gui/dockbook.cpp [deleted file]
synfig-studio/src/gui/dockbook.h [deleted file]
synfig-studio/src/gui/dockdialog.cpp [deleted file]
synfig-studio/src/gui/dockdialog.h [deleted file]
synfig-studio/src/gui/dockmanager.cpp [deleted file]
synfig-studio/src/gui/dockmanager.h [deleted file]
synfig-studio/src/gui/docks/dialog_tooloptions.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dialog_tooloptions.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_canvases.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_canvases.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_canvasspecific.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_canvasspecific.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_children.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_children.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_curves.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_curves.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_history.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_history.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_info.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_info.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_keyframes.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_keyframes.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_layergroups.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_layergroups.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_layers.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_layers.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_metadata.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_metadata.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_navigator.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_navigator.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_params.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_params.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_timetrack.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dock_timetrack.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dockable.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dockable.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dockbook.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dockbook.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dockdialog.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dockdialog.h [new file with mode: 0644]
synfig-studio/src/gui/docks/dockmanager.cpp [new file with mode: 0644]
synfig-studio/src/gui/docks/dockmanager.h [new file with mode: 0644]
synfig-studio/src/gui/layergrouptreestore.cpp
synfig-studio/src/gui/modules/mod_palette/dock_palbrowse.h
synfig-studio/src/gui/modules/mod_palette/dock_paledit.h
synfig-studio/src/gui/modules/mod_palette/mod_palette.cpp
synfig-studio/src/gui/states/state_bline.cpp
synfig-studio/src/gui/states/state_circle.cpp
synfig-studio/src/gui/states/state_draw.cpp
synfig-studio/src/gui/states/state_gradient.cpp
synfig-studio/src/gui/states/state_mirror.cpp
synfig-studio/src/gui/states/state_normal.cpp
synfig-studio/src/gui/states/state_polygon.cpp
synfig-studio/src/gui/states/state_rectangle.cpp
synfig-studio/src/gui/states/state_rotate.cpp
synfig-studio/src/gui/states/state_scale.cpp
synfig-studio/src/gui/states/state_sketch.cpp
synfig-studio/src/gui/states/state_smoothmove.cpp
synfig-studio/src/gui/states/state_star.cpp
synfig-studio/src/gui/states/state_text.cpp
synfig-studio/src/gui/states/state_width.cpp
synfig-studio/src/gui/toolbox.cpp

index f4442d3..caeb8e1 100644 (file)
@@ -74,44 +74,44 @@ DIALOG_CC = \
 
 
 DOCK_HH = \
-       dialog_tooloptions.h \
-       dock_canvases.h \
-       dock_canvasspecific.h \
-       dock_children.h \
-       dock_curves.h \
-       dock_history.h \
-       dock_info.h \
-       dock_keyframes.h \
-       dock_layergroups.h \
-       dock_layers.h \
-       dock_metadata.h \
-       dock_navigator.h \
-       dock_params.h \
-       dock_timetrack.h \
-       dockable.h \
-       dockbook.h \
-       dockdialog.h \
-       dockmanager.h
+       docks/dialog_tooloptions.h \
+       docks/dock_canvases.h \
+       docks/dock_canvasspecific.h \
+       docks/dock_children.h \
+       docks/dock_curves.h \
+       docks/dock_history.h \
+       docks/dock_info.h \
+       docks/dock_keyframes.h \
+       docks/dock_layergroups.h \
+       docks/dock_layers.h \
+       docks/dock_metadata.h \
+       docks/dock_navigator.h \
+       docks/dock_params.h \
+       docks/dock_timetrack.h \
+       docks/dockable.h \
+       docks/dockbook.h \
+       docks/dockdialog.h \
+       docks/dockmanager.h
 
 DOCK_CC = \
-       dialog_tooloptions.cpp \
-       dock_canvases.cpp \
-       dock_canvasspecific.cpp \
-       dock_children.cpp \
-       dock_curves.cpp \
-       dock_history.cpp \
-       dock_info.cpp \
-       dock_keyframes.cpp \
-       dock_layergroups.cpp \
-       dock_layers.cpp \
-       dock_metadata.cpp \
-       dock_navigator.cpp \
-       dock_params.cpp \
-       dock_timetrack.cpp \
-       dockable.cpp \
-       dockbook.cpp \
-       dockdialog.cpp \
-       dockmanager.cpp
+       docks/dialog_tooloptions.cpp \
+       docks/dock_canvases.cpp \
+       docks/dock_canvasspecific.cpp \
+       docks/dock_children.cpp \
+       docks/dock_curves.cpp \
+       docks/dock_history.cpp \
+       docks/dock_info.cpp \
+       docks/dock_keyframes.cpp \
+       docks/dock_layergroups.cpp \
+       docks/dock_layers.cpp \
+       docks/dock_metadata.cpp \
+       docks/dock_navigator.cpp \
+       docks/dock_params.cpp \
+       docks/dock_timetrack.cpp \
+       docks/dockable.cpp \
+       docks/dockbook.cpp \
+       docks/dockdialog.cpp \
+       docks/dockmanager.cpp
 
 
 WIDGET_HH = \
index c27f7fc..51fc6bd 100644 (file)
@@ -76,7 +76,7 @@
 #include "toolbox.h"
 #include "onemoment.h"
 
-#include "dockmanager.h"
+#include "docks/dockmanager.h"
 
 #include "states/state_eyedrop.h"
 #include "states/state_normal.h"
 #include "states/state_zoom.h"
 
 #include "devicetracker.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include "widgets/widget_enum.h"
 
 #include "autorecover.h"
 
 #include <synfigapp/settings.h>
-#include "dock_history.h"
-#include "dock_canvases.h"
-#include "dock_keyframes.h"
-#include "dock_layers.h"
-#include "dock_params.h"
-#include "dock_metadata.h"
-#include "dock_children.h"
-#include "dock_info.h"
-#include "dock_navigator.h"
-#include "dock_layergroups.h"
-#include "dock_timetrack.h"
-#include "dock_curves.h"
+#include "docks/dock_history.h"
+#include "docks/dock_canvases.h"
+#include "docks/dock_keyframes.h"
+#include "docks/dock_layers.h"
+#include "docks/dock_params.h"
+#include "docks/dock_metadata.h"
+#include "docks/dock_children.h"
+#include "docks/dock_info.h"
+#include "docks/dock_navigator.h"
+#include "docks/dock_layergroups.h"
+#include "docks/dock_timetrack.h"
+#include "docks/dock_curves.h"
 
 #include "modules/module.h"
 #include "modules/mod_palette/mod_palette.h"
diff --git a/synfig-studio/src/gui/dialog_tooloptions.cpp b/synfig-studio/src/gui/dialog_tooloptions.cpp
deleted file mode 100644 (file)
index da759c8..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dialog_tooloptions.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**     Copyright (c) 2009 Nikita Kitaev
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include <gtkmm/label.h>
-#include <gtkmm/scrolledwindow.h>
-#include <synfig/general.h>
-#include "dialog_tooloptions.h"
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dialog_ToolOptions::Dialog_ToolOptions():
-       Dockable("tool_options",_("Tool Options"),Gtk::StockID("synfig-about")),
-       empty_label(_("This tool has no options"))
-{
-       add(sub_vbox_);
-
-       set_widget(empty_label);
-       empty_label.show();
-}
-
-Dialog_ToolOptions::~Dialog_ToolOptions()
-{
-}
-
-void
-Dialog_ToolOptions::clear()
-{
-       Dockable::clear();
-       set_local_name(_("Tool Options"));
-       add(sub_vbox_);
-       set_widget(empty_label);
-       empty_label.show();
-
-       set_stock_id(Gtk::StockID("synfig-about"));
-}
-
-void
-Dialog_ToolOptions::set_widget(Gtk::Widget&x)
-{
-       if(!sub_vbox_.children().empty())
-               sub_vbox_.children().clear();
-
-       sub_vbox_.show();
-       sub_vbox_.pack_start(x,false,false);
-       x.show();
-}
-
-void
-Dialog_ToolOptions::set_name(const synfig::String& name)
-{
-       set_stock_id(Gtk::StockID("synfig-"+name));
-}
diff --git a/synfig-studio/src/gui/dialog_tooloptions.h b/synfig-studio/src/gui/dialog_tooloptions.h
deleted file mode 100644 (file)
index 69680e0..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dialog_tooloptions.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DIALOG_TOOLOPTIONS_H
-#define __SYNFIG_STUDIO_DIALOG_TOOLOPTIONS_H
-
-/* === H E A D E R S ======================================================= */
-
-#include <gtkmm/dialog.h>
-#include <gtkmm/label.h>
-#include <gtkmm/scrolledwindow.h>
-#include "dockable.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class Dialog_ToolOptions : public Dockable
-{
-       Gtk::Label empty_label;
-       Gtk::VBox sub_vbox_;
-
-public:
-
-       void clear();
-       void set_widget(Gtk::Widget&);
-       void set_name(const synfig::String& name);
-
-       Dialog_ToolOptions();
-       ~Dialog_ToolOptions();
-}; // END of Dialog_ToolOptions
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
index 50cf018..fe6e371 100644 (file)
@@ -27,7 +27,7 @@
 #define __SYNFIG_DIALOG_SOUNDSELECT_H
 
 /* === H E A D E R S ======================================================= */
-#include "dockdialog.h"
+#include "docks/dockdialog.h"
 #include "widgets/widget_filename.h"
 #include "widgets/widget_time.h"
 
diff --git a/synfig-studio/src/gui/dock_canvases.cpp b/synfig-studio/src/gui/dock_canvases.cpp
deleted file mode 100644 (file)
index f230820..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_canvases.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_canvases.h"
-#include "app.h"
-#include "canvasview.h"
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_Canvases::Dock_Canvases():
-       Dockable("canvases",_("Canvas Browser"),Gtk::StockID("synfig-canvas"))
-{
-
-       App::signal_instance_created().connect(sigc::mem_fun(*this,&studio::Dock_Canvases::new_instance));
-       App::signal_instance_deleted().connect(sigc::mem_fun(*this,&studio::Dock_Canvases::delete_instance));
-       App::signal_instance_selected().connect(sigc::mem_fun(*this,&studio::Dock_Canvases::set_selected_instance_signal));
-
-
-       add(*create_canvas_tree());
-
-/*  // \todo Implement canvas management in canvas browser
-       add_button(
-               Gtk::StockID("synfig-canvas_new"),
-               _("Insert a new canvas")
-       )->signal_clicked().connect(
-               sigc::mem_fun(
-                       *this,
-                       &Dock_Canvases::menu_new_canvas
-               )
-       );
-
-       add_button(
-               Gtk::StockID("gtk-delete"),
-               _("Remove selected canvas")
-       )->signal_clicked().connect(
-               sigc::mem_fun(
-                       *this,
-                       &Dock_Canvases::menu_delete
-               )
-       );
-
-       add_button(
-               Gtk::StockID("synfig-rename"),
-               _("Rename selected canvas")
-       )->signal_clicked().connect(
-               sigc::mem_fun(
-                       *this,
-                       &Dock_Canvases::menu_rename
-               )
-       );
-*/
-}
-
-Dock_Canvases::~Dock_Canvases()
-{
-}
-
-Gtk::Widget*
-Dock_Canvases::create_canvas_tree()
-{
-       studio::Instance::CanvasTreeModel canvas_tree_model;
-       canvas_tree=manage(new class Gtk::TreeView());
-       {
-               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("ID")) );
-//             Gtk::CellRendererPixbuf* icon_cellrenderer = Gtk::manage( new Gtk::CellRendererPixbuf() );
-
-               //column->pack_start(*icon_cellrenderer,false);
-               column->pack_start(canvas_tree_model.icon, false); //false = don't expand.
-               column->pack_start(canvas_tree_model.label);
-
-//#ifdef NDEBUG
-//             column->add_attribute(icon_cellrenderer->property_pixbuf(), canvas_tree_model.icon);
-//#endif
-
-               canvas_tree->append_column(*column);
-       }
-       canvas_tree->set_rules_hint();
-       canvas_tree->signal_row_activated().connect(sigc::mem_fun(*this,&Dock_Canvases::on_row_activate));
-       //canvas_tree->signal_event().connect(sigc::mem_fun(*this,&Dock_Canvases::on_tree_event));
-       canvas_tree->add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
-       canvas_tree->add_events(Gdk::BUTTON1_MOTION_MASK);
-       canvas_tree->show();
-       canvas_tree->set_headers_visible(false);
-
-       Gtk::ScrolledWindow *scrolledwindow = manage(new class Gtk::ScrolledWindow());
-       scrolledwindow->set_flags(Gtk::CAN_FOCUS);
-       scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-       scrolledwindow->add(*canvas_tree);
-       scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
-       scrolledwindow->show_all();
-
-       return scrolledwindow;
-}
-
-etl::loose_handle<studio::CanvasView>
-Dock_Canvases::get_selected_canvas_view()
-{
-       return get_selected_instance()->find_canvas_view(get_selected_canvas());
-}
-
-etl::loose_handle<synfig::Canvas>
-Dock_Canvases::get_selected_canvas()
-{
-       Glib::RefPtr<Gtk::TreeSelection> selection=canvas_tree->get_selection();
-
-       if(!selection || !selection->get_selected())
-               return 0;
-
-       studio::Instance::CanvasTreeModel canvas_tree_model;
-
-       return static_cast<etl::handle<synfig::Canvas> >((*selection->get_selected())[canvas_tree_model.canvas]);
-}
-
-
-
-void
-Dock_Canvases::set_selected_instance_signal(etl::handle<studio::Instance> x)
-{
-       set_selected_instance(x);
-}
-
-void
-Dock_Canvases::set_selected_instance_(etl::handle<studio::Instance> instance)
-{
-       if(studio::App::shutdown_in_progress)
-               return;
-
-       selected_instance=instance;
-       if(instance)
-       {
-               canvas_tree->set_model(instance->canvas_tree_store());
-               canvas_tree->show();
-       }
-       else
-       {
-               canvas_tree->set_model(Glib::RefPtr< Gtk::TreeModel >());
-               canvas_tree->hide();
-       }
-}
-
-void
-Dock_Canvases::set_selected_instance(etl::loose_handle<studio::Instance> x)
-{
-       if(studio::App::shutdown_in_progress)
-               return;
-
-       // if it's already selected, don't select it again
-       if (x==selected_instance)
-               return;
-
-       set_selected_instance_(x);
-}
-
-void
-Dock_Canvases::new_instance(etl::handle<studio::Instance> instance)
-{
-       if(studio::App::shutdown_in_progress)
-               return;
-
-       assert(instance);
-
-       etl::loose_handle<studio::Instance> loose_instance(instance);
-
-       instance->synfigapp::Instance::signal_filename_changed().connect(sigc::mem_fun(*this,&Dock_Canvases::refresh_instances));
-       instance->synfigapp::Instance::signal_filename_changed().connect(
-               sigc::bind<etl::loose_handle<studio::Instance> >(
-                       sigc::mem_fun(*this,&Dock_Canvases::set_selected_instance),
-                       loose_instance
-               )
-       );
-
-       present();
-
-}
-
-void
-Dock_Canvases::delete_instance(etl::handle<studio::Instance> instance)
-{
-       if(studio::App::shutdown_in_progress)
-               return;
-
-       refresh_instances();
-
-       if(selected_instance==instance)
-       {
-               set_selected_instance(0);
-       }
-}
-
-void
-Dock_Canvases::refresh_instances()
-{
-       if(studio::App::shutdown_in_progress)
-               return;
-}
-
-void
-Dock_Canvases::on_row_activate(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *)
-{
-       assert(get_selected_instance());
-       studio::Instance::CanvasTreeModel canvas_tree_model;
-       const Gtk::TreeRow row = *(get_selected_instance()->canvas_tree_store()->get_iter(path));
-       if(row[canvas_tree_model.is_canvas])
-               get_selected_instance()->focus(row[canvas_tree_model.canvas]);
-       else
-               studio::App::dialog_not_implemented();
-}
diff --git a/synfig-studio/src/gui/dock_canvases.h b/synfig-studio/src/gui/dock_canvases.h
deleted file mode 100644 (file)
index 34bdbaa..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_canvases.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DIALOG_CANVASES_H
-#define __SYNFIG_STUDIO_DIALOG_CANVASES_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class Dock_Canvases : public Dockable
-{
-       Gtk::TreeView *canvas_tree;
-       //Gtk::Menu     menu;
-       etl::loose_handle<studio::Instance>     selected_instance;
-
-private:
-
-       void set_selected_instance_(etl::handle<studio::Instance> x);
-
-       etl::loose_handle<studio::Instance> get_selected_instance() { return selected_instance; }
-
-       etl::loose_handle<synfig::Canvas> get_selected_canvas();
-
-       etl::loose_handle<studio::CanvasView> get_selected_canvas_view();
-
-       void set_selected_instance(etl::loose_handle<studio::Instance> x);
-
-       void set_selected_instance_signal(etl::handle<studio::Instance> x);
-
-       void new_instance(etl::handle<studio::Instance> x);
-
-       void delete_instance(etl::handle<studio::Instance> x);
-
-       void refresh_instances();
-
-       bool close();
-
-       void on_row_activate(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *);
-       //bool on_tree_event(GdkEvent *event);
-
-
-
-       void on_action_toggle(const Glib::ustring& path);
-       Gtk::Widget* create_canvas_tree();
-
-public:
-
-       Dock_Canvases();
-       ~Dock_Canvases();
-}; // END of Dock_Canvases
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_canvasspecific.cpp b/synfig-studio/src/gui/dock_canvasspecific.cpp
deleted file mode 100644 (file)
index dc655ef..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_canvasspecific.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "app.h"
-#include "dock_canvasspecific.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/adaptors/hide.h>
-//#include <sigc++/hide.h>
-#include <sigc++/slot.h>
-#include "metadatatreestore.h"
-#include "canvasview.h"
-#include <ETL/clock>
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_CanvasSpecific::Dock_CanvasSpecific(const synfig::String& name,const synfig::String& local_name,Gtk::StockID stock_id_):
-       Dockable(name,local_name,stock_id_)
-{
-       App::signal_instance_created().connect(sigc::mem_fun(*this,&Dock_CanvasSpecific::init_instance));
-}
-
-Dock_CanvasSpecific::~Dock_CanvasSpecific()
-{
-}
-
-etl::loose_handle<studio::CanvasView>
-Dock_CanvasSpecific::get_canvas_view()
-{
-       return App::get_selected_canvas_view();
-}
-
-etl::loose_handle<synfigapp::CanvasInterface>
-Dock_CanvasSpecific::get_canvas_interface()
-{
-       if(get_canvas_view())
-               return get_canvas_view()->canvas_interface();
-       return 0;
-}
-
-void
-Dock_CanvasSpecific::init_canvas_view_vfunc(etl::loose_handle<CanvasView> /*canvas_view*/)
-{
-}
-
-void
-Dock_CanvasSpecific::init_instance_vfunc(etl::loose_handle<Instance> /*instance*/)
-{
-}
-
-void
-Dock_CanvasSpecific::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> /*canvas_view*/)
-{
-}
-
-void
-Dock_CanvasSpecific::init_instance(etl::handle<Instance> instance)
-{
-       etl::clock timer;timer.reset();
-       instance->signal_canvas_view_created().connect(sigc::mem_fun(*this,&Dock_CanvasSpecific::init_canvas_view));
-       init_instance_vfunc(instance);
-       // synfig::info("%s init_instance() took %f seconds",get_local_name().c_str(),float(timer()));
-}
-
-void
-Dock_CanvasSpecific::delete_instance(etl::handle<Instance> /*instance*/)
-{
-       changed_canvas_view_vfunc(0);
-}
-
-void
-Dock_CanvasSpecific::init_canvas_view(CanvasView* canvas_view)
-{
-       /*
-       canvas_view->signal_focus_in_event().connect(
-               sigc::hide(
-                       sigc::bind_return(
-                               sigc::mem_fun(
-                                       *this,
-                                       &Dock_CanvasSpecific::canvas_view_changed
-                               ),
-                               false
-                       )
-               )
-       );
-       */
-       // synfig::info("%s init_canvas_view() Starting init...",get_local_name().c_str());
-       etl::clock timer;timer.reset();
-       App::signal_canvas_view_focus().connect(
-               sigc::hide(
-                       sigc::mem_fun(
-                               *this,
-                               &Dock_CanvasSpecific::canvas_view_changed
-                       )
-               )
-       );
-       init_canvas_view_vfunc(canvas_view);
-       // synfig::info("%s init_canvas_view() took %f seconds",get_local_name().c_str(),float(timer()));
-}
-
-void
-Dock_CanvasSpecific::canvas_view_changed()
-{
-       etl::loose_handle<CanvasView> canvas_view(App::get_selected_canvas_view());
-/*     if(canvas_view)
-       {
-               canvas_delete_connection.disconnect();
-               canvas_delete_connection=canvas_view->signal_deleted().connect(
-                       sigc::bind(
-                               sigc::mem_fun(
-                                       *this,
-                                       &Dock_CanvasSpecific::changed_canvas_view
-                               ),
-                               etl::loose_handle<CanvasView>(0)
-                       )
-               );
-       }
-*/
-
-// #ifdef _DEBUG
-//     synfig::info("%s canvas_view_changed: start",get_local_name().c_str());
-// #endif
-       changed_canvas_view_vfunc(canvas_view);
-// #ifdef _DEBUG
-//     synfig::info("%s canvas_view_changed: end",get_local_name().c_str());
-// #endif
-}
diff --git a/synfig-studio/src/gui/dock_canvasspecific.h b/synfig-studio/src/gui/dock_canvasspecific.h
deleted file mode 100644 (file)
index 24efc78..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_canvasspecific.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_CANVASSPECIFIC_H
-#define __SYNFIG_STUDIO_DOCK_CANVASSPECIFIC_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class CanvasView;
-class Instance;
-
-class Dock_CanvasSpecific : public Dockable
-{
-       sigc::connection canvas_delete_connection;
-protected:
-       virtual void init_instance_vfunc(etl::loose_handle<Instance> instance);
-
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-private:
-       void init_canvas_view(CanvasView* canvas_view);
-       void init_instance(etl::handle<Instance> instance);
-       void delete_instance(etl::handle<Instance> instance);
-       void canvas_view_changed();
-       void changed_canvas_view(etl::loose_handle<CanvasView> canvas_view) { return changed_canvas_view_vfunc(canvas_view); }
-public:
-
-       etl::loose_handle<studio::CanvasView> get_canvas_view();
-       etl::loose_handle<synfigapp::CanvasInterface> get_canvas_interface();
-
-       Dock_CanvasSpecific(const synfig::String& name,const synfig::String& local_name,Gtk::StockID stock_id_=Gtk::StockID(" "));
-       virtual ~Dock_CanvasSpecific();
-}; // END of Dock_CanvasSpecific
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_children.cpp b/synfig-studio/src/gui/dock_children.cpp
deleted file mode 100644 (file)
index 0b65306..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_children.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**     Copyright (c) 2007 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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_children.h"
-#include "app.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/retype_return.h>
-#include <sigc++/slot.h>
-#include "childrentreestore.h"
-#include "childrentree.h"
-#include "canvasview.h"
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_Children::Dock_Children():
-       Dock_CanvasSpecific("children",_("Children"),Gtk::StockID("synfig-children"))
-{
-    //! \todo the combination of set_use_scrolled(false) and
-       //!       add(*tree_view) causes crashes when
-       //!       Dockable::prev_widget_ is left referencing a
-       //!       ChildrenTree that has already been destroyed.
-       // set_use_scrolled(false);
-}
-
-Dock_Children::~Dock_Children()
-{
-}
-
-void
-Dock_Children::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       Glib::RefPtr<ChildrenTreeStore> children_tree_store;
-       children_tree_store=ChildrenTreeStore::create(canvas_view->canvas_interface());
-
-       ChildrenTree* children_tree(new ChildrenTree());
-       children_tree->set_model(children_tree_store);
-       children_tree->set_time_adjustment(canvas_view->time_adjustment());
-
-
-       canvas_view->set_tree_model(get_name(),children_tree_store);
-       canvas_view->set_ext_widget(get_name(),children_tree);
-}
-
-void
-Dock_Children::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(canvas_view)
-       {
-               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
-
-               add(*tree_view);
-               tree_view->show();
-       }
-       else clear_previous();
-
-}
diff --git a/synfig-studio/src/gui/dock_children.h b/synfig-studio/src/gui/dock_children.h
deleted file mode 100644 (file)
index a65d3da..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_children.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_CHILDREN_H
-#define __SYNFIG_STUDIO_DOCK_CHILDREN_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include "dock_canvasspecific.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class Dock_Children : public Dock_CanvasSpecific
-{
-protected:
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-public:
-
-
-       Dock_Children();
-       ~Dock_Children();
-}; // END of Dock_Children
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_curves.cpp b/synfig-studio/src/gui/dock_curves.cpp
deleted file mode 100644 (file)
index d299246..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_curves.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_curves.h"
-#include "app.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/slot.h>
-#include "canvasview.h"
-#include "layerparamtreestore.h"
-#include "workarea.h"
-#include "widgets/widget_curves.h"
-#include "layerparamtreestore.h"
-#include <gtkmm/table.h>
-#include <gtkmm/scrollbar.h>
-#include "widgets/widget_timeslider.h"
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_Curves::Dock_Curves():
-       Dock_CanvasSpecific("curves",_("Curves"),Gtk::StockID("synfig-curves"))
-{
-       last_widget_curves_=0;
-       table_=0;
-
-       hscrollbar_=new Gtk::HScrollbar();
-       vscrollbar_=new Gtk::VScrollbar();
-       widget_timeslider_= new Widget_Timeslider();
-}
-
-Dock_Curves::~Dock_Curves()
-{
-       if(table_)delete table_;
-       delete hscrollbar_;
-       delete vscrollbar_;
-       delete widget_timeslider_;
-}
-
-static void
-_curve_selection_changed(Gtk::TreeView* param_tree_view,Widget_Curves* curves)
-{
-       LayerParamTreeStore::Model model;
-       Gtk::TreeIter iter;
-       if(!param_tree_view->get_selection()->count_selected_rows())
-       {
-               curves->clear();
-               curves->refresh();
-               return;
-       }
-
-       std::list<synfigapp::ValueDesc> value_descs;
-
-       iter=param_tree_view->get_selection()->get_selected();
-       value_descs.push_back((*iter)[model.value_desc]);
-       curves->set_value_descs(value_descs);
-}
-
-void
-Dock_Curves::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       Widget_Curves* curves(new Widget_Curves());
-       curves->set_time_adjustment(canvas_view->time_adjustment());
-
-       Gtk::TreeView* param_tree_view(
-               static_cast<Gtk::TreeView*>(canvas_view->get_ext_widget("params"))
-       );
-
-       param_tree_view->get_selection()->signal_changed().connect(
-               sigc::bind(
-                       sigc::bind(
-                               sigc::ptr_fun(
-                                       _curve_selection_changed
-                               ),curves
-                       ),param_tree_view
-               )
-       );
-
-       canvas_view->set_ext_widget(get_name(),curves);
-}
-
-void
-Dock_Curves::refresh_selected_param()
-{
-/*     Gtk::TreeView* tree_view(
-               static_cast<Gtk::TreeView*>(get_canvas_view()->get_ext_widget(get_name()))
-       );
-       Gtk::TreeModel::iterator iter(tree_view->get_selection()->get_selected());
-
-       if(iter)
-       {
-               LayerParamTreeStore::Model model;
-               get_canvas_view()->work_area->set_selected_value_node(
-                       (synfig::ValueNode::Handle)(*iter)[model.value_node]
-               );
-       }
-       else
-       {
-               get_canvas_view()->work_area->set_selected_value_node(0);
-       }
-*/
-}
-
-void
-Dock_Curves::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(table_)
-       {
-               table_->hide();
-               delete table_;
-               hscrollbar_->unset_adjustment();
-               vscrollbar_->unset_adjustment();
-               //widget_timeslider_->unset_adjustment();
-               table_=0;
-       }
-
-
-       if(canvas_view)
-       {
-               last_widget_curves_=dynamic_cast<Widget_Curves*>(
-                       canvas_view->get_ext_widget(get_name())
-               );
-
-               vscrollbar_->set_adjustment(last_widget_curves_->get_range_adjustment());
-               hscrollbar_->set_adjustment(canvas_view->time_window_adjustment());
-               widget_timeslider_->set_time_adjustment(&canvas_view->time_adjustment());
-               widget_timeslider_->set_bounds_adjustment(&canvas_view->time_window_adjustment());
-               widget_timeslider_->set_global_fps(canvas_view->get_canvas()->rend_desc().get_frame_rate());
-
-               table_=new Gtk::Table(2,2);
-               table_->attach(*widget_timeslider_, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::SHRINK);
-               table_->attach(*last_widget_curves_, 0, 1, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
-               table_->attach(*hscrollbar_, 0, 1, 2, 3, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::SHRINK);
-               table_->attach(*vscrollbar_, 1, 2, 0, 2, Gtk::FILL|Gtk::SHRINK, Gtk::FILL|Gtk::EXPAND);
-               add(*table_);
-
-               //add(*last_widget_curves_);
-               last_widget_curves_->show();
-               table_->show_all();
-               show_all();
-       }
-       else
-       {
-               //clear_previous();
-       }
-}
diff --git a/synfig-studio/src/gui/dock_curves.h b/synfig-studio/src/gui/dock_curves.h
deleted file mode 100644 (file)
index dbe913f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_curves.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_CURVES_H
-#define __SYNFIG_STUDIO_DOCK_CURVES_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include "dock_canvasspecific.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace Gtk { class Table; class HScrollbar; class VScrollbar; };
-
-namespace studio {
-
-class Widget_Curves;
-class Widget_Timeslider;
-
-class Dock_Curves : public Dock_CanvasSpecific
-{
-       Gtk::Table* table_;
-       Gtk::HScrollbar* hscrollbar_;
-       Gtk::VScrollbar* vscrollbar_;
-
-       Widget_Timeslider* widget_timeslider_;
-       Widget_Curves* last_widget_curves_;
-
-protected:
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-       void refresh_selected_param();
-
-public:
-
-
-       Dock_Curves();
-       ~Dock_Curves();
-}; // END of Dock_Keyframes
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_history.cpp b/synfig-studio/src/gui/dock_history.cpp
deleted file mode 100644 (file)
index cddf07b..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_history.cpp
-**     \brief Template File
-**
-**     $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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_history.h"
-#include "app.h"
-
-
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/slot.h>
-#include <synfigapp/action.h>
-#include "historytreestore.h"
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-#define COLUMNID_JUMP          (787584)
-#define ColumnID       int
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_History::Dock_History():
-       Dock_CanvasSpecific("history",_("History"),Gtk::StockID("gtk-undo")),
-       action_group(Gtk::ActionGroup::create("action_group_dock_history"))
-{
-       App::signal_instance_deleted().connect(sigc::mem_fun(*this,&studio::Dock_History::delete_instance));
-       App::signal_instance_selected().connect(sigc::mem_fun(*this,&studio::Dock_History::set_selected_instance_signal));
-
-       action_group->add(Gtk::Action::create(
-               "clear-undo",
-               Gtk::StockID("synfig-clear_undo"),
-               _("Clear Undo Stack"),
-               _("Clear the undo stack")
-       ),
-               sigc::mem_fun(
-                       *this,
-                       &Dock_History::clear_undo
-               )
-       );
-       action_group->add(Gtk::Action::create(
-               "clear-redo",
-               Gtk::StockID("synfig-clear_redo"),
-               _("Clear Redo Stack"),
-               _("Clear the redo stack")
-       ),
-               sigc::mem_fun(
-                       *this,
-                       &Dock_History::clear_redo
-               )
-       );
-       action_group->add(Gtk::Action::create(
-               "clear-undo-and-redo",
-               Gtk::Stock::CLEAR,
-               _("Clear Undo and Redo Stacks"),
-               _("Clear the undo and redo stacks")
-       ),
-               sigc::mem_fun(
-                       *this,
-                       &Dock_History::clear_undo_and_redo
-               )
-       );
-       action_group->add(Gtk::Action::create(
-               "undo",
-               Gtk::StockID("gtk-undo"),
-               _("Undo"),
-               _("Undo the previous action")
-       ),
-               sigc::ptr_fun(studio::App::undo)
-       );
-       action_group->add(Gtk::Action::create(
-               "redo",
-               Gtk::StockID("gtk-redo"),
-               _("Redo"),
-               _("Redo the previously undone action")
-       ),
-               sigc::ptr_fun(studio::App::redo)
-       );
-
-       action_group->add( Gtk::Action::create("toolbar-history", _("History")) );
-       App::ui_manager()->insert_action_group(action_group);
-
-       Glib::ustring ui_info =
-       "<ui>"
-       "       <toolbar action='toolbar-history'>"
-       "       <toolitem action='undo' />"
-       "       <toolitem action='redo' />"
-       "       <toolitem action='clear-undo' />"
-       "       <toolitem action='clear-redo' />"
-       "       <toolitem action='clear-undo-and-redo' />"
-       "       </toolbar>"
-       "</ui>"
-       ;
-
-       App::ui_manager()->add_ui_from_string(ui_info);
-
-       action_group->set_sensitive(false);
-
-       set_toolbar(*dynamic_cast<Gtk::Toolbar*>(App::ui_manager()->get_widget("/toolbar-history")));
-       add(*create_action_tree());
-}
-
-Dock_History::~Dock_History()
-{
-}
-
-void
-Dock_History::init_instance_vfunc(etl::loose_handle<Instance> instance)
-{
-       instance->signal_undo_redo_status_changed().connect(
-               sigc::mem_fun(*this,&Dock_History::update_undo_redo)
-       );
-}
-
-Gtk::Widget*
-Dock_History::create_action_tree()
-{
-       studio::HistoryTreeStore::Model history_tree_model;
-       action_tree=manage(new class Gtk::TreeView());
-       {
-               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column("") );
-
-               Gtk::CellRendererToggle* toggle_cr = Gtk::manage( new Gtk::CellRendererToggle() );
-               toggle_cr->signal_toggled().connect(sigc::mem_fun(*this, &studio::Dock_History::on_action_toggle) );
-
-               column->pack_start(*toggle_cr); //false = don't expand.
-               column->add_attribute(toggle_cr->property_active(),history_tree_model.is_active);
-               column->set_resizable();
-               column->set_clickable();
-
-               action_tree->append_column(*column);
-       }
-       /*{
-               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Canvas")) );
-               Gtk::CellRendererText *text_cr=Gtk::manage(new Gtk::CellRendererText());
-               text_cr->property_foreground()=Glib::ustring("#7f7f7f");
-
-               column->pack_start(*text_cr);
-               column->add_attribute(text_cr->property_text(),history_tree_model.canvas_id);
-               column->add_attribute(text_cr->property_foreground_set(),history_tree_model.is_redo);
-
-               action_tree->append_column(*column);
-       }*/
-       {
-               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Jump")) );
-
-               Gtk::CellRendererText* cell_renderer_jump=Gtk::manage(new Gtk::CellRendererText());
-               column->pack_start(*cell_renderer_jump,true);
-
-               cell_renderer_jump->property_text()=_("(JMP)");
-               cell_renderer_jump->property_foreground()="#003a7f";
-
-               column->set_resizable();
-               column->set_clickable();
-
-               column->set_sort_column(COLUMNID_JUMP);
-
-               action_tree->append_column(*column);
-               //column->clicked();
-       }
-       {
-               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Action")) );
-
-               Gtk::CellRendererText *text_cr=Gtk::manage(new Gtk::CellRendererText());
-               text_cr->property_foreground()=Glib::ustring("#7f7f7f");
-
-
-
-               //column->pack_start(history_tree_model.icon, false); //false = don't expand.
-               column->pack_start(*text_cr);
-               column->add_attribute(text_cr->property_text(),history_tree_model.name);
-               column->add_attribute(text_cr->property_foreground_set(),history_tree_model.is_redo);
-
-               action_tree->append_column(*column);
-       }
-
-       action_tree->set_enable_search(true);
-       action_tree->set_search_column(history_tree_model.name);
-       action_tree->set_search_equal_func(sigc::ptr_fun(&studio::HistoryTreeStore::search_func));
-
-       action_tree->set_rules_hint();
-//     action_tree->signal_row_activated().connect(sigc::mem_fun(*this,&Dock_History::on_row_activate));
-       action_tree->signal_event().connect(sigc::mem_fun(*this,&Dock_History::on_action_event));
-//     action_tree->add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
-//     action_tree->add_events(Gdk::BUTTON1_MOTION_MASK);
-       action_tree->show();
-
-       Gtk::ScrolledWindow *scrolledwindow = manage(new class Gtk::ScrolledWindow());
-       scrolledwindow->set_flags(Gtk::CAN_FOCUS);
-       scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-       scrolledwindow->add(*action_tree);
-       scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
-       scrolledwindow->show_all();
-
-/*     {
-               Gtk::Widget& widget(*action_tree);
-               Pango::FontDescription font(widget.get_modifier_style()->get_font());
-               font.set_size(Pango::SCALE*5);
-               widget.get_modifier_style()->set_font(font);
-               widget.modify_font(font);
-       }
-*/
-       return scrolledwindow;
-}
-
-void
-Dock_History::clear_undo()
-{
-       if(selected_instance && App::dialog_yes_no(_("Clear History"),
-                       _("You will not be able to undo any changes that you have made!\nAre you sure you want to clear the undo stack?")))
-               selected_instance->clear_undo_stack();
-}
-
-void
-Dock_History::clear_redo()
-{
-       if(selected_instance && App::dialog_yes_no(_("Clear History"),
-                       _("You will not be able to redo any changes that you have made!\nAre you sure you want to clear the redo stack?")))
-               selected_instance->clear_redo_stack();
-}
-
-void
-Dock_History::clear_undo_and_redo()
-{
-       if(selected_instance && App::dialog_yes_no(_("Clear History"),
-                       _("You will not be able to undo or redo any changes that you have made!\nAre you sure you want to clear the undo and redo stacks?")))
-       {
-               selected_instance->clear_undo_stack();
-               selected_instance->clear_redo_stack();
-       }
-}
-
-void
-Dock_History::update_undo_redo()
-{
-       etl::handle<Instance> instance=App::get_selected_instance();
-       if(instance)
-       {
-               action_group->get_action("undo")->set_sensitive(instance->get_undo_status());
-               action_group->get_action("clear-undo")->set_sensitive(instance->get_undo_status());
-               action_group->get_action("redo")->set_sensitive(instance->get_redo_status());
-               action_group->get_action("clear-redo")->set_sensitive(instance->get_redo_status());
-               action_group->get_action("clear-undo-and-redo")->set_sensitive(instance->get_undo_status() || instance->get_redo_status());
-       }
-}
-
-void
-Dock_History::on_undo_tree_changed()
-{
-       Gtk::TreeModel::Children children(selected_instance->history_tree_store()->children());
-
-       if (!children.size())
-               return;
-
-       studio::HistoryTreeStore::Model model;
-
-       Gtk::TreeModel::Children::iterator iter, prev = children.end();
-       for (iter = children.begin(); iter != children.end(); prev = iter++)
-               if ((*iter)[model.is_redo])
-               {
-                       if (prev == children.end())
-                               action_tree->get_selection()->unselect_all();
-                       else
-                       {
-                               action_tree->scroll_to_row(Gtk::TreePath(prev), 0.5);
-                               action_tree->get_selection()->select(prev);
-                       }
-                       return;
-               }
-
-       action_tree->scroll_to_row(Gtk::TreePath(prev), 0.5);
-       action_tree->get_selection()->select(prev);
-}
-
-void
-Dock_History::set_selected_instance_(etl::handle<studio::Instance> instance)
-{
-       if(studio::App::shutdown_in_progress)
-               return;
-
-       if (on_undo_tree_changed_connection)
-               on_undo_tree_changed_connection.disconnect();
-
-       selected_instance=instance;
-       if(instance)
-       {
-               on_undo_tree_changed_connection = selected_instance->history_tree_store()->signal_undo_tree_changed().connect(
-                       sigc::mem_fun(*this,&Dock_History::on_undo_tree_changed));
-
-               action_tree->set_model(instance->history_tree_store());
-               action_tree->show();
-               update_undo_redo();
-               action_group->set_sensitive(true);
-       }
-       else
-       {
-               action_tree->set_model(Glib::RefPtr< Gtk::TreeModel >());
-               action_tree->hide();
-               action_group->set_sensitive(false);
-       }
-}
-
-void
-Dock_History::set_selected_instance_signal(etl::handle<studio::Instance> x)
-{
-       set_selected_instance(x);
-}
-
-void
-Dock_History::set_selected_instance(etl::loose_handle<studio::Instance> x)
-{
-       if(studio::App::shutdown_in_progress)
-               return;
-
-       // if it's already selected, don't select it again
-       if (x==selected_instance)
-               return;
-
-       std::list<etl::handle<studio::Instance> >::iterator iter;
-
-       set_selected_instance_(x);
-}
-
-void
-Dock_History::delete_instance(etl::handle<studio::Instance> instance)
-{
-       if(studio::App::shutdown_in_progress)
-               return;
-
-       if(selected_instance==instance)
-       {
-               set_selected_instance(0);
-       }
-}
-
-bool
-Dock_History::on_action_event(GdkEvent *event)
-{
-       studio::HistoryTreeStore::Model model;
-    switch(event->type)
-    {
-       case GDK_BUTTON_PRESS:
-       case GDK_2BUTTON_PRESS:
-               {
-                       Gtk::TreeModel::Path path;
-                       Gtk::TreeViewColumn *column;
-                       int cell_x, cell_y;
-                       if(!action_tree->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 = *(action_tree->get_model()->get_iter(path));
-
-                       //signal_user_click()(event->button.button,row,(ColumnID)column->get_sort_column_id());
-                       if((ColumnID)column->get_sort_column_id()==COLUMNID_JUMP)
-                       {
-                               etl::handle<synfigapp::Action::Undoable> action(row[model.action]);
-                               try{
-                               if((bool)row[model.is_undo])
-                               {
-                                       while(get_selected_instance()->undo_action_stack().size() && get_selected_instance()->undo_action_stack().front()!=action)
-                                               if(get_selected_instance()->undo()==false)
-                                                       throw int();
-                               }
-                               else if((bool)row[model.is_redo])
-                               {
-                                       while(get_selected_instance()->redo_action_stack().size() && get_selected_instance()->undo_action_stack().front()!=action)
-                                               if(get_selected_instance()->redo()==false)
-                                                       throw int();
-                               }
-                               }
-                               catch(int)
-                               {
-                                       return true;
-                               }
-                       }
-               }
-
-       case GDK_BUTTON_RELEASE:
-               break;
-       default:
-               break;
-       }
-       return false;
-}
-
-void
-Dock_History::on_action_toggle(const Glib::ustring& path_string)
-{
-       studio::HistoryTreeStore::Model history_tree_model;
-
-       Gtk::TreePath path(path_string);
-
-       const Gtk::TreeRow row = *(selected_instance->history_tree_store()->get_iter(path));
-
-       handle<synfigapp::Action::Undoable> action=row[history_tree_model.action];
-
-       selected_instance->synfigapp::Instance::set_action_status(action,!action->is_active());
-}
diff --git a/synfig-studio/src/gui/dock_history.h b/synfig-studio/src/gui/dock_history.h
deleted file mode 100644 (file)
index 00154b2..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_history.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DIALOG_HISTORY_H
-#define __SYNFIG_STUDIO_DIALOG_HISTORY_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include <gtkmm/actiongroup.h>
-#include "dock_canvasspecific.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class Dock_History : public Dock_CanvasSpecific
-{
-       Glib::RefPtr<Gtk::ActionGroup> action_group;
-       Gtk::TreeView *action_tree;
-
-       etl::loose_handle<studio::Instance>     selected_instance;
-
-       sigc::connection on_undo_tree_changed_connection;
-
-       void on_undo_tree_changed();
-
-       void set_selected_instance_(etl::handle<studio::Instance> x);
-
-
-       void set_selected_instance(etl::loose_handle<studio::Instance> x);
-
-       void set_selected_instance_signal(etl::handle<studio::Instance> x);
-
-       void delete_instance(etl::handle<studio::Instance> x);
-
-       Gtk::Widget* create_action_tree();
-
-public:
-
-       etl::loose_handle<studio::Instance> get_selected_instance() { return selected_instance; }
-
-       void clear_undo();
-       void clear_redo();
-       void clear_undo_and_redo();
-
-       bool on_action_event(GdkEvent *event);
-       void on_action_toggle(const Glib::ustring& path);
-
-       void update_undo_redo();
-
-       Dock_History();
-       ~Dock_History();
-protected:
-       virtual void init_instance_vfunc(etl::loose_handle<Instance> instance);
-
-}; // END of Dock_History
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_info.cpp b/synfig-studio/src/gui/dock_info.cpp
deleted file mode 100644 (file)
index 42c8a82..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_info.cpp
-**     \brief Dock Info File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**     Copyright (c) 2007 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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_info.h"
-#include "canvasview.h"
-#include "workarea.h"
-
-#include <synfig/canvas.h>
-#include <synfig/color.h>              // for gamma_in()
-#include <synfig/context.h>
-
-#include <gtkmm/separator.h>
-#include <gtkmm/invisible.h>
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-/* === E N T R Y P O I N T ================================================= */
-
-void studio::Dock_Info::on_mouse_move()
-{
-       Point pos = get_canvas_view()->work_area->get_cursor_pos();
-
-       Distance xv(pos[0],Distance::SYSTEM_UNITS);
-       xv.convert(App::distance_system, get_canvas_view()->get_canvas()->rend_desc());
-
-       Distance yv(pos[1],Distance::SYSTEM_UNITS);
-       yv.convert(App::distance_system, get_canvas_view()->get_canvas()->rend_desc());
-
-       //get the color and set the labels
-
-       x.set_text(xv.get_string(3));
-       y.set_text(yv.get_string(3));
-
-       Color c = get_canvas_view()->get_canvas()->get_context().get_color(pos);
-       float cr = c.get_r(),cg = c.get_g(), cb = c.get_b();
-
-       if(use_colorspace_gamma())
-       {
-               cr = gamma_in(cr);
-               cg = gamma_in(cg);
-               cb = gamma_in(cb);
-       }
-
-       r.set_text(strprintf("%.1f%%",cr*100));
-       g.set_text(strprintf("%.1f%%",cg*100));
-       b.set_text(strprintf("%.1f%%",cb*100));
-       a.set_text(strprintf("%.1f%%",c.get_a()*100));
-}
-
-studio::Dock_Info::Dock_Info()
-:Dock_CanvasSpecific("info",_("Info"),Gtk::StockID("synfig-info"))
-{
-       set_use_scrolled(false);
-
-       Gtk::Table *table = manage(new Gtk::Table);
-
-       //pos labels
-       table->attach(*manage(new Gtk::Label(_("X: "))),0,1,0,2,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       table->attach(*manage(new Gtk::Label(_("Y: "))),0,1,2,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-
-       //pos
-       table->attach(x,1,2,0,2,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       table->attach(y,1,2,2,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-
-       //separator
-       table->attach(*manage(new Gtk::VSeparator),2,3,0,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-
-       //color label
-       table->attach(*manage(new Gtk::Label(_("R: "))),3,4,0,1,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       table->attach(*manage(new Gtk::Label(_("G: "))),3,4,1,2,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       table->attach(*manage(new Gtk::Label(_("B: "))),3,4,2,3,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       table->attach(*manage(new Gtk::Label(_("A: "))),3,4,3,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-
-       //color
-       table->attach(r,4,5,0,1,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       table->attach(g,4,5,1,2,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       table->attach(b,4,5,2,3,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       table->attach(a,4,5,3,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-
-       table->attach(*manage(new Gtk::Label),0,5,4,5);
-
-       table->show_all();
-
-       add(*table);
-}
-
-studio::Dock_Info::~Dock_Info()
-{
-}
-
-void studio::Dock_Info::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       mousecon.disconnect();
-
-       if(canvas_view && canvas_view->get_work_area())
-       {
-               mousecon = get_canvas_view()->work_area->signal_cursor_moved().connect(sigc::mem_fun(*this,&Dock_Info::on_mouse_move));
-       }
-}
diff --git a/synfig-studio/src/gui/dock_info.h b/synfig-studio/src/gui/dock_info.h
deleted file mode 100644 (file)
index 83f4d16..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_info.h
-**     \brief Info Dock Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_DOCK_INFO_H
-#define __SYNFIG_DOCK_INFO_H
-
-/* === H E A D E R S ======================================================= */
-#include "dock_canvasspecific.h"
-#include "sigc++/signal.h"
-
-#include "widgets/widget_distance.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class Dock_Info : public Dock_CanvasSpecific
-{
-       Gtk::Label  r,g,b,a;
-       Gtk::Label      x,y;
-
-       sigc::connection mousecon;
-
-       void on_mouse_move();
-
-public:
-       Dock_Info();
-       ~Dock_Info();
-
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-};
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_keyframes.cpp b/synfig-studio/src/gui/dock_keyframes.cpp
deleted file mode 100644 (file)
index 44e9893..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_keyframes.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_keyframes.h"
-#include "app.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/slot.h>
-#include "keyframetreestore.h"
-#include "keyframetree.h"
-#include "canvasview.h"
-#include "keyframeactionmanager.h"
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_Keyframes::Dock_Keyframes():
-       Dock_CanvasSpecific("keyframes",_("Keyframes"),Gtk::StockID("synfig-keyframes")),
-       action_group(Gtk::ActionGroup::create("action_group_dock_keyframes")),
-       keyframe_action_manager(new KeyframeActionManager)
-{
-       keyframe_action_manager->set_ui_manager(App::ui_manager());
-       keyframe_action_manager->signal_show_keyframe_properties().connect(
-               sigc::mem_fun(*this,&Dock_Keyframes::show_keyframe_properties)
-       );
-
-    Glib::ustring ui_info =
-       "<ui>"
-       "       <toolbar action='toolbar-keyframe'>"
-       "       <toolitem action='action-KeyframeAdd' />"
-       "       <toolitem action='action-KeyframeDuplicate' />"
-       "       <toolitem action='action-KeyframeRemove' />"
-       "       <toolitem action='keyframe-properties' />"
-       "       </toolbar>"
-       "</ui>"
-       ;
-
-       App::ui_manager()->add_ui_from_string(ui_info);
-
-       set_toolbar(*dynamic_cast<Gtk::Toolbar*>(App::ui_manager()->get_widget("/toolbar-keyframe")));
-}
-
-Dock_Keyframes::~Dock_Keyframes()
-{
-}
-
-void
-Dock_Keyframes::show_keyframe_properties()
-{
-       if(get_canvas_view())
-               get_canvas_view()->show_keyframe_dialog();
-}
-
-void
-Dock_Keyframes::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       Glib::RefPtr<KeyframeTreeStore> keyframe_tree_store;
-       keyframe_tree_store=KeyframeTreeStore::create(canvas_view->canvas_interface());
-
-       KeyframeTree* keyframe_tree(new KeyframeTree());
-       keyframe_tree->set_model(keyframe_tree_store);
-       keyframe_tree->set_editable(true);
-
-       canvas_view->set_tree_model(get_name(),keyframe_tree_store);
-       canvas_view->set_ext_widget(get_name(),keyframe_tree);
-}
-
-void
-Dock_Keyframes::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(canvas_view)
-       {
-               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
-
-               add(*tree_view);
-               tree_view->show();
-
-               keyframe_action_manager->set_keyframe_tree(dynamic_cast<KeyframeTree*>(canvas_view->get_ext_widget(get_name())));
-               keyframe_action_manager->set_canvas_interface(canvas_view->canvas_interface());
-               keyframe_action_manager->refresh();
-       }
-       else
-       {
-               clear_previous();
-
-               keyframe_action_manager->set_keyframe_tree(0);
-               keyframe_action_manager->set_canvas_interface(0);
-               keyframe_action_manager->refresh();
-       }
-}
diff --git a/synfig-studio/src/gui/dock_keyframes.h b/synfig-studio/src/gui/dock_keyframes.h
deleted file mode 100644 (file)
index 37c99c4..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_keyframes.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_KEYFRAMES_H
-#define __SYNFIG_STUDIO_DOCK_KEYFRAMES_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include "dock_canvasspecific.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include <gtkmm/actiongroup.h>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class KeyframeTreeStore;
-class KeyframeTree;
-
-class KeyframeActionManager;
-
-class Dock_Keyframes : public Dock_CanvasSpecific
-{
-       Glib::RefPtr<Gtk::ActionGroup> action_group;
-
-       /*
-       void add_keyframe_pressed();
-       void duplicate_keyframe_pressed();
-       void delete_keyframe_pressed();
-       */
-
-       void show_keyframe_properties();
-
-       KeyframeActionManager* keyframe_action_manager;
-
-protected:
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-
-public:
-
-
-       Dock_Keyframes();
-       ~Dock_Keyframes();
-}; // END of Dock_Keyframes
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_layergroups.cpp b/synfig-studio/src/gui/dock_layergroups.cpp
deleted file mode 100644 (file)
index d847ff7..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_layergroups.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_layergroups.h"
-#include "app.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/retype_return.h>
-#include <sigc++/slot.h>
-#include "canvasview.h"
-
-#include "layergrouptreestore.h"
-#include "layergrouptree.h"
-#include "groupactionmanager.h"
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_LayerGroups::Dock_LayerGroups():
-       Dock_CanvasSpecific("groups",_("Groups"),Gtk::StockID("synfig-group")),
-       action_group_group_ops(Gtk::ActionGroup::create("action_group_dock_layergroups")),
-       group_action_manager(new GroupActionManager)
-{
-       group_action_manager->set_ui_manager(App::ui_manager());
-
-       action_group_group_ops->add( Gtk::Action::create("toolbar-groups", _("Group Ops")) );
-
-       action_group_add=Gtk::Action::create("action-group_add", Gtk::Stock::ADD,_("Add a New Group"),_("Add a New Group"));
-       action_group_group_ops->add(action_group_add);
-       action_group_add->set_sensitive(false);
-
-       App::ui_manager()->insert_action_group(action_group_group_ops);
-
-    Glib::ustring ui_info =
-       "<ui>"
-       "       <toolbar action='toolbar-groups'>"
-       "       <toolitem action='action-GroupRemove' />"
-       "       <toolitem action='action-group_add' />"
-       "       </toolbar>"
-       "</ui>"
-       ;
-
-       App::ui_manager()->add_ui_from_string(ui_info);
-
-       set_toolbar(*dynamic_cast<Gtk::Toolbar*>(App::ui_manager()->get_widget("/toolbar-groups")));
-}
-
-Dock_LayerGroups::~Dock_LayerGroups()
-{
-       delete group_action_manager;
-}
-
-void
-Dock_LayerGroups::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       Glib::RefPtr<LayerGroupTreeStore> layer_group_tree_store;
-       layer_group_tree_store=LayerGroupTreeStore::create(canvas_view->canvas_interface());
-
-       LayerGroupTree* layer_group_tree(new LayerGroupTree());
-       layer_group_tree->set_model(layer_group_tree_store);
-       layer_group_tree->signal_popup_layer_menu().connect(sigc::mem_fun(*canvas_view,&CanvasView::popup_layer_menu));
-
-       canvas_view->set_tree_model(get_name(),layer_group_tree_store);
-       canvas_view->set_ext_widget(get_name(),layer_group_tree);
-}
-
-void
-Dock_LayerGroups::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(canvas_view)
-       {
-               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
-
-               add(*tree_view);
-               tree_view->show();
-
-               group_action_manager->set_group_tree(dynamic_cast<LayerGroupTree*>(tree_view));
-               group_action_manager->set_canvas_interface(canvas_view->canvas_interface());
-               group_action_manager->refresh();
-       }
-       else
-       {
-               clear_previous();
-               group_action_manager->clear();
-               group_action_manager->set_canvas_interface(0);
-               group_action_manager->set_group_tree(0);
-       }
-}
diff --git a/synfig-studio/src/gui/dock_layergroups.h b/synfig-studio/src/gui/dock_layergroups.h
deleted file mode 100644 (file)
index bdb4f22..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_layergroups.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_LAYERGROUPS_H
-#define __SYNFIG_STUDIO_DOCK_LAYERGROUPS_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include "dock_canvasspecific.h"
-#include <gtkmm/actiongroup.h>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace Gtk { class HScale; }
-
-namespace studio {
-
-class GroupActionManager ;
-
-class Dock_LayerGroups : public Dock_CanvasSpecific
-{
-       Glib::RefPtr<Gtk::ActionGroup> action_group_group_ops;
-       Glib::RefPtr<Gtk::Action> action_group_add;
-
-       GroupActionManager *group_action_manager;
-protected:
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-private:
-
-public:
-
-
-       Dock_LayerGroups();
-       ~Dock_LayerGroups();
-}; // END of Dock_LayerGroups
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_layers.cpp b/synfig-studio/src/gui/dock_layers.cpp
deleted file mode 100644 (file)
index 2c75e83..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_layers.cpp
-**     \brief Template File
-**
-**     $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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_layers.h"
-#include "app.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/retype_return.h>
-#include <sigc++/slot.h>
-#include "layertreestore.h"
-#include "layertree.h"
-#include "canvasview.h"
-#include "layeractionmanager.h"
-//#include <ETL/ref_count>
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/*static void do_nothing(reference_counter x)
-{
-       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,x.count());
-}*/
-
-/* === M E T H O D S ======================================================= */
-
-Dock_Layers::Dock_Layers():
-       Dock_CanvasSpecific("layers",_("Layers"),Gtk::StockID("synfig-layer")),
-       layer_action_manager(new LayerActionManager)
-{
-       if(layer_action_manager)layer_action_manager->set_ui_manager(App::ui_manager());
-
-       action_group_new_layers=Gtk::ActionGroup::create("action_group_new_layers");
-       action_group_layer_ops=Gtk::ActionGroup::create("action_group_layer_ops");
-
-       std::map<synfig::String,synfig::String> category_map;
-
-       // Build layer creation actions
-       synfig::Layer::Book::iterator iter;
-       for(iter=synfig::Layer::book().begin();iter!=synfig::Layer::book().end();++iter)
-       {
-               synfig::Layer::Book::value_type lyr(*iter);
-
-               if(lyr.second.category==CATEGORY_DO_NOT_USE)
-                       continue;
-
-               action_group_new_layers->add(Gtk::Action::create(
-                       strprintf("layer-new-%s",lyr.first.c_str()),
-                       layer_icon(lyr.first.c_str()),
-                       lyr.second.local_name,lyr.second.local_name
-               ),
-                       sigc::hide_return(
-                               sigc::bind(
-                                       sigc::mem_fun(*this,&studio::Dock_Layers::add_layer),
-                                       lyr.first
-                               )
-                       )
-               );
-
-               category_map[lyr.second.category]+=strprintf("<menuitem action='layer-new-%s' />",lyr.first.c_str());
-
-               //(*category_map)[lyr.second.category]->items().push_back(Gtk::Menu_Helpers::MenuElem(lyr.second.local_name,
-               //));
-       }
-
-       {
-               Glib::RefPtr<Gtk::ActionGroup> action_group_categories(Gtk::ActionGroup::create("layer-category"));
-               synfig::String layer_ui_info;
-
-               layer_ui_info+="<ui><popup action='menu-main'><menu action='menu-layer'><menu action='menu-layer-new'>";
-
-               std::map<synfig::String,synfig::String>::iterator iter;
-               for(iter=category_map.begin();iter!=category_map.end();++iter)
-               {
-                       layer_ui_info+=strprintf("<menu action='%s'>%s</menu>",iter->first.c_str(),iter->second.c_str());
-                       action_group_categories->add(Gtk::Action::create(iter->first.c_str(),dgettext("synfig", iter->first.c_str())));
-               }
-
-               layer_ui_info+="</menu></menu></popup></ui>";
-
-               App::ui_manager()->insert_action_group(action_group_categories);
-               App::ui_manager()->insert_action_group(action_group_new_layers);
-
-               try
-               {
-                       App::ui_manager()->add_ui_from_string(layer_ui_info);
-               }
-               catch(Glib::MarkupError x)
-               {
-                       error("%s:%d caught MarkupError code %d: %s", __FILE__, __LINE__, x.code(), x.what().c_str());
-                       error("%s:%d with markup: \"%s\"", __FILE__, __LINE__, layer_ui_info.c_str());
-                       exit(1);
-               }
-       }
-
-       if(layer_action_manager)
-               action_group_layer_ops->add(layer_action_manager->get_action_select_all_child_layers());
-
-       action_group_layer_ops->add( Gtk::Action::create("toolbar-layer", _("Layer Ops")) );
-       App::ui_manager()->insert_action_group(action_group_layer_ops);
-
-    Glib::ustring ui_info =
-       "<ui>"
-       "       <toolbar action='toolbar-layer'>"
-       "       <toolitem action='action-LayerRaise' />"
-       "       <toolitem action='action-LayerLower' />"
-       "       <separator />"
-       "       <toolitem action='action-LayerDuplicate' />"
-       "       <toolitem action='action-LayerEncapsulate' />"
-       "       <toolitem action='select-all-child-layers' />"
-       "       <toolitem action='action-LayerRemove' />"
-       "       <separator />"
-       "       <toolitem action='cut' />"
-       "       <toolitem action='copy' />"
-       "       <toolitem action='paste' />"
-       "       </toolbar>"
-       "</ui>"
-       ;
-
-       App::ui_manager()->add_ui_from_string(ui_info);
-
-       action_group_new_layers->set_sensitive(false);
-
-       set_toolbar(*dynamic_cast<Gtk::Toolbar*>(App::ui_manager()->get_widget("/toolbar-layer")));
-
-
-
-
-
-       /*
-       reference_counter ref_count;
-       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
-
-       {
-               sigc::signal<void> tmp_signal;
-
-               tmp_signal.connect(
-                       sigc::bind(
-                               sigc::ptr_fun(do_nothing),
-                               ref_count
-                       )
-               );
-
-       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
-               tmp_signal();
-       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
-
-               tmp_signal.clear();
-       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
-
-               tmp_signal();
-       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
-               tmp_signal.connect(
-                       sigc::bind(
-                               sigc::ptr_fun(do_nothing),
-                               ref_count
-                       )
-               );
-       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
-       }
-       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
-       assert(ref_count.count()==1);
-       */
-}
-
-
-Dock_Layers::~Dock_Layers()
-{
-       delete layer_action_manager;
-}
-
-
-void
-Dock_Layers::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       Glib::RefPtr<LayerTreeStore> layer_tree_store;
-       layer_tree_store=LayerTreeStore::create(canvas_view->canvas_interface());
-
-       canvas_view->set_tree_model(get_name(),layer_tree_store);
-       LayerTree* layer_tree(new LayerTree());
-       layer_tree->set_time_adjustment(canvas_view->time_adjustment());
-
-       layer_tree->signal_edited_value().connect(
-               sigc::hide_return(
-                       sigc::mem_fun(*canvas_view->canvas_interface(), &synfigapp::CanvasInterface::change_value)
-               )
-       );
-
-       // (a) should be before (b), (b) should be before (c)
-       canvas_view->set_ext_widget(get_name()+"_cmp",layer_tree); // (a)
-       canvas_view->set_ext_widget(get_name(),&layer_tree->get_layer_tree_view());
-       canvas_view->set_ext_widget("params",&layer_tree->get_param_tree_view());
-
-       layer_tree->set_model(layer_tree_store); // (b)
-       canvas_view->set_tree_model("params",layer_tree->get_param_tree_view().get_model()); // (c)
-
-       /*
-       canvas_view->layermenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-delete"),Gtk::AccelKey("Delete"),
-               sigc::mem_fun(*layer_tree, &LayerTree::on_delete_pressed))
-       );
-       */
-
-       // Hide the time bar
-       if(canvas_view->get_canvas()->rend_desc().get_time_start()==canvas_view->get_canvas()->rend_desc().get_time_end())
-               canvas_view->hide_timebar();
-       layer_tree_store->rebuild();
-       present();
-}
-
-void
-Dock_Layers::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(canvas_view)
-       {
-               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
-
-               add(*tree_view);
-               tree_view->show();
-               action_group_new_layers->set_sensitive(true);
-               if(layer_action_manager)
-               {
-                       layer_action_manager->set_layer_tree(dynamic_cast<LayerTree*>(canvas_view->get_ext_widget(get_name()+"_cmp")));
-                       layer_action_manager->set_canvas_interface(canvas_view->canvas_interface());
-                       layer_action_manager->refresh();
-               }
-       }
-       else
-       {
-               action_group_new_layers->set_sensitive(false);
-               if(layer_action_manager)
-               {
-                       layer_action_manager->clear();
-                       layer_action_manager->set_canvas_interface(0);
-                       layer_action_manager->set_layer_tree(0);
-               }
-
-               clear_previous();
-       }
-}
-
-void
-Dock_Layers::add_layer(synfig::String id)
-{
-       etl::loose_handle<CanvasView> canvas_view(get_canvas_view());
-       if(canvas_view)
-       {
-               canvas_view->add_layer(id);
-       }
-}
diff --git a/synfig-studio/src/gui/dock_layers.h b/synfig-studio/src/gui/dock_layers.h
deleted file mode 100644 (file)
index b5eda42..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_layers.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_LAYERS_H
-#define __SYNFIG_STUDIO_DOCK_LAYERS_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include "dock_canvasspecific.h"
-#include <gtkmm/actiongroup.h>
-#include <list>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace Gtk { class HScale; }
-
-namespace studio {
-
-class LayerActionManager;
-
-class Dock_Layers : public Dock_CanvasSpecific
-{
-       Glib::RefPtr<Gtk::ActionGroup> action_group_new_layers;
-       Glib::RefPtr<Gtk::ActionGroup> action_group_layer_ops;
-
-       Gtk::HScale *layer_amount_hscale;
-
-       LayerActionManager* layer_action_manager;
-
-protected:
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-private:
-
-       void add_layer(synfig::String id);
-       void increase_amount();
-       void decrease_amount();
-
-public:
-
-
-       Dock_Layers();
-       ~Dock_Layers();
-}; // END of Dock_Layers
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_metadata.cpp b/synfig-studio/src/gui/dock_metadata.cpp
deleted file mode 100644 (file)
index 3dce59a..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_metadata.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_metadata.h"
-#include "app.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/slot.h>
-#include "metadatatreestore.h"
-#include "canvasview.h"
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_MetaData::Dock_MetaData():
-       Dock_CanvasSpecific("meta_data",_("Canvas MetaData"),Gtk::StockID("synfig-meta_data")),
-       tree_view(manage(new Gtk::TreeView()))
-{
-       MetaDataTreeStore::Model model;
-
-       tree_view->append_column(_("Key"),model.key);
-       tree_view->append_column_editable(_("Data"),model.data);
-       tree_view->set_rules_hint();
-
-       Gtk::ScrolledWindow *scrolledwindow = manage(new class Gtk::ScrolledWindow());
-       scrolledwindow->set_flags(Gtk::CAN_FOCUS);
-       scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-       scrolledwindow->add(*tree_view);
-       scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
-       scrolledwindow->show();
-
-       add(*scrolledwindow);
-
-       add_button(
-               Gtk::StockID("gtk-add"),
-               _("Add new MetaData entry")
-       )->signal_clicked().connect(
-               sigc::mem_fun(
-                       *this,
-                       &Dock_MetaData::on_add_pressed
-               )
-       );
-
-       add_button(
-               Gtk::StockID("gtk-delete"),
-               _("Remove selected MetaData entry")
-       )->signal_clicked().connect(
-               sigc::mem_fun(
-                       *this,
-                       &Dock_MetaData::on_delete_pressed
-               )
-       );
-}
-
-Dock_MetaData::~Dock_MetaData()
-{
-}
-
-void
-Dock_MetaData::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       canvas_view->set_tree_model(get_name(),MetaDataTreeStore::create(canvas_view->canvas_interface()));
-}
-
-void
-Dock_MetaData::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(canvas_view)
-       {
-               tree_view->set_model(canvas_view->get_tree_model(get_name()));
-               tree_view->show();
-       }
-       else
-       {
-               tree_view->set_model(Glib::RefPtr<Gtk::TreeModel>());
-               tree_view->hide();
-       }
-}
-
-void
-Dock_MetaData::on_add_pressed()
-{
-       if(get_canvas_interface())
-       {
-               synfig::String key;
-               if(App::dialog_entry(_("New MetaData Entry"), _("Please enter the name of the key"),key) && !key.empty())
-               {
-                       get_canvas_interface()->set_meta_data(key," ");
-               }
-       }
-}
-
-void
-Dock_MetaData::on_delete_pressed()
-{
-}
diff --git a/synfig-studio/src/gui/dock_metadata.h b/synfig-studio/src/gui/dock_metadata.h
deleted file mode 100644 (file)
index 285b845..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_metadata.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_METADATA_H
-#define __SYNFIG_STUDIO_DOCK_METADATA_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include "dock_canvasspecific.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class CanvasView;
-class Instance;
-
-class Dock_MetaData : public Dock_CanvasSpecific
-{
-
-       Gtk::TreeView *tree_view;
-
-
-       void on_add_pressed();
-       void on_delete_pressed();
-
-protected:
-
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-public:
-
-
-       Dock_MetaData();
-       ~Dock_MetaData();
-}; // END of Dock_MetaData
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_navigator.cpp b/synfig-studio/src/gui/dock_navigator.cpp
deleted file mode 100644 (file)
index ad5061e..0000000
+++ /dev/null
@@ -1,522 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_navigator.cpp
-**     \brief Dock Nagivator File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**     Copyright (c) 2007 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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_navigator.h"
-#include "canvasview.h"
-#include "workarea.h"
-
-#include <cassert>
-#include <synfig/canvas.h>
-#include <synfig/context.h>
-#include <synfig/target_scanline.h>
-#include <synfig/surface.h>
-
-#include <gtkmm/separator.h>
-
-#include "asyncrenderer.h"
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-
-/* === M A C R O S ========================================================= */
-
-const double log_10_2 = log(2.0);
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-/* === E N T R Y P O I N T ================================================= */
-studio::Widget_NavView::Widget_NavView(CanvasView::LooseHandle cv)
-:canvview(cv),
-adj_zoom(0,-4,4,1,2),
-scrolling(false),
-surface(new synfig::Surface)
-{
-       attach(drawto,0,4,0,1);
-
-       attach(*manage(new Gtk::HSeparator),0,4,1,2,Gtk::SHRINK|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-
-       //zooming stuff
-       attach(zoom_print,0,1,2,3,Gtk::SHRINK|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-       zoom_print.set_size_request(40,-1);
-
-       Gtk::HScale *s = manage(new Gtk::HScale(adj_zoom));
-       s->set_draw_value(false);
-       //s->set_update_policy(Gtk::UPDATE_DELAYED);
-       //s->signal_event().connect(sigc::mem_fun(*this,&Dock_Navigator::on_scroll_event));
-       attach(*s,1,4,2,3,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
-
-       show_all();
-
-       adj_zoom.signal_value_changed().connect(sigc::mem_fun(*this,&Widget_NavView::on_number_modify));
-
-       if(cv)
-       {
-               drawto.signal_expose_event().connect(sigc::mem_fun(*this,&Widget_NavView::on_expose_draw));
-               drawto.signal_event().connect(sigc::mem_fun(*this,&Widget_NavView::on_mouse_event));
-
-               drawto.add_events(Gdk::BUTTON_MOTION_MASK|Gdk::BUTTON_PRESS_MASK);
-
-               //get_canvas_view()->canvas_interface()->signal_dirty_preview()
-               //                              .connect(sigc::mem_fun(*this,&Widget_NavView::on_dirty_preview));
-               get_canvas_view()->work_area->signal_rendering()
-                                               .connect(sigc::mem_fun(*this,&Widget_NavView::on_dirty_preview));
-
-               get_canvas_view()->work_area->signal_view_window_changed()
-                                               .connect(sigc::mem_fun(*this,&Widget_NavView::on_workarea_view_change));
-
-               //update with this canvas' view
-               on_workarea_view_change();
-
-               dirty = true;
-               queue_draw();
-       }
-
-       adj_zoom.set_value(0);
-}
-
-studio::Widget_NavView::~Widget_NavView()
-{
-}
-
-
-static void freegu8(const guint8 *p)
-{
-       delete [] p;
-}
-
-void studio::Widget_NavView::on_start_render()
-{
-       if(dirty)
-       {
-               //synfig::warning("Nav: Starting render");
-               //synfig::warning("Nav: Rendering canvas");
-               etl::handle<Target_Scanline>    targ = surface_target(surface.get());
-
-               targ->set_canvas(get_canvas_view()->get_canvas());
-               targ->set_remove_alpha();
-               targ->set_avoid_time_sync();
-               targ->set_quality(get_canvas_view()->get_work_area()->get_quality());
-               //synfig::info("Set the quality level to: %d", get_canvas_view()->get_work_area()->get_quality());
-
-               //this should set it to render a single frame
-               RendDesc        r = get_canvas_view()->get_canvas()->rend_desc();
-               r.set_time(get_canvas_view()->canvas_interface()->get_time());
-
-               //this changes the size of the canvas to the closest thing we can find
-               int sw = r.get_w(), sh = r.get_h();
-
-               //synfig::warning("Nav: source image is %d x %d", sw,sh);
-
-               //resize so largest dimension is 128
-               int dw = sw > sh ? 128 : sw*128/sh,
-                       dh = sh > sw ? 128 : sh*128/sw;
-
-               //synfig::warning("Nav: dest image is %d x %d", dw,dh);
-
-               r.set_w(dw);
-               r.set_h(dh);
-
-               //get the pw and ph
-               //float pw = r.get_pw();
-               //float ph = r.get_ph();
-               //synfig::warning("Nav: pixel size is %f x %f", pw,ph);
-
-               //this renders that single frame
-               targ->set_rend_desc(&r);
-
-               //synfig::warning("Nav: Building async renderer and starting it...");
-
-               renderer = new AsyncRenderer(targ);
-               renderer->signal_success().connect(sigc::mem_fun(*this,&Widget_NavView::on_finish_render));
-               dirty = false;
-               renderer->start();
-       }
-}
-
-void studio::Widget_NavView::on_finish_render()
-{
-       //convert it into our pixmap
-       PixelFormat pf(PF_RGB);
-
-       //synfig::warning("Nav: It hath succeeded!!!");
-
-       //assert(renderer && renderer->has_success());
-       //synfig::warning("Nav: now we know it really succeeded");
-       if(!*surface)
-       {
-               synfig::warning("dock_navigator: Bad surface");
-               return;
-       }
-
-       int w = 0, h = 0;
-       int dw = surface->get_w();
-       int dh = surface->get_h();
-
-       if(prev)
-       {
-               w = prev->get_width();
-               h = prev->get_height();
-       }
-
-       if(w != dw || h != dh || !prev)
-       {
-               const int total_bytes(dw*dh*synfig::channels(pf));
-
-               //synfig::warning("Nav: Updating the pixbuf to be the right size, etc. (%d bytes)", total_bytes);
-
-               prev.clear();
-               guint8 *bytes = new guint8[total_bytes]; //24 bits per pixel
-
-               //convert into our buffered dataS
-               //synfig::warning("Nav: converting color format into buffer");
-               convert_color_format((unsigned char *)bytes, (*surface)[0], dw*dh, pf, App::gamma);
-
-               prev =
-               Gdk::Pixbuf::create_from_data(
-                       bytes,  // pointer to the data
-                       Gdk::COLORSPACE_RGB, // the colorspace
-                       ((pf&PF_A)==PF_A), // has alpha?
-                       8, // bits per sample
-                       dw,     // width
-                       dh,     // height
-                       dw*synfig::channels(pf), // stride (pitch)
-                       sigc::ptr_fun(freegu8)
-               );
-       }
-       else
-       {
-               //synfig::warning("Nav: Don't need to resize");
-               //convert into our buffered dataS
-               //synfig::warning("Nav: converting color format into buffer");
-               if(prev) //just in case we're stupid
-               {
-                       convert_color_format((unsigned char *)prev->get_pixels(), (*surface)[0], dw*dh, pf, App::gamma);
-               }
-       }
-       queue_draw();
-}
-
-/*     zoom slider is on exponential scale
-
-       map: -4,4 -> small number,1600 with 100 at 0
-
-       f(x) = 100*2^x
-*/
-
-static double unit_to_zoom(double f)
-{
-       return pow(2.0,f);
-}
-
-static double zoom_to_unit(double f)
-{
-       if(f > 0)
-       {
-               return log(f) / log_10_2;
-       }else return -999999.0;
-}
-
-bool studio::Widget_NavView::on_expose_draw(GdkEventExpose */*exp*/)
-{
-#ifdef SINGLE_THREADED
-       // don't redraw if the previous redraw is still running single-threaded
-       // or we end up destroying the renderer that's rendering it
-       if (App::single_threaded && renderer && renderer->updating)
-               return false;
-#endif
-
-       //print out the zoom
-       //HACK kind of...
-       //zoom_print.set_text(strprintf("%.1f%%",100*unit_to_zoom(adj_zoom.get_value())));
-
-       //draw the good stuff
-       on_start_render();
-
-       //if we've got a preview etc. display it...
-       if(get_canvas_view() && prev)
-       {
-               //axis transform from units to pixel coords
-               float xaxis = 0, yaxis = 0;
-
-               int canvw = get_canvas_view()->get_canvas()->rend_desc().get_w();
-               //int canvh = get_canvas_view()->get_canvas()->rend_desc().get_h();
-
-               float pw = get_canvas_view()->get_canvas()->rend_desc().get_pw();
-               float ph = get_canvas_view()->get_canvas()->rend_desc().get_ph();
-
-               int w = prev->get_width();
-               int h = prev->get_height();
-
-               //scale up/down to the nearest pixel ratio...
-               //and center in center
-               int offx=0, offy=0;
-
-               float sx, sy;
-               int nw,nh;
-
-               sx = drawto.get_width() / (float)w;
-               sy = drawto.get_height() / (float)h;
-
-               //synfig::warning("Nav redraw: now to scale the bitmap: %.3f x %.3f",sx,sy);
-
-               //round to smallest scale (fit entire thing in window without distortion)
-               if(sx > sy) sx = sy;
-               //else sy = sx;
-
-               //scaling and stuff
-               // the point to navpixel space conversion should be:
-               //              (navpixels / canvpixels) * (canvpixels / canvsize)
-               //      or (navpixels / prevpixels) * (prevpixels / navpixels)
-               xaxis = sx * w / (float)canvw;
-               yaxis = xaxis/ph;
-               xaxis /= pw;
-
-               //scale to a new pixmap and then copy over to the window
-               nw = (int)(w*sx);
-               nh = (int)(h*sx);
-
-               //must now center to be cool
-               offx = (drawto.get_width() - nw)/2;
-               offy = (drawto.get_height() - nh)/2;
-
-               //trivial escape
-               if(nw == 0 || nh == 0)return true;
-
-               //draw to drawing area
-               Glib::RefPtr<Gdk::GC>   gc = Gdk::GC::create(drawto.get_window());
-
-               //synfig::warning("Nav: Scaling pixmap to off (%d,%d) with size (%d,%d)", offx,offy,nw, nh);
-               Glib::RefPtr<Gdk::Pixbuf> scalepx = prev->scale_simple(nw,nh,Gdk::INTERP_NEAREST);
-
-               //synfig::warning("Nav: Drawing scaled bitmap");
-               drawto.get_window()->draw_pixbuf(
-                       gc, //GC
-                       scalepx, //pixbuf
-                       0, 0,   // Source X and Y
-                       offx, offy,     // Dest X and Y
-                       -1,-1,  // Width and Height
-                       Gdk::RGB_DITHER_MAX, // RgbDither
-                       2, 2 // Dither offset X and Y
-               );
-
-               //draw fancy red rectangle around focus point
-               const Point &wtl = get_canvas_view()->work_area->get_window_tl(),
-                                       &wbr = get_canvas_view()->work_area->get_window_br();
-
-               gc->set_rgb_fg_color(Gdk::Color("#ff0000"));
-               gc->set_line_attributes(2,Gdk::LINE_SOLID,Gdk::CAP_BUTT,Gdk::JOIN_MITER);
-
-               //it must be clamped to the drawing area though
-               int l=0,rw=0,t=0,rh=0;
-               const Point fp = -get_canvas_view()->work_area->get_focus_point();
-
-               //get focus point in normal space
-               rw = (int)(abs((wtl[0]-wbr[0])*xaxis));
-               rh = (int)(abs((wtl[1]-wbr[1])*yaxis));
-
-               //transform into pixel space
-               l = (int)(drawto.get_width()/2 + fp[0]*xaxis - rw/2);
-               t = (int)(drawto.get_height()/2 + fp[1]*yaxis - rh/2);
-
-               //coord system:
-               // tl : (offx,offy)
-               // axis multipliers = xaxis,yaxis
-               //synfig::warning("Nav: tl (%f,%f), br (%f,%f)", wtl[0],wtl[1],wbr[0],wbr[1]);
-               //synfig::warning("Nav: tl (%f,%f), br (%f,%f)", wtl[0],wtl[1],wbr[0],wbr[1]);
-               //synfig::warning("Nav: Drawing Rectangle (%d,%d) with dim (%d,%d)", l,t,rw,rh);
-               drawto.get_window()->draw_rectangle(gc,false,l,t,rw,rh);
-       }
-
-       return false; //draw everything else too
-}
-
-void studio::Widget_NavView::on_dirty_preview()
-{
-       dirty = true;
-       queue_draw();
-}
-
-bool studio::Widget_NavView::on_scroll_event(GdkEvent *event)
-{
-       if(get_canvas_view() && get_canvas_view()->get_work_area())
-       {
-               double z = unit_to_zoom(adj_zoom.get_value());
-
-               switch(event->type)
-               {
-                       case GDK_BUTTON_PRESS:
-                       {
-                               if(event->button.button == 1)
-                               {
-                                       scrolling = true;
-                                       get_canvas_view()->get_work_area()->set_zoom(z);
-                                       scrolling = false;
-                               }
-                               break;
-                       }
-
-                       case GDK_MOTION_NOTIFY:
-                       {
-                               if(Gdk::ModifierType(event->motion.state) & Gdk::BUTTON1_MASK)
-                               {
-                                       scrolling = true;
-                                       get_canvas_view()->get_work_area()->set_zoom(z);
-                                       scrolling = false;
-                               }
-                               break;
-                       }
-
-                       default:
-                               break;
-               }
-       }
-
-       return false;
-}
-
-void studio::Widget_NavView::on_number_modify()
-{
-       double z = unit_to_zoom(adj_zoom.get_value());
-       zoom_print.set_text(strprintf("%.1f%%",z*100.0));
-       //synfig::warning("Updating zoom to %f",adj_zoom.get_value());
-
-       if(get_canvas_view() && z != get_canvas_view()->get_work_area()->get_zoom())
-       {
-               scrolling = true;
-               get_canvas_view()->get_work_area()->set_zoom(z);
-               scrolling = false;
-       }
-}
-
-void studio::Widget_NavView::on_workarea_view_change()
-{
-       double wz = get_canvas_view()->get_work_area()->get_zoom();
-       double z = zoom_to_unit(wz);
-
-       //synfig::warning("Updating zoom to %f -> %f",wz,z);
-       if(!scrolling && z != adj_zoom.get_value())
-       {
-               adj_zoom.set_value(z);
-               //adj_zoom.value_changed();
-       }
-       queue_draw();
-}
-
-bool studio::Widget_NavView::on_mouse_event(GdkEvent * e)
-{
-       Point p;
-       bool    setpos = false;
-
-       if(e->type == GDK_BUTTON_PRESS && e->button.button == 1)
-       {
-               p[0] = e->button.x - drawto.get_width()/2;
-               p[1] = e->button.y - drawto.get_height()/2;
-
-               setpos = true;
-       }
-
-       if(e->type == GDK_MOTION_NOTIFY && (Gdk::ModifierType(e->motion.state) & Gdk::BUTTON1_MASK))
-       {
-               p[0] = e->motion.x - drawto.get_width()/2;
-               p[1] = e->motion.y - drawto.get_height()/2;
-
-               setpos = true;
-       }
-
-       if(setpos && prev && get_canvas_view())
-       {
-               const Point &tl = get_canvas_view()->get_canvas()->rend_desc().get_tl();
-               const Point &br = get_canvas_view()->get_canvas()->rend_desc().get_br();
-
-               float max = abs((br[0]-tl[0]) / drawto.get_width());
-
-               if((float(prev->get_width()) / drawto.get_width()) < (float(prev->get_height()) / drawto.get_height()))
-                       max = abs((br[1]-tl[1]) / drawto.get_height());
-
-               float signx = (br[0]-tl[0]) < 0 ? -1 : 1;
-               float signy = (br[1]-tl[1]) < 0 ? -1 : 1;
-
-               Point pos;
-
-               pos[0] = p[0] * max * signx;
-               pos[1] = p[1] * max * signy;
-
-               get_canvas_view()->get_work_area()->set_focus_point(-pos);
-
-               return true;
-       }
-
-       return false;
-}
-
-//Navigator Dock Definitions
-
-studio::Dock_Navigator::Dock_Navigator()
-:Dock_CanvasSpecific("navigator",_("Navigator"),Gtk::StockID("synfig-navigator"))
-{
-       add(dummy);
-}
-
-studio::Dock_Navigator::~Dock_Navigator()
-{
-}
-
-void studio::Dock_Navigator::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(canvas_view)
-       {
-               Widget *v = canvas_view->get_ext_widget("navview");
-
-               if(!v)
-               {
-                       v = new Widget_NavView(canvas_view);
-                       canvas_view->set_ext_widget("navview",v);
-               }
-
-               add(*v);
-       }else
-       {
-               clear_previous();
-               //add(dummy);
-       }
-}
diff --git a/synfig-studio/src/gui/dock_navigator.h b/synfig-studio/src/gui/dock_navigator.h
deleted file mode 100644 (file)
index f27d861..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_navigator.h
-**     \brief Navigator Dock Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_DOCK_NAVIGATOR_H
-#define __SYNFIG_DOCK_NAVIGATOR_H
-
-/* === H E A D E R S ======================================================= */
-#include "sigc++/signal.h"
-
-#include <gtkmm/drawingarea.h>
-#include <gdkmm/pixbuf.h>
-#include <gtkmm/adjustment.h>
-#include <gtkmm/label.h>
-
-#include <synfig/renddesc.h>
-
-#include "canvasview.h"
-#include "dock_canvasspecific.h"
-#include "widgets/widget_distance.h"
-
-#include <ETL/smart_ptr>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-class AsyncRenderer;
-
-class Widget_NavView : public Gtk::Table
-{
-       //handle to out parent canvas
-       CanvasView::LooseHandle         canvview;
-
-       Glib::RefPtr<Gdk::Pixbuf>       prev;
-       bool dirty;
-
-       //The drawing stuff
-       Gtk::DrawingArea        drawto;
-
-       //The input stuff
-       Gtk::Adjustment         adj_zoom;
-       Gtk::Label                      zoom_print;
-
-       //zoom window stuff
-       bool                            scrolling;
-
-       //asynchronous rendering stuff
-       etl::handle<AsyncRenderer>      renderer;
-       etl::smart_ptr<synfig::Surface> surface;
-       bool                                            rendering;
-
-       //drawing functionality
-       void on_start_render(); //breaks out into asynchronous rendering
-       void on_finish_render();
-       void on_draw(); //renders the small thing we have
-       void on_dirty_preview(); //dirties the preview for rerender
-
-       //for the zoom buttons
-       void on_zoom_in();
-       void on_zoom_out();
-
-       //handles the zoom scroller
-       bool on_scroll_event(GdkEvent *event);
-       void on_number_modify();
-
-       //
-       bool on_mouse_event(GdkEvent * e);
-
-       //draws the gotten bitmap on the draw area
-       bool on_expose_draw(GdkEventExpose *exp=0);
-
-       //for when the canvasview view changes (boolean value scrolling solves cyclic problems)
-       void on_workarea_view_change();
-
-public:
-       Widget_NavView(CanvasView::LooseHandle cv = CanvasView::LooseHandle());
-       ~Widget_NavView();
-
-       etl::loose_handle<studio::CanvasView> get_canvas_view() {return canvview;}
-};
-
-class Dock_Navigator : public Dock_CanvasSpecific
-{
-       Widget_NavView  dummy;
-
-public:
-       Dock_Navigator();
-       ~Dock_Navigator();
-
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-};
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_params.cpp b/synfig-studio/src/gui/dock_params.cpp
deleted file mode 100644 (file)
index 7b3d360..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_params.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_params.h"
-#include "app.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/slot.h>
-#include "canvasview.h"
-#include "layerparamtreestore.h"
-#include "workarea.h"
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_Params::Dock_Params():
-       Dock_CanvasSpecific("params",_("Params"),Gtk::Stock::INDEX/*Gtk::StockID("synfig-params")*/),
-       action_group(Gtk::ActionGroup::create("action_group_dock_params"))
-{
-}
-
-Dock_Params::~Dock_Params()
-{
-}
-
-
-void
-Dock_Params::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       Gtk::TreeView* tree_view(
-               static_cast<Gtk::TreeView*>(canvas_view->get_ext_widget(get_name()))
-       );
-
-       if(tree_view)
-       {
-               tree_view->get_selection()->signal_changed().connect(
-                       sigc::mem_fun(
-                               *this,
-                               &Dock_Params::refresh_selected_param
-                       )
-               );
-       }
-}
-
-void
-Dock_Params::refresh_selected_param()
-{
-       Gtk::TreeView* tree_view(
-               static_cast<Gtk::TreeView*>(get_canvas_view()->get_ext_widget(get_name()))
-       );
-       Gtk::TreeModel::iterator iter(tree_view->get_selection()->get_selected());
-
-       if(iter)
-       {
-               LayerParamTreeStore::Model model;
-               get_canvas_view()->work_area->set_selected_value_node(
-                       (synfig::ValueNode::Handle)(*iter)[model.value_node]
-               );
-       }
-       else
-       {
-               get_canvas_view()->work_area->set_selected_value_node(0);
-       }
-}
-
-void
-Dock_Params::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(canvas_view)
-       {
-               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
-
-               add(*tree_view);
-               tree_view->show();
-               show_all();
-       }
-       else clear_previous();
-}
diff --git a/synfig-studio/src/gui/dock_params.h b/synfig-studio/src/gui/dock_params.h
deleted file mode 100644 (file)
index 7ad9f61..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_params.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_PARAMS_H
-#define __SYNFIG_STUDIO_DOCK_PARAMS_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include "dock_canvasspecific.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class Dock_Params : public Dock_CanvasSpecific
-{
-       Glib::RefPtr<Gtk::ActionGroup> action_group;
-
-protected:
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-       void refresh_selected_param();
-
-public:
-
-
-       Dock_Params();
-       ~Dock_Params();
-}; // END of Dock_Keyframes
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dock_timetrack.cpp b/synfig-studio/src/gui/dock_timetrack.cpp
deleted file mode 100644 (file)
index 2f88b82..0000000
+++ /dev/null
@@ -1,494 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_timetrack.cpp
-**     \brief Template File
-**
-**     $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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dock_timetrack.h"
-#include "app.h"
-
-#include <gtkmm/scrolledwindow.h>
-#include <cassert>
-#include "instance.h"
-#include <sigc++/signal.h>
-#include <sigc++/hide.h>
-#include <sigc++/slot.h>
-#include "canvasview.h"
-#include "layerparamtreestore.h"
-#include "workarea.h"
-#include "widgets/widget_timeslider.h"
-#include "widgets/widget_keyframe_list.h"
-#include "layerparamtreestore.h"
-#include "general.h"
-#include <synfig/timepointcollect.h>
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === C L A S S E S ======================================================= */
-
-class TimeTrackView : public Gtk::TreeView
-{
-       CellRenderer_TimeTrack *cellrenderer_time_track;
-
-       Glib::RefPtr<LayerParamTreeStore> param_tree_store_;
-
-       Gtk::TreeView *mimic_tree_view;
-public:
-
-       sigc::signal<void,synfigapp::ValueDesc,std::set<synfig::Waypoint, std::less<UniqueID> >,int> signal_waypoint_clicked_timetrackview;
-
-       LayerParamTreeStore::Model model;
-
-       void set_canvas_view(handle<CanvasView> canvas_view)
-       {
-               cellrenderer_time_track->set_adjustment(canvas_view->time_adjustment());
-       }
-
-       TimeTrackView()
-       {
-               int label_index(append_column_editable(_("Name"),model.label));
-               Gtk::TreeView::Column* label_column = get_column(label_index-1);
-
-               {       // --- T I M E   T R A C K --------------------------------------------
-                       Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Time Track")) );
-
-                       // 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_cellrenderer().connect(sigc::mem_fun(*this, &TimeTrackView::on_waypoint_clicked_timetrackview));
-                       cellrenderer_time_track->signal_waypoint_changed().connect(sigc::mem_fun(*this, &TimeTrackView::on_waypoint_changed) );
-                       column->add_attribute(cellrenderer_time_track->property_value_desc(), model.value_desc);
-                       column->add_attribute(cellrenderer_time_track->property_canvas(), model.canvas);
-                       //column->add_attribute(cellrenderer_time_track->property_visible(), model.is_value_node);
-
-                       //column->pack_start(*cellrenderer_time_track);
-
-                       // Finish setting up the column
-                       column->set_reorderable();
-                       column->set_resizable();
-                       column->set_min_width(200);
-
-                       append_column(*column);
-               }
-               set_rules_hint();
-
-               set_expander_column(*label_column);
-               label_column->set_visible(false);
-               set_headers_visible(false);
-               set_size_request(-1,64);
-       }
-
-       bool
-       on_event(GdkEvent *event)
-       {
-               switch(event->type)
-               {
-               case GDK_SCROLL:
-                       if(mimic_tree_view)
-                       {
-                               if(event->scroll.direction==GDK_SCROLL_DOWN)
-                               {
-                                       mimic_tree_view->get_vadjustment()->set_value(
-                                               std::min(
-                                                       mimic_tree_view->get_vadjustment()->get_value()+
-                                                       mimic_tree_view->get_vadjustment()->get_step_increment(),
-                                                       mimic_tree_view->get_vadjustment()->get_upper()-
-                                                       mimic_tree_view->get_vadjustment()->get_page_size()
-                                               )
-                                       );
-                                       mimic_tree_view->get_vadjustment()->value_changed();
-                               }
-                               else if(event->scroll.direction==GDK_SCROLL_UP)
-                               {
-                                       mimic_tree_view->get_vadjustment()->set_value(
-                                               std::max(
-                                                       mimic_tree_view->get_vadjustment()->get_value()-
-                                                       mimic_tree_view->get_vadjustment()->get_step_increment(),
-                                                       mimic_tree_view->get_vadjustment()->get_lower()
-                                               )
-                                       );
-                                       mimic_tree_view->get_vadjustment()->value_changed();
-                               }
-                       }
-                       break;
-               case GDK_BUTTON_PRESS:
-                       {
-                               Gtk::TreeModel::Path path;
-                               Gtk::TreeViewColumn *column;
-                               int cell_x, cell_y;
-                               if(!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 = *(get_model()->get_iter(path));
-
-                               if(column && column->get_first_cell_renderer()==cellrenderer_time_track)
-                               {
-                                       Gdk::Rectangle rect;
-                                       get_cell_area(path,*column,rect);
-                                       cellrenderer_time_track->property_value_desc()=row[model.value_desc];
-                                       cellrenderer_time_track->property_canvas()=row[model.canvas];
-                                       cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
-                                       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);
-                               }
-                       }
-                       break;
-
-               case GDK_MOTION_NOTIFY:
-                       {
-                               Gtk::TreeModel::Path path;
-                               Gtk::TreeViewColumn *column;
-                               int cell_x, cell_y;
-                               if(!get_path_at_pos(
-                                       (int)event->motion.x,(int)event->motion.y,      // x, y
-                                       path, // TreeModel::Path&
-                                       column, //TreeViewColumn*&
-                                       cell_x,cell_y //int&cell_x,int&cell_y
-                                       )
-                               ) break;
-
-                               if(!get_model()->get_iter(path))
-                                       break;
-
-                               Gtk::TreeRow row = *(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())
-                               {
-                                       Gdk::Rectangle rect;
-                                       get_cell_area(path,*column,rect);
-                                       cellrenderer_time_track->property_value_desc()=row[model.value_desc];
-                                       cellrenderer_time_track->property_canvas()=row[model.canvas];
-                                       cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
-                                       queue_draw();
-                                       //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)
-                               {
-                                       tooltips_.unset_tip(*this);
-                                       Glib::ustring tooltips_string(row[layer_model.tooltip]);
-                                       last_tooltip_path=path;
-                                       if(!tooltips_string.empty())
-                                       {
-                                               tooltips_.set_tip(*this,tooltips_string);
-                                               tooltips_.force_window();
-                                       }
-                               }
-*/
-                               return true;
-                       }
-                       break;
-               case GDK_BUTTON_RELEASE:
-                       {
-                               Gtk::TreeModel::Path path;
-                               Gtk::TreeViewColumn *column;
-                               int cell_x, cell_y;
-                               if(!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;
-
-                               if(!get_model()->get_iter(path))
-                                       break;
-
-                               Gtk::TreeRow row = *(get_model()->get_iter(path));
-
-                               if(column && cellrenderer_time_track==column->get_first_cell_renderer())
-                               {
-                                       Gdk::Rectangle rect;
-                                       get_cell_area(path,*column,rect);
-                                       cellrenderer_time_track->property_value_desc()=row[model.value_desc];
-                                       cellrenderer_time_track->property_canvas()=row[model.canvas];
-                                       cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
-                                       queue_draw();
-                                       queue_draw_area(rect.get_x(),rect.get_y(),rect.get_width(),rect.get_height());
-                                       return true;
-                               }
-                       }
-                       break;
-               default:
-                       break;
-               }
-               mimic_resync();
-               return Gtk::TreeView::on_event(event);
-       }
-
-       void
-       queue_draw_msg()
-       {
-               synfig::info("*************QUEUE_DRAW***************** (time track view)");
-               Widget::queue_draw();
-       }
-       void set_model(Glib::RefPtr<LayerParamTreeStore> store)
-       {
-               Gtk::TreeView::set_model(store);
-               param_tree_store_=store;
-               cellrenderer_time_track->set_canvas_interface(param_tree_store_->canvas_interface());
-               store->signal_changed().connect(sigc::mem_fun(*this, &TimeTrackView::queue_draw));
-       }
-
-       void
-       on_waypoint_changed( synfig::Waypoint waypoint , synfig::ValueNode::Handle value_node)
-       {
-               // \todo is this code used?
-               assert(0);
-
-               synfigapp::Action::ParamList param_list;
-               param_list.add("canvas",param_tree_store_->canvas_interface()->get_canvas());
-               param_list.add("canvas_interface",param_tree_store_->canvas_interface());
-               param_list.add("value_node",value_node);
-               param_list.add("waypoint",waypoint);
-       //      param_list.add("time",canvas_interface()->get_time());
-
-               etl::handle<studio::Instance>::cast_static(param_tree_store_->canvas_interface()->get_instance())->process_action("WaypointSetSmart", param_list);
-       }
-
-       void mimic(Gtk::TreeView *param_tree_view)
-       {
-               mimic_tree_view=param_tree_view;
-               param_tree_view->signal_row_expanded().connect(
-                       sigc::hide<0>(
-                       sigc::hide_return(
-                               sigc::bind<-1>(
-                                       sigc::mem_fun(
-                                               *this,
-                                               &Gtk::TreeView::expand_row
-                                       ),
-                                       false
-                               )
-                       ))
-               );
-               param_tree_view->signal_row_collapsed().connect(
-                       sigc::hide<0>(
-                       sigc::hide_return(
-                                       sigc::mem_fun(
-                                               *this,
-                                               &Gtk::TreeView::collapse_row
-                                       )
-                       ))
-               );
-               mimic_resync();
-       }
-
-       void mimic_resync()
-       {
-               if(mimic_tree_view)
-               {
-                       Gtk::Adjustment &adjustment(*mimic_tree_view->get_vadjustment());
-                       set_vadjustment(adjustment);
-
-                       if(adjustment.get_page_size()>get_height())
-                               adjustment.set_page_size(get_height());
-
-                       int row_height = 0;
-                       if(getenv("SYNFIG_TIMETRACK_ROW_HEIGHT"))
-                               row_height = atoi(getenv("SYNFIG_TIMETRACK_ROW_HEIGHT"));
-                       if (row_height < 3)
-                               row_height = 18;
-
-                       cellrenderer_time_track->set_fixed_size(-1,row_height);
-               }
-       }
-
-       void
-       on_waypoint_clicked_timetrackview(const etl::handle<synfig::Node>& node,
-                                                                         const synfig::Time& time,
-                                                                         const synfig::Time& time_offset __attribute__ ((unused)),
-                                                                         int button)
-       {
-               std::set<synfig::Waypoint, std::less<UniqueID> > waypoint_set;
-               synfig::waypoint_collect(waypoint_set,time,node);
-
-               synfigapp::ValueDesc value_desc;
-
-               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[model.value_desc]);
-               }
-
-               if (!waypoint_set.empty())
-                       signal_waypoint_clicked_timetrackview(value_desc,waypoint_set,button);
-       }
-};
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dock_Timetrack::Dock_Timetrack():
-       Dock_CanvasSpecific("timetrack",_("Timetrack"),Gtk::StockID("synfig-timetrack"))
-{
-       table_=0;
-       widget_timeslider_= new Widget_Timeslider();
-       widget_kf_list_= new Widget_Keyframe_List();
-
-       int header_height = 0;
-       if(getenv("SYNFIG_TIMETRACK_HEADER_HEIGHT"))
-               header_height = atoi(getenv("SYNFIG_TIMETRACK_HEADER_HEIGHT"));
-       if (header_height < 3)
-               header_height = 24;
-
-       widget_timeslider_->set_size_request(-1,header_height-header_height/3+1);
-       widget_kf_list_->set_size_request(-1,header_height/3+1);
-
-       hscrollbar_=new Gtk::HScrollbar();
-       vscrollbar_=new Gtk::VScrollbar();
-}
-
-Dock_Timetrack::~Dock_Timetrack()
-{
-       if(table_)delete table_;
-       delete hscrollbar_;
-       delete vscrollbar_;
-       delete widget_timeslider_;
-       delete widget_kf_list_;
-}
-
-void
-Dock_Timetrack::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       LayerParamTreeStore::Model model;
-
-       Glib::RefPtr<LayerParamTreeStore> tree_store(
-               Glib::RefPtr<LayerParamTreeStore>::cast_dynamic(
-                       canvas_view->get_tree_model("params")
-               )
-       );
-
-       TimeTrackView* tree_view(new TimeTrackView());
-       tree_view->set_canvas_view(canvas_view);
-       tree_view->set_model(tree_store);
-       Gtk::TreeView* param_tree_view(dynamic_cast<Gtk::TreeView*>(canvas_view->get_ext_widget("params")));
-       tree_view->mimic(param_tree_view);
-
-       tree_view->signal_waypoint_clicked_timetrackview.connect(sigc::mem_fun(*canvas_view, &studio::CanvasView::on_waypoint_clicked_canvasview));
-
-       canvas_view->time_adjustment().signal_value_changed().connect(sigc::mem_fun(*tree_view,&Gtk::TreeView::queue_draw));
-       canvas_view->time_adjustment().signal_changed().connect(sigc::mem_fun(*tree_view,&Gtk::TreeView::queue_draw));
-
-       canvas_view->set_ext_widget(get_name(),tree_view);
-}
-
-void
-Dock_Timetrack::refresh_selected_param()
-{
-/*     Gtk::TreeView* tree_view(
-               static_cast<Gtk::TreeView*>(get_canvas_view()->get_ext_widget(get_name()))
-       );
-       Gtk::TreeModel::iterator iter(tree_view->get_selection()->get_selected());
-
-       if(iter)
-       {
-               LayerParamTreeStore::Model model;
-               get_canvas_view()->work_area->set_selected_value_node(
-                       (synfig::ValueNode::Handle)(*iter)[model.value_node]
-               );
-       }
-       else
-       {
-               get_canvas_view()->work_area->set_selected_value_node(0);
-       }
-*/
-}
-
-void
-Dock_Timetrack::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
-{
-       if(table_)
-       {
-               table_->hide();
-               delete table_;
-               hscrollbar_->unset_adjustment();
-               vscrollbar_->unset_adjustment();
-               //widget_timeslider_->unset_adjustment();
-               table_=0;
-       }
-
-       if(canvas_view)
-       {
-               TimeTrackView* tree_view(dynamic_cast<TimeTrackView*>(canvas_view->get_ext_widget(get_name())));
-       Gtk::TreeView* param_tree_view(dynamic_cast<Gtk::TreeView*>(canvas_view->get_ext_widget("params")));
-       tree_view->set_vadjustment(*param_tree_view->get_vadjustment());
-
-               assert(tree_view);
-
-
-               widget_timeslider_->set_time_adjustment(&canvas_view->time_adjustment());
-               widget_timeslider_->set_bounds_adjustment(&canvas_view->time_window_adjustment());
-               widget_timeslider_->set_global_fps(canvas_view->get_canvas()->rend_desc().get_frame_rate());
-
-               widget_kf_list_->set_time_adjustment(&canvas_view->time_adjustment());
-               widget_kf_list_->set_canvas_interface(canvas_view->canvas_interface());
-
-               vscrollbar_->set_adjustment(*tree_view->get_vadjustment());
-               hscrollbar_->set_adjustment(canvas_view->time_window_adjustment());
-               table_=new Gtk::Table(2,3);
-               table_->attach(*widget_timeslider_, 0, 1, 1, 2, Gtk::FILL|Gtk::SHRINK, Gtk::FILL|Gtk::SHRINK);
-               table_->attach(*widget_kf_list_, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::SHRINK);
-               table_->attach(*tree_view, 0, 1, 2, 3, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
-               table_->attach(*hscrollbar_, 0, 1, 3, 4, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::SHRINK);
-               table_->attach(*vscrollbar_, 1, 2, 0, 3, Gtk::FILL|Gtk::SHRINK, Gtk::FILL|Gtk::EXPAND);
-               add(*table_);
-
-               //add(*last_widget_curves_);
-               table_->show_all();
-               show_all();
-       }
-       else
-       {
-               //clear_previous();
-       }
-}
diff --git a/synfig-studio/src/gui/dock_timetrack.h b/synfig-studio/src/gui/dock_timetrack.h
deleted file mode 100644 (file)
index 9da19fd..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dock_timetrack.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**  Copyright (c) 2009 Carlos López
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_TIMETRACK_H
-#define __SYNFIG_STUDIO_DOCK_TIMETRACK_H
-
-/* === H E A D E R S ======================================================= */
-
-#include "dockable.h"
-#include <gtkmm/treeview.h>
-#include "instance.h"
-#include "dock_canvasspecific.h"
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-class Widget_Timeslider;
-class Widget_Keyframe_List;
-
-class Dock_Timetrack : public Dock_CanvasSpecific
-{
-       Gtk::HScrollbar* hscrollbar_;
-       Gtk::VScrollbar* vscrollbar_;
-       Widget_Timeslider* widget_timeslider_;
-       Widget_Keyframe_List* widget_kf_list_;
-       Gtk::Table* table_;
-
-protected:
-       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
-
-       void refresh_selected_param();
-
-public:
-
-
-       Dock_Timetrack();
-       ~Dock_Timetrack();
-}; // END of Dock_Timetrack
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dockable.cpp b/synfig-studio/src/gui/dockable.cpp
deleted file mode 100644 (file)
index f0a3dce..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dockable.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "app.h"
-#include <sigc++/hide.h>
-
-#include "dockable.h"
-#include "dockmanager.h"
-#include "dockbook.h"
-#include "dockdialog.h"
-#include <synfig/general.h>
-#include <gtkmm/table.h>
-#include <gtk/gtk.h>
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-#ifdef WIN32
-#      ifdef IMAGE_DIR
-#              undef IMAGE_DIR
-#              define IMAGE_DIR "share\\pixmaps"
-#      endif
-#endif
-
-#ifndef IMAGE_DIR
-#      define IMAGE_DIR "/usr/local/share/pixmaps"
-#endif
-
-#ifndef IMAGE_EXT
-#      define IMAGE_EXT        "png"
-#endif
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-Dockable::Dockable(const synfig::String& name,const synfig::String& local_name,Gtk::StockID stock_id_):
-//     Gtk::Window(Gtk::WINDOW_TOPLEVEL),
-       name_(name),
-       local_name_(local_name),
-//     dialog_settings(this,name),
-       title_label_(local_name,Gtk::ALIGN_LEFT),
-       stock_id_(stock_id_)
-{
-       parent_=0;
-       scrolled_=0;
-
-       use_scrolled_=true;
-
-       attach_dnd_to(title_label_);
-
-       toolbar_=0;
-       //button_box_.show();
-
-       Gtk::Table* table(this);
-
-       {
-               title_label_.set_padding(0,0);
-               //title_label_.show();
-               Gtk::EventBox* event_box(manage(new Gtk::EventBox()));
-               event_box->set_border_width(0);
-               event_box->add(title_label_);
-               //table->attach(*event_box, 0, 1, 0,1, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
-
-               header_box_.pack_start(*event_box);
-
-               attach_dnd_to(*event_box);
-               event_box->show();
-       //      event_box->set_events(Gdk::ALL_EVENTS_MASK); //!< \todo change this to only allow what is necessary for DnD
-
-
-               Gtk::Button* bttn_close(manage(new Gtk::Button(_("X"))));
-               //table->attach(*bttn_close, 1, 2, 0,1, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
-               header_box_.pack_end(*bttn_close,false,false);
-               bttn_close->show();
-               bttn_close->set_relief(Gtk::RELIEF_NONE);
-               bttn_close->signal_clicked().connect(sigc::mem_fun(*this,&Dockable::detach));
-               bttn_close->set_border_width(0);
-               dynamic_cast<Gtk::Misc*>(bttn_close->get_child())->set_padding(0,0);
-       }
-
-       prev_widget_=manage(new Gtk::Label(" "));
-
-       //table->attach(header_box_, 0, 1, 0,1, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
-       table->attach(*prev_widget_, 0, 1, 1,2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-       //table->attach(*toolbar_, 0, 1, 2,3, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
-       set_toolbar(*manage(new Gtk::Toolbar));
-       table->show();
-
-       prev_widget_->show();
-
-       set_size_request(175,120);
-
-}
-
-Dockable::~Dockable()
-{
-       if(scrolled_)
-       {
-               delete scrolled_;
-               scrolled_=0;
-       }
-}
-
-void
-Dockable::attach_dnd_to(Gtk::Widget& widget)
-{
-       std::list<Gtk::TargetEntry> listTargets;
-       listTargets.push_back( Gtk::TargetEntry("DOCK") );
-
-       widget.drag_source_set(listTargets);
-       widget.drag_source_set_icon(get_stock_id());
-       widget.drag_dest_set(listTargets);
-
-
-       widget.signal_drag_data_get().connect(sigc::mem_fun(*this,&Dockable::on_drag_data_get));
-       widget.signal_drag_end().connect(sigc::mem_fun(*this,&Dockable::on_drag_end));
-       widget.signal_drag_begin().connect(sigc::mem_fun(*this,&Dockable::on_drag_begin));
-       widget.signal_drag_data_received().connect(sigc::mem_fun(*this,&Dockable::on_drag_data_received));
-}
-
-void
-Dockable::on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time)
-{
-       if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
-       {
-               Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data())));
-
-               if(dockable.parent_ != parent_)
-                       parent_->add(dockable,parent_->page_num(*this));
-               else
-                       parent_->reorder_child(dockable,parent_->page_num(*this));
-               dockable.present();
-               context->drag_finish(true, false, time);
-               return;
-       }
-
-       context->drag_finish(false, false, time);
-}
-
-void
-Dockable::on_drag_end(const Glib::RefPtr<Gdk::DragContext>&/*context*/)
-{
-       if(!dnd_success_)
-       {
-               detach();
-               present();
-       }
-}
-
-void
-Dockable::on_drag_begin(const Glib::RefPtr<Gdk::DragContext>&/*context*/)
-{
-       dnd_success_=false;
-}
-
-void
-Dockable::on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>&, Gtk::SelectionData& selection_data, guint /*info*/, guint /*time*/)
-{
-       Dockable* tmp(this);
-       dnd_success_=true;
-
-       selection_data.set(8, reinterpret_cast<const guchar*>(&tmp), 4);
-}
-
-void
-Dockable::set_local_name(const synfig::String& local_name)
-{
-       //set_title(local_name);
-       title_label_.set_text(local_name);
-}
-
-void
-Dockable::clear()
-{
-       //if(!toolbar_->children().empty())
-       //      toolbar_->children().clear();
-       set_toolbar(*manage(new Gtk::Toolbar));
-
-}
-
-void
-Dockable::set_toolbar(Gtk::Toolbar& toolbar)
-{
-       if(toolbar_)remove(*toolbar_);
-       toolbar_=0;
-       toolbar_=&toolbar;
-       if(toolbar_)
-       {
-               attach(*toolbar_, 0, 1, 2,3, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
-               gtk_toolbar_set_icon_size(toolbar_->gobj(),GtkIconSize(1)/*GTK_ICON_SIZE_MENU*/);
-               toolbar_->show();
-       }
-}
-
-bool
-Dockable::clear_previous()
-{
-       prev_widget_=0;
-       prev_widget_delete_connection.disconnect();
-       return false;
-}
-
-void
-Dockable::add(Gtk::Widget& x)
-{
-       if(prev_widget_)
-       {
-               remove(*prev_widget_);
-               clear_previous();
-       }
-
-       if(scrolled_)
-       {
-               delete scrolled_;
-               scrolled_=0;
-       }
-
-       if(use_scrolled_)
-       {
-               scrolled_=new Gtk::ScrolledWindow;
-
-               scrolled_->add(x);
-
-               attach(*scrolled_, 0, 1, 1,2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-
-               x.show();
-
-               scrolled_->show();
-
-               scrolled_->set_shadow_type(Gtk::SHADOW_NONE);
-               scrolled_->set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC);
-               prev_widget_=scrolled_;
-       }
-       else
-       {
-               attach(x, 0, 1, 1,2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-               x.show();
-               prev_widget_=&x;
-       }
-       prev_widget_delete_connection=prev_widget_->signal_delete_event().connect(
-               sigc::hide(
-                       sigc::mem_fun(
-                               *this,
-                               &Dockable::clear_previous
-                       )
-               )
-       );
-}
-
-Gtk::ToolButton*
-Dockable::add_button(const Gtk::StockID& stock_id, const synfig::String& tooltip)
-{
-       if(!toolbar_)
-               set_toolbar(*manage(new Gtk::Toolbar));
-
-       //Gtk::IconSize iconsize(4);
-       //Gtk::IconSize iconsize(Gtk::IconSize::from_name("synfig-small_icon"));
-
-       Gtk::ToolButton* ret(manage(new Gtk::ToolButton(stock_id)));
-       //Gtk::Image* icon(manage(new Gtk::Image(stock_id,iconsize)));
-       //ret->add(*icon);
-       //ret->set_relief(Gtk::RELIEF_HALF);
-       //ret->set_relief(Gtk::RELIEF_NONE);
-       ret->set_label(tooltip);
-       if (toolbar_->get_tooltips_object())
-               toolbar_->get_tooltips_object()->set_tip(*ret,tooltip);
-
-       ret->show();
-       //icon->show();
-       toolbar_->set_tooltips(true);
-
-       toolbar_->append(*ret);
-       //button_box_.pack_start(*ret,false,false);
-       //get_action_area()->pack_start(*ret,false,false);
-       //add_action_widget(*ret,1);
-       return ret;
-}
-
-
-void
-Dockable::detach()
-{
-       if(parent_)
-               parent_->remove(*this);
-}
-
-void
-Dockable::present()
-{
-       if(parent_)
-       {
-               parent_->set_current_page(parent_->page_num(*this));
-               parent_->present();
-       }
-       else
-       {
-               DockDialog* dock_dialog(new DockDialog());
-               dock_dialog->get_dock_book().add(*this);
-/*             //hack: always display composition selector on top of canvas browser
-               if(get_name()=="canvases")
-                       dock_dialog->set_composition_selector(true);
-*/
-               dock_dialog->present();
-       }
-}
-
-Gtk::Widget*
-Dockable::create_tab_label()
-{
-       Gtk::EventBox* event_box(manage(new Gtk::EventBox()));
-
-       attach_dnd_to(*event_box);
-
-       {
-               Gtk::StockID stock_id(get_stock_id());
-               Gtk::StockItem item;
-
-               // Check to make sure the icon is valid
-               if(Gtk::Stock::lookup(stock_id,item))
-               {
-                       Gtk::Image* icon(manage(new Gtk::Image(stock_id,Gtk::IconSize(4))));
-                       event_box->add(*icon);
-                       tooltips_.set_tip(*event_box,get_local_name());
-                       icon->show();
-               }
-               else
-               {
-                       // Bad icon, try to make a label
-
-                       Glib::ustring text(get_local_name());
-
-                       Gtk::Label* label(manage(new Gtk::Label(text)));
-                       event_box->add(*label);
-                       label->show();
-               }
-       }
-
-       return event_box;
-}
diff --git a/synfig-studio/src/gui/dockable.h b/synfig-studio/src/gui/dockable.h
deleted file mode 100644 (file)
index e1a2ad1..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dockable.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCKABLE_H
-#define __SYNFIG_STUDIO_DOCKABLE_H
-
-/* === H E A D E R S ======================================================= */
-
-#include <gtkmm/stockid.h>
-#include <gtkmm/button.h>
-#include "dialogsettings.h"
-#include <synfig/string.h>
-#include <gtkmm/table.h>
-#include <gtkmm/tooltips.h>
-#include <gtkmm/label.h>
-#include <gtkmm/frame.h>
-#include <gtkmm/handlebox.h>
-#include <gtkmm/box.h>
-#include <gtkmm/scrolledwindow.h>
-#include <gtkmm/toolbar.h>
-#include <gtkmm/toolbutton.h>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class DockManager;
-class DockBook;
-
-class Dockable : public Gtk::Table
-{
-       friend class DockManager;
-       friend class DockBook;
-
-
-       sigc::signal<void> signal_stock_id_changed_;
-       sigc::connection prev_widget_delete_connection;
-protected:
-
-//     DialogSettings dialog_settings;
-
-
-private:
-
-       Gtk::Toolbar *toolbar_;
-
-       synfig::String name_;
-       synfig::String local_name_;
-       Gtk::Tooltips tooltips_;
-       Gtk::Frame frame_;
-       Gtk::Label title_label_;
-       //Gtk::HBox button_box_;
-       Gtk::HBox header_box_;
-
-       //Gtk::HandleBox handle_box_;
-       Gtk::ScrolledWindow *scrolled_;
-       Gtk::Widget *prev_widget_;
-
-       bool use_scrolled_;
-
-       Gtk::StockID stock_id_;
-
-       DockBook* parent_;
-
-       bool dnd_success_;
-
-public:
-
-       void set_toolbar(Gtk::Toolbar& toolbar);
-
-       void set_use_scrolled(bool x) { use_scrolled_=x; }
-
-       Dockable(const synfig::String& name,const synfig::String& local_name,Gtk::StockID stock_id_=Gtk::StockID(" "));
-       ~Dockable();
-
-       sigc::signal<void>& signal_stock_id_changed() { return signal_stock_id_changed_; }
-
-       const synfig::String& get_name()const { return name_; }
-       const synfig::String& get_local_name()const { return local_name_; }
-
-       const Gtk::StockID& get_stock_id()const { return stock_id_; }
-       void set_stock_id(Gtk::StockID x) { stock_id_=x; signal_stock_id_changed()(); }
-
-       void set_local_name(const synfig::String&);
-
-       void clear();
-
-       Gtk::Tooltips& get_tooltips() { return tooltips_; }
-
-       //DialogSettings& settings() { return dialog_settings; }
-       //const DialogSettings& settings()const { return dialog_settings; }
-
-       void add(Gtk::Widget& x);
-
-       Gtk::ToolButton* add_button(const Gtk::StockID& stock_id, const synfig::String& tooltip=synfig::String());
-
-       void detach();
-
-       void present();
-
-       void attach_dnd_to(Gtk::Widget& widget);
-
-       bool clear_previous();
-       virtual Gtk::Widget* create_tab_label();
-
-private:
-
-       void on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>&, Gtk::SelectionData& selection_data, guint info, guint time);
-       void on_drag_end(const Glib::RefPtr<Gdk::DragContext>&context);
-       void on_drag_begin(const Glib::RefPtr<Gdk::DragContext>&context);
-       void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
-
-}; // END of studio::Dockable
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dockbook.cpp b/synfig-studio/src/gui/dockbook.cpp
deleted file mode 100644 (file)
index 707352e..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dockbook.cpp
-**     \brief Template File
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**     Copyright (c) 2007 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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dockbook.h"
-#include "dockable.h"
-#include "app.h"
-#include "dockmanager.h"
-
-#include <gtkmm/image.h>
-#include <gtkmm/eventbox.h>
-#include <gtkmm/menu.h>
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-DockBook::DockBook()
-{
-       std::list<Gtk::TargetEntry> listTargets;
-       listTargets.push_back( Gtk::TargetEntry("DOCK") );
-
-       drag_dest_set(listTargets);
-       //set_sensitive(true);
-       set_flags(get_flags()|Gtk::RECEIVES_DEFAULT|Gtk::HAS_GRAB);
-       //add_events(Gdk::ALL_EVENTS_MASK);
-       //set_extension_events(Gdk::EXTENSION_EVENTS_ALL);
-       set_show_tabs(true);
-       deleting_=false;
-}
-
-DockBook::~DockBook()
-{
-       deleting_=true;
-       clear();
-}
-
-void
-DockBook::clear()
-{
-       while(get_n_pages())
-               remove(static_cast<Dockable&>(*get_nth_page(get_n_pages()-1)));
-}
-
-void
-DockBook::on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time)
-{
-       if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
-       {
-               Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data())));
-               if(dockable.parent_!=this)
-                       add(dockable);
-               dockable.present();
-               context->drag_finish(true, false, time);
-               return;
-       }
-
-       context->drag_finish(false, false, time);
-}
-
-void
-DockBook::add(Dockable& dockable, int position)
-{
-       dockable.detach();
-
-       if(position==-1)
-               append_page(dockable, " ");
-       else
-               insert_page(dockable, " ", position);
-
-       refresh_tab(&dockable);
-
-       dockable.signal_stock_id_changed().connect(
-               sigc::bind(
-                       sigc::mem_fun(
-                               *this,
-                               &DockBook::refresh_tab
-                       ),
-                       &dockable
-               )
-       );
-
-       dockable.parent_=this;
-
-       dockable.show();
-
-       signal_changed_();
-}
-
-void
-DockBook::refresh_tab(Dockable* dockable)
-{
-       Gtk::Widget* label(dockable->create_tab_label());
-
-       label->signal_button_press_event().connect(
-               sigc::bind(
-                       sigc::mem_fun(
-                               *this,
-                               &DockBook::tab_button_pressed
-                       ),
-                       dockable
-               )
-       );
-
-       set_tab_label(*dockable, *label);
-       label->show();
-}
-
-
-void
-DockBook::remove(Dockable& dockable)
-{
-       dockable.hide();
-       remove_page(dockable);
-       dockable.parent_=0;
-
-       if(!deleting_)
-       {
-               signal_changed_();
-
-               if(get_n_pages()==0)
-                       signal_empty()();
-       }
-}
-
-void
-DockBook::present()
-{
-       show();
-}
-
-synfig::String
-DockBook::get_local_contents()const
-{
-       synfig::String ret;
-
-       for(int i(0);i!=const_cast<DockBook*>(this)->get_n_pages();i++)
-       {
-               Dockable& dockable(static_cast<Dockable&>(*const_cast<DockBook*>(this)->get_nth_page(i)));
-
-               if(i)
-                       ret+=", ";
-               ret+=dockable.get_local_name();
-       }
-
-       return ret;
-}
-
-synfig::String
-DockBook::get_contents()const
-{
-       synfig::String ret;
-
-       for(int i(0);i!=const_cast<DockBook*>(this)->get_n_pages();i++)
-       {
-               Dockable& dockable(static_cast<Dockable&>(*const_cast<DockBook*>(this)->get_nth_page(i)));
-
-               if(i)
-                       ret+=' ';
-               ret+=dockable.get_name();
-       }
-
-       return ret;
-}
-
-void
-DockBook::set_contents(const synfig::String& x)
-{
-       synfig::String str(x);
-       while(!str.empty())
-       {
-               synfig::String::size_type separator=str.find_first_of(' ');
-               synfig::String dock;
-               if(separator==synfig::String::npos)
-               {
-                       dock=str;
-                       str.clear();
-               }
-               else
-               {
-                       dock=String(str.begin(),str.begin()+separator);
-                       str=String(str.begin()+separator+1,str.end());
-               }
-
-               try
-               {
-                       add(App::dock_manager->find_dockable(dock));
-               }catch(...) { }
-       }
-}
-
-bool
-DockBook::tab_button_pressed(GdkEventButton* event, Dockable* dockable)
-{
-       if(event->button!=3)
-               return false;
-
-       Gtk::Menu *tabmenu=manage(new class Gtk::Menu());
-       tabmenu->signal_hide().connect(sigc::bind(sigc::ptr_fun(&delete_widget), tabmenu));
-
-       tabmenu->items().push_back(
-               Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-close"),
-                       sigc::mem_fun(*dockable,&Dockable::detach)
-               )
-       );
-
-       tabmenu->popup(event->button,gtk_get_current_event_time());
-
-       return true;
-}
diff --git a/synfig-studio/src/gui/dockbook.h b/synfig-studio/src/gui/dockbook.h
deleted file mode 100644 (file)
index c8b76a8..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dockbook.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCKBOOK_H
-#define __SYNFIG_STUDIO_DOCKBOOK_H
-
-/* === H E A D E R S ======================================================= */
-
-#include <gtkmm/notebook.h>
-#include <synfig/string.h>
-#include <gtkmm/tooltips.h>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class DockManager;
-class Dockable;
-
-class DockBook : public Gtk::Notebook
-{
-       friend class DockManager;
-       friend class Dockable;
-
-       sigc::signal<void> signal_empty_;
-       sigc::signal<void> signal_changed_;
-
-       Gtk::Tooltips tooltips_;
-
-       bool deleting_;
-
-protected:
-public:
-       DockBook();
-       ~DockBook();
-
-       sigc::signal<void>& signal_empty() { return signal_empty_; }
-       sigc::signal<void>& signal_changed() { return signal_changed_; }
-
-       void add(Dockable& dockable, int position=-1);
-       void remove(Dockable& dockable);
-
-       void present();
-
-       void clear();
-
-       synfig::String get_local_contents()const;
-
-       synfig::String get_contents()const;
-       void set_contents(const synfig::String& x);
-
-       void refresh_tabs_headers();
-
-       void refresh_tab(Dockable*);
-
-       bool tab_button_pressed(GdkEventButton* event, Dockable* dockable);
-       void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
-}; // END of studio::DockBook
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dockdialog.cpp b/synfig-studio/src/gui/dockdialog.cpp
deleted file mode 100644 (file)
index 6cfc8a7..0000000
+++ /dev/null
@@ -1,564 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dockdialog.cpp
-**     \brief Template File
-**
-**     $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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "app.h"
-#include <sigc++/adaptors/hide.h>
-
-#include "dockdialog.h"
-#include "dockbook.h"
-#include "dockmanager.h"
-#include "toolbox.h"
-#include "widgets/widget_compselect.h"
-#include <synfig/general.h>
-#include <synfig/uniqueid.h>
-#include <gtkmm/table.h>
-#include <sigc++/hide.h>
-#include <sigc++/slot.h>
-#include <sigc++/retype_return.h>
-#include <sigc++/retype.h>
-#include "canvasview.h"
-#include <gtkmm/paned.h>
-#include <gtkmm/box.h>
-#include <synfigapp/main.h>
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-#define GRAB_HINT_DATA(y,default)      { \
-               String x; \
-               if(synfigapp::Main::settings().get_value(String("pref.")+y+"_hints",x)) \
-               { \
-                       set_type_hint((Gdk::WindowTypeHint)atoi(x.c_str()));    \
-               } else {\
-                       set_type_hint(default); \
-               } \
-       }
-
-/* === G L O B A L S ======================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-/* === M E T H O D S ======================================================= */
-
-DockDialog::DockDialog():
-       Gtk::Window(Gtk::WINDOW_TOPLEVEL)
-{
-       composition_selector_=false;
-       is_deleting=false;
-       is_horizontal=false;
-       last_dock_book=0;
-       box=0;
-
-       widget_comp_select=new Widget_CompSelect();
-
-       // Give ourselves an ID that is most likely unique
-       set_id(synfig::UniqueID().get_uid()^reinterpret_cast<long>(this));
-
-       set_role(strprintf("dock_dialog_%d",get_id()));
-       GRAB_HINT_DATA(
-               "dock_dialog",
-#ifdef __APPLE__
-               Gdk::WINDOW_TYPE_HINT_NORMAL
-#else
-               Gdk::WINDOW_TYPE_HINT_UTILITY
-#endif
-       );
-       set_keep_above(false);
-
-       //! \todo can we set dialog windows transient for all normal windows, not just the toolbox?
-       //! paragraph 3 of http://standards.freedesktop.org/wm-spec/1.3/ar01s07.html suggests we can
-       // this seems to have bad effects on KDE, so leave it disabled by default
-       if(getenv("SYNFIG_TRANSIENT_DIALOGS"))
-               set_transient_for(*App::toolbox);
-
-       // Set up the window
-       //set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY);
-       set_title(_("Dock Panel"));
-
-       // Register with the dock manager
-       App::dock_manager->dock_dialog_list_.push_back(this);
-
-
-       // connect our signals
-       signal_delete_event().connect(
-               sigc::hide(
-                       sigc::mem_fun(*this,&DockDialog::close)
-               )
-       );
-
-/*
-       App::signal_canvas_view_focus().connect(
-               sigc::hide(
-                       sigc::mem_fun(
-                               *this,
-                               &DockDialog::refresh_accel_group
-                       )
-               )
-       );
-*/
-
-       add_accel_group(App::ui_manager()->get_accel_group());
-       App::signal_present_all().connect(sigc::mem_fun0(*this,&DockDialog::present));
-
-}
-
-DockDialog::~DockDialog()
-{
-       empty_sig.disconnect();
-
-       is_deleting=true;
-
-       // Remove all of the dock books
-       for(;!dock_book_list.empty();dock_book_list.pop_front())
-       {
-               dock_book_list.front()->clear();
-
-               //! \todo Fix this UGLY HACK
-               // The following line really should be uncommented,
-               // but it causes crashes. Without it, a small
-               // memory hole is created--but at least it doesn't crash
-               // delete dock_book_list.front();
-
-               // Oddly enough, the following line should
-               // theoretically do the same thing after this
-               // class is destroyed, but it doesn't seem to
-               // cause a crash.  It does, however, trigger this warning:
-               //
-               //   A floating object was finalized. This means that someone
-               //   called g_object_unref() on an object that had only a
-               //   floating reference; the initial floating reference is not
-               //   owned by anyone and must be removed with g_object_ref_sink().
-               //
-               // manage(dock_book_list.front());
-       }
-
-       // Remove us from the dock manager
-       if(App::dock_manager)try{
-               std::list<DockDialog*>::iterator iter;
-               for(iter=App::dock_manager->dock_dialog_list_.begin();iter!=App::dock_manager->dock_dialog_list_.end();++iter)
-                       if(*iter==this)
-                       {
-                               App::dock_manager->dock_dialog_list_.erase(iter);
-                               break;
-                       }
-       }
-       catch(...)
-       {
-               synfig::warning("DockDialog::~DockDialog(): Exception thrown when trying to remove from dock manager...?");
-       }
-
-       delete widget_comp_select;
-}
-
-void
-DockDialog::drop_on_prepend(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time)
-{
-       if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
-       {
-               Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data())));
-               prepend_dock_book()->add(dockable);
-               context->drag_finish(true, false, time);
-               return;
-       }
-
-       context->drag_finish(false, false, time);
-}
-
-void
-DockDialog::drop_on_append(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time)
-{
-       if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
-       {
-               Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data())));
-               append_dock_book()->add(dockable);
-               context->drag_finish(true, false, time);
-               return;
-       }
-
-       context->drag_finish(false, false, time);
-}
-
-
-void
-DockDialog::on_hide()
-{
-       Gtk::Window::on_hide();
-       close();
-}
-
-DockBook*
-DockDialog::prepend_dock_book()
-{
-       if(is_deleting)return 0;
-
-       dock_book_list.push_front(new DockBook);
-       last_dock_book=dock_book_list.front();
-
-
-       last_dock_book->signal_empty().connect(
-               sigc::bind(
-                       sigc::mem_fun(*this,&DockDialog::erase_dock_book),
-                       last_dock_book
-               )
-       );
-
-       dock_book_sizes_.insert(dock_book_sizes_.begin(),225);
-       refresh();
-       return last_dock_book;
-}
-
-DockBook*
-DockDialog::append_dock_book()
-{
-       if(is_deleting)return 0;
-
-       dock_book_list.push_back(new DockBook);
-       last_dock_book=dock_book_list.back();
-       last_dock_book->signal_empty().connect(
-               sigc::bind(
-                       sigc::mem_fun(*this,&DockDialog::erase_dock_book),
-                       last_dock_book
-               )
-       );
-       last_dock_book->signal_changed().connect(
-               sigc::mem_fun(*this,&DockDialog::refresh_title)
-       );
-       last_dock_book->signal_changed().connect(
-               sigc::mem_fun(*this,&DockDialog::refresh_title)
-       );
-       dock_book_sizes_.push_back(225);
-
-       //last_dock_book->show();
-       refresh();
-       return last_dock_book;
-}
-
-void
-DockDialog::erase_dock_book(DockBook* dock_book)
-{
-       if(is_deleting)return;
-
-       std::list<DockBook*>::iterator iter;
-       for(iter=dock_book_list.begin();iter!=dock_book_list.end();++iter)
-               if(*iter==dock_book)
-               {
-                       dock_book_list.erase(iter);
-
-                       if(dock_book_list.empty())
-                       {
-                               last_dock_book=0;
-                               close();
-                               return;
-                       }
-                       else
-                       {
-                               if(last_dock_book==dock_book)
-                                       last_dock_book=dock_book_list.front();
-                       }
-
-                       refresh();
-
-                       return;
-               }
-}
-
-void
-DockDialog::refresh()
-{
-       // synfig::info("dock_book_list.size()=%d",dock_book_list.size());
-       //remove();
-
-       if(dock_book_list.empty())
-               return;
-
-       if(box)delete box;
-       box=(manage(is_horizontal?(Gtk::Box*)new Gtk::HBox:(Gtk::Box*)new Gtk::VBox));
-       add(*box);
-
-       box->pack_start(*widget_comp_select,false,true);
-
-       Gtk::Button* append_button(manage(new Gtk::Button));
-       Gtk::Button* prepend_button(manage(new Gtk::Button));
-
-       std::list<Gtk::TargetEntry> listTargets;
-       listTargets.push_back( Gtk::TargetEntry("DOCK") );
-
-       append_button->drag_dest_set(listTargets);
-       prepend_button->drag_dest_set(listTargets);
-
-       append_button->signal_drag_data_received().connect(
-               sigc::mem_fun(*this,&DockDialog::drop_on_append)
-       );
-
-       prepend_button->signal_drag_data_received().connect(
-               sigc::mem_fun(*this,&DockDialog::drop_on_prepend)
-       );
-
-       box->pack_start(*prepend_button,false,true);
-       box->pack_end(*append_button,false,true);
-
-       //prepend_button->show();
-       //append_button->show();
-       panels_.clear();
-
-       if(dock_book_list.size()==1)
-       {
-               box->pack_start(get_dock_book(),true,true);
-       }
-       else
-       {
-               Gtk::Paned* parent(manage(is_horizontal?(Gtk::Paned*)new Gtk::HPaned:(Gtk::Paned*)new Gtk::VPaned));
-
-               panels_.push_back(parent);
-
-               if(panels_.size()<=dock_book_sizes_.size())
-                       panels_.back()->set_position(dock_book_sizes_[panels_.size()-1]);
-               panels_.back()->property_position().signal_changed().connect(
-                       sigc::mem_fun(*this,&DockDialog::rebuild_sizes)
-               );
-               //parent->show();
-               parent->add1(*dock_book_list.front());
-               //dock_book_list.front()->show();
-
-               box->pack_start(*parent,true,true);
-
-               std::list<DockBook*>::iterator iter,next;
-               for(next=dock_book_list.begin(),next++,iter=next++;next!=dock_book_list.end();iter=next++)
-               {
-                       Gtk::Paned* current(manage(is_horizontal?(Gtk::Paned*)new Gtk::HPaned:(Gtk::Paned*)new Gtk::VPaned));
-                       panels_.push_back(current);
-
-                       if(panels_.size()<=dock_book_sizes_.size())
-                               panels_.back()->set_position(dock_book_sizes_[panels_.size()-1]);
-                       panels_.back()->property_position().signal_changed().connect(
-                               sigc::mem_fun(*this,&DockDialog::rebuild_sizes)
-                       );
-
-
-                       parent->add2(*current);
-
-                       current->add1(**iter);
-                       //(*iter)->show();
-                       //current->show();
-
-                       parent=current;
-               }
-               parent->add2(**iter);
-               //(*iter)->show();
-       }
-
-       box->show_all();
-       if(!composition_selector_)
-               widget_comp_select->hide();
-       rebuild_sizes();
-}
-
-void
-DockDialog::rebuild_sizes()
-{
-       unsigned int i=0;
-       dock_book_sizes_.clear();
-       for(i=0;i<panels_.size();i++)
-       {
-               dock_book_sizes_.push_back(panels_[i]->get_position());
-       }
-}
-
-void
-DockDialog::set_dock_book_sizes(const std::vector<int>& new_sizes)
-{
-       unsigned int i=0;
-       for(i=0;i<panels_.size() && i<new_sizes.size();i++)
-       {
-               panels_[i]->set_position(new_sizes[i]);
-       }
-       dock_book_sizes_=new_sizes;
-       //rebuild_sizes();
-}
-
-void
-DockDialog::refresh_accel_group()
-{
-/*
-       if(last_accel_group_)
-       {
-               last_accel_group_->unlock();
-               remove_accel_group(last_accel_group_);
-               last_accel_group_=Glib::RefPtr<Gtk::AccelGroup>();
-       }
-
-       etl::loose_handle<CanvasView> canvas_view(App::get_selected_canvas_view());
-       if(canvas_view)
-       {
-               last_accel_group_=canvas_view->get_accel_group();
-               last_accel_group_->lock();
-               add_accel_group(last_accel_group_);
-       }
-*/
-       etl::loose_handle<CanvasView> canvas_view(App::get_selected_canvas_view());
-       if(canvas_view)
-       {
-               canvas_view->mainmenu.accelerate(*this);
-       }
-}
-
-bool
-DockDialog::close()
-{
-       if (getenv("SYNFIG_DEBUG_DESTRUCTORS"))
-               synfig::info("DockDialog::close(): Deleted");
-
-       empty_sig.disconnect();
-       //get_dock_book().clear();
-       delete this;
-       return true;
-}
-
-DockBook&
-DockDialog::get_dock_book()
-{
-       if(!last_dock_book)
-               return *append_dock_book();
-       return *last_dock_book;
-}
-
-const DockBook&
-DockDialog::get_dock_book()const
-{
-       return *last_dock_book;
-}
-
-
-synfig::String
-DockDialog::get_contents()const
-{
-       synfig::String ret;
-
-       std::list<DockBook*>::const_iterator iter;
-       for(iter=dock_book_list.begin();iter!=dock_book_list.end();++iter)
-       {
-               if(!ret.empty())
-                       ret+=is_horizontal?" | ":" - ";
-               ret+=(*iter)->get_contents();
-       }
-
-
-       return ret;
-}
-
-void
-DockDialog::set_contents(const synfig::String& z)
-{
-       int x,y;
-       get_size(x,y);
-
-       synfig::String str(z);
-       while(!str.empty())
-       {
-               synfig::String::size_type separator=str.find_first_of('-');
-               {
-                       synfig::String::size_type sep2=str.find_first_of('|');
-                       if(separator!=synfig::String::npos || sep2!=synfig::String::npos)
-                       {
-                               if((separator==synfig::String::npos || sep2<separator) && sep2!=synfig::String::npos)
-                               {
-                                       separator=sep2;
-                                       is_horizontal=true;
-                               }
-                               else
-                                       is_horizontal=false;
-                       }
-               }
-
-               synfig::String book_contents;
-               if(separator==synfig::String::npos)
-               {
-                       book_contents=str;
-                       str.clear();
-               }
-               else
-               {
-                       book_contents=String(str.begin(),str.begin()+separator);
-                       str=String(str.begin()+separator+1,str.end());
-               }
-
-               try
-               {
-                       append_dock_book()->set_contents(book_contents);
-               }catch(...) { }
-       }
-
-       resize(x,y);
-}
-
-void
-DockDialog::set_composition_selector(bool x)
-{
-       if(x==get_composition_selector())
-               return;
-       composition_selector_=x;
-       if(x)
-               widget_comp_select->show();
-       else
-               widget_comp_select->hide();
-}
-
-void
-DockDialog::refresh_title()
-{
-       if(is_deleting)return;
-       if(dock_book_list.size())
-       {
-               synfig::String title;
-
-               std::list<DockBook*>::const_iterator iter;
-               for(iter=dock_book_list.begin();iter!=dock_book_list.end();++iter)
-               {
-                       if(!title.empty())
-                               title+=", ";
-                       title+=(*iter)->get_local_contents();
-               }
-               set_title(title);
-       }
-       else
-               set_title(_("Empty Dock Panel"));
-}
diff --git a/synfig-studio/src/gui/dockdialog.h b/synfig-studio/src/gui/dockdialog.h
deleted file mode 100644 (file)
index 551ecba..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dockdialog.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_STUDIO_DOCK_DIALOG_H
-#define __SYNFIG_STUDIO_DOCK_DIALOG_H
-
-/* === H E A D E R S ======================================================= */
-
-#include <gtkmm/stockid.h>
-#include <gtkmm/button.h>
-#include "dialogsettings.h"
-#include <synfig/string.h>
-#include <gtkmm/dialog.h>
-#include <gtkmm/tooltips.h>
-#include <gtkmm/label.h>
-#include <gtkmm/frame.h>
-#include <gtkmm/handlebox.h>
-#include <gtkmm/scrolledwindow.h>
-#include <gtkmm/accelgroup.h>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace Gtk { class Box; class Paned;  };
-namespace studio {
-
-class DockManager;
-class DockBook;
-class Dockable;
-class Widget_CompSelect;
-class CanvasView;
-
-class DockDialog : public Gtk::Window
-{
-       friend class DockManager;
-       friend class DockBook;
-       friend class Dockable;
-       sigc::connection empty_sig;
-
-       bool composition_selector_;
-
-       bool is_deleting;
-
-       bool is_horizontal;
-
-private:
-       std::list<DockBook*> dock_book_list;
-
-       std::vector<Gtk::Paned*>        panels_;
-       std::vector<int>                        dock_book_sizes_;
-
-
-       DockBook* last_dock_book;
-
-       Widget_CompSelect* widget_comp_select;
-       Gtk::Box *box;
-
-       int id_;
-
-       void on_hide();
-
-       void refresh();
-
-       void refresh_title();
-
-       void set_id(int x) { id_=x; }
-
-       void refresh_accel_group();
-
-       void drop_on_append(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
-       void drop_on_prepend(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
-
-public:
-
-       const std::vector<int>& get_dock_book_sizes()const { return dock_book_sizes_;}
-       void set_dock_book_sizes(const std::vector<int>&);
-       void rebuild_sizes();
-
-       bool close();
-
-       int get_id()const { return id_; }
-
-       DockBook* append_dock_book();
-       DockBook* prepend_dock_book();
-       void erase_dock_book(DockBook*);
-
-       void set_composition_selector(bool x);
-       bool get_composition_selector()const { return composition_selector_; }
-
-       DockDialog();
-       ~DockDialog();
-
-       DockBook& get_dock_book();
-       const DockBook& get_dock_book()const;
-
-       synfig::String get_contents()const;
-       void set_contents(const synfig::String& x);
-}; // END of studio::DockDialog
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/dockmanager.cpp b/synfig-studio/src/gui/dockmanager.cpp
deleted file mode 100644 (file)
index 8a5198c..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dockmanager.cpp
-**     \brief Template File
-**
-**     $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
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === H E A D E R S ======================================================= */
-
-#ifdef USING_PCH
-#      include "pch.h"
-#else
-#ifdef HAVE_CONFIG_H
-#      include <config.h>
-#endif
-
-#include "dockmanager.h"
-#include <stdexcept>
-#include "dockable.h"
-#include "dockdialog.h"
-#include <synfigapp/settings.h>
-#include <synfigapp/main.h>
-#include <gdkmm/general.h>
-
-#include "general.h"
-
-#endif
-
-/* === U S I N G =========================================================== */
-
-using namespace std;
-using namespace etl;
-using namespace synfig;
-using namespace studio;
-
-/* === M A C R O S ========================================================= */
-
-/* === P R O C E D U R E S ================================================= */
-
-class studio::DockSettings : public synfigapp::Settings
-{
-       DockManager* dock_manager;
-
-public:
-       DockSettings(DockManager* dock_manager):dock_manager(dock_manager)
-       {
-               synfigapp::Main::settings().add_domain(this,"dock");
-       }
-
-       virtual ~DockSettings()
-       {
-               synfigapp::Main::settings().remove_domain("dock");
-       }
-#define SCALE_FACTOR   (1280)
-       virtual bool get_value(const synfig::String& key_, synfig::String& value)const
-       {
-               int screen_w(Gdk::screen_width());
-               int screen_h(Gdk::screen_height());
-
-               if(key_.size()>6 && String(key_.begin(),key_.begin()+6)=="dialog")try
-               {
-                       synfig::String key(key_.begin()+7,key_.end());
-                       synfig::String::size_type separator=key.find_first_of('.');
-                       int id(atoi(synfig::String(key.begin(),key.begin()+separator).c_str()));
-                       key=synfig::String(key.begin()+separator+1,key.end());
-
-                       DockDialog& dock_dialog(dock_manager->find_dock_dialog(id));
-
-                       if(key=="contents_size")
-                       {
-                               dock_dialog.rebuild_sizes();
-                               vector<int>::const_iterator iter(dock_dialog.get_dock_book_sizes().begin());
-                               vector<int>::const_iterator end(dock_dialog.get_dock_book_sizes().end());
-                               value.clear();
-                               for(;iter!=end;++iter)
-                                       value+=strprintf("%d ",(*iter)*SCALE_FACTOR/screen_h);
-                               return true;
-                       }
-                       if(key=="pos")
-                       {
-                               int x,y; dock_dialog.get_position(x,y);
-                               value=strprintf("%d %d",x*SCALE_FACTOR/screen_w,y*SCALE_FACTOR/screen_h);
-                               return true;
-                       }
-                       if(key=="size")
-                       {
-                               int x,y; dock_dialog.get_size(x,y);
-                               value=strprintf("%d %d",x*SCALE_FACTOR/screen_w,y*SCALE_FACTOR/screen_h);
-                               return true;
-                       }
-                       if(key=="contents")
-                       {
-                               value=dock_dialog.get_contents();
-                               return true;
-                       }
-                       if(key=="comp_selector")
-                       {
-                               value=dock_dialog.get_composition_selector()?"1":"0";
-                               return true;
-                       }
-               }catch (...) { return false; }
-               return synfigapp::Settings::get_value(key_,value);
-       }
-
-       virtual bool set_value(const synfig::String& key_,const synfig::String& value)
-       {
-               int screen_w(Gdk::screen_width());
-               int screen_h(Gdk::screen_height());
-
-               if(key_.size()>6 && String(key_.begin(),key_.begin()+6)=="dialog")
-               {
-                       synfig::String key(key_.begin()+7,key_.end());
-                       synfig::String::size_type separator=key.find_first_of('.');
-                       int id(atoi(synfig::String(key.begin(),key.begin()+separator).c_str()));
-                       key=synfig::String(key.begin()+separator+1,key.end());
-
-                       DockDialog& dock_dialog(dock_manager->find_dock_dialog(id));
-
-                       if(key=="contents_size")
-                       {
-                               try {
-                               int width, height;
-                               Gtk::IconSize::lookup(Gtk::IconSize(4),width,height);
-                               vector<int> data;
-                               String::size_type n=0;
-                               String value_(value);
-                               while(value_.size() && value_.size()>n){
-                                       value_=String(value_.begin()+n,value_.end());
-                                       int size;
-                                       if(!strscanf(value_,"%d",&size))
-                                               break;
-                                       if (size > SCALE_FACTOR) size = SCALE_FACTOR - 150;
-                                       if (size < 0) size = 0;
-                                       size=size*screen_h/SCALE_FACTOR;
-
-                                       // prevent errors like this, by allowing space for at least the dockable's icon:
-                                       // ** CRITICAL **: clearlooks_style_draw_box_gap: assertion `height >= -1' failed
-                                       if (size < height + 9) size = height + 9;
-
-                                       data.push_back(size);
-
-                                       n=value_.find(" ");
-                                       if(n==String::npos)
-                                               break;
-                                       n++;
-                               }
-                               dock_dialog.set_dock_book_sizes(data);
-                               }
-                               catch(...)
-                               {
-                                       synfig::error("Exception caught!!!");
-                                       return false;
-                               }
-                               return true;
-                       }
-                       if(key=="pos")
-                       {
-                               int x,y;
-                               if(!strscanf(value,"%d %d",&x, &y))
-                                       return false;
-                               if (x > SCALE_FACTOR) x = SCALE_FACTOR - 150; if (x < 0) x = 0;
-                               if (y > SCALE_FACTOR) y = SCALE_FACTOR - 150; if (y < 0) y = 0;
-                               x=x*screen_w/SCALE_FACTOR;
-                               y=y*screen_h/SCALE_FACTOR;
-                               if(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET"))
-                                       x += atoi(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET"));
-                               if(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET"))
-                                       y += atoi(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET"));
-                               dock_dialog.move(x,y);
-                               return true;
-                       }
-                       if(key=="size")
-                       {
-                               int x,y;
-                               if(!strscanf(value,"%d %d",&x, &y))
-                                       return false;
-                               if (x > SCALE_FACTOR) x = 150; if (x < 0) x = 0;
-                               if (y > SCALE_FACTOR) y = 150; if (y < 0) y = 0;
-                               x=x*screen_w/SCALE_FACTOR;
-                               y=y*screen_h/SCALE_FACTOR;
-                               dock_dialog.set_default_size(x,y);
-                               dock_dialog.resize(x,y);
-                               return true;
-                       }
-                       if(key=="contents")
-                       {
-                               dock_dialog.set_contents(value);
-                               return true;
-                       }
-                       if(key=="comp_selector")
-                       {
-                               if(value.empty() || value[0]=='0')
-                                       dock_dialog.set_composition_selector(false);
-                               else
-                                       dock_dialog.set_composition_selector(true);
-                               return true;
-                       }
-               }
-               return synfigapp::Settings::set_value(key_,value);
-       }
-
-       virtual KeyList get_key_list()const
-       {
-               synfigapp::Settings::KeyList ret(synfigapp::Settings::get_key_list());
-
-               std::list<DockDialog*>::const_iterator iter;
-               for(iter=dock_manager->dock_dialog_list_.begin();iter!=dock_manager->dock_dialog_list_.end();++iter)
-               {
-                       ret.push_back(strprintf("dialog.%d.contents",(*iter)->get_id()));
-                       ret.push_back(strprintf("dialog.%d.comp_selector",(*iter)->get_id()));
-                       ret.push_back(strprintf("dialog.%d.pos",(*iter)->get_id()));
-                       ret.push_back(strprintf("dialog.%d.size",(*iter)->get_id()));
-                       ret.push_back(strprintf("dialog.%d.contents_size",(*iter)->get_id()));
-               }
-               return ret;
-       }
-};
-
-/* === M E T H O D S ======================================================= */
-
-DockManager::DockManager():
-       dock_settings(new DockSettings(this))
-{
-}
-
-DockManager::~DockManager()
-{
-       while(!dock_dialog_list_.empty())
-       {
-               dock_dialog_list_.back()->close();
-       }
-       while(!dockable_list_.empty())
-       {
-               Dockable* dockable(dockable_list_.back());
-               // synfig::info("DockManager::~DockManager(): Deleting dockable \"%s\"",dockable->get_name().c_str());
-               dockable_list_.pop_back();
-               delete dockable;
-       }
-}
-
-void
-DockManager::register_dockable(Dockable& x)
-{
-       dockable_list_.push_back(&x);
-       // synfig::info("DockManager::register_dockable(): Registered dockable \"%s\"",dockable_list_.back()->get_name().c_str());
-       signal_dockable_registered()(&x);
-}
-
-bool
-DockManager::unregister_dockable(Dockable& x)
-{
-       std::list<Dockable*>::iterator iter;
-       for(iter=dockable_list_.begin();iter!=dockable_list_.end();++iter)
-       {
-               if(&x==*iter)
-               {
-                       x.detach();
-                       dockable_list_.erase(iter);
-                       synfig::info("DockManager::unregister_dockable(): \"%s\" has been Unregistered",x.get_name().c_str());
-                       return true;
-               }
-       }
-       return false;
-}
-
-Dockable&
-DockManager::find_dockable(const synfig::String& x)
-{
-       std::list<Dockable*>::iterator iter;
-       for(iter=dockable_list_.begin();iter!=dockable_list_.end();++iter)
-               if((*iter)->get_name()==x)
-                       return **iter;
-
-       throw std::runtime_error("DockManager::find_dockable(): not found");
-}
-
-void
-DockManager::present(synfig::String x)
-{
-       try
-       {
-               find_dockable(x).present();
-       }
-       catch(...)
-       {
-       }
-}
-
-DockDialog&
-DockManager::find_dock_dialog(int id)
-{
-       std::list<DockDialog*>::iterator iter;
-       for(iter=dock_dialog_list_.begin();iter!=dock_dialog_list_.end();++iter)
-               if((*iter)->get_id()==id)
-                       return **iter;
-
-       DockDialog* dock_dialog(new DockDialog());
-       dock_dialog->set_id(id);
-       dock_dialog->show();
-       return *dock_dialog;
-}
-
-const DockDialog&
-DockManager::find_dock_dialog(int id)const
-{
-       std::list<DockDialog*>::const_iterator iter;
-       for(iter=dock_dialog_list_.begin();iter!=dock_dialog_list_.end();++iter)
-               if((*iter)->get_id()==id)
-                       return **iter;
-
-       throw std::runtime_error("DockManager::find_dock_dialog(int id)const: not found");
-}
diff --git a/synfig-studio/src/gui/dockmanager.h b/synfig-studio/src/gui/dockmanager.h
deleted file mode 100644 (file)
index 98df376..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/* === S Y N F I G ========================================================= */
-/*!    \file dockmanager.h
-**     \brief Template Header
-**
-**     $Id$
-**
-**     \legal
-**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-**
-**     This package is free software; you can redistribute it and/or
-**     modify it under the terms of the GNU General Public License as
-**     published by the Free Software Foundation; either version 2 of
-**     the License, or (at your option) any later version.
-**
-**     This package is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-**     General Public License for more details.
-**     \endlegal
-*/
-/* ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __SYNFIG_DOCKMANAGER_H
-#define __SYNFIG_DOCKMANAGER_H
-
-/* === H E A D E R S ======================================================= */
-
-#include <vector>
-#include <list>
-#include <synfig/string.h>
-#include <sigc++/signal.h>
-#include <sigc++/object.h>
-#include <ETL/smart_ptr>
-
-/* === M A C R O S ========================================================= */
-
-/* === T Y P E D E F S ===================================================== */
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-namespace studio {
-
-class Dockable;
-class DockDialog;
-class DockSettings;
-
-class DockManager : public sigc::trackable
-{
-       friend class Dockable;
-       friend class DockDialog;
-       friend class DockSettings;
-
-       std::list<Dockable*> dockable_list_;
-       std::list<DockDialog*> dock_dialog_list_;
-
-       sigc::signal<void,Dockable*> signal_dockable_registered_;
-
-       etl::smart_ptr<DockSettings> dock_settings;
-
-public:
-       DockManager();
-       ~DockManager();
-
-       DockDialog& find_dock_dialog(int id);
-       const DockDialog& find_dock_dialog(int id)const;
-
-       sigc::signal<void,Dockable*>& signal_dockable_registered() { return signal_dockable_registered_; }
-
-       void register_dockable(Dockable& x);
-       bool unregister_dockable(Dockable& x);
-       Dockable& find_dockable(const synfig::String& x);
-       void present(synfig::String x);
-
-}; // END of class DockManager
-
-}; // END of namespace studio
-
-/* === E N D =============================================================== */
-
-#endif
diff --git a/synfig-studio/src/gui/docks/dialog_tooloptions.cpp b/synfig-studio/src/gui/docks/dialog_tooloptions.cpp
new file mode 100644 (file)
index 0000000..7d45979
--- /dev/null
@@ -0,0 +1,97 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dialog_tooloptions.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2009 Nikita Kitaev
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include <gtkmm/label.h>
+#include <gtkmm/scrolledwindow.h>
+#include <synfig/general.h>
+#include "docks/dialog_tooloptions.h"
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dialog_ToolOptions::Dialog_ToolOptions():
+       Dockable("tool_options",_("Tool Options"),Gtk::StockID("synfig-about")),
+       empty_label(_("This tool has no options"))
+{
+       add(sub_vbox_);
+
+       set_widget(empty_label);
+       empty_label.show();
+}
+
+Dialog_ToolOptions::~Dialog_ToolOptions()
+{
+}
+
+void
+Dialog_ToolOptions::clear()
+{
+       Dockable::clear();
+       set_local_name(_("Tool Options"));
+       add(sub_vbox_);
+       set_widget(empty_label);
+       empty_label.show();
+
+       set_stock_id(Gtk::StockID("synfig-about"));
+}
+
+void
+Dialog_ToolOptions::set_widget(Gtk::Widget&x)
+{
+       if(!sub_vbox_.children().empty())
+               sub_vbox_.children().clear();
+
+       sub_vbox_.show();
+       sub_vbox_.pack_start(x,false,false);
+       x.show();
+}
+
+void
+Dialog_ToolOptions::set_name(const synfig::String& name)
+{
+       set_stock_id(Gtk::StockID("synfig-"+name));
+}
diff --git a/synfig-studio/src/gui/docks/dialog_tooloptions.h b/synfig-studio/src/gui/docks/dialog_tooloptions.h
new file mode 100644 (file)
index 0000000..05dfe93
--- /dev/null
@@ -0,0 +1,62 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dialog_tooloptions.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DIALOG_TOOLOPTIONS_H
+#define __SYNFIG_STUDIO_DIALOG_TOOLOPTIONS_H
+
+/* === H E A D E R S ======================================================= */
+
+#include <gtkmm/dialog.h>
+#include <gtkmm/label.h>
+#include <gtkmm/scrolledwindow.h>
+#include "docks/dockable.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class Dialog_ToolOptions : public Dockable
+{
+       Gtk::Label empty_label;
+       Gtk::VBox sub_vbox_;
+
+public:
+
+       void clear();
+       void set_widget(Gtk::Widget&);
+       void set_name(const synfig::String& name);
+
+       Dialog_ToolOptions();
+       ~Dialog_ToolOptions();
+}; // END of Dialog_ToolOptions
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_canvases.cpp b/synfig-studio/src/gui/docks/dock_canvases.cpp
new file mode 100644 (file)
index 0000000..92363aa
--- /dev/null
@@ -0,0 +1,251 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_canvases.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_canvases.h"
+#include "app.h"
+#include "canvasview.h"
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_Canvases::Dock_Canvases():
+       Dockable("canvases",_("Canvas Browser"),Gtk::StockID("synfig-canvas"))
+{
+
+       App::signal_instance_created().connect(sigc::mem_fun(*this,&studio::Dock_Canvases::new_instance));
+       App::signal_instance_deleted().connect(sigc::mem_fun(*this,&studio::Dock_Canvases::delete_instance));
+       App::signal_instance_selected().connect(sigc::mem_fun(*this,&studio::Dock_Canvases::set_selected_instance_signal));
+
+
+       add(*create_canvas_tree());
+
+/*  // \todo Implement canvas management in canvas browser
+       add_button(
+               Gtk::StockID("synfig-canvas_new"),
+               _("Insert a new canvas")
+       )->signal_clicked().connect(
+               sigc::mem_fun(
+                       *this,
+                       &Dock_Canvases::menu_new_canvas
+               )
+       );
+
+       add_button(
+               Gtk::StockID("gtk-delete"),
+               _("Remove selected canvas")
+       )->signal_clicked().connect(
+               sigc::mem_fun(
+                       *this,
+                       &Dock_Canvases::menu_delete
+               )
+       );
+
+       add_button(
+               Gtk::StockID("synfig-rename"),
+               _("Rename selected canvas")
+       )->signal_clicked().connect(
+               sigc::mem_fun(
+                       *this,
+                       &Dock_Canvases::menu_rename
+               )
+       );
+*/
+}
+
+Dock_Canvases::~Dock_Canvases()
+{
+}
+
+Gtk::Widget*
+Dock_Canvases::create_canvas_tree()
+{
+       studio::Instance::CanvasTreeModel canvas_tree_model;
+       canvas_tree=manage(new class Gtk::TreeView());
+       {
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("ID")) );
+//             Gtk::CellRendererPixbuf* icon_cellrenderer = Gtk::manage( new Gtk::CellRendererPixbuf() );
+
+               //column->pack_start(*icon_cellrenderer,false);
+               column->pack_start(canvas_tree_model.icon, false); //false = don't expand.
+               column->pack_start(canvas_tree_model.label);
+
+//#ifdef NDEBUG
+//             column->add_attribute(icon_cellrenderer->property_pixbuf(), canvas_tree_model.icon);
+//#endif
+
+               canvas_tree->append_column(*column);
+       }
+       canvas_tree->set_rules_hint();
+       canvas_tree->signal_row_activated().connect(sigc::mem_fun(*this,&Dock_Canvases::on_row_activate));
+       //canvas_tree->signal_event().connect(sigc::mem_fun(*this,&Dock_Canvases::on_tree_event));
+       canvas_tree->add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
+       canvas_tree->add_events(Gdk::BUTTON1_MOTION_MASK);
+       canvas_tree->show();
+       canvas_tree->set_headers_visible(false);
+
+       Gtk::ScrolledWindow *scrolledwindow = manage(new class Gtk::ScrolledWindow());
+       scrolledwindow->set_flags(Gtk::CAN_FOCUS);
+       scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+       scrolledwindow->add(*canvas_tree);
+       scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
+       scrolledwindow->show_all();
+
+       return scrolledwindow;
+}
+
+etl::loose_handle<studio::CanvasView>
+Dock_Canvases::get_selected_canvas_view()
+{
+       return get_selected_instance()->find_canvas_view(get_selected_canvas());
+}
+
+etl::loose_handle<synfig::Canvas>
+Dock_Canvases::get_selected_canvas()
+{
+       Glib::RefPtr<Gtk::TreeSelection> selection=canvas_tree->get_selection();
+
+       if(!selection || !selection->get_selected())
+               return 0;
+
+       studio::Instance::CanvasTreeModel canvas_tree_model;
+
+       return static_cast<etl::handle<synfig::Canvas> >((*selection->get_selected())[canvas_tree_model.canvas]);
+}
+
+
+
+void
+Dock_Canvases::set_selected_instance_signal(etl::handle<studio::Instance> x)
+{
+       set_selected_instance(x);
+}
+
+void
+Dock_Canvases::set_selected_instance_(etl::handle<studio::Instance> instance)
+{
+       if(studio::App::shutdown_in_progress)
+               return;
+
+       selected_instance=instance;
+       if(instance)
+       {
+               canvas_tree->set_model(instance->canvas_tree_store());
+               canvas_tree->show();
+       }
+       else
+       {
+               canvas_tree->set_model(Glib::RefPtr< Gtk::TreeModel >());
+               canvas_tree->hide();
+       }
+}
+
+void
+Dock_Canvases::set_selected_instance(etl::loose_handle<studio::Instance> x)
+{
+       if(studio::App::shutdown_in_progress)
+               return;
+
+       // if it's already selected, don't select it again
+       if (x==selected_instance)
+               return;
+
+       set_selected_instance_(x);
+}
+
+void
+Dock_Canvases::new_instance(etl::handle<studio::Instance> instance)
+{
+       if(studio::App::shutdown_in_progress)
+               return;
+
+       assert(instance);
+
+       etl::loose_handle<studio::Instance> loose_instance(instance);
+
+       instance->synfigapp::Instance::signal_filename_changed().connect(sigc::mem_fun(*this,&Dock_Canvases::refresh_instances));
+       instance->synfigapp::Instance::signal_filename_changed().connect(
+               sigc::bind<etl::loose_handle<studio::Instance> >(
+                       sigc::mem_fun(*this,&Dock_Canvases::set_selected_instance),
+                       loose_instance
+               )
+       );
+
+       present();
+
+}
+
+void
+Dock_Canvases::delete_instance(etl::handle<studio::Instance> instance)
+{
+       if(studio::App::shutdown_in_progress)
+               return;
+
+       refresh_instances();
+
+       if(selected_instance==instance)
+       {
+               set_selected_instance(0);
+       }
+}
+
+void
+Dock_Canvases::refresh_instances()
+{
+       if(studio::App::shutdown_in_progress)
+               return;
+}
+
+void
+Dock_Canvases::on_row_activate(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *)
+{
+       assert(get_selected_instance());
+       studio::Instance::CanvasTreeModel canvas_tree_model;
+       const Gtk::TreeRow row = *(get_selected_instance()->canvas_tree_store()->get_iter(path));
+       if(row[canvas_tree_model.is_canvas])
+               get_selected_instance()->focus(row[canvas_tree_model.canvas]);
+       else
+               studio::App::dialog_not_implemented();
+}
diff --git a/synfig-studio/src/gui/docks/dock_canvases.h b/synfig-studio/src/gui/docks/dock_canvases.h
new file mode 100644 (file)
index 0000000..1ab15e7
--- /dev/null
@@ -0,0 +1,88 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_canvases.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DIALOG_CANVASES_H
+#define __SYNFIG_STUDIO_DIALOG_CANVASES_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class Dock_Canvases : public Dockable
+{
+       Gtk::TreeView *canvas_tree;
+       //Gtk::Menu     menu;
+       etl::loose_handle<studio::Instance>     selected_instance;
+
+private:
+
+       void set_selected_instance_(etl::handle<studio::Instance> x);
+
+       etl::loose_handle<studio::Instance> get_selected_instance() { return selected_instance; }
+
+       etl::loose_handle<synfig::Canvas> get_selected_canvas();
+
+       etl::loose_handle<studio::CanvasView> get_selected_canvas_view();
+
+       void set_selected_instance(etl::loose_handle<studio::Instance> x);
+
+       void set_selected_instance_signal(etl::handle<studio::Instance> x);
+
+       void new_instance(etl::handle<studio::Instance> x);
+
+       void delete_instance(etl::handle<studio::Instance> x);
+
+       void refresh_instances();
+
+       bool close();
+
+       void on_row_activate(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *);
+       //bool on_tree_event(GdkEvent *event);
+
+
+
+       void on_action_toggle(const Glib::ustring& path);
+       Gtk::Widget* create_canvas_tree();
+
+public:
+
+       Dock_Canvases();
+       ~Dock_Canvases();
+}; // END of Dock_Canvases
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_canvasspecific.cpp b/synfig-studio/src/gui/docks/dock_canvasspecific.cpp
new file mode 100644 (file)
index 0000000..1ef3a47
--- /dev/null
@@ -0,0 +1,175 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_canvasspecific.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "app.h"
+#include "docks/dock_canvasspecific.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/adaptors/hide.h>
+//#include <sigc++/hide.h>
+#include <sigc++/slot.h>
+#include "metadatatreestore.h"
+#include "canvasview.h"
+#include <ETL/clock>
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_CanvasSpecific::Dock_CanvasSpecific(const synfig::String& name,const synfig::String& local_name,Gtk::StockID stock_id_):
+       Dockable(name,local_name,stock_id_)
+{
+       App::signal_instance_created().connect(sigc::mem_fun(*this,&Dock_CanvasSpecific::init_instance));
+}
+
+Dock_CanvasSpecific::~Dock_CanvasSpecific()
+{
+}
+
+etl::loose_handle<studio::CanvasView>
+Dock_CanvasSpecific::get_canvas_view()
+{
+       return App::get_selected_canvas_view();
+}
+
+etl::loose_handle<synfigapp::CanvasInterface>
+Dock_CanvasSpecific::get_canvas_interface()
+{
+       if(get_canvas_view())
+               return get_canvas_view()->canvas_interface();
+       return 0;
+}
+
+void
+Dock_CanvasSpecific::init_canvas_view_vfunc(etl::loose_handle<CanvasView> /*canvas_view*/)
+{
+}
+
+void
+Dock_CanvasSpecific::init_instance_vfunc(etl::loose_handle<Instance> /*instance*/)
+{
+}
+
+void
+Dock_CanvasSpecific::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> /*canvas_view*/)
+{
+}
+
+void
+Dock_CanvasSpecific::init_instance(etl::handle<Instance> instance)
+{
+       etl::clock timer;timer.reset();
+       instance->signal_canvas_view_created().connect(sigc::mem_fun(*this,&Dock_CanvasSpecific::init_canvas_view));
+       init_instance_vfunc(instance);
+       // synfig::info("%s init_instance() took %f seconds",get_local_name().c_str(),float(timer()));
+}
+
+void
+Dock_CanvasSpecific::delete_instance(etl::handle<Instance> /*instance*/)
+{
+       changed_canvas_view_vfunc(0);
+}
+
+void
+Dock_CanvasSpecific::init_canvas_view(CanvasView* canvas_view)
+{
+       /*
+       canvas_view->signal_focus_in_event().connect(
+               sigc::hide(
+                       sigc::bind_return(
+                               sigc::mem_fun(
+                                       *this,
+                                       &Dock_CanvasSpecific::canvas_view_changed
+                               ),
+                               false
+                       )
+               )
+       );
+       */
+       // synfig::info("%s init_canvas_view() Starting init...",get_local_name().c_str());
+       etl::clock timer;timer.reset();
+       App::signal_canvas_view_focus().connect(
+               sigc::hide(
+                       sigc::mem_fun(
+                               *this,
+                               &Dock_CanvasSpecific::canvas_view_changed
+                       )
+               )
+       );
+       init_canvas_view_vfunc(canvas_view);
+       // synfig::info("%s init_canvas_view() took %f seconds",get_local_name().c_str(),float(timer()));
+}
+
+void
+Dock_CanvasSpecific::canvas_view_changed()
+{
+       etl::loose_handle<CanvasView> canvas_view(App::get_selected_canvas_view());
+/*     if(canvas_view)
+       {
+               canvas_delete_connection.disconnect();
+               canvas_delete_connection=canvas_view->signal_deleted().connect(
+                       sigc::bind(
+                               sigc::mem_fun(
+                                       *this,
+                                       &Dock_CanvasSpecific::changed_canvas_view
+                               ),
+                               etl::loose_handle<CanvasView>(0)
+                       )
+               );
+       }
+*/
+
+// #ifdef _DEBUG
+//     synfig::info("%s canvas_view_changed: start",get_local_name().c_str());
+// #endif
+       changed_canvas_view_vfunc(canvas_view);
+// #ifdef _DEBUG
+//     synfig::info("%s canvas_view_changed: end",get_local_name().c_str());
+// #endif
+}
diff --git a/synfig-studio/src/gui/docks/dock_canvasspecific.h b/synfig-studio/src/gui/docks/dock_canvasspecific.h
new file mode 100644 (file)
index 0000000..bcb0eab
--- /dev/null
@@ -0,0 +1,73 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_canvasspecific.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_CANVASSPECIFIC_H
+#define __SYNFIG_STUDIO_DOCK_CANVASSPECIFIC_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class CanvasView;
+class Instance;
+
+class Dock_CanvasSpecific : public Dockable
+{
+       sigc::connection canvas_delete_connection;
+protected:
+       virtual void init_instance_vfunc(etl::loose_handle<Instance> instance);
+
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+private:
+       void init_canvas_view(CanvasView* canvas_view);
+       void init_instance(etl::handle<Instance> instance);
+       void delete_instance(etl::handle<Instance> instance);
+       void canvas_view_changed();
+       void changed_canvas_view(etl::loose_handle<CanvasView> canvas_view) { return changed_canvas_view_vfunc(canvas_view); }
+public:
+
+       etl::loose_handle<studio::CanvasView> get_canvas_view();
+       etl::loose_handle<synfigapp::CanvasInterface> get_canvas_interface();
+
+       Dock_CanvasSpecific(const synfig::String& name,const synfig::String& local_name,Gtk::StockID stock_id_=Gtk::StockID(" "));
+       virtual ~Dock_CanvasSpecific();
+}; // END of Dock_CanvasSpecific
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_children.cpp b/synfig-studio/src/gui/docks/dock_children.cpp
new file mode 100644 (file)
index 0000000..eaa6365
--- /dev/null
@@ -0,0 +1,107 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_children.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_children.h"
+#include "app.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/retype_return.h>
+#include <sigc++/slot.h>
+#include "childrentreestore.h"
+#include "childrentree.h"
+#include "canvasview.h"
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_Children::Dock_Children():
+       Dock_CanvasSpecific("children",_("Children"),Gtk::StockID("synfig-children"))
+{
+    //! \todo the combination of set_use_scrolled(false) and
+       //!       add(*tree_view) causes crashes when
+       //!       Dockable::prev_widget_ is left referencing a
+       //!       ChildrenTree that has already been destroyed.
+       // set_use_scrolled(false);
+}
+
+Dock_Children::~Dock_Children()
+{
+}
+
+void
+Dock_Children::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       Glib::RefPtr<ChildrenTreeStore> children_tree_store;
+       children_tree_store=ChildrenTreeStore::create(canvas_view->canvas_interface());
+
+       ChildrenTree* children_tree(new ChildrenTree());
+       children_tree->set_model(children_tree_store);
+       children_tree->set_time_adjustment(canvas_view->time_adjustment());
+
+
+       canvas_view->set_tree_model(get_name(),children_tree_store);
+       canvas_view->set_ext_widget(get_name(),children_tree);
+}
+
+void
+Dock_Children::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(canvas_view)
+       {
+               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
+
+               add(*tree_view);
+               tree_view->show();
+       }
+       else clear_previous();
+
+}
diff --git a/synfig-studio/src/gui/docks/dock_children.h b/synfig-studio/src/gui/docks/dock_children.h
new file mode 100644 (file)
index 0000000..09fab01
--- /dev/null
@@ -0,0 +1,60 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_children.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_CHILDREN_H
+#define __SYNFIG_STUDIO_DOCK_CHILDREN_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include "docks/dock_canvasspecific.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class Dock_Children : public Dock_CanvasSpecific
+{
+protected:
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+public:
+
+
+       Dock_Children();
+       ~Dock_Children();
+}; // END of Dock_Children
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_curves.cpp b/synfig-studio/src/gui/docks/dock_curves.cpp
new file mode 100644 (file)
index 0000000..4d1d97d
--- /dev/null
@@ -0,0 +1,194 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_curves.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_curves.h"
+#include "app.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/slot.h>
+#include "canvasview.h"
+#include "layerparamtreestore.h"
+#include "workarea.h"
+#include "widgets/widget_curves.h"
+#include "layerparamtreestore.h"
+#include <gtkmm/table.h>
+#include <gtkmm/scrollbar.h>
+#include "widgets/widget_timeslider.h"
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_Curves::Dock_Curves():
+       Dock_CanvasSpecific("curves",_("Curves"),Gtk::StockID("synfig-curves"))
+{
+       last_widget_curves_=0;
+       table_=0;
+
+       hscrollbar_=new Gtk::HScrollbar();
+       vscrollbar_=new Gtk::VScrollbar();
+       widget_timeslider_= new Widget_Timeslider();
+}
+
+Dock_Curves::~Dock_Curves()
+{
+       if(table_)delete table_;
+       delete hscrollbar_;
+       delete vscrollbar_;
+       delete widget_timeslider_;
+}
+
+static void
+_curve_selection_changed(Gtk::TreeView* param_tree_view,Widget_Curves* curves)
+{
+       LayerParamTreeStore::Model model;
+       Gtk::TreeIter iter;
+       if(!param_tree_view->get_selection()->count_selected_rows())
+       {
+               curves->clear();
+               curves->refresh();
+               return;
+       }
+
+       std::list<synfigapp::ValueDesc> value_descs;
+
+       iter=param_tree_view->get_selection()->get_selected();
+       value_descs.push_back((*iter)[model.value_desc]);
+       curves->set_value_descs(value_descs);
+}
+
+void
+Dock_Curves::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       Widget_Curves* curves(new Widget_Curves());
+       curves->set_time_adjustment(canvas_view->time_adjustment());
+
+       Gtk::TreeView* param_tree_view(
+               static_cast<Gtk::TreeView*>(canvas_view->get_ext_widget("params"))
+       );
+
+       param_tree_view->get_selection()->signal_changed().connect(
+               sigc::bind(
+                       sigc::bind(
+                               sigc::ptr_fun(
+                                       _curve_selection_changed
+                               ),curves
+                       ),param_tree_view
+               )
+       );
+
+       canvas_view->set_ext_widget(get_name(),curves);
+}
+
+void
+Dock_Curves::refresh_selected_param()
+{
+/*     Gtk::TreeView* tree_view(
+               static_cast<Gtk::TreeView*>(get_canvas_view()->get_ext_widget(get_name()))
+       );
+       Gtk::TreeModel::iterator iter(tree_view->get_selection()->get_selected());
+
+       if(iter)
+       {
+               LayerParamTreeStore::Model model;
+               get_canvas_view()->work_area->set_selected_value_node(
+                       (synfig::ValueNode::Handle)(*iter)[model.value_node]
+               );
+       }
+       else
+       {
+               get_canvas_view()->work_area->set_selected_value_node(0);
+       }
+*/
+}
+
+void
+Dock_Curves::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(table_)
+       {
+               table_->hide();
+               delete table_;
+               hscrollbar_->unset_adjustment();
+               vscrollbar_->unset_adjustment();
+               //widget_timeslider_->unset_adjustment();
+               table_=0;
+       }
+
+
+       if(canvas_view)
+       {
+               last_widget_curves_=dynamic_cast<Widget_Curves*>(
+                       canvas_view->get_ext_widget(get_name())
+               );
+
+               vscrollbar_->set_adjustment(last_widget_curves_->get_range_adjustment());
+               hscrollbar_->set_adjustment(canvas_view->time_window_adjustment());
+               widget_timeslider_->set_time_adjustment(&canvas_view->time_adjustment());
+               widget_timeslider_->set_bounds_adjustment(&canvas_view->time_window_adjustment());
+               widget_timeslider_->set_global_fps(canvas_view->get_canvas()->rend_desc().get_frame_rate());
+
+               table_=new Gtk::Table(2,2);
+               table_->attach(*widget_timeslider_, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::SHRINK);
+               table_->attach(*last_widget_curves_, 0, 1, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
+               table_->attach(*hscrollbar_, 0, 1, 2, 3, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::SHRINK);
+               table_->attach(*vscrollbar_, 1, 2, 0, 2, Gtk::FILL|Gtk::SHRINK, Gtk::FILL|Gtk::EXPAND);
+               add(*table_);
+
+               //add(*last_widget_curves_);
+               last_widget_curves_->show();
+               table_->show_all();
+               show_all();
+       }
+       else
+       {
+               //clear_previous();
+       }
+}
diff --git a/synfig-studio/src/gui/docks/dock_curves.h b/synfig-studio/src/gui/docks/dock_curves.h
new file mode 100644 (file)
index 0000000..495dd68
--- /dev/null
@@ -0,0 +1,74 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_curves.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_CURVES_H
+#define __SYNFIG_STUDIO_DOCK_CURVES_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include "docks/dock_canvasspecific.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace Gtk { class Table; class HScrollbar; class VScrollbar; };
+
+namespace studio {
+
+class Widget_Curves;
+class Widget_Timeslider;
+
+class Dock_Curves : public Dock_CanvasSpecific
+{
+       Gtk::Table* table_;
+       Gtk::HScrollbar* hscrollbar_;
+       Gtk::VScrollbar* vscrollbar_;
+
+       Widget_Timeslider* widget_timeslider_;
+       Widget_Curves* last_widget_curves_;
+
+protected:
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+       void refresh_selected_param();
+
+public:
+
+
+       Dock_Curves();
+       ~Dock_Curves();
+}; // END of Dock_Keyframes
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_history.cpp b/synfig-studio/src/gui/docks/dock_history.cpp
new file mode 100644 (file)
index 0000000..6ee6e51
--- /dev/null
@@ -0,0 +1,447 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_history.cpp
+**     \brief Template File
+**
+**     $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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_history.h"
+#include "app.h"
+
+
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/slot.h>
+#include <synfigapp/action.h>
+#include "historytreestore.h"
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+#define COLUMNID_JUMP          (787584)
+#define ColumnID       int
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_History::Dock_History():
+       Dock_CanvasSpecific("history",_("History"),Gtk::StockID("gtk-undo")),
+       action_group(Gtk::ActionGroup::create("action_group_dock_history"))
+{
+       App::signal_instance_deleted().connect(sigc::mem_fun(*this,&studio::Dock_History::delete_instance));
+       App::signal_instance_selected().connect(sigc::mem_fun(*this,&studio::Dock_History::set_selected_instance_signal));
+
+       action_group->add(Gtk::Action::create(
+               "clear-undo",
+               Gtk::StockID("synfig-clear_undo"),
+               _("Clear Undo Stack"),
+               _("Clear the undo stack")
+       ),
+               sigc::mem_fun(
+                       *this,
+                       &Dock_History::clear_undo
+               )
+       );
+       action_group->add(Gtk::Action::create(
+               "clear-redo",
+               Gtk::StockID("synfig-clear_redo"),
+               _("Clear Redo Stack"),
+               _("Clear the redo stack")
+       ),
+               sigc::mem_fun(
+                       *this,
+                       &Dock_History::clear_redo
+               )
+       );
+       action_group->add(Gtk::Action::create(
+               "clear-undo-and-redo",
+               Gtk::Stock::CLEAR,
+               _("Clear Undo and Redo Stacks"),
+               _("Clear the undo and redo stacks")
+       ),
+               sigc::mem_fun(
+                       *this,
+                       &Dock_History::clear_undo_and_redo
+               )
+       );
+       action_group->add(Gtk::Action::create(
+               "undo",
+               Gtk::StockID("gtk-undo"),
+               _("Undo"),
+               _("Undo the previous action")
+       ),
+               sigc::ptr_fun(studio::App::undo)
+       );
+       action_group->add(Gtk::Action::create(
+               "redo",
+               Gtk::StockID("gtk-redo"),
+               _("Redo"),
+               _("Redo the previously undone action")
+       ),
+               sigc::ptr_fun(studio::App::redo)
+       );
+
+       action_group->add( Gtk::Action::create("toolbar-history", _("History")) );
+       App::ui_manager()->insert_action_group(action_group);
+
+       Glib::ustring ui_info =
+       "<ui>"
+       "       <toolbar action='toolbar-history'>"
+       "       <toolitem action='undo' />"
+       "       <toolitem action='redo' />"
+       "       <toolitem action='clear-undo' />"
+       "       <toolitem action='clear-redo' />"
+       "       <toolitem action='clear-undo-and-redo' />"
+       "       </toolbar>"
+       "</ui>"
+       ;
+
+       App::ui_manager()->add_ui_from_string(ui_info);
+
+       action_group->set_sensitive(false);
+
+       set_toolbar(*dynamic_cast<Gtk::Toolbar*>(App::ui_manager()->get_widget("/toolbar-history")));
+       add(*create_action_tree());
+}
+
+Dock_History::~Dock_History()
+{
+}
+
+void
+Dock_History::init_instance_vfunc(etl::loose_handle<Instance> instance)
+{
+       instance->signal_undo_redo_status_changed().connect(
+               sigc::mem_fun(*this,&Dock_History::update_undo_redo)
+       );
+}
+
+Gtk::Widget*
+Dock_History::create_action_tree()
+{
+       studio::HistoryTreeStore::Model history_tree_model;
+       action_tree=manage(new class Gtk::TreeView());
+       {
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column("") );
+
+               Gtk::CellRendererToggle* toggle_cr = Gtk::manage( new Gtk::CellRendererToggle() );
+               toggle_cr->signal_toggled().connect(sigc::mem_fun(*this, &studio::Dock_History::on_action_toggle) );
+
+               column->pack_start(*toggle_cr); //false = don't expand.
+               column->add_attribute(toggle_cr->property_active(),history_tree_model.is_active);
+               column->set_resizable();
+               column->set_clickable();
+
+               action_tree->append_column(*column);
+       }
+       /*{
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Canvas")) );
+               Gtk::CellRendererText *text_cr=Gtk::manage(new Gtk::CellRendererText());
+               text_cr->property_foreground()=Glib::ustring("#7f7f7f");
+
+               column->pack_start(*text_cr);
+               column->add_attribute(text_cr->property_text(),history_tree_model.canvas_id);
+               column->add_attribute(text_cr->property_foreground_set(),history_tree_model.is_redo);
+
+               action_tree->append_column(*column);
+       }*/
+       {
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Jump")) );
+
+               Gtk::CellRendererText* cell_renderer_jump=Gtk::manage(new Gtk::CellRendererText());
+               column->pack_start(*cell_renderer_jump,true);
+
+               cell_renderer_jump->property_text()=_("(JMP)");
+               cell_renderer_jump->property_foreground()="#003a7f";
+
+               column->set_resizable();
+               column->set_clickable();
+
+               column->set_sort_column(COLUMNID_JUMP);
+
+               action_tree->append_column(*column);
+               //column->clicked();
+       }
+       {
+               Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Action")) );
+
+               Gtk::CellRendererText *text_cr=Gtk::manage(new Gtk::CellRendererText());
+               text_cr->property_foreground()=Glib::ustring("#7f7f7f");
+
+
+
+               //column->pack_start(history_tree_model.icon, false); //false = don't expand.
+               column->pack_start(*text_cr);
+               column->add_attribute(text_cr->property_text(),history_tree_model.name);
+               column->add_attribute(text_cr->property_foreground_set(),history_tree_model.is_redo);
+
+               action_tree->append_column(*column);
+       }
+
+       action_tree->set_enable_search(true);
+       action_tree->set_search_column(history_tree_model.name);
+       action_tree->set_search_equal_func(sigc::ptr_fun(&studio::HistoryTreeStore::search_func));
+
+       action_tree->set_rules_hint();
+//     action_tree->signal_row_activated().connect(sigc::mem_fun(*this,&Dock_History::on_row_activate));
+       action_tree->signal_event().connect(sigc::mem_fun(*this,&Dock_History::on_action_event));
+//     action_tree->add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
+//     action_tree->add_events(Gdk::BUTTON1_MOTION_MASK);
+       action_tree->show();
+
+       Gtk::ScrolledWindow *scrolledwindow = manage(new class Gtk::ScrolledWindow());
+       scrolledwindow->set_flags(Gtk::CAN_FOCUS);
+       scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+       scrolledwindow->add(*action_tree);
+       scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
+       scrolledwindow->show_all();
+
+/*     {
+               Gtk::Widget& widget(*action_tree);
+               Pango::FontDescription font(widget.get_modifier_style()->get_font());
+               font.set_size(Pango::SCALE*5);
+               widget.get_modifier_style()->set_font(font);
+               widget.modify_font(font);
+       }
+*/
+       return scrolledwindow;
+}
+
+void
+Dock_History::clear_undo()
+{
+       if(selected_instance && App::dialog_yes_no(_("Clear History"),
+                       _("You will not be able to undo any changes that you have made!\nAre you sure you want to clear the undo stack?")))
+               selected_instance->clear_undo_stack();
+}
+
+void
+Dock_History::clear_redo()
+{
+       if(selected_instance && App::dialog_yes_no(_("Clear History"),
+                       _("You will not be able to redo any changes that you have made!\nAre you sure you want to clear the redo stack?")))
+               selected_instance->clear_redo_stack();
+}
+
+void
+Dock_History::clear_undo_and_redo()
+{
+       if(selected_instance && App::dialog_yes_no(_("Clear History"),
+                       _("You will not be able to undo or redo any changes that you have made!\nAre you sure you want to clear the undo and redo stacks?")))
+       {
+               selected_instance->clear_undo_stack();
+               selected_instance->clear_redo_stack();
+       }
+}
+
+void
+Dock_History::update_undo_redo()
+{
+       etl::handle<Instance> instance=App::get_selected_instance();
+       if(instance)
+       {
+               action_group->get_action("undo")->set_sensitive(instance->get_undo_status());
+               action_group->get_action("clear-undo")->set_sensitive(instance->get_undo_status());
+               action_group->get_action("redo")->set_sensitive(instance->get_redo_status());
+               action_group->get_action("clear-redo")->set_sensitive(instance->get_redo_status());
+               action_group->get_action("clear-undo-and-redo")->set_sensitive(instance->get_undo_status() || instance->get_redo_status());
+       }
+}
+
+void
+Dock_History::on_undo_tree_changed()
+{
+       Gtk::TreeModel::Children children(selected_instance->history_tree_store()->children());
+
+       if (!children.size())
+               return;
+
+       studio::HistoryTreeStore::Model model;
+
+       Gtk::TreeModel::Children::iterator iter, prev = children.end();
+       for (iter = children.begin(); iter != children.end(); prev = iter++)
+               if ((*iter)[model.is_redo])
+               {
+                       if (prev == children.end())
+                               action_tree->get_selection()->unselect_all();
+                       else
+                       {
+                               action_tree->scroll_to_row(Gtk::TreePath(prev), 0.5);
+                               action_tree->get_selection()->select(prev);
+                       }
+                       return;
+               }
+
+       action_tree->scroll_to_row(Gtk::TreePath(prev), 0.5);
+       action_tree->get_selection()->select(prev);
+}
+
+void
+Dock_History::set_selected_instance_(etl::handle<studio::Instance> instance)
+{
+       if(studio::App::shutdown_in_progress)
+               return;
+
+       if (on_undo_tree_changed_connection)
+               on_undo_tree_changed_connection.disconnect();
+
+       selected_instance=instance;
+       if(instance)
+       {
+               on_undo_tree_changed_connection = selected_instance->history_tree_store()->signal_undo_tree_changed().connect(
+                       sigc::mem_fun(*this,&Dock_History::on_undo_tree_changed));
+
+               action_tree->set_model(instance->history_tree_store());
+               action_tree->show();
+               update_undo_redo();
+               action_group->set_sensitive(true);
+       }
+       else
+       {
+               action_tree->set_model(Glib::RefPtr< Gtk::TreeModel >());
+               action_tree->hide();
+               action_group->set_sensitive(false);
+       }
+}
+
+void
+Dock_History::set_selected_instance_signal(etl::handle<studio::Instance> x)
+{
+       set_selected_instance(x);
+}
+
+void
+Dock_History::set_selected_instance(etl::loose_handle<studio::Instance> x)
+{
+       if(studio::App::shutdown_in_progress)
+               return;
+
+       // if it's already selected, don't select it again
+       if (x==selected_instance)
+               return;
+
+       std::list<etl::handle<studio::Instance> >::iterator iter;
+
+       set_selected_instance_(x);
+}
+
+void
+Dock_History::delete_instance(etl::handle<studio::Instance> instance)
+{
+       if(studio::App::shutdown_in_progress)
+               return;
+
+       if(selected_instance==instance)
+       {
+               set_selected_instance(0);
+       }
+}
+
+bool
+Dock_History::on_action_event(GdkEvent *event)
+{
+       studio::HistoryTreeStore::Model model;
+    switch(event->type)
+    {
+       case GDK_BUTTON_PRESS:
+       case GDK_2BUTTON_PRESS:
+               {
+                       Gtk::TreeModel::Path path;
+                       Gtk::TreeViewColumn *column;
+                       int cell_x, cell_y;
+                       if(!action_tree->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 = *(action_tree->get_model()->get_iter(path));
+
+                       //signal_user_click()(event->button.button,row,(ColumnID)column->get_sort_column_id());
+                       if((ColumnID)column->get_sort_column_id()==COLUMNID_JUMP)
+                       {
+                               etl::handle<synfigapp::Action::Undoable> action(row[model.action]);
+                               try{
+                               if((bool)row[model.is_undo])
+                               {
+                                       while(get_selected_instance()->undo_action_stack().size() && get_selected_instance()->undo_action_stack().front()!=action)
+                                               if(get_selected_instance()->undo()==false)
+                                                       throw int();
+                               }
+                               else if((bool)row[model.is_redo])
+                               {
+                                       while(get_selected_instance()->redo_action_stack().size() && get_selected_instance()->undo_action_stack().front()!=action)
+                                               if(get_selected_instance()->redo()==false)
+                                                       throw int();
+                               }
+                               }
+                               catch(int)
+                               {
+                                       return true;
+                               }
+                       }
+               }
+
+       case GDK_BUTTON_RELEASE:
+               break;
+       default:
+               break;
+       }
+       return false;
+}
+
+void
+Dock_History::on_action_toggle(const Glib::ustring& path_string)
+{
+       studio::HistoryTreeStore::Model history_tree_model;
+
+       Gtk::TreePath path(path_string);
+
+       const Gtk::TreeRow row = *(selected_instance->history_tree_store()->get_iter(path));
+
+       handle<synfigapp::Action::Undoable> action=row[history_tree_model.action];
+
+       selected_instance->synfigapp::Instance::set_action_status(action,!action->is_active());
+}
diff --git a/synfig-studio/src/gui/docks/dock_history.h b/synfig-studio/src/gui/docks/dock_history.h
new file mode 100644 (file)
index 0000000..70f34dc
--- /dev/null
@@ -0,0 +1,90 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_history.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DIALOG_HISTORY_H
+#define __SYNFIG_STUDIO_DIALOG_HISTORY_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include <gtkmm/actiongroup.h>
+#include "docks/dock_canvasspecific.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class Dock_History : public Dock_CanvasSpecific
+{
+       Glib::RefPtr<Gtk::ActionGroup> action_group;
+       Gtk::TreeView *action_tree;
+
+       etl::loose_handle<studio::Instance>     selected_instance;
+
+       sigc::connection on_undo_tree_changed_connection;
+
+       void on_undo_tree_changed();
+
+       void set_selected_instance_(etl::handle<studio::Instance> x);
+
+
+       void set_selected_instance(etl::loose_handle<studio::Instance> x);
+
+       void set_selected_instance_signal(etl::handle<studio::Instance> x);
+
+       void delete_instance(etl::handle<studio::Instance> x);
+
+       Gtk::Widget* create_action_tree();
+
+public:
+
+       etl::loose_handle<studio::Instance> get_selected_instance() { return selected_instance; }
+
+       void clear_undo();
+       void clear_redo();
+       void clear_undo_and_redo();
+
+       bool on_action_event(GdkEvent *event);
+       void on_action_toggle(const Glib::ustring& path);
+
+       void update_undo_redo();
+
+       Dock_History();
+       ~Dock_History();
+protected:
+       virtual void init_instance_vfunc(etl::loose_handle<Instance> instance);
+
+}; // END of Dock_History
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_info.cpp b/synfig-studio/src/gui/docks/dock_info.cpp
new file mode 100644 (file)
index 0000000..7324e57
--- /dev/null
@@ -0,0 +1,144 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_info.cpp
+**     \brief Dock Info File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_info.h"
+#include "canvasview.h"
+#include "workarea.h"
+
+#include <synfig/canvas.h>
+#include <synfig/color.h>              // for gamma_in()
+#include <synfig/context.h>
+
+#include <gtkmm/separator.h>
+#include <gtkmm/invisible.h>
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+/* === E N T R Y P O I N T ================================================= */
+
+void studio::Dock_Info::on_mouse_move()
+{
+       Point pos = get_canvas_view()->work_area->get_cursor_pos();
+
+       Distance xv(pos[0],Distance::SYSTEM_UNITS);
+       xv.convert(App::distance_system, get_canvas_view()->get_canvas()->rend_desc());
+
+       Distance yv(pos[1],Distance::SYSTEM_UNITS);
+       yv.convert(App::distance_system, get_canvas_view()->get_canvas()->rend_desc());
+
+       //get the color and set the labels
+
+       x.set_text(xv.get_string(3));
+       y.set_text(yv.get_string(3));
+
+       Color c = get_canvas_view()->get_canvas()->get_context().get_color(pos);
+       float cr = c.get_r(),cg = c.get_g(), cb = c.get_b();
+
+       if(use_colorspace_gamma())
+       {
+               cr = gamma_in(cr);
+               cg = gamma_in(cg);
+               cb = gamma_in(cb);
+       }
+
+       r.set_text(strprintf("%.1f%%",cr*100));
+       g.set_text(strprintf("%.1f%%",cg*100));
+       b.set_text(strprintf("%.1f%%",cb*100));
+       a.set_text(strprintf("%.1f%%",c.get_a()*100));
+}
+
+studio::Dock_Info::Dock_Info()
+:Dock_CanvasSpecific("info",_("Info"),Gtk::StockID("synfig-info"))
+{
+       set_use_scrolled(false);
+
+       Gtk::Table *table = manage(new Gtk::Table);
+
+       //pos labels
+       table->attach(*manage(new Gtk::Label(_("X: "))),0,1,0,2,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       table->attach(*manage(new Gtk::Label(_("Y: "))),0,1,2,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+
+       //pos
+       table->attach(x,1,2,0,2,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       table->attach(y,1,2,2,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+
+       //separator
+       table->attach(*manage(new Gtk::VSeparator),2,3,0,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+
+       //color label
+       table->attach(*manage(new Gtk::Label(_("R: "))),3,4,0,1,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       table->attach(*manage(new Gtk::Label(_("G: "))),3,4,1,2,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       table->attach(*manage(new Gtk::Label(_("B: "))),3,4,2,3,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       table->attach(*manage(new Gtk::Label(_("A: "))),3,4,3,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+
+       //color
+       table->attach(r,4,5,0,1,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       table->attach(g,4,5,1,2,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       table->attach(b,4,5,2,3,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       table->attach(a,4,5,3,4,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+
+       table->attach(*manage(new Gtk::Label),0,5,4,5);
+
+       table->show_all();
+
+       add(*table);
+}
+
+studio::Dock_Info::~Dock_Info()
+{
+}
+
+void studio::Dock_Info::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       mousecon.disconnect();
+
+       if(canvas_view && canvas_view->get_work_area())
+       {
+               mousecon = get_canvas_view()->work_area->signal_cursor_moved().connect(sigc::mem_fun(*this,&Dock_Info::on_mouse_move));
+       }
+}
diff --git a/synfig-studio/src/gui/docks/dock_info.h b/synfig-studio/src/gui/docks/dock_info.h
new file mode 100644 (file)
index 0000000..c954932
--- /dev/null
@@ -0,0 +1,62 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_info.h
+**     \brief Info Dock Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_DOCK_INFO_H
+#define __SYNFIG_DOCK_INFO_H
+
+/* === H E A D E R S ======================================================= */
+#include "docks/dock_canvasspecific.h"
+#include "sigc++/signal.h"
+
+#include "widgets/widget_distance.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class Dock_Info : public Dock_CanvasSpecific
+{
+       Gtk::Label  r,g,b,a;
+       Gtk::Label      x,y;
+
+       sigc::connection mousecon;
+
+       void on_mouse_move();
+
+public:
+       Dock_Info();
+       ~Dock_Info();
+
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+};
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_keyframes.cpp b/synfig-studio/src/gui/docks/dock_keyframes.cpp
new file mode 100644 (file)
index 0000000..e741bbf
--- /dev/null
@@ -0,0 +1,138 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_keyframes.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_keyframes.h"
+#include "app.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/slot.h>
+#include "keyframetreestore.h"
+#include "keyframetree.h"
+#include "canvasview.h"
+#include "keyframeactionmanager.h"
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_Keyframes::Dock_Keyframes():
+       Dock_CanvasSpecific("keyframes",_("Keyframes"),Gtk::StockID("synfig-keyframes")),
+       action_group(Gtk::ActionGroup::create("action_group_dock_keyframes")),
+       keyframe_action_manager(new KeyframeActionManager)
+{
+       keyframe_action_manager->set_ui_manager(App::ui_manager());
+       keyframe_action_manager->signal_show_keyframe_properties().connect(
+               sigc::mem_fun(*this,&Dock_Keyframes::show_keyframe_properties)
+       );
+
+    Glib::ustring ui_info =
+       "<ui>"
+       "       <toolbar action='toolbar-keyframe'>"
+       "       <toolitem action='action-KeyframeAdd' />"
+       "       <toolitem action='action-KeyframeDuplicate' />"
+       "       <toolitem action='action-KeyframeRemove' />"
+       "       <toolitem action='keyframe-properties' />"
+       "       </toolbar>"
+       "</ui>"
+       ;
+
+       App::ui_manager()->add_ui_from_string(ui_info);
+
+       set_toolbar(*dynamic_cast<Gtk::Toolbar*>(App::ui_manager()->get_widget("/toolbar-keyframe")));
+}
+
+Dock_Keyframes::~Dock_Keyframes()
+{
+}
+
+void
+Dock_Keyframes::show_keyframe_properties()
+{
+       if(get_canvas_view())
+               get_canvas_view()->show_keyframe_dialog();
+}
+
+void
+Dock_Keyframes::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       Glib::RefPtr<KeyframeTreeStore> keyframe_tree_store;
+       keyframe_tree_store=KeyframeTreeStore::create(canvas_view->canvas_interface());
+
+       KeyframeTree* keyframe_tree(new KeyframeTree());
+       keyframe_tree->set_model(keyframe_tree_store);
+       keyframe_tree->set_editable(true);
+
+       canvas_view->set_tree_model(get_name(),keyframe_tree_store);
+       canvas_view->set_ext_widget(get_name(),keyframe_tree);
+}
+
+void
+Dock_Keyframes::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(canvas_view)
+       {
+               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
+
+               add(*tree_view);
+               tree_view->show();
+
+               keyframe_action_manager->set_keyframe_tree(dynamic_cast<KeyframeTree*>(canvas_view->get_ext_widget(get_name())));
+               keyframe_action_manager->set_canvas_interface(canvas_view->canvas_interface());
+               keyframe_action_manager->refresh();
+       }
+       else
+       {
+               clear_previous();
+
+               keyframe_action_manager->set_keyframe_tree(0);
+               keyframe_action_manager->set_canvas_interface(0);
+               keyframe_action_manager->refresh();
+       }
+}
diff --git a/synfig-studio/src/gui/docks/dock_keyframes.h b/synfig-studio/src/gui/docks/dock_keyframes.h
new file mode 100644 (file)
index 0000000..9818b28
--- /dev/null
@@ -0,0 +1,79 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_keyframes.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_KEYFRAMES_H
+#define __SYNFIG_STUDIO_DOCK_KEYFRAMES_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include "docks/dock_canvasspecific.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include <gtkmm/actiongroup.h>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class KeyframeTreeStore;
+class KeyframeTree;
+
+class KeyframeActionManager;
+
+class Dock_Keyframes : public Dock_CanvasSpecific
+{
+       Glib::RefPtr<Gtk::ActionGroup> action_group;
+
+       /*
+       void add_keyframe_pressed();
+       void duplicate_keyframe_pressed();
+       void delete_keyframe_pressed();
+       */
+
+       void show_keyframe_properties();
+
+       KeyframeActionManager* keyframe_action_manager;
+
+protected:
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+
+public:
+
+
+       Dock_Keyframes();
+       ~Dock_Keyframes();
+}; // END of Dock_Keyframes
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_layergroups.cpp b/synfig-studio/src/gui/docks/dock_layergroups.cpp
new file mode 100644 (file)
index 0000000..8306a8e
--- /dev/null
@@ -0,0 +1,136 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_layergroups.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_layergroups.h"
+#include "app.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/retype_return.h>
+#include <sigc++/slot.h>
+#include "canvasview.h"
+
+#include "layergrouptreestore.h"
+#include "layergrouptree.h"
+#include "groupactionmanager.h"
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_LayerGroups::Dock_LayerGroups():
+       Dock_CanvasSpecific("groups",_("Groups"),Gtk::StockID("synfig-group")),
+       action_group_group_ops(Gtk::ActionGroup::create("action_group_dock_layergroups")),
+       group_action_manager(new GroupActionManager)
+{
+       group_action_manager->set_ui_manager(App::ui_manager());
+
+       action_group_group_ops->add( Gtk::Action::create("toolbar-groups", _("Group Ops")) );
+
+       action_group_add=Gtk::Action::create("action-group_add", Gtk::Stock::ADD,_("Add a New Group"),_("Add a New Group"));
+       action_group_group_ops->add(action_group_add);
+       action_group_add->set_sensitive(false);
+
+       App::ui_manager()->insert_action_group(action_group_group_ops);
+
+    Glib::ustring ui_info =
+       "<ui>"
+       "       <toolbar action='toolbar-groups'>"
+       "       <toolitem action='action-GroupRemove' />"
+       "       <toolitem action='action-group_add' />"
+       "       </toolbar>"
+       "</ui>"
+       ;
+
+       App::ui_manager()->add_ui_from_string(ui_info);
+
+       set_toolbar(*dynamic_cast<Gtk::Toolbar*>(App::ui_manager()->get_widget("/toolbar-groups")));
+}
+
+Dock_LayerGroups::~Dock_LayerGroups()
+{
+       delete group_action_manager;
+}
+
+void
+Dock_LayerGroups::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       Glib::RefPtr<LayerGroupTreeStore> layer_group_tree_store;
+       layer_group_tree_store=LayerGroupTreeStore::create(canvas_view->canvas_interface());
+
+       LayerGroupTree* layer_group_tree(new LayerGroupTree());
+       layer_group_tree->set_model(layer_group_tree_store);
+       layer_group_tree->signal_popup_layer_menu().connect(sigc::mem_fun(*canvas_view,&CanvasView::popup_layer_menu));
+
+       canvas_view->set_tree_model(get_name(),layer_group_tree_store);
+       canvas_view->set_ext_widget(get_name(),layer_group_tree);
+}
+
+void
+Dock_LayerGroups::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(canvas_view)
+       {
+               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
+
+               add(*tree_view);
+               tree_view->show();
+
+               group_action_manager->set_group_tree(dynamic_cast<LayerGroupTree*>(tree_view));
+               group_action_manager->set_canvas_interface(canvas_view->canvas_interface());
+               group_action_manager->refresh();
+       }
+       else
+       {
+               clear_previous();
+               group_action_manager->clear();
+               group_action_manager->set_canvas_interface(0);
+               group_action_manager->set_group_tree(0);
+       }
+}
diff --git a/synfig-studio/src/gui/docks/dock_layergroups.h b/synfig-studio/src/gui/docks/dock_layergroups.h
new file mode 100644 (file)
index 0000000..b9e42bc
--- /dev/null
@@ -0,0 +1,71 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_layergroups.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_LAYERGROUPS_H
+#define __SYNFIG_STUDIO_DOCK_LAYERGROUPS_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include "docks/dock_canvasspecific.h"
+#include <gtkmm/actiongroup.h>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace Gtk { class HScale; }
+
+namespace studio {
+
+class GroupActionManager ;
+
+class Dock_LayerGroups : public Dock_CanvasSpecific
+{
+       Glib::RefPtr<Gtk::ActionGroup> action_group_group_ops;
+       Glib::RefPtr<Gtk::Action> action_group_add;
+
+       GroupActionManager *group_action_manager;
+protected:
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+private:
+
+public:
+
+
+       Dock_LayerGroups();
+       ~Dock_LayerGroups();
+}; // END of Dock_LayerGroups
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_layers.cpp b/synfig-studio/src/gui/docks/dock_layers.cpp
new file mode 100644 (file)
index 0000000..152ffb1
--- /dev/null
@@ -0,0 +1,295 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_layers.cpp
+**     \brief Template File
+**
+**     $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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_layers.h"
+#include "app.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/retype_return.h>
+#include <sigc++/slot.h>
+#include "layertreestore.h"
+#include "layertree.h"
+#include "canvasview.h"
+#include "layeractionmanager.h"
+//#include <ETL/ref_count>
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/*static void do_nothing(reference_counter x)
+{
+       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,x.count());
+}*/
+
+/* === M E T H O D S ======================================================= */
+
+Dock_Layers::Dock_Layers():
+       Dock_CanvasSpecific("layers",_("Layers"),Gtk::StockID("synfig-layer")),
+       layer_action_manager(new LayerActionManager)
+{
+       if(layer_action_manager)layer_action_manager->set_ui_manager(App::ui_manager());
+
+       action_group_new_layers=Gtk::ActionGroup::create("action_group_new_layers");
+       action_group_layer_ops=Gtk::ActionGroup::create("action_group_layer_ops");
+
+       std::map<synfig::String,synfig::String> category_map;
+
+       // Build layer creation actions
+       synfig::Layer::Book::iterator iter;
+       for(iter=synfig::Layer::book().begin();iter!=synfig::Layer::book().end();++iter)
+       {
+               synfig::Layer::Book::value_type lyr(*iter);
+
+               if(lyr.second.category==CATEGORY_DO_NOT_USE)
+                       continue;
+
+               action_group_new_layers->add(Gtk::Action::create(
+                       strprintf("layer-new-%s",lyr.first.c_str()),
+                       layer_icon(lyr.first.c_str()),
+                       lyr.second.local_name,lyr.second.local_name
+               ),
+                       sigc::hide_return(
+                               sigc::bind(
+                                       sigc::mem_fun(*this,&studio::Dock_Layers::add_layer),
+                                       lyr.first
+                               )
+                       )
+               );
+
+               category_map[lyr.second.category]+=strprintf("<menuitem action='layer-new-%s' />",lyr.first.c_str());
+
+               //(*category_map)[lyr.second.category]->items().push_back(Gtk::Menu_Helpers::MenuElem(lyr.second.local_name,
+               //));
+       }
+
+       {
+               Glib::RefPtr<Gtk::ActionGroup> action_group_categories(Gtk::ActionGroup::create("layer-category"));
+               synfig::String layer_ui_info;
+
+               layer_ui_info+="<ui><popup action='menu-main'><menu action='menu-layer'><menu action='menu-layer-new'>";
+
+               std::map<synfig::String,synfig::String>::iterator iter;
+               for(iter=category_map.begin();iter!=category_map.end();++iter)
+               {
+                       layer_ui_info+=strprintf("<menu action='%s'>%s</menu>",iter->first.c_str(),iter->second.c_str());
+                       action_group_categories->add(Gtk::Action::create(iter->first.c_str(),dgettext("synfig", iter->first.c_str())));
+               }
+
+               layer_ui_info+="</menu></menu></popup></ui>";
+
+               App::ui_manager()->insert_action_group(action_group_categories);
+               App::ui_manager()->insert_action_group(action_group_new_layers);
+
+               try
+               {
+                       App::ui_manager()->add_ui_from_string(layer_ui_info);
+               }
+               catch(Glib::MarkupError x)
+               {
+                       error("%s:%d caught MarkupError code %d: %s", __FILE__, __LINE__, x.code(), x.what().c_str());
+                       error("%s:%d with markup: \"%s\"", __FILE__, __LINE__, layer_ui_info.c_str());
+                       exit(1);
+               }
+       }
+
+       if(layer_action_manager)
+               action_group_layer_ops->add(layer_action_manager->get_action_select_all_child_layers());
+
+       action_group_layer_ops->add( Gtk::Action::create("toolbar-layer", _("Layer Ops")) );
+       App::ui_manager()->insert_action_group(action_group_layer_ops);
+
+    Glib::ustring ui_info =
+       "<ui>"
+       "       <toolbar action='toolbar-layer'>"
+       "       <toolitem action='action-LayerRaise' />"
+       "       <toolitem action='action-LayerLower' />"
+       "       <separator />"
+       "       <toolitem action='action-LayerDuplicate' />"
+       "       <toolitem action='action-LayerEncapsulate' />"
+       "       <toolitem action='select-all-child-layers' />"
+       "       <toolitem action='action-LayerRemove' />"
+       "       <separator />"
+       "       <toolitem action='cut' />"
+       "       <toolitem action='copy' />"
+       "       <toolitem action='paste' />"
+       "       </toolbar>"
+       "</ui>"
+       ;
+
+       App::ui_manager()->add_ui_from_string(ui_info);
+
+       action_group_new_layers->set_sensitive(false);
+
+       set_toolbar(*dynamic_cast<Gtk::Toolbar*>(App::ui_manager()->get_widget("/toolbar-layer")));
+
+
+
+
+
+       /*
+       reference_counter ref_count;
+       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
+
+       {
+               sigc::signal<void> tmp_signal;
+
+               tmp_signal.connect(
+                       sigc::bind(
+                               sigc::ptr_fun(do_nothing),
+                               ref_count
+                       )
+               );
+
+       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
+               tmp_signal();
+       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
+
+               tmp_signal.clear();
+       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
+
+               tmp_signal();
+       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
+               tmp_signal.connect(
+                       sigc::bind(
+                               sigc::ptr_fun(do_nothing),
+                               ref_count
+                       )
+               );
+       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
+       }
+       synfig::info(__FILE__":%d:ref_count.count()=%d",__LINE__,ref_count.count());
+       assert(ref_count.count()==1);
+       */
+}
+
+
+Dock_Layers::~Dock_Layers()
+{
+       delete layer_action_manager;
+}
+
+
+void
+Dock_Layers::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       Glib::RefPtr<LayerTreeStore> layer_tree_store;
+       layer_tree_store=LayerTreeStore::create(canvas_view->canvas_interface());
+
+       canvas_view->set_tree_model(get_name(),layer_tree_store);
+       LayerTree* layer_tree(new LayerTree());
+       layer_tree->set_time_adjustment(canvas_view->time_adjustment());
+
+       layer_tree->signal_edited_value().connect(
+               sigc::hide_return(
+                       sigc::mem_fun(*canvas_view->canvas_interface(), &synfigapp::CanvasInterface::change_value)
+               )
+       );
+
+       // (a) should be before (b), (b) should be before (c)
+       canvas_view->set_ext_widget(get_name()+"_cmp",layer_tree); // (a)
+       canvas_view->set_ext_widget(get_name(),&layer_tree->get_layer_tree_view());
+       canvas_view->set_ext_widget("params",&layer_tree->get_param_tree_view());
+
+       layer_tree->set_model(layer_tree_store); // (b)
+       canvas_view->set_tree_model("params",layer_tree->get_param_tree_view().get_model()); // (c)
+
+       /*
+       canvas_view->layermenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-delete"),Gtk::AccelKey("Delete"),
+               sigc::mem_fun(*layer_tree, &LayerTree::on_delete_pressed))
+       );
+       */
+
+       // Hide the time bar
+       if(canvas_view->get_canvas()->rend_desc().get_time_start()==canvas_view->get_canvas()->rend_desc().get_time_end())
+               canvas_view->hide_timebar();
+       layer_tree_store->rebuild();
+       present();
+}
+
+void
+Dock_Layers::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(canvas_view)
+       {
+               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
+
+               add(*tree_view);
+               tree_view->show();
+               action_group_new_layers->set_sensitive(true);
+               if(layer_action_manager)
+               {
+                       layer_action_manager->set_layer_tree(dynamic_cast<LayerTree*>(canvas_view->get_ext_widget(get_name()+"_cmp")));
+                       layer_action_manager->set_canvas_interface(canvas_view->canvas_interface());
+                       layer_action_manager->refresh();
+               }
+       }
+       else
+       {
+               action_group_new_layers->set_sensitive(false);
+               if(layer_action_manager)
+               {
+                       layer_action_manager->clear();
+                       layer_action_manager->set_canvas_interface(0);
+                       layer_action_manager->set_layer_tree(0);
+               }
+
+               clear_previous();
+       }
+}
+
+void
+Dock_Layers::add_layer(synfig::String id)
+{
+       etl::loose_handle<CanvasView> canvas_view(get_canvas_view());
+       if(canvas_view)
+       {
+               canvas_view->add_layer(id);
+       }
+}
diff --git a/synfig-studio/src/gui/docks/dock_layers.h b/synfig-studio/src/gui/docks/dock_layers.h
new file mode 100644 (file)
index 0000000..0f00f92
--- /dev/null
@@ -0,0 +1,79 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_layers.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_LAYERS_H
+#define __SYNFIG_STUDIO_DOCK_LAYERS_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include "docks/dock_canvasspecific.h"
+#include <gtkmm/actiongroup.h>
+#include <list>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace Gtk { class HScale; }
+
+namespace studio {
+
+class LayerActionManager;
+
+class Dock_Layers : public Dock_CanvasSpecific
+{
+       Glib::RefPtr<Gtk::ActionGroup> action_group_new_layers;
+       Glib::RefPtr<Gtk::ActionGroup> action_group_layer_ops;
+
+       Gtk::HScale *layer_amount_hscale;
+
+       LayerActionManager* layer_action_manager;
+
+protected:
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+private:
+
+       void add_layer(synfig::String id);
+       void increase_amount();
+       void decrease_amount();
+
+public:
+
+
+       Dock_Layers();
+       ~Dock_Layers();
+}; // END of Dock_Layers
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_metadata.cpp b/synfig-studio/src/gui/docks/dock_metadata.cpp
new file mode 100644 (file)
index 0000000..5fe09f9
--- /dev/null
@@ -0,0 +1,144 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_metadata.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_metadata.h"
+#include "app.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/slot.h>
+#include "metadatatreestore.h"
+#include "canvasview.h"
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_MetaData::Dock_MetaData():
+       Dock_CanvasSpecific("meta_data",_("Canvas MetaData"),Gtk::StockID("synfig-meta_data")),
+       tree_view(manage(new Gtk::TreeView()))
+{
+       MetaDataTreeStore::Model model;
+
+       tree_view->append_column(_("Key"),model.key);
+       tree_view->append_column_editable(_("Data"),model.data);
+       tree_view->set_rules_hint();
+
+       Gtk::ScrolledWindow *scrolledwindow = manage(new class Gtk::ScrolledWindow());
+       scrolledwindow->set_flags(Gtk::CAN_FOCUS);
+       scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+       scrolledwindow->add(*tree_view);
+       scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
+       scrolledwindow->show();
+
+       add(*scrolledwindow);
+
+       add_button(
+               Gtk::StockID("gtk-add"),
+               _("Add new MetaData entry")
+       )->signal_clicked().connect(
+               sigc::mem_fun(
+                       *this,
+                       &Dock_MetaData::on_add_pressed
+               )
+       );
+
+       add_button(
+               Gtk::StockID("gtk-delete"),
+               _("Remove selected MetaData entry")
+       )->signal_clicked().connect(
+               sigc::mem_fun(
+                       *this,
+                       &Dock_MetaData::on_delete_pressed
+               )
+       );
+}
+
+Dock_MetaData::~Dock_MetaData()
+{
+}
+
+void
+Dock_MetaData::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       canvas_view->set_tree_model(get_name(),MetaDataTreeStore::create(canvas_view->canvas_interface()));
+}
+
+void
+Dock_MetaData::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(canvas_view)
+       {
+               tree_view->set_model(canvas_view->get_tree_model(get_name()));
+               tree_view->show();
+       }
+       else
+       {
+               tree_view->set_model(Glib::RefPtr<Gtk::TreeModel>());
+               tree_view->hide();
+       }
+}
+
+void
+Dock_MetaData::on_add_pressed()
+{
+       if(get_canvas_interface())
+       {
+               synfig::String key;
+               if(App::dialog_entry(_("New MetaData Entry"), _("Please enter the name of the key"),key) && !key.empty())
+               {
+                       get_canvas_interface()->set_meta_data(key," ");
+               }
+       }
+}
+
+void
+Dock_MetaData::on_delete_pressed()
+{
+}
diff --git a/synfig-studio/src/gui/docks/dock_metadata.h b/synfig-studio/src/gui/docks/dock_metadata.h
new file mode 100644 (file)
index 0000000..f6ef500
--- /dev/null
@@ -0,0 +1,71 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_metadata.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_METADATA_H
+#define __SYNFIG_STUDIO_DOCK_METADATA_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include "docks/dock_canvasspecific.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class CanvasView;
+class Instance;
+
+class Dock_MetaData : public Dock_CanvasSpecific
+{
+
+       Gtk::TreeView *tree_view;
+
+
+       void on_add_pressed();
+       void on_delete_pressed();
+
+protected:
+
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+public:
+
+
+       Dock_MetaData();
+       ~Dock_MetaData();
+}; // END of Dock_MetaData
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_navigator.cpp b/synfig-studio/src/gui/docks/dock_navigator.cpp
new file mode 100644 (file)
index 0000000..51d86e6
--- /dev/null
@@ -0,0 +1,522 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_navigator.cpp
+**     \brief Dock Nagivator File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_navigator.h"
+#include "canvasview.h"
+#include "workarea.h"
+
+#include <cassert>
+#include <synfig/canvas.h>
+#include <synfig/context.h>
+#include <synfig/target_scanline.h>
+#include <synfig/surface.h>
+
+#include <gtkmm/separator.h>
+
+#include "asyncrenderer.h"
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+
+/* === M A C R O S ========================================================= */
+
+const double log_10_2 = log(2.0);
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+/* === E N T R Y P O I N T ================================================= */
+studio::Widget_NavView::Widget_NavView(CanvasView::LooseHandle cv)
+:canvview(cv),
+adj_zoom(0,-4,4,1,2),
+scrolling(false),
+surface(new synfig::Surface)
+{
+       attach(drawto,0,4,0,1);
+
+       attach(*manage(new Gtk::HSeparator),0,4,1,2,Gtk::SHRINK|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+
+       //zooming stuff
+       attach(zoom_print,0,1,2,3,Gtk::SHRINK|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+       zoom_print.set_size_request(40,-1);
+
+       Gtk::HScale *s = manage(new Gtk::HScale(adj_zoom));
+       s->set_draw_value(false);
+       //s->set_update_policy(Gtk::UPDATE_DELAYED);
+       //s->signal_event().connect(sigc::mem_fun(*this,&Dock_Navigator::on_scroll_event));
+       attach(*s,1,4,2,3,Gtk::EXPAND|Gtk::FILL,Gtk::SHRINK|Gtk::FILL);
+
+       show_all();
+
+       adj_zoom.signal_value_changed().connect(sigc::mem_fun(*this,&Widget_NavView::on_number_modify));
+
+       if(cv)
+       {
+               drawto.signal_expose_event().connect(sigc::mem_fun(*this,&Widget_NavView::on_expose_draw));
+               drawto.signal_event().connect(sigc::mem_fun(*this,&Widget_NavView::on_mouse_event));
+
+               drawto.add_events(Gdk::BUTTON_MOTION_MASK|Gdk::BUTTON_PRESS_MASK);
+
+               //get_canvas_view()->canvas_interface()->signal_dirty_preview()
+               //                              .connect(sigc::mem_fun(*this,&Widget_NavView::on_dirty_preview));
+               get_canvas_view()->work_area->signal_rendering()
+                                               .connect(sigc::mem_fun(*this,&Widget_NavView::on_dirty_preview));
+
+               get_canvas_view()->work_area->signal_view_window_changed()
+                                               .connect(sigc::mem_fun(*this,&Widget_NavView::on_workarea_view_change));
+
+               //update with this canvas' view
+               on_workarea_view_change();
+
+               dirty = true;
+               queue_draw();
+       }
+
+       adj_zoom.set_value(0);
+}
+
+studio::Widget_NavView::~Widget_NavView()
+{
+}
+
+
+static void freegu8(const guint8 *p)
+{
+       delete [] p;
+}
+
+void studio::Widget_NavView::on_start_render()
+{
+       if(dirty)
+       {
+               //synfig::warning("Nav: Starting render");
+               //synfig::warning("Nav: Rendering canvas");
+               etl::handle<Target_Scanline>    targ = surface_target(surface.get());
+
+               targ->set_canvas(get_canvas_view()->get_canvas());
+               targ->set_remove_alpha();
+               targ->set_avoid_time_sync();
+               targ->set_quality(get_canvas_view()->get_work_area()->get_quality());
+               //synfig::info("Set the quality level to: %d", get_canvas_view()->get_work_area()->get_quality());
+
+               //this should set it to render a single frame
+               RendDesc        r = get_canvas_view()->get_canvas()->rend_desc();
+               r.set_time(get_canvas_view()->canvas_interface()->get_time());
+
+               //this changes the size of the canvas to the closest thing we can find
+               int sw = r.get_w(), sh = r.get_h();
+
+               //synfig::warning("Nav: source image is %d x %d", sw,sh);
+
+               //resize so largest dimension is 128
+               int dw = sw > sh ? 128 : sw*128/sh,
+                       dh = sh > sw ? 128 : sh*128/sw;
+
+               //synfig::warning("Nav: dest image is %d x %d", dw,dh);
+
+               r.set_w(dw);
+               r.set_h(dh);
+
+               //get the pw and ph
+               //float pw = r.get_pw();
+               //float ph = r.get_ph();
+               //synfig::warning("Nav: pixel size is %f x %f", pw,ph);
+
+               //this renders that single frame
+               targ->set_rend_desc(&r);
+
+               //synfig::warning("Nav: Building async renderer and starting it...");
+
+               renderer = new AsyncRenderer(targ);
+               renderer->signal_success().connect(sigc::mem_fun(*this,&Widget_NavView::on_finish_render));
+               dirty = false;
+               renderer->start();
+       }
+}
+
+void studio::Widget_NavView::on_finish_render()
+{
+       //convert it into our pixmap
+       PixelFormat pf(PF_RGB);
+
+       //synfig::warning("Nav: It hath succeeded!!!");
+
+       //assert(renderer && renderer->has_success());
+       //synfig::warning("Nav: now we know it really succeeded");
+       if(!*surface)
+       {
+               synfig::warning("dock_navigator: Bad surface");
+               return;
+       }
+
+       int w = 0, h = 0;
+       int dw = surface->get_w();
+       int dh = surface->get_h();
+
+       if(prev)
+       {
+               w = prev->get_width();
+               h = prev->get_height();
+       }
+
+       if(w != dw || h != dh || !prev)
+       {
+               const int total_bytes(dw*dh*synfig::channels(pf));
+
+               //synfig::warning("Nav: Updating the pixbuf to be the right size, etc. (%d bytes)", total_bytes);
+
+               prev.clear();
+               guint8 *bytes = new guint8[total_bytes]; //24 bits per pixel
+
+               //convert into our buffered dataS
+               //synfig::warning("Nav: converting color format into buffer");
+               convert_color_format((unsigned char *)bytes, (*surface)[0], dw*dh, pf, App::gamma);
+
+               prev =
+               Gdk::Pixbuf::create_from_data(
+                       bytes,  // pointer to the data
+                       Gdk::COLORSPACE_RGB, // the colorspace
+                       ((pf&PF_A)==PF_A), // has alpha?
+                       8, // bits per sample
+                       dw,     // width
+                       dh,     // height
+                       dw*synfig::channels(pf), // stride (pitch)
+                       sigc::ptr_fun(freegu8)
+               );
+       }
+       else
+       {
+               //synfig::warning("Nav: Don't need to resize");
+               //convert into our buffered dataS
+               //synfig::warning("Nav: converting color format into buffer");
+               if(prev) //just in case we're stupid
+               {
+                       convert_color_format((unsigned char *)prev->get_pixels(), (*surface)[0], dw*dh, pf, App::gamma);
+               }
+       }
+       queue_draw();
+}
+
+/*     zoom slider is on exponential scale
+
+       map: -4,4 -> small number,1600 with 100 at 0
+
+       f(x) = 100*2^x
+*/
+
+static double unit_to_zoom(double f)
+{
+       return pow(2.0,f);
+}
+
+static double zoom_to_unit(double f)
+{
+       if(f > 0)
+       {
+               return log(f) / log_10_2;
+       }else return -999999.0;
+}
+
+bool studio::Widget_NavView::on_expose_draw(GdkEventExpose */*exp*/)
+{
+#ifdef SINGLE_THREADED
+       // don't redraw if the previous redraw is still running single-threaded
+       // or we end up destroying the renderer that's rendering it
+       if (App::single_threaded && renderer && renderer->updating)
+               return false;
+#endif
+
+       //print out the zoom
+       //HACK kind of...
+       //zoom_print.set_text(strprintf("%.1f%%",100*unit_to_zoom(adj_zoom.get_value())));
+
+       //draw the good stuff
+       on_start_render();
+
+       //if we've got a preview etc. display it...
+       if(get_canvas_view() && prev)
+       {
+               //axis transform from units to pixel coords
+               float xaxis = 0, yaxis = 0;
+
+               int canvw = get_canvas_view()->get_canvas()->rend_desc().get_w();
+               //int canvh = get_canvas_view()->get_canvas()->rend_desc().get_h();
+
+               float pw = get_canvas_view()->get_canvas()->rend_desc().get_pw();
+               float ph = get_canvas_view()->get_canvas()->rend_desc().get_ph();
+
+               int w = prev->get_width();
+               int h = prev->get_height();
+
+               //scale up/down to the nearest pixel ratio...
+               //and center in center
+               int offx=0, offy=0;
+
+               float sx, sy;
+               int nw,nh;
+
+               sx = drawto.get_width() / (float)w;
+               sy = drawto.get_height() / (float)h;
+
+               //synfig::warning("Nav redraw: now to scale the bitmap: %.3f x %.3f",sx,sy);
+
+               //round to smallest scale (fit entire thing in window without distortion)
+               if(sx > sy) sx = sy;
+               //else sy = sx;
+
+               //scaling and stuff
+               // the point to navpixel space conversion should be:
+               //              (navpixels / canvpixels) * (canvpixels / canvsize)
+               //      or (navpixels / prevpixels) * (prevpixels / navpixels)
+               xaxis = sx * w / (float)canvw;
+               yaxis = xaxis/ph;
+               xaxis /= pw;
+
+               //scale to a new pixmap and then copy over to the window
+               nw = (int)(w*sx);
+               nh = (int)(h*sx);
+
+               //must now center to be cool
+               offx = (drawto.get_width() - nw)/2;
+               offy = (drawto.get_height() - nh)/2;
+
+               //trivial escape
+               if(nw == 0 || nh == 0)return true;
+
+               //draw to drawing area
+               Glib::RefPtr<Gdk::GC>   gc = Gdk::GC::create(drawto.get_window());
+
+               //synfig::warning("Nav: Scaling pixmap to off (%d,%d) with size (%d,%d)", offx,offy,nw, nh);
+               Glib::RefPtr<Gdk::Pixbuf> scalepx = prev->scale_simple(nw,nh,Gdk::INTERP_NEAREST);
+
+               //synfig::warning("Nav: Drawing scaled bitmap");
+               drawto.get_window()->draw_pixbuf(
+                       gc, //GC
+                       scalepx, //pixbuf
+                       0, 0,   // Source X and Y
+                       offx, offy,     // Dest X and Y
+                       -1,-1,  // Width and Height
+                       Gdk::RGB_DITHER_MAX, // RgbDither
+                       2, 2 // Dither offset X and Y
+               );
+
+               //draw fancy red rectangle around focus point
+               const Point &wtl = get_canvas_view()->work_area->get_window_tl(),
+                                       &wbr = get_canvas_view()->work_area->get_window_br();
+
+               gc->set_rgb_fg_color(Gdk::Color("#ff0000"));
+               gc->set_line_attributes(2,Gdk::LINE_SOLID,Gdk::CAP_BUTT,Gdk::JOIN_MITER);
+
+               //it must be clamped to the drawing area though
+               int l=0,rw=0,t=0,rh=0;
+               const Point fp = -get_canvas_view()->work_area->get_focus_point();
+
+               //get focus point in normal space
+               rw = (int)(abs((wtl[0]-wbr[0])*xaxis));
+               rh = (int)(abs((wtl[1]-wbr[1])*yaxis));
+
+               //transform into pixel space
+               l = (int)(drawto.get_width()/2 + fp[0]*xaxis - rw/2);
+               t = (int)(drawto.get_height()/2 + fp[1]*yaxis - rh/2);
+
+               //coord system:
+               // tl : (offx,offy)
+               // axis multipliers = xaxis,yaxis
+               //synfig::warning("Nav: tl (%f,%f), br (%f,%f)", wtl[0],wtl[1],wbr[0],wbr[1]);
+               //synfig::warning("Nav: tl (%f,%f), br (%f,%f)", wtl[0],wtl[1],wbr[0],wbr[1]);
+               //synfig::warning("Nav: Drawing Rectangle (%d,%d) with dim (%d,%d)", l,t,rw,rh);
+               drawto.get_window()->draw_rectangle(gc,false,l,t,rw,rh);
+       }
+
+       return false; //draw everything else too
+}
+
+void studio::Widget_NavView::on_dirty_preview()
+{
+       dirty = true;
+       queue_draw();
+}
+
+bool studio::Widget_NavView::on_scroll_event(GdkEvent *event)
+{
+       if(get_canvas_view() && get_canvas_view()->get_work_area())
+       {
+               double z = unit_to_zoom(adj_zoom.get_value());
+
+               switch(event->type)
+               {
+                       case GDK_BUTTON_PRESS:
+                       {
+                               if(event->button.button == 1)
+                               {
+                                       scrolling = true;
+                                       get_canvas_view()->get_work_area()->set_zoom(z);
+                                       scrolling = false;
+                               }
+                               break;
+                       }
+
+                       case GDK_MOTION_NOTIFY:
+                       {
+                               if(Gdk::ModifierType(event->motion.state) & Gdk::BUTTON1_MASK)
+                               {
+                                       scrolling = true;
+                                       get_canvas_view()->get_work_area()->set_zoom(z);
+                                       scrolling = false;
+                               }
+                               break;
+                       }
+
+                       default:
+                               break;
+               }
+       }
+
+       return false;
+}
+
+void studio::Widget_NavView::on_number_modify()
+{
+       double z = unit_to_zoom(adj_zoom.get_value());
+       zoom_print.set_text(strprintf("%.1f%%",z*100.0));
+       //synfig::warning("Updating zoom to %f",adj_zoom.get_value());
+
+       if(get_canvas_view() && z != get_canvas_view()->get_work_area()->get_zoom())
+       {
+               scrolling = true;
+               get_canvas_view()->get_work_area()->set_zoom(z);
+               scrolling = false;
+       }
+}
+
+void studio::Widget_NavView::on_workarea_view_change()
+{
+       double wz = get_canvas_view()->get_work_area()->get_zoom();
+       double z = zoom_to_unit(wz);
+
+       //synfig::warning("Updating zoom to %f -> %f",wz,z);
+       if(!scrolling && z != adj_zoom.get_value())
+       {
+               adj_zoom.set_value(z);
+               //adj_zoom.value_changed();
+       }
+       queue_draw();
+}
+
+bool studio::Widget_NavView::on_mouse_event(GdkEvent * e)
+{
+       Point p;
+       bool    setpos = false;
+
+       if(e->type == GDK_BUTTON_PRESS && e->button.button == 1)
+       {
+               p[0] = e->button.x - drawto.get_width()/2;
+               p[1] = e->button.y - drawto.get_height()/2;
+
+               setpos = true;
+       }
+
+       if(e->type == GDK_MOTION_NOTIFY && (Gdk::ModifierType(e->motion.state) & Gdk::BUTTON1_MASK))
+       {
+               p[0] = e->motion.x - drawto.get_width()/2;
+               p[1] = e->motion.y - drawto.get_height()/2;
+
+               setpos = true;
+       }
+
+       if(setpos && prev && get_canvas_view())
+       {
+               const Point &tl = get_canvas_view()->get_canvas()->rend_desc().get_tl();
+               const Point &br = get_canvas_view()->get_canvas()->rend_desc().get_br();
+
+               float max = abs((br[0]-tl[0]) / drawto.get_width());
+
+               if((float(prev->get_width()) / drawto.get_width()) < (float(prev->get_height()) / drawto.get_height()))
+                       max = abs((br[1]-tl[1]) / drawto.get_height());
+
+               float signx = (br[0]-tl[0]) < 0 ? -1 : 1;
+               float signy = (br[1]-tl[1]) < 0 ? -1 : 1;
+
+               Point pos;
+
+               pos[0] = p[0] * max * signx;
+               pos[1] = p[1] * max * signy;
+
+               get_canvas_view()->get_work_area()->set_focus_point(-pos);
+
+               return true;
+       }
+
+       return false;
+}
+
+//Navigator Dock Definitions
+
+studio::Dock_Navigator::Dock_Navigator()
+:Dock_CanvasSpecific("navigator",_("Navigator"),Gtk::StockID("synfig-navigator"))
+{
+       add(dummy);
+}
+
+studio::Dock_Navigator::~Dock_Navigator()
+{
+}
+
+void studio::Dock_Navigator::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(canvas_view)
+       {
+               Widget *v = canvas_view->get_ext_widget("navview");
+
+               if(!v)
+               {
+                       v = new Widget_NavView(canvas_view);
+                       canvas_view->set_ext_widget("navview",v);
+               }
+
+               add(*v);
+       }else
+       {
+               clear_previous();
+               //add(dummy);
+       }
+}
diff --git a/synfig-studio/src/gui/docks/dock_navigator.h b/synfig-studio/src/gui/docks/dock_navigator.h
new file mode 100644 (file)
index 0000000..4100af1
--- /dev/null
@@ -0,0 +1,121 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_navigator.h
+**     \brief Navigator Dock Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_DOCK_NAVIGATOR_H
+#define __SYNFIG_DOCK_NAVIGATOR_H
+
+/* === H E A D E R S ======================================================= */
+#include "sigc++/signal.h"
+
+#include <gtkmm/drawingarea.h>
+#include <gdkmm/pixbuf.h>
+#include <gtkmm/adjustment.h>
+#include <gtkmm/label.h>
+
+#include <synfig/renddesc.h>
+
+#include "canvasview.h"
+#include "docks/dock_canvasspecific.h"
+#include "widgets/widget_distance.h"
+
+#include <ETL/smart_ptr>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+class AsyncRenderer;
+
+class Widget_NavView : public Gtk::Table
+{
+       //handle to out parent canvas
+       CanvasView::LooseHandle         canvview;
+
+       Glib::RefPtr<Gdk::Pixbuf>       prev;
+       bool dirty;
+
+       //The drawing stuff
+       Gtk::DrawingArea        drawto;
+
+       //The input stuff
+       Gtk::Adjustment         adj_zoom;
+       Gtk::Label                      zoom_print;
+
+       //zoom window stuff
+       bool                            scrolling;
+
+       //asynchronous rendering stuff
+       etl::handle<AsyncRenderer>      renderer;
+       etl::smart_ptr<synfig::Surface> surface;
+       bool                                            rendering;
+
+       //drawing functionality
+       void on_start_render(); //breaks out into asynchronous rendering
+       void on_finish_render();
+       void on_draw(); //renders the small thing we have
+       void on_dirty_preview(); //dirties the preview for rerender
+
+       //for the zoom buttons
+       void on_zoom_in();
+       void on_zoom_out();
+
+       //handles the zoom scroller
+       bool on_scroll_event(GdkEvent *event);
+       void on_number_modify();
+
+       //
+       bool on_mouse_event(GdkEvent * e);
+
+       //draws the gotten bitmap on the draw area
+       bool on_expose_draw(GdkEventExpose *exp=0);
+
+       //for when the canvasview view changes (boolean value scrolling solves cyclic problems)
+       void on_workarea_view_change();
+
+public:
+       Widget_NavView(CanvasView::LooseHandle cv = CanvasView::LooseHandle());
+       ~Widget_NavView();
+
+       etl::loose_handle<studio::CanvasView> get_canvas_view() {return canvview;}
+};
+
+class Dock_Navigator : public Dock_CanvasSpecific
+{
+       Widget_NavView  dummy;
+
+public:
+       Dock_Navigator();
+       ~Dock_Navigator();
+
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+};
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_params.cpp b/synfig-studio/src/gui/docks/dock_params.cpp
new file mode 100644 (file)
index 0000000..79b965e
--- /dev/null
@@ -0,0 +1,126 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_params.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_params.h"
+#include "app.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/slot.h>
+#include "canvasview.h"
+#include "layerparamtreestore.h"
+#include "workarea.h"
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_Params::Dock_Params():
+       Dock_CanvasSpecific("params",_("Params"),Gtk::Stock::INDEX/*Gtk::StockID("synfig-params")*/),
+       action_group(Gtk::ActionGroup::create("action_group_dock_params"))
+{
+}
+
+Dock_Params::~Dock_Params()
+{
+}
+
+
+void
+Dock_Params::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       Gtk::TreeView* tree_view(
+               static_cast<Gtk::TreeView*>(canvas_view->get_ext_widget(get_name()))
+       );
+
+       if(tree_view)
+       {
+               tree_view->get_selection()->signal_changed().connect(
+                       sigc::mem_fun(
+                               *this,
+                               &Dock_Params::refresh_selected_param
+                       )
+               );
+       }
+}
+
+void
+Dock_Params::refresh_selected_param()
+{
+       Gtk::TreeView* tree_view(
+               static_cast<Gtk::TreeView*>(get_canvas_view()->get_ext_widget(get_name()))
+       );
+       Gtk::TreeModel::iterator iter(tree_view->get_selection()->get_selected());
+
+       if(iter)
+       {
+               LayerParamTreeStore::Model model;
+               get_canvas_view()->work_area->set_selected_value_node(
+                       (synfig::ValueNode::Handle)(*iter)[model.value_node]
+               );
+       }
+       else
+       {
+               get_canvas_view()->work_area->set_selected_value_node(0);
+       }
+}
+
+void
+Dock_Params::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(canvas_view)
+       {
+               Gtk::Widget* tree_view(canvas_view->get_ext_widget(get_name()));
+
+               add(*tree_view);
+               tree_view->show();
+               show_all();
+       }
+       else clear_previous();
+}
diff --git a/synfig-studio/src/gui/docks/dock_params.h b/synfig-studio/src/gui/docks/dock_params.h
new file mode 100644 (file)
index 0000000..c7d0168
--- /dev/null
@@ -0,0 +1,64 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_params.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_PARAMS_H
+#define __SYNFIG_STUDIO_DOCK_PARAMS_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include "docks/dock_canvasspecific.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class Dock_Params : public Dock_CanvasSpecific
+{
+       Glib::RefPtr<Gtk::ActionGroup> action_group;
+
+protected:
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+       void refresh_selected_param();
+
+public:
+
+
+       Dock_Params();
+       ~Dock_Params();
+}; // END of Dock_Keyframes
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dock_timetrack.cpp b/synfig-studio/src/gui/docks/dock_timetrack.cpp
new file mode 100644 (file)
index 0000000..61ba14d
--- /dev/null
@@ -0,0 +1,494 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dock_timetrack.cpp
+**     \brief Template File
+**
+**     $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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dock_timetrack.h"
+#include "app.h"
+
+#include <gtkmm/scrolledwindow.h>
+#include <cassert>
+#include "instance.h"
+#include <sigc++/signal.h>
+#include <sigc++/hide.h>
+#include <sigc++/slot.h>
+#include "canvasview.h"
+#include "layerparamtreestore.h"
+#include "workarea.h"
+#include "widgets/widget_timeslider.h"
+#include "widgets/widget_keyframe_list.h"
+#include "layerparamtreestore.h"
+#include "general.h"
+#include <synfig/timepointcollect.h>
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === C L A S S E S ======================================================= */
+
+class TimeTrackView : public Gtk::TreeView
+{
+       CellRenderer_TimeTrack *cellrenderer_time_track;
+
+       Glib::RefPtr<LayerParamTreeStore> param_tree_store_;
+
+       Gtk::TreeView *mimic_tree_view;
+public:
+
+       sigc::signal<void,synfigapp::ValueDesc,std::set<synfig::Waypoint, std::less<UniqueID> >,int> signal_waypoint_clicked_timetrackview;
+
+       LayerParamTreeStore::Model model;
+
+       void set_canvas_view(handle<CanvasView> canvas_view)
+       {
+               cellrenderer_time_track->set_adjustment(canvas_view->time_adjustment());
+       }
+
+       TimeTrackView()
+       {
+               int label_index(append_column_editable(_("Name"),model.label));
+               Gtk::TreeView::Column* label_column = get_column(label_index-1);
+
+               {       // --- T I M E   T R A C K --------------------------------------------
+                       Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Time Track")) );
+
+                       // 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_cellrenderer().connect(sigc::mem_fun(*this, &TimeTrackView::on_waypoint_clicked_timetrackview));
+                       cellrenderer_time_track->signal_waypoint_changed().connect(sigc::mem_fun(*this, &TimeTrackView::on_waypoint_changed) );
+                       column->add_attribute(cellrenderer_time_track->property_value_desc(), model.value_desc);
+                       column->add_attribute(cellrenderer_time_track->property_canvas(), model.canvas);
+                       //column->add_attribute(cellrenderer_time_track->property_visible(), model.is_value_node);
+
+                       //column->pack_start(*cellrenderer_time_track);
+
+                       // Finish setting up the column
+                       column->set_reorderable();
+                       column->set_resizable();
+                       column->set_min_width(200);
+
+                       append_column(*column);
+               }
+               set_rules_hint();
+
+               set_expander_column(*label_column);
+               label_column->set_visible(false);
+               set_headers_visible(false);
+               set_size_request(-1,64);
+       }
+
+       bool
+       on_event(GdkEvent *event)
+       {
+               switch(event->type)
+               {
+               case GDK_SCROLL:
+                       if(mimic_tree_view)
+                       {
+                               if(event->scroll.direction==GDK_SCROLL_DOWN)
+                               {
+                                       mimic_tree_view->get_vadjustment()->set_value(
+                                               std::min(
+                                                       mimic_tree_view->get_vadjustment()->get_value()+
+                                                       mimic_tree_view->get_vadjustment()->get_step_increment(),
+                                                       mimic_tree_view->get_vadjustment()->get_upper()-
+                                                       mimic_tree_view->get_vadjustment()->get_page_size()
+                                               )
+                                       );
+                                       mimic_tree_view->get_vadjustment()->value_changed();
+                               }
+                               else if(event->scroll.direction==GDK_SCROLL_UP)
+                               {
+                                       mimic_tree_view->get_vadjustment()->set_value(
+                                               std::max(
+                                                       mimic_tree_view->get_vadjustment()->get_value()-
+                                                       mimic_tree_view->get_vadjustment()->get_step_increment(),
+                                                       mimic_tree_view->get_vadjustment()->get_lower()
+                                               )
+                                       );
+                                       mimic_tree_view->get_vadjustment()->value_changed();
+                               }
+                       }
+                       break;
+               case GDK_BUTTON_PRESS:
+                       {
+                               Gtk::TreeModel::Path path;
+                               Gtk::TreeViewColumn *column;
+                               int cell_x, cell_y;
+                               if(!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 = *(get_model()->get_iter(path));
+
+                               if(column && column->get_first_cell_renderer()==cellrenderer_time_track)
+                               {
+                                       Gdk::Rectangle rect;
+                                       get_cell_area(path,*column,rect);
+                                       cellrenderer_time_track->property_value_desc()=row[model.value_desc];
+                                       cellrenderer_time_track->property_canvas()=row[model.canvas];
+                                       cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
+                                       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);
+                               }
+                       }
+                       break;
+
+               case GDK_MOTION_NOTIFY:
+                       {
+                               Gtk::TreeModel::Path path;
+                               Gtk::TreeViewColumn *column;
+                               int cell_x, cell_y;
+                               if(!get_path_at_pos(
+                                       (int)event->motion.x,(int)event->motion.y,      // x, y
+                                       path, // TreeModel::Path&
+                                       column, //TreeViewColumn*&
+                                       cell_x,cell_y //int&cell_x,int&cell_y
+                                       )
+                               ) break;
+
+                               if(!get_model()->get_iter(path))
+                                       break;
+
+                               Gtk::TreeRow row = *(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())
+                               {
+                                       Gdk::Rectangle rect;
+                                       get_cell_area(path,*column,rect);
+                                       cellrenderer_time_track->property_value_desc()=row[model.value_desc];
+                                       cellrenderer_time_track->property_canvas()=row[model.canvas];
+                                       cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
+                                       queue_draw();
+                                       //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)
+                               {
+                                       tooltips_.unset_tip(*this);
+                                       Glib::ustring tooltips_string(row[layer_model.tooltip]);
+                                       last_tooltip_path=path;
+                                       if(!tooltips_string.empty())
+                                       {
+                                               tooltips_.set_tip(*this,tooltips_string);
+                                               tooltips_.force_window();
+                                       }
+                               }
+*/
+                               return true;
+                       }
+                       break;
+               case GDK_BUTTON_RELEASE:
+                       {
+                               Gtk::TreeModel::Path path;
+                               Gtk::TreeViewColumn *column;
+                               int cell_x, cell_y;
+                               if(!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;
+
+                               if(!get_model()->get_iter(path))
+                                       break;
+
+                               Gtk::TreeRow row = *(get_model()->get_iter(path));
+
+                               if(column && cellrenderer_time_track==column->get_first_cell_renderer())
+                               {
+                                       Gdk::Rectangle rect;
+                                       get_cell_area(path,*column,rect);
+                                       cellrenderer_time_track->property_value_desc()=row[model.value_desc];
+                                       cellrenderer_time_track->property_canvas()=row[model.canvas];
+                                       cellrenderer_time_track->activate(event,*this,path.to_string(),rect,rect,Gtk::CellRendererState());
+                                       queue_draw();
+                                       queue_draw_area(rect.get_x(),rect.get_y(),rect.get_width(),rect.get_height());
+                                       return true;
+                               }
+                       }
+                       break;
+               default:
+                       break;
+               }
+               mimic_resync();
+               return Gtk::TreeView::on_event(event);
+       }
+
+       void
+       queue_draw_msg()
+       {
+               synfig::info("*************QUEUE_DRAW***************** (time track view)");
+               Widget::queue_draw();
+       }
+       void set_model(Glib::RefPtr<LayerParamTreeStore> store)
+       {
+               Gtk::TreeView::set_model(store);
+               param_tree_store_=store;
+               cellrenderer_time_track->set_canvas_interface(param_tree_store_->canvas_interface());
+               store->signal_changed().connect(sigc::mem_fun(*this, &TimeTrackView::queue_draw));
+       }
+
+       void
+       on_waypoint_changed( synfig::Waypoint waypoint , synfig::ValueNode::Handle value_node)
+       {
+               // \todo is this code used?
+               assert(0);
+
+               synfigapp::Action::ParamList param_list;
+               param_list.add("canvas",param_tree_store_->canvas_interface()->get_canvas());
+               param_list.add("canvas_interface",param_tree_store_->canvas_interface());
+               param_list.add("value_node",value_node);
+               param_list.add("waypoint",waypoint);
+       //      param_list.add("time",canvas_interface()->get_time());
+
+               etl::handle<studio::Instance>::cast_static(param_tree_store_->canvas_interface()->get_instance())->process_action("WaypointSetSmart", param_list);
+       }
+
+       void mimic(Gtk::TreeView *param_tree_view)
+       {
+               mimic_tree_view=param_tree_view;
+               param_tree_view->signal_row_expanded().connect(
+                       sigc::hide<0>(
+                       sigc::hide_return(
+                               sigc::bind<-1>(
+                                       sigc::mem_fun(
+                                               *this,
+                                               &Gtk::TreeView::expand_row
+                                       ),
+                                       false
+                               )
+                       ))
+               );
+               param_tree_view->signal_row_collapsed().connect(
+                       sigc::hide<0>(
+                       sigc::hide_return(
+                                       sigc::mem_fun(
+                                               *this,
+                                               &Gtk::TreeView::collapse_row
+                                       )
+                       ))
+               );
+               mimic_resync();
+       }
+
+       void mimic_resync()
+       {
+               if(mimic_tree_view)
+               {
+                       Gtk::Adjustment &adjustment(*mimic_tree_view->get_vadjustment());
+                       set_vadjustment(adjustment);
+
+                       if(adjustment.get_page_size()>get_height())
+                               adjustment.set_page_size(get_height());
+
+                       int row_height = 0;
+                       if(getenv("SYNFIG_TIMETRACK_ROW_HEIGHT"))
+                               row_height = atoi(getenv("SYNFIG_TIMETRACK_ROW_HEIGHT"));
+                       if (row_height < 3)
+                               row_height = 18;
+
+                       cellrenderer_time_track->set_fixed_size(-1,row_height);
+               }
+       }
+
+       void
+       on_waypoint_clicked_timetrackview(const etl::handle<synfig::Node>& node,
+                                                                         const synfig::Time& time,
+                                                                         const synfig::Time& time_offset __attribute__ ((unused)),
+                                                                         int button)
+       {
+               std::set<synfig::Waypoint, std::less<UniqueID> > waypoint_set;
+               synfig::waypoint_collect(waypoint_set,time,node);
+
+               synfigapp::ValueDesc value_desc;
+
+               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[model.value_desc]);
+               }
+
+               if (!waypoint_set.empty())
+                       signal_waypoint_clicked_timetrackview(value_desc,waypoint_set,button);
+       }
+};
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dock_Timetrack::Dock_Timetrack():
+       Dock_CanvasSpecific("timetrack",_("Timetrack"),Gtk::StockID("synfig-timetrack"))
+{
+       table_=0;
+       widget_timeslider_= new Widget_Timeslider();
+       widget_kf_list_= new Widget_Keyframe_List();
+
+       int header_height = 0;
+       if(getenv("SYNFIG_TIMETRACK_HEADER_HEIGHT"))
+               header_height = atoi(getenv("SYNFIG_TIMETRACK_HEADER_HEIGHT"));
+       if (header_height < 3)
+               header_height = 24;
+
+       widget_timeslider_->set_size_request(-1,header_height-header_height/3+1);
+       widget_kf_list_->set_size_request(-1,header_height/3+1);
+
+       hscrollbar_=new Gtk::HScrollbar();
+       vscrollbar_=new Gtk::VScrollbar();
+}
+
+Dock_Timetrack::~Dock_Timetrack()
+{
+       if(table_)delete table_;
+       delete hscrollbar_;
+       delete vscrollbar_;
+       delete widget_timeslider_;
+       delete widget_kf_list_;
+}
+
+void
+Dock_Timetrack::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       LayerParamTreeStore::Model model;
+
+       Glib::RefPtr<LayerParamTreeStore> tree_store(
+               Glib::RefPtr<LayerParamTreeStore>::cast_dynamic(
+                       canvas_view->get_tree_model("params")
+               )
+       );
+
+       TimeTrackView* tree_view(new TimeTrackView());
+       tree_view->set_canvas_view(canvas_view);
+       tree_view->set_model(tree_store);
+       Gtk::TreeView* param_tree_view(dynamic_cast<Gtk::TreeView*>(canvas_view->get_ext_widget("params")));
+       tree_view->mimic(param_tree_view);
+
+       tree_view->signal_waypoint_clicked_timetrackview.connect(sigc::mem_fun(*canvas_view, &studio::CanvasView::on_waypoint_clicked_canvasview));
+
+       canvas_view->time_adjustment().signal_value_changed().connect(sigc::mem_fun(*tree_view,&Gtk::TreeView::queue_draw));
+       canvas_view->time_adjustment().signal_changed().connect(sigc::mem_fun(*tree_view,&Gtk::TreeView::queue_draw));
+
+       canvas_view->set_ext_widget(get_name(),tree_view);
+}
+
+void
+Dock_Timetrack::refresh_selected_param()
+{
+/*     Gtk::TreeView* tree_view(
+               static_cast<Gtk::TreeView*>(get_canvas_view()->get_ext_widget(get_name()))
+       );
+       Gtk::TreeModel::iterator iter(tree_view->get_selection()->get_selected());
+
+       if(iter)
+       {
+               LayerParamTreeStore::Model model;
+               get_canvas_view()->work_area->set_selected_value_node(
+                       (synfig::ValueNode::Handle)(*iter)[model.value_node]
+               );
+       }
+       else
+       {
+               get_canvas_view()->work_area->set_selected_value_node(0);
+       }
+*/
+}
+
+void
+Dock_Timetrack::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
+{
+       if(table_)
+       {
+               table_->hide();
+               delete table_;
+               hscrollbar_->unset_adjustment();
+               vscrollbar_->unset_adjustment();
+               //widget_timeslider_->unset_adjustment();
+               table_=0;
+       }
+
+       if(canvas_view)
+       {
+               TimeTrackView* tree_view(dynamic_cast<TimeTrackView*>(canvas_view->get_ext_widget(get_name())));
+       Gtk::TreeView* param_tree_view(dynamic_cast<Gtk::TreeView*>(canvas_view->get_ext_widget("params")));
+       tree_view->set_vadjustment(*param_tree_view->get_vadjustment());
+
+               assert(tree_view);
+
+
+               widget_timeslider_->set_time_adjustment(&canvas_view->time_adjustment());
+               widget_timeslider_->set_bounds_adjustment(&canvas_view->time_window_adjustment());
+               widget_timeslider_->set_global_fps(canvas_view->get_canvas()->rend_desc().get_frame_rate());
+
+               widget_kf_list_->set_time_adjustment(&canvas_view->time_adjustment());
+               widget_kf_list_->set_canvas_interface(canvas_view->canvas_interface());
+
+               vscrollbar_->set_adjustment(*tree_view->get_vadjustment());
+               hscrollbar_->set_adjustment(canvas_view->time_window_adjustment());
+               table_=new Gtk::Table(2,3);
+               table_->attach(*widget_timeslider_, 0, 1, 1, 2, Gtk::FILL|Gtk::SHRINK, Gtk::FILL|Gtk::SHRINK);
+               table_->attach(*widget_kf_list_, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::SHRINK);
+               table_->attach(*tree_view, 0, 1, 2, 3, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
+               table_->attach(*hscrollbar_, 0, 1, 3, 4, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::SHRINK);
+               table_->attach(*vscrollbar_, 1, 2, 0, 3, Gtk::FILL|Gtk::SHRINK, Gtk::FILL|Gtk::EXPAND);
+               add(*table_);
+
+               //add(*last_widget_curves_);
+               table_->show_all();
+               show_all();
+       }
+       else
+       {
+               //clear_previous();
+       }
+}
diff --git a/synfig-studio/src/gui/docks/dock_timetrack.h b/synfig-studio/src/gui/docks/dock_timetrack.h
new file mode 100644 (file)
index 0000000..5525ee6
--- /dev/null
@@ -0,0 +1,71 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dock_timetrack.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**  Copyright (c) 2009 Carlos López
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_TIMETRACK_H
+#define __SYNFIG_STUDIO_DOCK_TIMETRACK_H
+
+/* === H E A D E R S ======================================================= */
+
+#include "docks/dockable.h"
+#include <gtkmm/treeview.h>
+#include "instance.h"
+#include "docks/dock_canvasspecific.h"
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+class Widget_Timeslider;
+class Widget_Keyframe_List;
+
+class Dock_Timetrack : public Dock_CanvasSpecific
+{
+       Gtk::HScrollbar* hscrollbar_;
+       Gtk::VScrollbar* vscrollbar_;
+       Widget_Timeslider* widget_timeslider_;
+       Widget_Keyframe_List* widget_kf_list_;
+       Gtk::Table* table_;
+
+protected:
+       virtual void init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+       virtual void changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view);
+
+       void refresh_selected_param();
+
+public:
+
+
+       Dock_Timetrack();
+       ~Dock_Timetrack();
+}; // END of Dock_Timetrack
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dockable.cpp b/synfig-studio/src/gui/docks/dockable.cpp
new file mode 100644 (file)
index 0000000..1baeb41
--- /dev/null
@@ -0,0 +1,380 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dockable.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "app.h"
+#include <sigc++/hide.h>
+
+#include "docks/dockable.h"
+#include "docks/dockmanager.h"
+#include "docks/dockbook.h"
+#include "docks/dockdialog.h"
+#include <synfig/general.h>
+#include <gtkmm/table.h>
+#include <gtk/gtk.h>
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+#ifdef WIN32
+#      ifdef IMAGE_DIR
+#              undef IMAGE_DIR
+#              define IMAGE_DIR "share\\pixmaps"
+#      endif
+#endif
+
+#ifndef IMAGE_DIR
+#      define IMAGE_DIR "/usr/local/share/pixmaps"
+#endif
+
+#ifndef IMAGE_EXT
+#      define IMAGE_EXT        "png"
+#endif
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Dockable::Dockable(const synfig::String& name,const synfig::String& local_name,Gtk::StockID stock_id_):
+//     Gtk::Window(Gtk::WINDOW_TOPLEVEL),
+       name_(name),
+       local_name_(local_name),
+//     dialog_settings(this,name),
+       title_label_(local_name,Gtk::ALIGN_LEFT),
+       stock_id_(stock_id_)
+{
+       parent_=0;
+       scrolled_=0;
+
+       use_scrolled_=true;
+
+       attach_dnd_to(title_label_);
+
+       toolbar_=0;
+       //button_box_.show();
+
+       Gtk::Table* table(this);
+
+       {
+               title_label_.set_padding(0,0);
+               //title_label_.show();
+               Gtk::EventBox* event_box(manage(new Gtk::EventBox()));
+               event_box->set_border_width(0);
+               event_box->add(title_label_);
+               //table->attach(*event_box, 0, 1, 0,1, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
+
+               header_box_.pack_start(*event_box);
+
+               attach_dnd_to(*event_box);
+               event_box->show();
+       //      event_box->set_events(Gdk::ALL_EVENTS_MASK); //!< \todo change this to only allow what is necessary for DnD
+
+
+               Gtk::Button* bttn_close(manage(new Gtk::Button(_("X"))));
+               //table->attach(*bttn_close, 1, 2, 0,1, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
+               header_box_.pack_end(*bttn_close,false,false);
+               bttn_close->show();
+               bttn_close->set_relief(Gtk::RELIEF_NONE);
+               bttn_close->signal_clicked().connect(sigc::mem_fun(*this,&Dockable::detach));
+               bttn_close->set_border_width(0);
+               dynamic_cast<Gtk::Misc*>(bttn_close->get_child())->set_padding(0,0);
+       }
+
+       prev_widget_=manage(new Gtk::Label(" "));
+
+       //table->attach(header_box_, 0, 1, 0,1, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
+       table->attach(*prev_widget_, 0, 1, 1,2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+       //table->attach(*toolbar_, 0, 1, 2,3, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
+       set_toolbar(*manage(new Gtk::Toolbar));
+       table->show();
+
+       prev_widget_->show();
+
+       set_size_request(175,120);
+
+}
+
+Dockable::~Dockable()
+{
+       if(scrolled_)
+       {
+               delete scrolled_;
+               scrolled_=0;
+       }
+}
+
+void
+Dockable::attach_dnd_to(Gtk::Widget& widget)
+{
+       std::list<Gtk::TargetEntry> listTargets;
+       listTargets.push_back( Gtk::TargetEntry("DOCK") );
+
+       widget.drag_source_set(listTargets);
+       widget.drag_source_set_icon(get_stock_id());
+       widget.drag_dest_set(listTargets);
+
+
+       widget.signal_drag_data_get().connect(sigc::mem_fun(*this,&Dockable::on_drag_data_get));
+       widget.signal_drag_end().connect(sigc::mem_fun(*this,&Dockable::on_drag_end));
+       widget.signal_drag_begin().connect(sigc::mem_fun(*this,&Dockable::on_drag_begin));
+       widget.signal_drag_data_received().connect(sigc::mem_fun(*this,&Dockable::on_drag_data_received));
+}
+
+void
+Dockable::on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time)
+{
+       if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
+       {
+               Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data())));
+
+               if(dockable.parent_ != parent_)
+                       parent_->add(dockable,parent_->page_num(*this));
+               else
+                       parent_->reorder_child(dockable,parent_->page_num(*this));
+               dockable.present();
+               context->drag_finish(true, false, time);
+               return;
+       }
+
+       context->drag_finish(false, false, time);
+}
+
+void
+Dockable::on_drag_end(const Glib::RefPtr<Gdk::DragContext>&/*context*/)
+{
+       if(!dnd_success_)
+       {
+               detach();
+               present();
+       }
+}
+
+void
+Dockable::on_drag_begin(const Glib::RefPtr<Gdk::DragContext>&/*context*/)
+{
+       dnd_success_=false;
+}
+
+void
+Dockable::on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>&, Gtk::SelectionData& selection_data, guint /*info*/, guint /*time*/)
+{
+       Dockable* tmp(this);
+       dnd_success_=true;
+
+       selection_data.set(8, reinterpret_cast<const guchar*>(&tmp), 4);
+}
+
+void
+Dockable::set_local_name(const synfig::String& local_name)
+{
+       //set_title(local_name);
+       title_label_.set_text(local_name);
+}
+
+void
+Dockable::clear()
+{
+       //if(!toolbar_->children().empty())
+       //      toolbar_->children().clear();
+       set_toolbar(*manage(new Gtk::Toolbar));
+
+}
+
+void
+Dockable::set_toolbar(Gtk::Toolbar& toolbar)
+{
+       if(toolbar_)remove(*toolbar_);
+       toolbar_=0;
+       toolbar_=&toolbar;
+       if(toolbar_)
+       {
+               attach(*toolbar_, 0, 1, 2,3, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0);
+               gtk_toolbar_set_icon_size(toolbar_->gobj(),GtkIconSize(1)/*GTK_ICON_SIZE_MENU*/);
+               toolbar_->show();
+       }
+}
+
+bool
+Dockable::clear_previous()
+{
+       prev_widget_=0;
+       prev_widget_delete_connection.disconnect();
+       return false;
+}
+
+void
+Dockable::add(Gtk::Widget& x)
+{
+       if(prev_widget_)
+       {
+               remove(*prev_widget_);
+               clear_previous();
+       }
+
+       if(scrolled_)
+       {
+               delete scrolled_;
+               scrolled_=0;
+       }
+
+       if(use_scrolled_)
+       {
+               scrolled_=new Gtk::ScrolledWindow;
+
+               scrolled_->add(x);
+
+               attach(*scrolled_, 0, 1, 1,2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+
+               x.show();
+
+               scrolled_->show();
+
+               scrolled_->set_shadow_type(Gtk::SHADOW_NONE);
+               scrolled_->set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC);
+               prev_widget_=scrolled_;
+       }
+       else
+       {
+               attach(x, 0, 1, 1,2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+               x.show();
+               prev_widget_=&x;
+       }
+       prev_widget_delete_connection=prev_widget_->signal_delete_event().connect(
+               sigc::hide(
+                       sigc::mem_fun(
+                               *this,
+                               &Dockable::clear_previous
+                       )
+               )
+       );
+}
+
+Gtk::ToolButton*
+Dockable::add_button(const Gtk::StockID& stock_id, const synfig::String& tooltip)
+{
+       if(!toolbar_)
+               set_toolbar(*manage(new Gtk::Toolbar));
+
+       //Gtk::IconSize iconsize(4);
+       //Gtk::IconSize iconsize(Gtk::IconSize::from_name("synfig-small_icon"));
+
+       Gtk::ToolButton* ret(manage(new Gtk::ToolButton(stock_id)));
+       //Gtk::Image* icon(manage(new Gtk::Image(stock_id,iconsize)));
+       //ret->add(*icon);
+       //ret->set_relief(Gtk::RELIEF_HALF);
+       //ret->set_relief(Gtk::RELIEF_NONE);
+       ret->set_label(tooltip);
+       if (toolbar_->get_tooltips_object())
+               toolbar_->get_tooltips_object()->set_tip(*ret,tooltip);
+
+       ret->show();
+       //icon->show();
+       toolbar_->set_tooltips(true);
+
+       toolbar_->append(*ret);
+       //button_box_.pack_start(*ret,false,false);
+       //get_action_area()->pack_start(*ret,false,false);
+       //add_action_widget(*ret,1);
+       return ret;
+}
+
+
+void
+Dockable::detach()
+{
+       if(parent_)
+               parent_->remove(*this);
+}
+
+void
+Dockable::present()
+{
+       if(parent_)
+       {
+               parent_->set_current_page(parent_->page_num(*this));
+               parent_->present();
+       }
+       else
+       {
+               DockDialog* dock_dialog(new DockDialog());
+               dock_dialog->get_dock_book().add(*this);
+/*             //hack: always display composition selector on top of canvas browser
+               if(get_name()=="canvases")
+                       dock_dialog->set_composition_selector(true);
+*/
+               dock_dialog->present();
+       }
+}
+
+Gtk::Widget*
+Dockable::create_tab_label()
+{
+       Gtk::EventBox* event_box(manage(new Gtk::EventBox()));
+
+       attach_dnd_to(*event_box);
+
+       {
+               Gtk::StockID stock_id(get_stock_id());
+               Gtk::StockItem item;
+
+               // Check to make sure the icon is valid
+               if(Gtk::Stock::lookup(stock_id,item))
+               {
+                       Gtk::Image* icon(manage(new Gtk::Image(stock_id,Gtk::IconSize(4))));
+                       event_box->add(*icon);
+                       tooltips_.set_tip(*event_box,get_local_name());
+                       icon->show();
+               }
+               else
+               {
+                       // Bad icon, try to make a label
+
+                       Glib::ustring text(get_local_name());
+
+                       Gtk::Label* label(manage(new Gtk::Label(text)));
+                       event_box->add(*label);
+                       label->show();
+               }
+       }
+
+       return event_box;
+}
diff --git a/synfig-studio/src/gui/docks/dockable.h b/synfig-studio/src/gui/docks/dockable.h
new file mode 100644 (file)
index 0000000..a205c9e
--- /dev/null
@@ -0,0 +1,144 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dockable.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCKABLE_H
+#define __SYNFIG_STUDIO_DOCKABLE_H
+
+/* === H E A D E R S ======================================================= */
+
+#include <gtkmm/stockid.h>
+#include <gtkmm/button.h>
+#include "dialogsettings.h"
+#include <synfig/string.h>
+#include <gtkmm/table.h>
+#include <gtkmm/tooltips.h>
+#include <gtkmm/label.h>
+#include <gtkmm/frame.h>
+#include <gtkmm/handlebox.h>
+#include <gtkmm/box.h>
+#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/toolbar.h>
+#include <gtkmm/toolbutton.h>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class DockManager;
+class DockBook;
+
+class Dockable : public Gtk::Table
+{
+       friend class DockManager;
+       friend class DockBook;
+
+
+       sigc::signal<void> signal_stock_id_changed_;
+       sigc::connection prev_widget_delete_connection;
+protected:
+
+//     DialogSettings dialog_settings;
+
+
+private:
+
+       Gtk::Toolbar *toolbar_;
+
+       synfig::String name_;
+       synfig::String local_name_;
+       Gtk::Tooltips tooltips_;
+       Gtk::Frame frame_;
+       Gtk::Label title_label_;
+       //Gtk::HBox button_box_;
+       Gtk::HBox header_box_;
+
+       //Gtk::HandleBox handle_box_;
+       Gtk::ScrolledWindow *scrolled_;
+       Gtk::Widget *prev_widget_;
+
+       bool use_scrolled_;
+
+       Gtk::StockID stock_id_;
+
+       DockBook* parent_;
+
+       bool dnd_success_;
+
+public:
+
+       void set_toolbar(Gtk::Toolbar& toolbar);
+
+       void set_use_scrolled(bool x) { use_scrolled_=x; }
+
+       Dockable(const synfig::String& name,const synfig::String& local_name,Gtk::StockID stock_id_=Gtk::StockID(" "));
+       ~Dockable();
+
+       sigc::signal<void>& signal_stock_id_changed() { return signal_stock_id_changed_; }
+
+       const synfig::String& get_name()const { return name_; }
+       const synfig::String& get_local_name()const { return local_name_; }
+
+       const Gtk::StockID& get_stock_id()const { return stock_id_; }
+       void set_stock_id(Gtk::StockID x) { stock_id_=x; signal_stock_id_changed()(); }
+
+       void set_local_name(const synfig::String&);
+
+       void clear();
+
+       Gtk::Tooltips& get_tooltips() { return tooltips_; }
+
+       //DialogSettings& settings() { return dialog_settings; }
+       //const DialogSettings& settings()const { return dialog_settings; }
+
+       void add(Gtk::Widget& x);
+
+       Gtk::ToolButton* add_button(const Gtk::StockID& stock_id, const synfig::String& tooltip=synfig::String());
+
+       void detach();
+
+       void present();
+
+       void attach_dnd_to(Gtk::Widget& widget);
+
+       bool clear_previous();
+       virtual Gtk::Widget* create_tab_label();
+
+private:
+
+       void on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>&, Gtk::SelectionData& selection_data, guint info, guint time);
+       void on_drag_end(const Glib::RefPtr<Gdk::DragContext>&context);
+       void on_drag_begin(const Glib::RefPtr<Gdk::DragContext>&context);
+       void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
+
+}; // END of studio::Dockable
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dockbook.cpp b/synfig-studio/src/gui/docks/dockbook.cpp
new file mode 100644 (file)
index 0000000..2e839b3
--- /dev/null
@@ -0,0 +1,253 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dockbook.cpp
+**     \brief Template File
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dockbook.h"
+#include "docks/dockable.h"
+#include "app.h"
+#include "docks/dockmanager.h"
+
+#include <gtkmm/image.h>
+#include <gtkmm/eventbox.h>
+#include <gtkmm/menu.h>
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+DockBook::DockBook()
+{
+       std::list<Gtk::TargetEntry> listTargets;
+       listTargets.push_back( Gtk::TargetEntry("DOCK") );
+
+       drag_dest_set(listTargets);
+       //set_sensitive(true);
+       set_flags(get_flags()|Gtk::RECEIVES_DEFAULT|Gtk::HAS_GRAB);
+       //add_events(Gdk::ALL_EVENTS_MASK);
+       //set_extension_events(Gdk::EXTENSION_EVENTS_ALL);
+       set_show_tabs(true);
+       deleting_=false;
+}
+
+DockBook::~DockBook()
+{
+       deleting_=true;
+       clear();
+}
+
+void
+DockBook::clear()
+{
+       while(get_n_pages())
+               remove(static_cast<Dockable&>(*get_nth_page(get_n_pages()-1)));
+}
+
+void
+DockBook::on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time)
+{
+       if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
+       {
+               Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data())));
+               if(dockable.parent_!=this)
+                       add(dockable);
+               dockable.present();
+               context->drag_finish(true, false, time);
+               return;
+       }
+
+       context->drag_finish(false, false, time);
+}
+
+void
+DockBook::add(Dockable& dockable, int position)
+{
+       dockable.detach();
+
+       if(position==-1)
+               append_page(dockable, " ");
+       else
+               insert_page(dockable, " ", position);
+
+       refresh_tab(&dockable);
+
+       dockable.signal_stock_id_changed().connect(
+               sigc::bind(
+                       sigc::mem_fun(
+                               *this,
+                               &DockBook::refresh_tab
+                       ),
+                       &dockable
+               )
+       );
+
+       dockable.parent_=this;
+
+       dockable.show();
+
+       signal_changed_();
+}
+
+void
+DockBook::refresh_tab(Dockable* dockable)
+{
+       Gtk::Widget* label(dockable->create_tab_label());
+
+       label->signal_button_press_event().connect(
+               sigc::bind(
+                       sigc::mem_fun(
+                               *this,
+                               &DockBook::tab_button_pressed
+                       ),
+                       dockable
+               )
+       );
+
+       set_tab_label(*dockable, *label);
+       label->show();
+}
+
+
+void
+DockBook::remove(Dockable& dockable)
+{
+       dockable.hide();
+       remove_page(dockable);
+       dockable.parent_=0;
+
+       if(!deleting_)
+       {
+               signal_changed_();
+
+               if(get_n_pages()==0)
+                       signal_empty()();
+       }
+}
+
+void
+DockBook::present()
+{
+       show();
+}
+
+synfig::String
+DockBook::get_local_contents()const
+{
+       synfig::String ret;
+
+       for(int i(0);i!=const_cast<DockBook*>(this)->get_n_pages();i++)
+       {
+               Dockable& dockable(static_cast<Dockable&>(*const_cast<DockBook*>(this)->get_nth_page(i)));
+
+               if(i)
+                       ret+=", ";
+               ret+=dockable.get_local_name();
+       }
+
+       return ret;
+}
+
+synfig::String
+DockBook::get_contents()const
+{
+       synfig::String ret;
+
+       for(int i(0);i!=const_cast<DockBook*>(this)->get_n_pages();i++)
+       {
+               Dockable& dockable(static_cast<Dockable&>(*const_cast<DockBook*>(this)->get_nth_page(i)));
+
+               if(i)
+                       ret+=' ';
+               ret+=dockable.get_name();
+       }
+
+       return ret;
+}
+
+void
+DockBook::set_contents(const synfig::String& x)
+{
+       synfig::String str(x);
+       while(!str.empty())
+       {
+               synfig::String::size_type separator=str.find_first_of(' ');
+               synfig::String dock;
+               if(separator==synfig::String::npos)
+               {
+                       dock=str;
+                       str.clear();
+               }
+               else
+               {
+                       dock=String(str.begin(),str.begin()+separator);
+                       str=String(str.begin()+separator+1,str.end());
+               }
+
+               try
+               {
+                       add(App::dock_manager->find_dockable(dock));
+               }catch(...) { }
+       }
+}
+
+bool
+DockBook::tab_button_pressed(GdkEventButton* event, Dockable* dockable)
+{
+       if(event->button!=3)
+               return false;
+
+       Gtk::Menu *tabmenu=manage(new class Gtk::Menu());
+       tabmenu->signal_hide().connect(sigc::bind(sigc::ptr_fun(&delete_widget), tabmenu));
+
+       tabmenu->items().push_back(
+               Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-close"),
+                       sigc::mem_fun(*dockable,&Dockable::detach)
+               )
+       );
+
+       tabmenu->popup(event->button,gtk_get_current_event_time());
+
+       return true;
+}
diff --git a/synfig-studio/src/gui/docks/dockbook.h b/synfig-studio/src/gui/docks/dockbook.h
new file mode 100644 (file)
index 0000000..ded4a31
--- /dev/null
@@ -0,0 +1,89 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dockbook.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCKBOOK_H
+#define __SYNFIG_STUDIO_DOCKBOOK_H
+
+/* === H E A D E R S ======================================================= */
+
+#include <gtkmm/notebook.h>
+#include <synfig/string.h>
+#include <gtkmm/tooltips.h>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class DockManager;
+class Dockable;
+
+class DockBook : public Gtk::Notebook
+{
+       friend class DockManager;
+       friend class Dockable;
+
+       sigc::signal<void> signal_empty_;
+       sigc::signal<void> signal_changed_;
+
+       Gtk::Tooltips tooltips_;
+
+       bool deleting_;
+
+protected:
+public:
+       DockBook();
+       ~DockBook();
+
+       sigc::signal<void>& signal_empty() { return signal_empty_; }
+       sigc::signal<void>& signal_changed() { return signal_changed_; }
+
+       void add(Dockable& dockable, int position=-1);
+       void remove(Dockable& dockable);
+
+       void present();
+
+       void clear();
+
+       synfig::String get_local_contents()const;
+
+       synfig::String get_contents()const;
+       void set_contents(const synfig::String& x);
+
+       void refresh_tabs_headers();
+
+       void refresh_tab(Dockable*);
+
+       bool tab_button_pressed(GdkEventButton* event, Dockable* dockable);
+       void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
+}; // END of studio::DockBook
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dockdialog.cpp b/synfig-studio/src/gui/docks/dockdialog.cpp
new file mode 100644 (file)
index 0000000..4187a9d
--- /dev/null
@@ -0,0 +1,564 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dockdialog.cpp
+**     \brief Template File
+**
+**     $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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "app.h"
+#include <sigc++/adaptors/hide.h>
+
+#include "docks/dockdialog.h"
+#include "docks/dockbook.h"
+#include "docks/dockmanager.h"
+#include "toolbox.h"
+#include "widgets/widget_compselect.h"
+#include <synfig/general.h>
+#include <synfig/uniqueid.h>
+#include <gtkmm/table.h>
+#include <sigc++/hide.h>
+#include <sigc++/slot.h>
+#include <sigc++/retype_return.h>
+#include <sigc++/retype.h>
+#include "canvasview.h"
+#include <gtkmm/paned.h>
+#include <gtkmm/box.h>
+#include <synfigapp/main.h>
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+#define GRAB_HINT_DATA(y,default)      { \
+               String x; \
+               if(synfigapp::Main::settings().get_value(String("pref.")+y+"_hints",x)) \
+               { \
+                       set_type_hint((Gdk::WindowTypeHint)atoi(x.c_str()));    \
+               } else {\
+                       set_type_hint(default); \
+               } \
+       }
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+DockDialog::DockDialog():
+       Gtk::Window(Gtk::WINDOW_TOPLEVEL)
+{
+       composition_selector_=false;
+       is_deleting=false;
+       is_horizontal=false;
+       last_dock_book=0;
+       box=0;
+
+       widget_comp_select=new Widget_CompSelect();
+
+       // Give ourselves an ID that is most likely unique
+       set_id(synfig::UniqueID().get_uid()^reinterpret_cast<long>(this));
+
+       set_role(strprintf("dock_dialog_%d",get_id()));
+       GRAB_HINT_DATA(
+               "dock_dialog",
+#ifdef __APPLE__
+               Gdk::WINDOW_TYPE_HINT_NORMAL
+#else
+               Gdk::WINDOW_TYPE_HINT_UTILITY
+#endif
+       );
+       set_keep_above(false);
+
+       //! \todo can we set dialog windows transient for all normal windows, not just the toolbox?
+       //! paragraph 3 of http://standards.freedesktop.org/wm-spec/1.3/ar01s07.html suggests we can
+       // this seems to have bad effects on KDE, so leave it disabled by default
+       if(getenv("SYNFIG_TRANSIENT_DIALOGS"))
+               set_transient_for(*App::toolbox);
+
+       // Set up the window
+       //set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY);
+       set_title(_("Dock Panel"));
+
+       // Register with the dock manager
+       App::dock_manager->dock_dialog_list_.push_back(this);
+
+
+       // connect our signals
+       signal_delete_event().connect(
+               sigc::hide(
+                       sigc::mem_fun(*this,&DockDialog::close)
+               )
+       );
+
+/*
+       App::signal_canvas_view_focus().connect(
+               sigc::hide(
+                       sigc::mem_fun(
+                               *this,
+                               &DockDialog::refresh_accel_group
+                       )
+               )
+       );
+*/
+
+       add_accel_group(App::ui_manager()->get_accel_group());
+       App::signal_present_all().connect(sigc::mem_fun0(*this,&DockDialog::present));
+
+}
+
+DockDialog::~DockDialog()
+{
+       empty_sig.disconnect();
+
+       is_deleting=true;
+
+       // Remove all of the dock books
+       for(;!dock_book_list.empty();dock_book_list.pop_front())
+       {
+               dock_book_list.front()->clear();
+
+               //! \todo Fix this UGLY HACK
+               // The following line really should be uncommented,
+               // but it causes crashes. Without it, a small
+               // memory hole is created--but at least it doesn't crash
+               // delete dock_book_list.front();
+
+               // Oddly enough, the following line should
+               // theoretically do the same thing after this
+               // class is destroyed, but it doesn't seem to
+               // cause a crash.  It does, however, trigger this warning:
+               //
+               //   A floating object was finalized. This means that someone
+               //   called g_object_unref() on an object that had only a
+               //   floating reference; the initial floating reference is not
+               //   owned by anyone and must be removed with g_object_ref_sink().
+               //
+               // manage(dock_book_list.front());
+       }
+
+       // Remove us from the dock manager
+       if(App::dock_manager)try{
+               std::list<DockDialog*>::iterator iter;
+               for(iter=App::dock_manager->dock_dialog_list_.begin();iter!=App::dock_manager->dock_dialog_list_.end();++iter)
+                       if(*iter==this)
+                       {
+                               App::dock_manager->dock_dialog_list_.erase(iter);
+                               break;
+                       }
+       }
+       catch(...)
+       {
+               synfig::warning("DockDialog::~DockDialog(): Exception thrown when trying to remove from dock manager...?");
+       }
+
+       delete widget_comp_select;
+}
+
+void
+DockDialog::drop_on_prepend(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time)
+{
+       if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
+       {
+               Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data())));
+               prepend_dock_book()->add(dockable);
+               context->drag_finish(true, false, time);
+               return;
+       }
+
+       context->drag_finish(false, false, time);
+}
+
+void
+DockDialog::drop_on_append(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time)
+{
+       if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8))
+       {
+               Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data())));
+               append_dock_book()->add(dockable);
+               context->drag_finish(true, false, time);
+               return;
+       }
+
+       context->drag_finish(false, false, time);
+}
+
+
+void
+DockDialog::on_hide()
+{
+       Gtk::Window::on_hide();
+       close();
+}
+
+DockBook*
+DockDialog::prepend_dock_book()
+{
+       if(is_deleting)return 0;
+
+       dock_book_list.push_front(new DockBook);
+       last_dock_book=dock_book_list.front();
+
+
+       last_dock_book->signal_empty().connect(
+               sigc::bind(
+                       sigc::mem_fun(*this,&DockDialog::erase_dock_book),
+                       last_dock_book
+               )
+       );
+
+       dock_book_sizes_.insert(dock_book_sizes_.begin(),225);
+       refresh();
+       return last_dock_book;
+}
+
+DockBook*
+DockDialog::append_dock_book()
+{
+       if(is_deleting)return 0;
+
+       dock_book_list.push_back(new DockBook);
+       last_dock_book=dock_book_list.back();
+       last_dock_book->signal_empty().connect(
+               sigc::bind(
+                       sigc::mem_fun(*this,&DockDialog::erase_dock_book),
+                       last_dock_book
+               )
+       );
+       last_dock_book->signal_changed().connect(
+               sigc::mem_fun(*this,&DockDialog::refresh_title)
+       );
+       last_dock_book->signal_changed().connect(
+               sigc::mem_fun(*this,&DockDialog::refresh_title)
+       );
+       dock_book_sizes_.push_back(225);
+
+       //last_dock_book->show();
+       refresh();
+       return last_dock_book;
+}
+
+void
+DockDialog::erase_dock_book(DockBook* dock_book)
+{
+       if(is_deleting)return;
+
+       std::list<DockBook*>::iterator iter;
+       for(iter=dock_book_list.begin();iter!=dock_book_list.end();++iter)
+               if(*iter==dock_book)
+               {
+                       dock_book_list.erase(iter);
+
+                       if(dock_book_list.empty())
+                       {
+                               last_dock_book=0;
+                               close();
+                               return;
+                       }
+                       else
+                       {
+                               if(last_dock_book==dock_book)
+                                       last_dock_book=dock_book_list.front();
+                       }
+
+                       refresh();
+
+                       return;
+               }
+}
+
+void
+DockDialog::refresh()
+{
+       // synfig::info("dock_book_list.size()=%d",dock_book_list.size());
+       //remove();
+
+       if(dock_book_list.empty())
+               return;
+
+       if(box)delete box;
+       box=(manage(is_horizontal?(Gtk::Box*)new Gtk::HBox:(Gtk::Box*)new Gtk::VBox));
+       add(*box);
+
+       box->pack_start(*widget_comp_select,false,true);
+
+       Gtk::Button* append_button(manage(new Gtk::Button));
+       Gtk::Button* prepend_button(manage(new Gtk::Button));
+
+       std::list<Gtk::TargetEntry> listTargets;
+       listTargets.push_back( Gtk::TargetEntry("DOCK") );
+
+       append_button->drag_dest_set(listTargets);
+       prepend_button->drag_dest_set(listTargets);
+
+       append_button->signal_drag_data_received().connect(
+               sigc::mem_fun(*this,&DockDialog::drop_on_append)
+       );
+
+       prepend_button->signal_drag_data_received().connect(
+               sigc::mem_fun(*this,&DockDialog::drop_on_prepend)
+       );
+
+       box->pack_start(*prepend_button,false,true);
+       box->pack_end(*append_button,false,true);
+
+       //prepend_button->show();
+       //append_button->show();
+       panels_.clear();
+
+       if(dock_book_list.size()==1)
+       {
+               box->pack_start(get_dock_book(),true,true);
+       }
+       else
+       {
+               Gtk::Paned* parent(manage(is_horizontal?(Gtk::Paned*)new Gtk::HPaned:(Gtk::Paned*)new Gtk::VPaned));
+
+               panels_.push_back(parent);
+
+               if(panels_.size()<=dock_book_sizes_.size())
+                       panels_.back()->set_position(dock_book_sizes_[panels_.size()-1]);
+               panels_.back()->property_position().signal_changed().connect(
+                       sigc::mem_fun(*this,&DockDialog::rebuild_sizes)
+               );
+               //parent->show();
+               parent->add1(*dock_book_list.front());
+               //dock_book_list.front()->show();
+
+               box->pack_start(*parent,true,true);
+
+               std::list<DockBook*>::iterator iter,next;
+               for(next=dock_book_list.begin(),next++,iter=next++;next!=dock_book_list.end();iter=next++)
+               {
+                       Gtk::Paned* current(manage(is_horizontal?(Gtk::Paned*)new Gtk::HPaned:(Gtk::Paned*)new Gtk::VPaned));
+                       panels_.push_back(current);
+
+                       if(panels_.size()<=dock_book_sizes_.size())
+                               panels_.back()->set_position(dock_book_sizes_[panels_.size()-1]);
+                       panels_.back()->property_position().signal_changed().connect(
+                               sigc::mem_fun(*this,&DockDialog::rebuild_sizes)
+                       );
+
+
+                       parent->add2(*current);
+
+                       current->add1(**iter);
+                       //(*iter)->show();
+                       //current->show();
+
+                       parent=current;
+               }
+               parent->add2(**iter);
+               //(*iter)->show();
+       }
+
+       box->show_all();
+       if(!composition_selector_)
+               widget_comp_select->hide();
+       rebuild_sizes();
+}
+
+void
+DockDialog::rebuild_sizes()
+{
+       unsigned int i=0;
+       dock_book_sizes_.clear();
+       for(i=0;i<panels_.size();i++)
+       {
+               dock_book_sizes_.push_back(panels_[i]->get_position());
+       }
+}
+
+void
+DockDialog::set_dock_book_sizes(const std::vector<int>& new_sizes)
+{
+       unsigned int i=0;
+       for(i=0;i<panels_.size() && i<new_sizes.size();i++)
+       {
+               panels_[i]->set_position(new_sizes[i]);
+       }
+       dock_book_sizes_=new_sizes;
+       //rebuild_sizes();
+}
+
+void
+DockDialog::refresh_accel_group()
+{
+/*
+       if(last_accel_group_)
+       {
+               last_accel_group_->unlock();
+               remove_accel_group(last_accel_group_);
+               last_accel_group_=Glib::RefPtr<Gtk::AccelGroup>();
+       }
+
+       etl::loose_handle<CanvasView> canvas_view(App::get_selected_canvas_view());
+       if(canvas_view)
+       {
+               last_accel_group_=canvas_view->get_accel_group();
+               last_accel_group_->lock();
+               add_accel_group(last_accel_group_);
+       }
+*/
+       etl::loose_handle<CanvasView> canvas_view(App::get_selected_canvas_view());
+       if(canvas_view)
+       {
+               canvas_view->mainmenu.accelerate(*this);
+       }
+}
+
+bool
+DockDialog::close()
+{
+       if (getenv("SYNFIG_DEBUG_DESTRUCTORS"))
+               synfig::info("DockDialog::close(): Deleted");
+
+       empty_sig.disconnect();
+       //get_dock_book().clear();
+       delete this;
+       return true;
+}
+
+DockBook&
+DockDialog::get_dock_book()
+{
+       if(!last_dock_book)
+               return *append_dock_book();
+       return *last_dock_book;
+}
+
+const DockBook&
+DockDialog::get_dock_book()const
+{
+       return *last_dock_book;
+}
+
+
+synfig::String
+DockDialog::get_contents()const
+{
+       synfig::String ret;
+
+       std::list<DockBook*>::const_iterator iter;
+       for(iter=dock_book_list.begin();iter!=dock_book_list.end();++iter)
+       {
+               if(!ret.empty())
+                       ret+=is_horizontal?" | ":" - ";
+               ret+=(*iter)->get_contents();
+       }
+
+
+       return ret;
+}
+
+void
+DockDialog::set_contents(const synfig::String& z)
+{
+       int x,y;
+       get_size(x,y);
+
+       synfig::String str(z);
+       while(!str.empty())
+       {
+               synfig::String::size_type separator=str.find_first_of('-');
+               {
+                       synfig::String::size_type sep2=str.find_first_of('|');
+                       if(separator!=synfig::String::npos || sep2!=synfig::String::npos)
+                       {
+                               if((separator==synfig::String::npos || sep2<separator) && sep2!=synfig::String::npos)
+                               {
+                                       separator=sep2;
+                                       is_horizontal=true;
+                               }
+                               else
+                                       is_horizontal=false;
+                       }
+               }
+
+               synfig::String book_contents;
+               if(separator==synfig::String::npos)
+               {
+                       book_contents=str;
+                       str.clear();
+               }
+               else
+               {
+                       book_contents=String(str.begin(),str.begin()+separator);
+                       str=String(str.begin()+separator+1,str.end());
+               }
+
+               try
+               {
+                       append_dock_book()->set_contents(book_contents);
+               }catch(...) { }
+       }
+
+       resize(x,y);
+}
+
+void
+DockDialog::set_composition_selector(bool x)
+{
+       if(x==get_composition_selector())
+               return;
+       composition_selector_=x;
+       if(x)
+               widget_comp_select->show();
+       else
+               widget_comp_select->hide();
+}
+
+void
+DockDialog::refresh_title()
+{
+       if(is_deleting)return;
+       if(dock_book_list.size())
+       {
+               synfig::String title;
+
+               std::list<DockBook*>::const_iterator iter;
+               for(iter=dock_book_list.begin();iter!=dock_book_list.end();++iter)
+               {
+                       if(!title.empty())
+                               title+=", ";
+                       title+=(*iter)->get_local_contents();
+               }
+               set_title(title);
+       }
+       else
+               set_title(_("Empty Dock Panel"));
+}
diff --git a/synfig-studio/src/gui/docks/dockdialog.h b/synfig-studio/src/gui/docks/dockdialog.h
new file mode 100644 (file)
index 0000000..e1fba30
--- /dev/null
@@ -0,0 +1,128 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dockdialog.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_STUDIO_DOCK_DIALOG_H
+#define __SYNFIG_STUDIO_DOCK_DIALOG_H
+
+/* === H E A D E R S ======================================================= */
+
+#include <gtkmm/stockid.h>
+#include <gtkmm/button.h>
+#include "dialogsettings.h"
+#include <synfig/string.h>
+#include <gtkmm/dialog.h>
+#include <gtkmm/tooltips.h>
+#include <gtkmm/label.h>
+#include <gtkmm/frame.h>
+#include <gtkmm/handlebox.h>
+#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/accelgroup.h>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace Gtk { class Box; class Paned;  };
+namespace studio {
+
+class DockManager;
+class DockBook;
+class Dockable;
+class Widget_CompSelect;
+class CanvasView;
+
+class DockDialog : public Gtk::Window
+{
+       friend class DockManager;
+       friend class DockBook;
+       friend class Dockable;
+       sigc::connection empty_sig;
+
+       bool composition_selector_;
+
+       bool is_deleting;
+
+       bool is_horizontal;
+
+private:
+       std::list<DockBook*> dock_book_list;
+
+       std::vector<Gtk::Paned*>        panels_;
+       std::vector<int>                        dock_book_sizes_;
+
+
+       DockBook* last_dock_book;
+
+       Widget_CompSelect* widget_comp_select;
+       Gtk::Box *box;
+
+       int id_;
+
+       void on_hide();
+
+       void refresh();
+
+       void refresh_title();
+
+       void set_id(int x) { id_=x; }
+
+       void refresh_accel_group();
+
+       void drop_on_append(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
+       void drop_on_prepend(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
+
+public:
+
+       const std::vector<int>& get_dock_book_sizes()const { return dock_book_sizes_;}
+       void set_dock_book_sizes(const std::vector<int>&);
+       void rebuild_sizes();
+
+       bool close();
+
+       int get_id()const { return id_; }
+
+       DockBook* append_dock_book();
+       DockBook* prepend_dock_book();
+       void erase_dock_book(DockBook*);
+
+       void set_composition_selector(bool x);
+       bool get_composition_selector()const { return composition_selector_; }
+
+       DockDialog();
+       ~DockDialog();
+
+       DockBook& get_dock_book();
+       const DockBook& get_dock_book()const;
+
+       synfig::String get_contents()const;
+       void set_contents(const synfig::String& x);
+}; // END of studio::DockDialog
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
diff --git a/synfig-studio/src/gui/docks/dockmanager.cpp b/synfig-studio/src/gui/docks/dockmanager.cpp
new file mode 100644 (file)
index 0000000..a6c2ad6
--- /dev/null
@@ -0,0 +1,328 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file dockmanager.cpp
+**     \brief Template File
+**
+**     $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
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+#      include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+#      include <config.h>
+#endif
+
+#include "docks/dockmanager.h"
+#include <stdexcept>
+#include "docks/dockable.h"
+#include "docks/dockdialog.h"
+#include <synfigapp/settings.h>
+#include <synfigapp/main.h>
+#include <gdkmm/general.h>
+
+#include "general.h"
+
+#endif
+
+/* === U S I N G =========================================================== */
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace studio;
+
+/* === M A C R O S ========================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+class studio::DockSettings : public synfigapp::Settings
+{
+       DockManager* dock_manager;
+
+public:
+       DockSettings(DockManager* dock_manager):dock_manager(dock_manager)
+       {
+               synfigapp::Main::settings().add_domain(this,"dock");
+       }
+
+       virtual ~DockSettings()
+       {
+               synfigapp::Main::settings().remove_domain("dock");
+       }
+#define SCALE_FACTOR   (1280)
+       virtual bool get_value(const synfig::String& key_, synfig::String& value)const
+       {
+               int screen_w(Gdk::screen_width());
+               int screen_h(Gdk::screen_height());
+
+               if(key_.size()>6 && String(key_.begin(),key_.begin()+6)=="dialog")try
+               {
+                       synfig::String key(key_.begin()+7,key_.end());
+                       synfig::String::size_type separator=key.find_first_of('.');
+                       int id(atoi(synfig::String(key.begin(),key.begin()+separator).c_str()));
+                       key=synfig::String(key.begin()+separator+1,key.end());
+
+                       DockDialog& dock_dialog(dock_manager->find_dock_dialog(id));
+
+                       if(key=="contents_size")
+                       {
+                               dock_dialog.rebuild_sizes();
+                               vector<int>::const_iterator iter(dock_dialog.get_dock_book_sizes().begin());
+                               vector<int>::const_iterator end(dock_dialog.get_dock_book_sizes().end());
+                               value.clear();
+                               for(;iter!=end;++iter)
+                                       value+=strprintf("%d ",(*iter)*SCALE_FACTOR/screen_h);
+                               return true;
+                       }
+                       if(key=="pos")
+                       {
+                               int x,y; dock_dialog.get_position(x,y);
+                               value=strprintf("%d %d",x*SCALE_FACTOR/screen_w,y*SCALE_FACTOR/screen_h);
+                               return true;
+                       }
+                       if(key=="size")
+                       {
+                               int x,y; dock_dialog.get_size(x,y);
+                               value=strprintf("%d %d",x*SCALE_FACTOR/screen_w,y*SCALE_FACTOR/screen_h);
+                               return true;
+                       }
+                       if(key=="contents")
+                       {
+                               value=dock_dialog.get_contents();
+                               return true;
+                       }
+                       if(key=="comp_selector")
+                       {
+                               value=dock_dialog.get_composition_selector()?"1":"0";
+                               return true;
+                       }
+               }catch (...) { return false; }
+               return synfigapp::Settings::get_value(key_,value);
+       }
+
+       virtual bool set_value(const synfig::String& key_,const synfig::String& value)
+       {
+               int screen_w(Gdk::screen_width());
+               int screen_h(Gdk::screen_height());
+
+               if(key_.size()>6 && String(key_.begin(),key_.begin()+6)=="dialog")
+               {
+                       synfig::String key(key_.begin()+7,key_.end());
+                       synfig::String::size_type separator=key.find_first_of('.');
+                       int id(atoi(synfig::String(key.begin(),key.begin()+separator).c_str()));
+                       key=synfig::String(key.begin()+separator+1,key.end());
+
+                       DockDialog& dock_dialog(dock_manager->find_dock_dialog(id));
+
+                       if(key=="contents_size")
+                       {
+                               try {
+                               int width, height;
+                               Gtk::IconSize::lookup(Gtk::IconSize(4),width,height);
+                               vector<int> data;
+                               String::size_type n=0;
+                               String value_(value);
+                               while(value_.size() && value_.size()>n){
+                                       value_=String(value_.begin()+n,value_.end());
+                                       int size;
+                                       if(!strscanf(value_,"%d",&size))
+                                               break;
+                                       if (size > SCALE_FACTOR) size = SCALE_FACTOR - 150;
+                                       if (size < 0) size = 0;
+                                       size=size*screen_h/SCALE_FACTOR;
+
+                                       // prevent errors like this, by allowing space for at least the dockable's icon:
+                                       // ** CRITICAL **: clearlooks_style_draw_box_gap: assertion `height >= -1' failed
+                                       if (size < height + 9) size = height + 9;
+
+                                       data.push_back(size);
+
+                                       n=value_.find(" ");
+                                       if(n==String::npos)
+                                               break;
+                                       n++;
+                               }
+                               dock_dialog.set_dock_book_sizes(data);
+                               }
+                               catch(...)
+                               {
+                                       synfig::error("Exception caught!!!");
+                                       return false;
+                               }
+                               return true;
+                       }
+                       if(key=="pos")
+                       {
+                               int x,y;
+                               if(!strscanf(value,"%d %d",&x, &y))
+                                       return false;
+                               if (x > SCALE_FACTOR) x = SCALE_FACTOR - 150; if (x < 0) x = 0;
+                               if (y > SCALE_FACTOR) y = SCALE_FACTOR - 150; if (y < 0) y = 0;
+                               x=x*screen_w/SCALE_FACTOR;
+                               y=y*screen_h/SCALE_FACTOR;
+                               if(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET"))
+                                       x += atoi(getenv("SYNFIG_WINDOW_POSITION_X_OFFSET"));
+                               if(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET"))
+                                       y += atoi(getenv("SYNFIG_WINDOW_POSITION_Y_OFFSET"));
+                               dock_dialog.move(x,y);
+                               return true;
+                       }
+                       if(key=="size")
+                       {
+                               int x,y;
+                               if(!strscanf(value,"%d %d",&x, &y))
+                                       return false;
+                               if (x > SCALE_FACTOR) x = 150; if (x < 0) x = 0;
+                               if (y > SCALE_FACTOR) y = 150; if (y < 0) y = 0;
+                               x=x*screen_w/SCALE_FACTOR;
+                               y=y*screen_h/SCALE_FACTOR;
+                               dock_dialog.set_default_size(x,y);
+                               dock_dialog.resize(x,y);
+                               return true;
+                       }
+                       if(key=="contents")
+                       {
+                               dock_dialog.set_contents(value);
+                               return true;
+                       }
+                       if(key=="comp_selector")
+                       {
+                               if(value.empty() || value[0]=='0')
+                                       dock_dialog.set_composition_selector(false);
+                               else
+                                       dock_dialog.set_composition_selector(true);
+                               return true;
+                       }
+               }
+               return synfigapp::Settings::set_value(key_,value);
+       }
+
+       virtual KeyList get_key_list()const
+       {
+               synfigapp::Settings::KeyList ret(synfigapp::Settings::get_key_list());
+
+               std::list<DockDialog*>::const_iterator iter;
+               for(iter=dock_manager->dock_dialog_list_.begin();iter!=dock_manager->dock_dialog_list_.end();++iter)
+               {
+                       ret.push_back(strprintf("dialog.%d.contents",(*iter)->get_id()));
+                       ret.push_back(strprintf("dialog.%d.comp_selector",(*iter)->get_id()));
+                       ret.push_back(strprintf("dialog.%d.pos",(*iter)->get_id()));
+                       ret.push_back(strprintf("dialog.%d.size",(*iter)->get_id()));
+                       ret.push_back(strprintf("dialog.%d.contents_size",(*iter)->get_id()));
+               }
+               return ret;
+       }
+};
+
+/* === M E T H O D S ======================================================= */
+
+DockManager::DockManager():
+       dock_settings(new DockSettings(this))
+{
+}
+
+DockManager::~DockManager()
+{
+       while(!dock_dialog_list_.empty())
+       {
+               dock_dialog_list_.back()->close();
+       }
+       while(!dockable_list_.empty())
+       {
+               Dockable* dockable(dockable_list_.back());
+               // synfig::info("DockManager::~DockManager(): Deleting dockable \"%s\"",dockable->get_name().c_str());
+               dockable_list_.pop_back();
+               delete dockable;
+       }
+}
+
+void
+DockManager::register_dockable(Dockable& x)
+{
+       dockable_list_.push_back(&x);
+       // synfig::info("DockManager::register_dockable(): Registered dockable \"%s\"",dockable_list_.back()->get_name().c_str());
+       signal_dockable_registered()(&x);
+}
+
+bool
+DockManager::unregister_dockable(Dockable& x)
+{
+       std::list<Dockable*>::iterator iter;
+       for(iter=dockable_list_.begin();iter!=dockable_list_.end();++iter)
+       {
+               if(&x==*iter)
+               {
+                       x.detach();
+                       dockable_list_.erase(iter);
+                       synfig::info("DockManager::unregister_dockable(): \"%s\" has been Unregistered",x.get_name().c_str());
+                       return true;
+               }
+       }
+       return false;
+}
+
+Dockable&
+DockManager::find_dockable(const synfig::String& x)
+{
+       std::list<Dockable*>::iterator iter;
+       for(iter=dockable_list_.begin();iter!=dockable_list_.end();++iter)
+               if((*iter)->get_name()==x)
+                       return **iter;
+
+       throw std::runtime_error("DockManager::find_dockable(): not found");
+}
+
+void
+DockManager::present(synfig::String x)
+{
+       try
+       {
+               find_dockable(x).present();
+       }
+       catch(...)
+       {
+       }
+}
+
+DockDialog&
+DockManager::find_dock_dialog(int id)
+{
+       std::list<DockDialog*>::iterator iter;
+       for(iter=dock_dialog_list_.begin();iter!=dock_dialog_list_.end();++iter)
+               if((*iter)->get_id()==id)
+                       return **iter;
+
+       DockDialog* dock_dialog(new DockDialog());
+       dock_dialog->set_id(id);
+       dock_dialog->show();
+       return *dock_dialog;
+}
+
+const DockDialog&
+DockManager::find_dock_dialog(int id)const
+{
+       std::list<DockDialog*>::const_iterator iter;
+       for(iter=dock_dialog_list_.begin();iter!=dock_dialog_list_.end();++iter)
+               if((*iter)->get_id()==id)
+                       return **iter;
+
+       throw std::runtime_error("DockManager::find_dock_dialog(int id)const: not found");
+}
diff --git a/synfig-studio/src/gui/docks/dockmanager.h b/synfig-studio/src/gui/docks/dockmanager.h
new file mode 100644 (file)
index 0000000..0949bcc
--- /dev/null
@@ -0,0 +1,82 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file docks/dockmanager.h
+**     \brief Template Header
+**
+**     $Id$
+**
+**     \legal
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+**     This package is free software; you can redistribute it and/or
+**     modify it under the terms of the GNU General Public License as
+**     published by the Free Software Foundation; either version 2 of
+**     the License, or (at your option) any later version.
+**
+**     This package is distributed in the hope that it will be useful,
+**     but WITHOUT ANY WARRANTY; without even the implied warranty of
+**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+**     General Public License for more details.
+**     \endlegal
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_DOCKMANAGER_H
+#define __SYNFIG_DOCKMANAGER_H
+
+/* === H E A D E R S ======================================================= */
+
+#include <vector>
+#include <list>
+#include <synfig/string.h>
+#include <sigc++/signal.h>
+#include <sigc++/object.h>
+#include <ETL/smart_ptr>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace studio {
+
+class Dockable;
+class DockDialog;
+class DockSettings;
+
+class DockManager : public sigc::trackable
+{
+       friend class Dockable;
+       friend class DockDialog;
+       friend class DockSettings;
+
+       std::list<Dockable*> dockable_list_;
+       std::list<DockDialog*> dock_dialog_list_;
+
+       sigc::signal<void,Dockable*> signal_dockable_registered_;
+
+       etl::smart_ptr<DockSettings> dock_settings;
+
+public:
+       DockManager();
+       ~DockManager();
+
+       DockDialog& find_dock_dialog(int id);
+       const DockDialog& find_dock_dialog(int id)const;
+
+       sigc::signal<void,Dockable*>& signal_dockable_registered() { return signal_dockable_registered_; }
+
+       void register_dockable(Dockable& x);
+       bool unregister_dockable(Dockable& x);
+       Dockable& find_dockable(const synfig::String& x);
+       void present(synfig::String x);
+
+}; // END of class DockManager
+
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
index 9c947c6..332994f 100644 (file)
@@ -39,8 +39,8 @@
 #include "app.h"
 #include "instance.h"
 #include <synfigapp/action_system.h>
-#include "dockmanager.h"
-#include "dockable.h"
+#include "docks/dockmanager.h"
+#include "docks/dockable.h"
 
 #include <gtk/gtkversion.h>
 #include <ETL/clock>
index 0b95ba8..c9d3610 100644 (file)
@@ -1,5 +1,5 @@
 /* === S Y N F I G ========================================================= */
-/*!    \file dock_palbrowse.h
+/*!    \file docks/dock_palbrowse.h
 **     \brief Template Header
 **
 **     $Id$
@@ -27,7 +27,7 @@
 
 /* === H E A D E R S ======================================================= */
 
-#include "../../dockable.h"
+#include "../../docks/dockable.h"
 #include <synfig/palette.h>
 
 /* === M A C R O S ========================================================= */
index 922da34..0ec12af 100644 (file)
@@ -1,5 +1,5 @@
 /* === S Y N F I G ========================================================= */
-/*!    \file dock_paledit.h
+/*!    \file docks/dock_paledit.h
 **     \brief Template Header
 **
 **     $Id$
@@ -44,7 +44,7 @@
 #include <synfigapp/value_desc.h>
 #include <synfig/time.h>
 
-#include "../../dockable.h"
+#include "../../docks/dockable.h"
 #include <vector>
 #include <gtkmm/actiongroup.h>
 
index 80580be..ff1c57a 100644 (file)
@@ -34,7 +34,7 @@
 #include "dock_palbrowse.h"
 
 #include "../../app.h"
-#include "../../dockmanager.h"
+#include "../../docks/dockmanager.h"
 
 #include "../../general.h"
 
index ee0ca20..d020374 100644 (file)
@@ -47,7 +47,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/spinbutton.h>
 #include <synfig/transform.h>
 #include <synfigapp/main.h>
index 5ef611b..af83784 100644 (file)
@@ -47,7 +47,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include "widgets/widget_enum.h"
index 4482045..8200c6b 100644 (file)
@@ -55,7 +55,7 @@
 #include <synfigapp/main.h>
 
 #include <ETL/gaussian>
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 
 #include <gtkmm/table.h>
 #include <gtkmm/label.h>
index 68f35c0..1e3d104 100644 (file)
@@ -46,7 +46,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 
index 59fc759..2b1eb0a 100644 (file)
@@ -46,7 +46,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include <synfigapp/main.h>
index c763022..af9a840 100644 (file)
@@ -50,7 +50,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include <synfig/angle.h>
index 7c11c05..f05a6de 100644 (file)
@@ -47,7 +47,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <synfigapp/main.h>
 
 #include "general.h"
index 4f3eccb..05f52c7 100644 (file)
@@ -47,7 +47,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include <synfigapp/main.h>
index 5463a41..53ee7c9 100644 (file)
@@ -46,7 +46,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include <synfig/angle.h>
index edfb89b..4cc6600 100644 (file)
@@ -46,7 +46,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include <synfigapp/main.h>
index f8b77a3..dc09816 100644 (file)
@@ -54,7 +54,7 @@
 
 #include <ETL/gaussian>
 
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 
 #include <gtkmm/table.h>
 #include <gtkmm/label.h>
index f42df35..d2227cc 100644 (file)
@@ -49,7 +49,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include "onemoment.h"
index 3be4b53..c5fb3ce 100644 (file)
@@ -47,7 +47,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include "widgets/widget_enum.h"
index 733f907..29440b2 100644 (file)
@@ -43,7 +43,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 #include "widgets/widget_enum.h"
index 8c74daa..32c2665 100644 (file)
@@ -48,7 +48,7 @@
 #include "event_mouse.h"
 #include "event_layerclick.h"
 #include "toolbox.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include <gtkmm/optionmenu.h>
 #include "duck.h"
 
index 1b3aa46..ae6366a 100644 (file)
 #include "canvasview.h"
 #include "dialogs/dialog_gradient.h"
 #include "dialogs/dialog_color.h"
-#include "dialog_tooloptions.h"
+#include "docks/dialog_tooloptions.h"
 #include "dialogs/dialog_preview.h"
-#include "dockable.h"
-#include "dockmanager.h"
-#include "dockdialog.h"
+#include "docks/dockable.h"
+#include "docks/dockmanager.h"
+#include "docks/dockdialog.h"
 
 #include "widgets/widget_defaults.h"