-/* === S I N F G =========================================================== */
+/* === S Y N F I G ========================================================= */
/*! \file canvasview.h
** \brief Template Header
**
-** $Id: canvasview.h,v 1.2 2005/01/13 18:37:30 darco Exp $
+** $Id$
**
** \legal
-** Copyright (c) 2002 Robert B. Quattlebaum Jr.
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
**
-** This software and associated documentation
-** are CONFIDENTIAL and PROPRIETARY property of
-** the above-mentioned copyright holder.
+** 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.
**
-** You may not copy, print, publish, or in any
-** other way distribute this software without
-** a prior written agreement with
-** the copyright holder.
+** 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 __SINFG_STUDIO_GTKMM_CANVASVIEW_H
-#define __SINFG_STUDIO_GTKMM_CANVASVIEW_H
+#ifndef __SYNFIG_STUDIO_GTKMM_CANVASVIEW_H
+#define __SYNFIG_STUDIO_GTKMM_CANVASVIEW_H
/* === H E A D E R S ======================================================= */
#include <gtkmm/notebook.h>
#include <gdkmm/device.h>
-#include <sinfgapp/canvasinterface.h>
-#include <sinfgapp/selectionmanager.h>
+#include <synfigapp/canvasinterface.h>
+#include <synfigapp/selectionmanager.h>
-#include <sinfg/canvas.h>
-#include <sinfg/string.h>
-#include <sinfg/time.h>
+#include <synfig/canvas.h>
+#include <synfig/string.h>
+#include <synfig/time.h>
#include "instance.h"
#include "canvasproperties.h"
#include <map>
#include <gtkmm/toggleaction.h>
#include <gtkmm/radioaction.h>
-#include <sinfg/rect.h>
+#include <synfig/rect.h>
#include "adjust_window.h"
-#include <sinfg/transform.h>
+#include <synfig/transform.h>
/* === M A C R O S ========================================================= */
#if _DEBUG
#define DEBUGPOINT_CLASS(x) struct debugpointclass_ ## x { debugpointclass_ ## x () { DEBUGPOINT(); } ~debugpointclass_ ## x () { DEBUGPOINT(); } } badfthguae_ ## x ;
#else
-#define DEBUGPOINT_CLASS(x)
+#define DEBUGPOINT_CLASS(x)
#endif
#endif
/* === C L A S S E S & S T R U C T S ======================================= */
+namespace synfig {
+ class TransformStack;
+}
+
namespace studio {
class CanvasViewUIInterface;
class Preview;
struct PreviewInfo;
class AudioContainer;
-
+
class Widget_Sound;
class Widget_Timeslider;
class Widget_Time;
-
+
class Dialog_SoundSelect;
class Dialog_Preview;
-class sinfg::TransformStack;
class Dock_Layers;
class Dock_Children;
class Dock_Keyframes;
-
+
class CanvasView : public Gtk::Window, public etl::shared_object
{
friend class UniversalScrubber;
friend class Dock_Layers;
friend class Dock_Children;
friend class Dock_Keyframes;
-
+
friend class CanvasViewUIInterface;
friend class CanvasViewSelectionManager;
friend class Duckmatic;
-
+
/*
-- ** -- P U B L I C T Y P E S ---------------------------------------------
*/
-
+
public:
typedef etl::handle<CanvasView> Handle;
-
+
typedef etl::handle<const CanvasView> ConstHandle;
-
+
typedef etl::loose_handle<CanvasView> LooseHandle;
typedef LayerTreeStore::Model LayerTreeModel;
typedef ChildrenTreeStore::Model ChildrenTreeModel;
//! Create an instance of this class whenever doing a longer task.
- /*! Make sure that you check the bool value of this class occasionaly
+ /*! Make sure that you check the bool value of this class occasionally
** to make sure the action has not been canceled. */
class IsWorking
{
};
friend class IsWorking;
- typedef sinfgapp::CanvasInterface::Mode Mode;
+ typedef synfigapp::CanvasInterface::Mode Mode;
/*
-- ** -- P R I V A T E D A T A ---------------------------------------------
WorkArea* get_work_area() { return work_area.get(); }
private:
- sinfg::TransformStack curr_transform_stack;
+ synfig::TransformStack curr_transform_stack;
bool curr_transform_stack_set;
- sinfg::Rect bbox;
+ synfig::Rect bbox;
- DEBUGPOINT_CLASS(1);
+ // DEBUGPOINT_CLASS(1);
//! State Machine
Smach smach_;
- DEBUGPOINT_CLASS(2);
+ // DEBUGPOINT_CLASS(2);
etl::loose_handle<Instance> instance_;
- etl::handle<sinfgapp::CanvasInterface> canvas_interface_;
+ etl::handle<synfigapp::CanvasInterface> canvas_interface_;
- DEBUGPOINT_CLASS(3);
+ // DEBUGPOINT_CLASS(3);
//! Sound and information to play it
etl::handle<AudioContainer> audio;
studio::Widget_Sound *disp_audio; //should this be put into thing too?
- SigC::Connection playcon;
- SigC::Connection stopcon;
-
+ sigc::connection playcon;
+ sigc::connection stopcon;
+
std::auto_ptr<UniversalScrubber> universal_scrubber;
-
- //! Tooltip controler
+
+ //! Tooltip controller
Gtk::Tooltips tooltips;
- DEBUGPOINT_CLASS(4);
+ // DEBUGPOINT_CLASS(4);
//! TreeModel for the layers
LayerTreeModel layer_tree_model;
//Glib::RefPtr<KeyframeTreeStore> keyframe_tree_store_;
- DEBUGPOINT_CLASS(5);
-
- //std::map<sinfg::String,Glib::RefPtr<Gtk::TreeModel> > tree_model_book_;
- std::map<sinfg::String,Glib::RefPtr<Glib::ObjectBase> > ref_obj_book_;
- std::map<sinfg::String,Gtk::Widget*> ext_widget_book_;
+ // DEBUGPOINT_CLASS(5);
+
+ //std::map<synfig::String,Glib::RefPtr<Gtk::TreeModel> > tree_model_book_;
+ std::map<synfig::String,Glib::RefPtr<Glib::ObjectBase> > ref_obj_book_;
+ std::map<synfig::String,Gtk::Widget*> ext_widget_book_;
//! The time adjustment's scope is defined by the time_window adjustment
Gtk::Adjustment time_adjustment_;
-
+
//! The time_window adjustment governs the position of the time window on the whole time line
//Gtk::Adjustment time_window_adjustment_;
studio::Adjust_Window time_window_adjustment_;
-
-
+
+
LayerTree *layer_tree;
-
+
ChildrenTree *children_tree;
KeyframeTree *keyframe_tree;
Gtk::ProgressBar *progressbar;
Gtk::Statusbar *statusbar;
-
+
Gtk::TreeRow children_canvas_row;
Gtk::TreeRow children_valuenode_row;
-
+
Gtk::Button *stopbutton;
Gtk::Button *refreshbutton;
Gtk::Button *treetogglebutton;
Widget_Time *current_time_widget;
void on_current_time_widget_changed();
-
+
std::auto_ptr<Widget_Timeslider> timeslider;
std::list<sigc::connection> duck_changed_connections;
Gtk::Button *animatebutton;
Gtk::Button *keyframebutton;
-
+
/* DEBUGPOINT_CLASS(8);
Gtk::Menu duckmaskmenu;
Glib::RefPtr<Gtk::ToggleAction> duck_mask_angle;
Gtk::RadioButtonGroup quality_group;
-
+ Gtk::RadioButtonGroup low_res_pixel_size_group;
+
Glib::RefPtr<Gtk::ActionGroup> action_group;
- etl::handle<sinfgapp::UIInterface> ui_interface_;
- etl::handle<sinfgapp::SelectionManager> selection_manager_;
-
+ etl::handle<synfigapp::UIInterface> ui_interface_;
+ etl::handle<synfigapp::SelectionManager> selection_manager_;
+
bool is_playing_;
sigc::signal<void> signal_deleted_;
*/
private:
-
+
// Constructor is private to force the use of the "create()" constructor
- CanvasView(etl::loose_handle<Instance> instance,etl::handle<sinfgapp::CanvasInterface> canvas_interface);
+ CanvasView(etl::loose_handle<Instance> instance,etl::handle<synfigapp::CanvasInterface> canvas_interface);
//! Constructor Helper
Gtk::Widget* create_layer_tree();
//! Constructor Helper - Initializes all of the menus
void init_menus();
- bool duck_change_param(const sinfg::Point &value,sinfg::Layer::Handle layer, sinfg::String param_name);
+ bool duck_change_param(const synfig::Point &value,synfig::Layer::Handle layer, synfig::String param_name);
void refresh_time_window();
void time_was_changed();
- void refresh_rend_desc();
-
+ void refresh_rend_desc();
+
void toggle_duck_mask(Duckmatic::Type type);
Gtk::Widget *create_work_area();
- void popup_param_menu_bezier(float location, sinfgapp::ValueDesc value_desc)
+ void popup_param_menu_bezier(float location, synfigapp::ValueDesc value_desc)
{ popup_param_menu(value_desc,location); }
-
- void popup_param_menu(sinfgapp::ValueDesc value_desc, float location=0);
+ void popup_param_menu(synfigapp::ValueDesc value_desc, float location=0);
+
+
+ void workarea_layer_selected(synfig::Layer::Handle layer);
- void workarea_layer_selected(sinfg::Layer::Handle layer);
+ void selected_layer_color_set(synfig::Color color);
- void selected_layer_color_set(sinfg::Color color);
-
- void register_layer_type(sinfg::Layer::Book::value_type &lyr,std::map<sinfg::String,Gtk::Menu*>*);
+ void register_layer_type(synfig::Layer::Book::value_type &lyr,std::map<synfig::String,Gtk::Menu*>*);
//! Rebuilds the "new layer" menu
void build_new_layer_menu(Gtk::Menu &menu);
- void rebuild_ducks_layer_(sinfg::TransformStack& transform_stack, sinfg::Canvas::Handle canvas, std::set<sinfg::Layer::Handle>& selected_list);
+ void rebuild_ducks_layer_(synfig::TransformStack& transform_stack, synfig::Canvas::Handle canvas, std::set<synfig::Layer::Handle>& selected_list);
/*
-- ** -- P U B L I C M E T H O D S -----------------------------------------
*/
public:
- const sinfg::TransformStack& get_curr_transform_stack()const { return curr_transform_stack; }
+ const synfig::TransformStack& get_curr_transform_stack()const { return curr_transform_stack; }
- const sinfg::Rect& get_bbox()const { return bbox; }
+ const synfig::Rect& get_bbox()const { return bbox; }
- Glib::RefPtr<Glib::ObjectBase> get_ref_obj(const sinfg::String& x);
- Glib::RefPtr<const Glib::ObjectBase> get_ref_obj(const sinfg::String& x)const;
- void set_ref_obj(const sinfg::String& x, Glib::RefPtr<Glib::ObjectBase> y);
+ Glib::RefPtr<Glib::ObjectBase> get_ref_obj(const synfig::String& x);
+ Glib::RefPtr<const Glib::ObjectBase> get_ref_obj(const synfig::String& x)const;
+ void set_ref_obj(const synfig::String& x, Glib::RefPtr<Glib::ObjectBase> y);
- Glib::RefPtr<Gtk::TreeModel> get_tree_model(const sinfg::String& x);
- Glib::RefPtr<const Gtk::TreeModel> get_tree_model(const sinfg::String& x)const;
- void set_tree_model(const sinfg::String& x, Glib::RefPtr<Gtk::TreeModel> y);
+ Glib::RefPtr<Gtk::TreeModel> get_tree_model(const synfig::String& x);
+ Glib::RefPtr<const Gtk::TreeModel> get_tree_model(const synfig::String& x)const;
+ void set_tree_model(const synfig::String& x, Glib::RefPtr<Gtk::TreeModel> y);
- Gtk::Widget* get_ext_widget(const sinfg::String& x);
- void set_ext_widget(const sinfg::String& x, Gtk::Widget* y);
-
- //std::map<sinfg::String,Gtk::Widget*>& tree_view_book() { return tree_view_book_; }
- //std::map<sinfg::String,Gtk::Widget*>& ext_widget_book() { return tree_view_book_; }
+ Gtk::Widget* get_ext_widget(const synfig::String& x);
+ void set_ext_widget(const synfig::String& x, Gtk::Widget* y);
+
+ //std::map<synfig::String,Gtk::Widget*>& tree_view_book() { return tree_view_book_; }
+ //std::map<synfig::String,Gtk::Widget*>& ext_widget_book() { return tree_view_book_; }
void popup_main_menu();
Smach& get_smach() { return smach_; }
const Smach& get_smach()const { return smach_; }
-
+
Smach::event_result process_event_key(EventKey x);
-
- void popup_layer_menu(sinfg::Layer::Handle layer);
+
+ void popup_layer_menu(synfig::Layer::Handle layer);
virtual ~CanvasView();
void set_mode(Mode x) { canvas_interface()->set_mode(x); }
-
+
Mode get_mode()const { return canvas_interface()->get_mode(); }
-
+
Gtk::Adjustment &time_adjustment() { return time_adjustment_; }
-
+
const Gtk::Adjustment &time_adjustment()const { return time_adjustment_; }
studio::Adjust_Window &time_window_adjustment() { return time_window_adjustment_; }
-
+
const studio::Adjust_Window &time_window_adjustment()const { return time_window_adjustment_; }
- etl::handle<sinfgapp::UIInterface> get_ui_interface() { return ui_interface_;}
+ etl::handle<synfigapp::UIInterface> get_ui_interface() { return ui_interface_;}
- etl::handle<sinfgapp::SelectionManager> get_selection_manager() { return selection_manager_; }
+ etl::handle<synfigapp::SelectionManager> get_selection_manager() { return selection_manager_; }
Glib::RefPtr<Gtk::TreeModel> layer_tree_store() { return get_tree_model("layers"); }
-
+
Glib::RefPtr<const Gtk::TreeModel> layer_tree_store()const { return get_tree_model("layers"); }
Glib::RefPtr<Gtk::TreeModel> children_tree_store() { return get_tree_model("children"); }
-
+
Glib::RefPtr<const Gtk::TreeModel> children_tree_store()const { return get_tree_model("children"); }
Glib::RefPtr<Gtk::TreeModel> keyframe_tree_store() { return get_tree_model("keyframes"); }
-
+
Glib::RefPtr<const Gtk::TreeModel> keyframe_tree_store()const { return get_tree_model("keyframes"); }
- void set_time(sinfg::Time t) { canvas_interface_->set_time(t); }
-
- sinfg::Time get_time() { return canvas_interface_->get_time(); }
+ void set_time(synfig::Time t) { canvas_interface_->set_time(t); }
+
+ synfig::Time get_time() { return canvas_interface_->get_time(); }
- etl::handle<sinfg::Canvas> get_canvas()const { return canvas_interface_->get_canvas(); }
+ etl::handle<synfig::Canvas> get_canvas()const { return canvas_interface_->get_canvas(); }
etl::handle<Instance> get_instance()const { return instance_; }
- etl::handle<sinfgapp::CanvasInterface> canvas_interface() { return canvas_interface_; }
+ etl::handle<synfigapp::CanvasInterface> canvas_interface() { return canvas_interface_; }
- etl::handle<const sinfgapp::CanvasInterface> canvas_interface()const { return canvas_interface_; }
+ etl::handle<const synfigapp::CanvasInterface> canvas_interface()const { return canvas_interface_; }
- void add_actions_to_menu(Gtk::Menu *menu, const sinfgapp::Action::ParamList ¶m_list, sinfgapp::Action::Category category=sinfgapp::Action::CATEGORY_ALL)const;
+ void add_actions_to_menu(Gtk::Menu *menu, const synfigapp::Action::ParamList ¶m_list, synfigapp::Action::Category category=synfigapp::Action::CATEGORY_ALL)const;
//! Updates the title of the window
void update_title();
+ //! Closes this document
+ bool close_instance();
+
//! Closes this canvas view
- bool close();
+ bool close_view();
//! Stops the currently executing action
/*! \see get_cancel_status(), reset_cancel_status(), IsWorking */
//! \writeme
void rebuild_ducks();
-
- //bool add_to_ducks(sinfgapp::ValueDesc value_desc, sinfg::ParamDesc *param_desc=NULL);
-
+
+ //bool add_to_ducks(synfigapp::ValueDesc value_desc, synfig::ParamDesc *param_desc=NULL);
+
//! Starts "playing" the animation in real-time
void play();
//! Shows the tables (Layer/Children)
void show_tables();
-
+
//! Hides the tables (Layer/Children)
void hide_tables();
-
+
//! Toggles the tables
void toggle_tables();
//! Gets the table status
bool tables_are_visible();
-
+
//! Shows the time bar
void show_timebar();
//! Hides the time bar
void hide_timebar();
- void do_rotoscope_bline();
-
- void do_rotoscope();
-
- void do_rotoscope_poly();
-
- void do_eyedrop();
+ //t Enables or disables interaction with the timebar
+ void set_sensitive_timebar(bool sensitive);
void time_zoom_in();
void time_zoom_out();
-
- void add_layer(sinfg::String x);
-
+
+ void add_layer(synfig::String x);
+
void show_keyframe_dialog();
-
+
void play_audio(float t);
void stop_audio();
-
+
void image_import();
- void on_waypoint_clicked(sinfgapp::ValueDesc,sinfg::Waypoint, int button);
-
+ void on_waypoint_clicked(synfigapp::ValueDesc,synfig::Waypoint, int button);
+
void preview_option() {on_preview_option();}
-
+
void present();
-
+
+ bool is_playing() { return is_playing_; }
+
/*
-- ** -- S I G N A L T E R M I N A L S -------------------------------------
*/
private:
-
+
void on_unselect_layers();
void on_input_device_changed(GdkDevice*);
virtual bool on_focus_in_event(GdkEventFocus*);
virtual bool on_focus_out_event(GdkEventFocus*);
-
+
//bool on_children_tree_event(GdkEvent *event);
bool on_keyframe_tree_event(GdkEvent *event);
- //void on_children_edited_value(const Glib::ustring&path_string,sinfg::ValueBase value);
+ //void on_children_edited_value(const Glib::ustring&path_string,synfig::ValueBase value);
void on_dirty_preview();
bool on_layer_user_click(int, Gtk::TreeRow, LayerTree::ColumnID);
// void on_layer_toggle(const Glib::ustring& path_string, Gtk::TreeModelColumn<bool> column);
-
- void on_mode_changed(sinfgapp::CanvasInterface::Mode mode);
-// void on_layer_waypoint_clicked(const Glib::ustring &, sinfg::ValueNode_Animated::WaypointList::iterator);
-
- //void on_children_waypoint_clicked(const Glib::ustring &, sinfg::ValueNode_Animated::WaypointList::iterator);
+ void on_mode_changed(synfigapp::CanvasInterface::Mode mode);
+
+// void on_layer_waypoint_clicked(const Glib::ustring &, synfig::ValueNode_Animated::WaypointList::iterator);
+
+ //void on_children_waypoint_clicked(const Glib::ustring &, synfig::ValueNode_Animated::WaypointList::iterator);
void on_waypoint_changed();
-
+
void on_waypoint_delete();
void on_refresh_pressed();
void on_id_changed();
-
+
void on_time_changed();
/*
void on_layer_duplicate_pressed();
void on_layer_delete_pressed();
*/
-
+
void on_keyframe_add_pressed();
void on_keyframe_duplicate_pressed();
void on_animate_button_pressed();
void on_keyframe_button_pressed();
-
+
void on_preview_option();
void on_preview_create(const PreviewInfo &);
-
+
void on_audio_option();
void on_audio_file_change(const std::string &f);
- void on_audio_offset_change(const sinfg::Time &t);
-
+ void on_audio_offset_change(const synfig::Time &t);
+
void on_audio_file_notify();
void on_audio_offset_notify();
-
- bool on_duck_changed(const sinfg::Point &value,const sinfgapp::ValueDesc& value_desc);
- void on_layer_toggle(sinfg::Layer::Handle);
+ bool on_duck_changed(const synfig::Point &value,const synfigapp::ValueDesc& value_desc);
+ bool on_duck_angle_changed(const synfig::Angle &rotation,const synfigapp::ValueDesc& value_desc);
- void on_edited_value(sinfgapp::ValueDesc,sinfg::ValueBase);
+ void on_layer_toggle(synfig::Layer::Handle);
- //void on_waypoint_clicked(sinfgapp::ValueDesc,sinfg::ValueNode_Animated::WaypointList::iterator, int button);
+ void on_edited_value(synfigapp::ValueDesc,synfig::ValueBase);
+
+ //void on_waypoint_clicked(synfigapp::ValueDesc,synfig::ValueNode_Animated::WaypointList::iterator, int button);
void on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& selection_data, guint info, guint time);
-
+
//void on_audio_play();
bool on_audio_scrub();
protected:
+ bool close_instance_when_safe();
bool on_delete_event(GdkEventAny* event);
-
+
/*
-- ** -- S T A T I C P U B L I C M E T H O D S ---------------------------
*/
public:
-
- static etl::handle<studio::CanvasView> create(etl::loose_handle<Instance> instance,etl::handle<sinfg::Canvas> canvas);
+
+ static etl::handle<studio::CanvasView> create(etl::loose_handle<Instance> instance,etl::handle<synfig::Canvas> canvas);
}; // END of class CanvasView
}; // END of namespace studio