dedicated namespace for video-utils
[ardour.git] / gtk2_ardour / editor.h
index a55fef191335fdb8bc26431e70ce05f762291bb9..033888c4b624a981e4c7ea8d0d561d4482bf59ba 100644 (file)
@@ -61,7 +61,6 @@
 #include "editor_items.h"
 #include "region_selection.h"
 #include "canvas.h"
-#include "window_proxy.h"
 
 namespace Gnome {
        namespace Canvas {
@@ -108,13 +107,24 @@ class BundleManager;
 class ButtonJoiner;
 class ControlPoint;
 class DragManager;
+class EditNoteDialog;
+class EditorCursor;
+class EditorGroupTabs;
+class EditorLocations;
+class EditorRegions;
+class EditorRoutes;
+class EditorRouteGroups;
+class EditorSnapshots;
+class EditorSummary;
 class GroupedButtons;
 class GUIObjectState;
 class Marker;
 class MidiRegionView;
 class MixerStrip;
+class MouseCursors;
 class PlaylistSelector;
 class PluginSelector;
+class ProgressReporter;
 class RhythmFerret;
 class Selection;
 class SoundFileOmega;
@@ -123,29 +133,9 @@ class TempoLines;
 class TimeAxisView;
 class TimeFXDialog;
 class TimeSelection;
-class EditorGroupTabs;
-class EditorRoutes;
-class EditorRouteGroups;
-class EditorRegions;
-class EditorLocations;
-class EditorSnapshots;
-class EditorSummary;
 class RegionLayeringOrderEditor;
-class ProgressReporter;
-class EditorCursor;
-class MouseCursors;
 class VerboseCursor;
 
-/* <CMT Additions> */
-class ImageFrameView;
-class ImageFrameTimeAxisView;
-class ImageFrameTimeAxis;
-class MarkerTimeAxis ;
-class MarkerView ;
-class ImageFrameSocketHandler ;
-class TimeAxisViewItem ;
-/* </CMT Additions> */
-
 class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr
 {
   public:
@@ -198,14 +188,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void set_internal_edit (bool yn);
        bool toggle_internal_editing_from_double_click (GdkEvent*);
 
-#ifdef WITH_CMT
-       void add_imageframe_time_axis(const std::string & track_name, void*) ;
-       void add_imageframe_marker_time_axis(const std::string & track_name, TimeAxisView* marked_track, void*) ;
-       void connect_to_image_compositor() ;
-       void scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item) ;
-       TimeAxisView* get_named_time_axis(const std::string & name) ;
-#endif /* WITH_CMT */
-
        void foreach_time_axis_view (sigc::slot<void,TimeAxisView&>);
        void add_to_idle_resize (TimeAxisView*, int32_t);
 
@@ -783,6 +765,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
                ruler_time_range_marker = 7,
                ruler_time_transport_marker = 8,
                ruler_time_cd_marker = 9,
+               ruler_video_timeline = 10,
        };
 
        static GtkCustomMetric ruler_metrics[4];
@@ -918,6 +901,32 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        Gtk::Label  transport_mark_label;
        Gtk::Label  cd_mark_label;
 
+       /* videtimline related actions */
+       ArdourCanvas::SimpleRect* videotl_bar;
+       Gtk::Label                videotl_label;
+       ArdourCanvas::Group*      videotl_bar_group;
+       ArdourCanvas::Group*      videotl_group;
+       Glib::RefPtr<Gtk::ToggleAction> ruler_video_action;
+       Glib::RefPtr<Gtk::ToggleAction> xjadeo_proc_action;
+       Glib::RefPtr<Gtk::ToggleAction> xjadeo_ontop_action;
+       Glib::RefPtr<Gtk::ToggleAction> xjadeo_timecode_action;
+       Glib::RefPtr<Gtk::ToggleAction> xjadeo_frame_action;
+       Glib::RefPtr<Gtk::ToggleAction> xjadeo_osdbg_action;
+       Glib::RefPtr<Gtk::ToggleAction> xjadeo_fullscreen_action;
+       Glib::RefPtr<Gtk::ToggleAction> xjadeo_letterbox_action;
+       Glib::RefPtr<Gtk::Action> xjadeo_zoom_100;
+       void set_xjadeo_proc ();
+       void toggle_xjadeo_proc (int state=-1);
+       void set_close_video_sensitive (bool onoff);
+       void set_xjadeo_sensitive (bool onoff);
+       void set_xjadeo_viewoption (int);
+       void toggle_xjadeo_viewoption (int what, int state=-1);
+       void toggle_ruler_video (bool onoff) {ruler_video_action->set_active(onoff);}
+       int videotl_bar_height; /* in units of timebar_height; default: 4 */
+       int get_videotl_bar_height () const { return videotl_bar_height; }
+       void export_video ();
+       void toggle_region_video_lock ();
+
        Gtk::VBox          time_button_vbox;
        Gtk::HBox          time_button_hbox;
 
@@ -1237,16 +1246,20 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 
        void bring_in_external_audio (Editing::ImportMode mode,  framepos_t& pos);
 
-       bool  idle_drop_paths  (std::vector<std::string> paths, framepos_t frame, double ypos);
-       void  drop_paths_part_two  (const std::vector<std::string>& paths, framepos_t frame, double ypos);
+       bool  idle_drop_paths  (std::vector<std::string> paths, framepos_t frame, double ypos, bool copy);
+       void  drop_paths_part_two  (const std::vector<std::string>& paths, framepos_t frame, double ypos, bool copy);
 
-       int  import_sndfiles (std::vector<std::string> paths, Editing::ImportMode mode,  ARDOUR::SrcQuality, framepos_t& pos,
+        int  import_sndfiles (std::vector<std::string> paths, Editing::ImportDisposition, Editing::ImportMode mode,  
+                             ARDOUR::SrcQuality, framepos_t& pos,
                              int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&, bool);
-       int  embed_sndfiles (std::vector<std::string> paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
+       int  embed_sndfiles (std::vector<std::string> paths, bool multiple_files, bool& check_sample_rate, 
+                            Editing::ImportDisposition disposition, Editing::ImportMode mode,
                             framepos_t& pos, int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&);
 
-       int add_sources (std::vector<std::string> paths, ARDOUR::SourceList& sources, framepos_t& pos, Editing::ImportMode,
+       int add_sources (std::vector<std::string> paths, ARDOUR::SourceList& sources, framepos_t& pos, 
+                        Editing::ImportDisposition, Editing::ImportMode,
                         int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&, bool add_channel_suffix);
+
        int finish_bringing_in_material (boost::shared_ptr<ARDOUR::Region> region, uint32_t, uint32_t,  framepos_t& pos, Editing::ImportMode mode,
                                      boost::shared_ptr<ARDOUR::Track>& existing_track);
 
@@ -1428,14 +1441,14 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        bool canvas_transport_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*);
        bool canvas_cd_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*);
 
-       bool canvas_imageframe_item_view_event(GdkEvent* event, ArdourCanvas::Item*,ImageFrameView*);
-       bool canvas_imageframe_view_event(GdkEvent* event, ArdourCanvas::Item*,ImageFrameTimeAxis*);
-       bool canvas_imageframe_start_handle_event(GdkEvent* event, ArdourCanvas::Item*,ImageFrameView*);
-       bool canvas_imageframe_end_handle_event(GdkEvent* event, ArdourCanvas::Item*,ImageFrameView*);
-       bool canvas_marker_time_axis_view_event(GdkEvent* event, ArdourCanvas::Item*,MarkerTimeAxis*);
-       bool canvas_markerview_item_view_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*);
-       bool canvas_markerview_start_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*);
-       bool canvas_markerview_end_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*);
+       bool canvas_videotl_bar_event (GdkEvent* event, ArdourCanvas::Item*);
+       void update_video_timeline (bool flush = false);
+       void set_video_timeline_height (const int);
+       bool is_video_timeline_locked ();
+       void toggle_video_timeline_locked ();
+       void set_video_timeline_locked (const bool);
+       void queue_visual_videotimeline_update ();
+       void embed_audio_from_video (std::string, framepos_t n = 0);
 
        PBD::Signal0<void> EditorFreeze;
        PBD::Signal0<void> EditorThaw;
@@ -1505,7 +1518,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void edit_tempo_marker (ArdourCanvas::Item*);
        void edit_meter_marker (ArdourCanvas::Item*);
        void edit_control_point (ArdourCanvas::Item*);
-       void edit_notes (std::set<Gnome::Canvas::CanvasNoteEvent *> const &);
+        void edit_notes (TimeAxisViewItem&);
 
        void marker_menu_edit ();
        void marker_menu_remove ();
@@ -1521,7 +1534,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void marker_menu_play_range ();
        void marker_menu_set_playhead ();
        void marker_menu_set_from_playhead ();
-       void marker_menu_set_from_selection ();
+       void marker_menu_set_from_selection (bool force_regions);
        void marker_menu_range_to_next ();
        void marker_menu_zoom_to_range ();
        void new_transport_marker_menu_set_loop ();
@@ -1886,47 +1899,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 
        void nudge_track (bool use_edit_point, bool forwards);
 
-#ifdef WITH_CMT
-       void handle_new_imageframe_time_axis_view(const std::string & track_name, void* src) ;
-       void handle_new_imageframe_marker_time_axis_view(const std::string & track_name, TimeAxisView* marked_track) ;
-
-       void start_imageframe_grab(ArdourCanvas::Item*, GdkEvent*) ;
-       void start_markerview_grab(ArdourCanvas::Item*, GdkEvent*) ;
-
-       void imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent*) ;
-       void markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent*) ;
-       void timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent*) ;
-
-       gint canvas_imageframe_item_view_event(ArdourCanvas::Item* item, GdkEvent* event, ImageFrameView* ifv);
-       gint canvas_imageframe_view_event(ArdourCanvas::Item* item, GdkEvent* event, ImageFrameTimeAxis* ifta);
-       gint canvas_imageframe_start_handle_event(ArdourCanvas::Item* item, GdkEvent* event, ImageFrameView* ifv);
-       gint canvas_imageframe_end_handle_event(ArdourCanvas::Item* item, GdkEvent* event, ImageFrameView* ifv);
-
-       gint canvas_marker_time_axis_view_event(ArdourCanvas::Item* item, GdkEvent* event, MarkerTimeAxis* mta);
-       gint canvas_markerview_item_view_event(ArdourCanvas::Item* item, GdkEvent* event, MarkerView* mv);
-       gint canvas_markerview_start_handle_event(ArdourCanvas::Item* item, GdkEvent* event, MarkerView* mv);
-       gint canvas_markerview_end_handle_event(ArdourCanvas::Item* item, GdkEvent* event, MarkerView* mv);
-
-       void imageframe_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void imageframe_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void imageframe_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void imageframe_end_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) ;
-
-       void markerview_item_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void markerview_item_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void markerview_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) ;
-       void markerview_end_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) ;
-
-       void popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_frame) ;
-       void popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_frame) ;
-
-       ImageFrameSocketHandler* image_socket_listener ;
-#endif
-
        static const int32_t default_width = 995;
        static const int32_t default_height = 765;
 
@@ -2012,7 +1984,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void get_regions_at (RegionSelection&, framepos_t where, const TrackViewList& ts) const;
        void get_regions_after (RegionSelection&, framepos_t where, const TrackViewList& ts) const;
 
-       RegionSelection get_regions_from_selection ();
        RegionSelection get_regions_from_selection_and_edit_point ();
        RegionSelection get_regions_from_selection_and_entered ();
 
@@ -2104,22 +2075,23 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        bool _following_mixer_selection;
 
        int time_fx (ARDOUR::RegionList&, float val, bool pitching);
-
+        void note_edit_done (int, EditNoteDialog*);
        void toggle_sound_midi_notes ();
 
        /** Flag for a bit of a hack wrt control point selection; see set_selected_control_point_from_click */
        bool _control_point_toggled_on_press;
 
        /** This is used by TimeAxisView to keep a track of the TimeAxisView that is currently being
-           stepped in height using Shift-Scrollwheel.  When a scroll event occurs, we do the step on
-           this _stepping_axis_view if it is non-0 (and we set up this _stepping_axis_view with the
-           TimeAxisView underneath the mouse if it is 0).  Then Editor resets _stepping_axis_view when
-           the shift key is released.  In this (hacky) way, pushing shift and moving the scroll wheel
-           will operate on the same track until shift is released (rather than skipping about to whatever
-           happens to be underneath the mouse at the time).
+           stepped in height using ScrollZoomVerticalModifier+Scrollwheel.  When a scroll event
+           occurs, we do the step on this _stepping_axis_view if it is non-0 (and we set up this
+           _stepping_axis_view with the TimeAxisView underneath the mouse if it is 0).  Then Editor
+           resets _stepping_axis_view when the modifier key is released.  In this (hacky) way,
+           pushing the modifier key and moving the scroll wheel will operate on the same track
+           until the key is released (rather than skipping about to whatever happens to be
+           underneath the mouse at the time).
        */
        TimeAxisView* _stepping_axis_view;
-       void shift_key_released ();
+       void zoom_vertical_modifier_released();
 
        friend class Drag;
        friend class RegionDrag;
@@ -2145,6 +2117,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        friend class RegionCreateDrag;
        friend class RegionMotionDrag;
        friend class RegionInsertDrag;
+       friend class VideoTimeLineDrag;
 
        friend class EditorSummary;
        friend class EditorGroupTabs;