skip LV2 ports on GUI according to port-properties: notOnGUI and reportsLatency
[ardour.git] / gtk2_ardour / editor.h
index ca4a3ec87a977fe9ff5a01354288af66b8be872e..f9ce1da514cf20165316a2adda25e127d78f1238 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:
@@ -322,7 +312,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void               set_zoom_focus (Editing::ZoomFocus);
        Editing::ZoomFocus get_zoom_focus () const { return zoom_focus; }
        double             get_current_zoom () const { return frames_per_unit; }
-
+        void               cycle_zoom_focus ();
        void temporal_zoom_step (bool coarser);
        void tav_zoom_step (bool coarser);
        void tav_zoom_smooth (bool coarser, bool force_all);
@@ -435,7 +425,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void do_import (std::vector<std::string> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, framepos_t&);
        void do_embed (std::vector<std::string> paths, Editing::ImportDisposition, Editing::ImportMode mode,  framepos_t&);
 
-       void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions);
+        void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions, bool src_comparison);
 
        void center_screen (framepos_t);
 
@@ -783,6 +773,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];
@@ -809,7 +800,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void update_just_timecode ();
        void compute_fixed_ruler_scale (); //calculates the RulerScale of the fixed rulers
        void update_fixed_rulers ();
-       void update_tempo_based_rulers ();
+        void update_tempo_based_rulers (ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
+                                       ARDOUR::TempoMap::BBTPointList::const_iterator& end);
        void popup_ruler_menu (framepos_t where = 0, ItemType type = RegionItem);
        void update_ruler_visibility ();
        void set_ruler_visible (RulerType, bool);
@@ -873,7 +865,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        gint bbt_nmarks;
        uint32_t bbt_bar_helper_on;
        uint32_t bbt_accent_modulo;
-       void compute_bbt_ruler_scale (framepos_t lower, framepos_t upper);
+        void compute_bbt_ruler_scale (framepos_t lower, framepos_t upper,
+                                     ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin,
+                                     ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end);
 
        gint metric_get_timecode (GtkCustomRulerMark **, gdouble, gdouble, gint);
        gint metric_get_bbt (GtkCustomRulerMark **, gdouble, gdouble, gint);
@@ -915,6 +909,31 @@ 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_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;
 
@@ -1234,8 +1253,8 @@ 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 target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&, bool);
@@ -1425,6 +1444,15 @@ 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_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);
+
        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*);
@@ -1478,15 +1506,13 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        /// true if we are in fullscreen mode
        bool _maximised;
 
-       ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin;
-       ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end;
-
        TempoLines* tempo_lines;
 
        ArdourCanvas::Group* time_line_group;
 
        void hide_measures ();
-       void draw_measures ();
+        void draw_measures (ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
+                           ARDOUR::TempoMap::BBTPointList::const_iterator& end);
        bool redraw_measures ();
 
        void new_tempo_section ();
@@ -1504,7 +1530,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 ();
@@ -1520,7 +1546,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 ();
@@ -1551,7 +1577,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void remove_metric_marks ();
        void draw_metric_marks (const ARDOUR::Metrics& metrics);
 
-       void compute_current_bbt_points (framepos_t left, framepos_t right);
+        void compute_current_bbt_points (framepos_t left, framepos_t right, 
+                                        ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
+                                        ARDOUR::TempoMap::BBTPointList::const_iterator& end);
+
        void tempo_map_changed (const PBD::PropertyChange&);
        void redisplay_tempo (bool immediate_redraw);
 
@@ -1565,12 +1594,13 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void editor_list_button_toggled ();
 
        AudioClock*               zoom_range_clock;
-       Gtk::Button              zoom_in_button;
-       Gtk::Button              zoom_out_button;
-       Gtk::Button              zoom_out_full_button;
 
-       Gtk::Button              tav_expand_button;
-       Gtk::Button              tav_shrink_button;
+       ArdourButton              zoom_in_button;
+       ArdourButton              zoom_out_button;
+       ArdourButton              zoom_out_full_button;
+
+       ArdourButton              tav_expand_button;
+       ArdourButton              tav_shrink_button;
 
        Gtk::VBox                toolbar_clock_vbox;
        Gtk::VBox                toolbar_selection_clock_vbox;
@@ -1586,11 +1616,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        ArdourButton mouse_timefx_button;
        ArdourButton mouse_audition_button;
 
-       ButtonJoiner* smart_mode_joiner;
+       ArdourButton smart_mode_button;
        Glib::RefPtr<Gtk::ToggleAction> smart_mode_action;
 
        void                     mouse_mode_toggled (Editing::MouseMode m);
-       void                     mouse_mode_object_range_toggled () {}
+       void                     mouse_mode_object_range_toggled ();
        bool                     ignore_mouse_mode_toggle;
 
        ArdourButton internal_edit_button;
@@ -1927,8 +1957,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 
        /* nudge */
 
-       Gtk::Button      nudge_forward_button;
-       Gtk::Button      nudge_backward_button;
+       ArdourButton      nudge_forward_button;
+       ArdourButton      nudge_backward_button;
        Gtk::HBox        nudge_hbox;
        Gtk::VBox        nudge_vbox;
        AudioClock*       nudge_clock;
@@ -2007,7 +2037,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 ();
 
@@ -2099,17 +2128,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        bool _following_mixer_selection;
 
        int time_fx (ARDOUR::RegionList&, float val, bool pitching);
-
-       bool doing_range_stuff() const {
-               return (mouse_mode == Editing::MouseRange && (_join_object_range_state == JOIN_OBJECT_RANGE_NONE)) ||
-                       _join_object_range_state == JOIN_OBJECT_RANGE_RANGE;
-       }
-       
-       bool doing_object_stuff() const {
-               return (mouse_mode == Editing::MouseObject && (_join_object_range_state == JOIN_OBJECT_RANGE_NONE)) ||
-                       _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT;
-       }
-
+        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 */
@@ -2150,6 +2169,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;