Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-studio / trunk / src / gtkmm / canvasview.h
index 1ba3dcf..cddcbe2 100644 (file)
@@ -6,6 +6,8 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007, 2008 Chris Moore
+**     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
@@ -40,6 +42,7 @@
 #include <gtkmm/scrolledwindow.h>
 #include <gtkmm/notebook.h>
 #include <gdkmm/device.h>
+#include <gtkmm/spinbutton.h>
 
 #include <synfigapp/canvasinterface.h>
 #include <synfigapp/selectionmanager.h>
 
 #include "dialog_waypoint.h"
 #include "dialog_keyframe.h"
+#include "framedial.h"
+#include "toggleducksdial.h"
+#include "resolutiondial.h"
+#include "widget_keyframe_list.h"
 
 #include "duckmatic.h"
 #include <gtkmm/scale.h>
 
 /* === C L A S S E S & S T R U C T S ======================================= */
 
+namespace synfig {
+       class TransformStack;
+}
+
 namespace studio {
 
 class CanvasViewUIInterface;
@@ -120,7 +131,6 @@ class Widget_Time;
 class Dialog_SoundSelect;
 class Dialog_Preview;
 
-class synfig::TransformStack;
 class Dock_Layers;
 class Dock_Children;
 class Dock_Keyframes;
@@ -154,7 +164,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
        {
@@ -169,6 +179,9 @@ public:
 
        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 ---------------------------------------------
        */
@@ -184,31 +197,31 @@ private:
 
        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<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;
@@ -222,13 +235,12 @@ private:
 
        //Glib::RefPtr<KeyframeTreeStore> keyframe_tree_store_;
 
-       DEBUGPOINT_CLASS(5);
+       // 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_;
 
@@ -236,7 +248,6 @@ private:
        //Gtk::Adjustment time_window_adjustment_;
        studio::Adjust_Window time_window_adjustment_;
 
-
        LayerTree *layer_tree;
 
        ChildrenTree *children_tree;
@@ -253,21 +264,41 @@ private:
 
        Gtk::Button *stopbutton;
        Gtk::Button *refreshbutton;
-       Gtk::Button *treetogglebutton;
-       Gtk::Notebook *notebook;
-       Gtk::Widget *timebar;
-
+       Gtk::Button *treetogglebutton;  // not used
+       Gtk::Notebook *notebook; // not used
+       Gtk::Table *timebar;
+       Gtk::Table *displaybar;
+       Gtk::Button *animatebutton;
+       Gtk::Button *keyframebutton;
+       FrameDial *framedial;
+       ToggleDucksDial *toggleducksdial;
+       bool toggling_ducks_;
+       ResolutionDial *resolutiondial;
+       bool changing_resolution_;
+       Gtk::Adjustment quality_adjustment_;
+       Gtk::SpinButton *quality_spin;
+       Gtk::Adjustment past_onion_adjustment_;
+       Gtk::SpinButton *past_onion_spin;
+       Gtk::Adjustment future_onion_adjustment_;
+       Gtk::SpinButton *future_onion_spin;
+       bool updating_quality_;
+       Gtk::ToggleButton *show_grid;
+       Gtk::ToggleButton *snap_grid;
+       Gtk::ToggleButton *onion_skin;
+       bool toggling_show_grid;
+       bool toggling_snap_grid;
+       bool toggling_onion_skin;
+       //! Shows current time and allows edition
        Widget_Time *current_time_widget;
        void on_current_time_widget_changed();
 
-       std::auto_ptr<Widget_Timeslider>                timeslider;
+       //! Time slider class. Same than the Time track panel
+       std::auto_ptr<Widget_Timeslider> timeslider;
 
-       std::list<sigc::connection> duck_changed_connections;
+       //!Keyframe list slider
+       std::auto_ptr<Widget_Keyframe_List> widget_kf_list;
 
-
-
-       Gtk::Button *animatebutton;
-       Gtk::Button *keyframebutton;
+       std::list<sigc::connection> duck_changed_connections;
 
 /*     DEBUGPOINT_CLASS(8);
 
@@ -305,21 +336,17 @@ private:
        Gtk::CheckMenuItem* duck_mask_width;
        Gtk::CheckMenuItem* duck_mask_angle;
 */
+       //! Menu members
        Gtk::Menu parammenu;
 
-
-       Glib::RefPtr<Gtk::ToggleAction> duck_mask_position;
-       Glib::RefPtr<Gtk::ToggleAction> duck_mask_vertex;
-       Glib::RefPtr<Gtk::ToggleAction> duck_mask_tangent;
-       Glib::RefPtr<Gtk::ToggleAction> duck_mask_radius;
-       Glib::RefPtr<Gtk::ToggleAction> duck_mask_width;
-       Glib::RefPtr<Gtk::ToggleAction> duck_mask_angle;
+       Glib::RefPtr<Gtk::ToggleAction> grid_snap_toggle;
+       Glib::RefPtr<Gtk::ToggleAction> grid_show_toggle;
 
        Gtk::RadioButtonGroup quality_group;
+       Gtk::RadioButtonGroup low_res_pixel_size_group;
 
        Glib::RefPtr<Gtk::ActionGroup> action_group;
 
-
        etl::handle<synfigapp::UIInterface> ui_interface_;
        etl::handle<synfigapp::SelectionManager> selection_manager_;
 
@@ -348,7 +375,6 @@ public:
 
        bool cancel;
 
-
        /*
  -- ** -- D I A L O G S -------------------------------------------------------
        */
@@ -375,13 +401,13 @@ private:
        CanvasView(etl::loose_handle<Instance> instance,etl::handle<synfigapp::CanvasInterface> 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();
@@ -403,20 +429,19 @@ private:
 
        Gtk::Widget *create_time_bar();
 
+       Gtk::Widget *create_display_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); }
-
-       void popup_param_menu(synfigapp::ValueDesc value_desc, float location=0);
+       { 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 workarea_layer_selected(synfig::Layer::Handle layer);
 
        void selected_layer_color_set(synfig::Color color);
 
-
-
        void register_layer_type(synfig::Layer::Book::value_type &lyr,std::map<synfig::String,Gtk::Menu*>*);
 
        //! Rebuilds the "new layer" menu
@@ -424,6 +449,15 @@ private:
 
        void rebuild_ducks_layer_(synfig::TransformStack& transform_stack, synfig::Canvas::Handle canvas, std::set<synfig::Layer::Handle>& selected_list);
 
+       void decrease_low_res_pixel_size();
+       void increase_low_res_pixel_size();
+       void toggle_low_res_pixel_flag();
+       void set_quality(int x);
+       void set_onion_skins();
+       void toggle_show_grid();
+       void toggle_snap_grid();
+       void toggle_onion_skin();
+
        /*
  -- ** -- P U B L I C   M E T H O D S -----------------------------------------
        */
@@ -504,8 +538,11 @@ public:
        //! 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 */
@@ -583,18 +620,25 @@ public:
 
        void image_import();
 
-       void on_waypoint_clicked(synfigapp::ValueDesc,synfig::Waypoint, int button);
+       void on_waypoint_clicked_canvasview(synfigapp::ValueDesc,std::set<synfig::Waypoint,std::less<synfig::UniqueID> >, int button);
 
        void preview_option() {on_preview_option();}
 
        void present();
 
+       bool is_playing() { return is_playing_; }
+
+       void update_quality();
+
+
+
        /*
  -- ** -- 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*);
@@ -662,19 +706,21 @@ private:
        void on_audio_offset_notify();
 
        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_layer_toggle(synfig::Layer::Handle);
 
        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();
 
+       void on_play_stop_pressed();
+
 protected:
+       bool close_instance_when_safe();
        bool on_delete_event(GdkEventAny* event);
 
        /*
@@ -684,6 +730,8 @@ protected:
 public:
 
        static etl::handle<studio::CanvasView> create(etl::loose_handle<Instance> instance,etl::handle<synfig::Canvas> canvas);
+       static std::list<int>& get_pixel_sizes();
+
 }; // END of class CanvasView
 
 }; // END of namespace studio