X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fcanvasview.h;h=6f1f87ef69ae560d82283281d1db78e0d362ab83;hb=cb8203d4a2196e403c959cc154e027cc269fca68;hp=887e622c2da9dcee1c66e965577d976ae2d0c208;hpb=3a3c4bca3a17137bec5d7960560934b91ef4146e;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/canvasview.h b/synfig-studio/trunk/src/gtkmm/canvasview.h index 887e622..6f1f87e 100644 --- a/synfig-studio/trunk/src/gtkmm/canvasview.h +++ b/synfig-studio/trunk/src/gtkmm/canvasview.h @@ -1,28 +1,30 @@ -/* === 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, 2008 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 ======================================================= */ @@ -40,12 +42,12 @@ #include #include -#include -#include +#include +#include -#include -#include -#include +#include +#include +#include #include "instance.h" #include "canvasproperties.h" @@ -76,11 +78,11 @@ #include #include #include -#include +#include #include "adjust_window.h" -#include +#include /* === M A C R O S ========================================================= */ @@ -88,7 +90,7 @@ #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 @@ -96,6 +98,10 @@ /* === C L A S S E S & S T R U C T S ======================================= */ +namespace synfig { + class TransformStack; +} + namespace studio { class CanvasViewUIInterface; @@ -111,41 +117,40 @@ class Duckmatic; 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 Handle; - + typedef etl::handle ConstHandle; - + typedef etl::loose_handle LooseHandle; typedef LayerTreeStore::Model LayerTreeModel; @@ -153,7 +158,7 @@ public: 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 { @@ -166,7 +171,10 @@ public: }; friend class IsWorking; - typedef sinfgapp::CanvasInterface::Mode Mode; + typedef synfigapp::CanvasInterface::Mode Mode; + + void set_grid_snap_toggle(bool flag) { grid_snap_toggle->set_active(flag); } + void set_grid_show_toggle(bool flag) { grid_show_toggle->set_active(flag); } /* -- ** -- P R I V A T E D A T A --------------------------------------------- @@ -178,36 +186,36 @@ public: 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_; - etl::handle canvas_interface_; + etl::handle canvas_interface_; - DEBUGPOINT_CLASS(3); + // DEBUGPOINT_CLASS(3); //! Sound and information to play it etl::handle 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 universal_scrubber; - - //! Tooltip controler + + //! Tooltip controller Gtk::Tooltips tooltips; - DEBUGPOINT_CLASS(4); + // DEBUGPOINT_CLASS(4); //! TreeModel for the layers LayerTreeModel layer_tree_model; @@ -221,23 +229,21 @@ private: //Glib::RefPtr keyframe_tree_store_; - DEBUGPOINT_CLASS(5); - - //std::map > tree_model_book_; - std::map > ref_obj_book_; - std::map ext_widget_book_; + // DEBUGPOINT_CLASS(5); + //std::map > tree_model_book_; + std::map > ref_obj_book_; + std::map 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; @@ -246,28 +252,28 @@ private: 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; - Gtk::Notebook *notebook; + Gtk::Button *treetogglebutton; // not used + Gtk::Notebook *notebook; // not used Gtk::Widget *timebar; + Gtk::Button *animatebutton; + Gtk::Button *keyframebutton; + + //! Shows current time and allows edition Widget_Time *current_time_widget; void on_current_time_widget_changed(); - - std::auto_ptr timeslider; - - std::list duck_changed_connections; + //! Time slider class. Same than the Time track panel + std::auto_ptr timeslider; + std::list duck_changed_connections; - Gtk::Button *animatebutton; - Gtk::Button *keyframebutton; - /* DEBUGPOINT_CLASS(8); Gtk::Menu duckmaskmenu; @@ -304,24 +310,20 @@ private: Gtk::CheckMenuItem* duck_mask_width; Gtk::CheckMenuItem* duck_mask_angle; */ + //! Menu members Gtk::Menu parammenu; - - Glib::RefPtr duck_mask_position; - Glib::RefPtr duck_mask_vertex; - Glib::RefPtr duck_mask_tangent; - Glib::RefPtr duck_mask_radius; - Glib::RefPtr duck_mask_width; - Glib::RefPtr duck_mask_angle; + Glib::RefPtr grid_snap_toggle; + Glib::RefPtr grid_show_toggle; Gtk::RadioButtonGroup quality_group; - + Gtk::RadioButtonGroup low_res_pixel_size_group; + Glib::RefPtr action_group; + etl::handle ui_interface_; + etl::handle selection_manager_; - etl::handle ui_interface_; - etl::handle selection_manager_; - bool is_playing_; sigc::signal signal_deleted_; @@ -347,7 +349,6 @@ public: bool cancel; - /* -- ** -- D I A L O G S ------------------------------------------------------- */ @@ -369,18 +370,18 @@ public: */ private: - + // Constructor is private to force the use of the "create()" constructor - CanvasView(etl::loose_handle instance,etl::handle canvas_interface); + CanvasView(etl::loose_handle instance,etl::handle canvas_interface); //! Constructor Helper - Gtk::Widget* create_layer_tree(); + // Gtk::Widget* create_layer_tree(); //! Constructor Helper - Gtk::Widget* create_children_tree(); + // Gtk::Widget* create_children_tree(); //! Constructor Helper - Gtk::Widget* create_keyframe_tree(); + // Gtk::Widget* create_keyframe_tree(); //! Constructor Helper Gtk::Widget* create_status_bar(); @@ -388,123 +389,126 @@ private: //! 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(); Gtk::Widget *create_time_bar(); + //! Pop up menu for the bezier (bline, draw) tool (?) + void popup_param_menu_bezier(float location, synfigapp::ValueDesc value_desc) + { popup_param_menu(value_desc,location,true); } + //! Pop up menu for the tools but not the bezier ones. + void popup_param_menu(synfigapp::ValueDesc value_desc, float location=0, bool bezier=false); - void popup_param_menu_bezier(float location, sinfgapp::ValueDesc value_desc) - { popup_param_menu(value_desc,location); } - - void popup_param_menu(sinfgapp::ValueDesc value_desc, float location=0); - - - void workarea_layer_selected(sinfg::Layer::Handle layer); + void workarea_layer_selected(synfig::Layer::Handle layer); - void selected_layer_color_set(sinfg::Color color); - + void selected_layer_color_set(synfig::Color color); - - void register_layer_type(sinfg::Layer::Book::value_type &lyr,std::map*); + void register_layer_type(synfig::Layer::Book::value_type &lyr,std::map*); //! 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& selected_list); + void rebuild_ducks_layer_(synfig::TransformStack& transform_stack, synfig::Canvas::Handle canvas, std::set& selected_list); + + void decrease_low_res_pixel_size(); + void increase_low_res_pixel_size(); /* -- ** -- 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 get_ref_obj(const sinfg::String& x); - Glib::RefPtr get_ref_obj(const sinfg::String& x)const; - void set_ref_obj(const sinfg::String& x, Glib::RefPtr y); + Glib::RefPtr get_ref_obj(const synfig::String& x); + Glib::RefPtr get_ref_obj(const synfig::String& x)const; + void set_ref_obj(const synfig::String& x, Glib::RefPtr y); - Glib::RefPtr get_tree_model(const sinfg::String& x); - Glib::RefPtr get_tree_model(const sinfg::String& x)const; - void set_tree_model(const sinfg::String& x, Glib::RefPtr y); + Glib::RefPtr get_tree_model(const synfig::String& x); + Glib::RefPtr get_tree_model(const synfig::String& x)const; + void set_tree_model(const synfig::String& x, Glib::RefPtr y); - Gtk::Widget* get_ext_widget(const sinfg::String& x); - void set_ext_widget(const sinfg::String& x, Gtk::Widget* y); - - //std::map& tree_view_book() { return tree_view_book_; } - //std::map& 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& tree_view_book() { return tree_view_book_; } + //std::map& 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 get_ui_interface() { return ui_interface_;} + etl::handle get_ui_interface() { return ui_interface_;} - etl::handle get_selection_manager() { return selection_manager_; } + etl::handle get_selection_manager() { return selection_manager_; } Glib::RefPtr layer_tree_store() { return get_tree_model("layers"); } - + Glib::RefPtr layer_tree_store()const { return get_tree_model("layers"); } Glib::RefPtr children_tree_store() { return get_tree_model("children"); } - + Glib::RefPtr children_tree_store()const { return get_tree_model("children"); } Glib::RefPtr keyframe_tree_store() { return get_tree_model("keyframes"); } - + Glib::RefPtr 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 get_canvas()const { return canvas_interface_->get_canvas(); } + etl::handle get_canvas()const { return canvas_interface_->get_canvas(); } etl::handle get_instance()const { return instance_; } - etl::handle canvas_interface() { return canvas_interface_; } + etl::handle canvas_interface() { return canvas_interface_; } - etl::handle canvas_interface()const { return canvas_interface_; } + etl::handle 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 */ @@ -543,62 +547,60 @@ public: //! \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_canvasview(synfigapp::ValueDesc,std::set >, 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_select_layers(); void on_unselect_layers(); void on_input_device_changed(GdkDevice*); @@ -607,12 +609,12 @@ private: 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(); @@ -621,21 +623,21 @@ private: bool on_layer_user_click(int, Gtk::TreeRow, LayerTree::ColumnID); // void on_layer_toggle(const Glib::ustring& path_string, Gtk::TreeModelColumn 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(); /* @@ -644,7 +646,7 @@ private: void on_layer_duplicate_pressed(); void on_layer_delete_pressed(); */ - + void on_keyframe_add_pressed(); void on_keyframe_duplicate_pressed(); @@ -654,40 +656,42 @@ private: 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_drop_drag_data_received(const Glib::RefPtr& 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 create(etl::loose_handle instance,etl::handle canvas); + + static etl::handle create(etl::loose_handle instance,etl::handle canvas); + static std::list& get_pixel_sizes(); + }; // END of class CanvasView }; // END of namespace studio