Clean up checks.
[ardour.git] / gtk2_ardour / editor.h
index d2b0043d6684b415e01ad796b5b8bd9de4fb1178..571b612294203eb40d317ee9a8ad46c1f91f80ee 100644 (file)
@@ -25,6 +25,7 @@
 #include <set>
 #include <string>
 #include <sys/time.h>
+#include <bitset>
 
 #include <glibmm/ustring.h>
 
 #include <gtkmm2ext/click_box.h>
 #include <gtkmm2ext/dndtreeview.h>
 
-#include <pbd/stateful.h>
-#include <ardour/session.h>
-#include <ardour/tempo.h>
-#include <ardour/stretch.h>
-#include <ardour/location.h>
-#include <ardour/audioregion.h>
-#include <ardour/track.h>
+#include "pbd/stateful.h"
+#include "ardour/session.h"
+#include "ardour/tempo.h"
+#include "ardour/stretch.h"
+#include "ardour/location.h"
+#include "ardour/audioregion.h"
+#include "ardour/track.h"
+#include "ardour/types.h"
 
 #include "audio_clock.h"
 #include "gtk-custom-ruler.h"
@@ -61,9 +63,7 @@
 #include "editor_items.h"
 #include "region_selection.h"
 #include "canvas.h"
-#include "time_axis_view.h"
 #include "draginfo.h"
-#include "tempo_lines.h"
 
 namespace Gtkmm2ext {
        class TearOff;
@@ -99,6 +99,7 @@ class Marker;
 class GroupedButtons;
 class AutomationLine;
 class Selection;
+class TempoLines;
 class TimeSelection;
 class TrackSelection;
 class AutomationSelection;
@@ -108,9 +109,9 @@ class AudioStreamView;
 class ControlPoint;
 class SoundFileOmega;
 class RhythmFerret;
-#ifdef FFT_ANALYSIS
 class AnalysisWindow;
-#endif
+class BundleManager;
+class GlobalPortMatrixWindow;
 
 /* <CMT Additions> */
 class ImageFrameView;
@@ -238,7 +239,7 @@ class Editor : public PublicEditor
        }
 
        gulong frame_to_pixel (nframes64_t frame) const {
-               return (gulong) rint ((frame / (frames_per_unit *  GNOME_CANVAS(track_canvas->gobj())->pixels_per_unit)));
+               return (gulong) rint ((frame / (frames_per_unit * GNOME_CANVAS(track_canvas->gobj())->pixels_per_unit)));
        }
 
        void flush_canvas ();
@@ -261,13 +262,10 @@ class Editor : public PublicEditor
 
        void set_show_measures (bool yn);
        bool show_measures () const { return _show_measures; }
-       bool initial_ruler_update_required;
 
-#ifdef FFT_ANALYSIS
        /* analysis window */
        void analyze_region_selection();
        void analyze_range_selection();
-#endif
 
        /* export */
        
@@ -300,6 +298,7 @@ class Editor : public PublicEditor
        Width editor_mixer_strip_width;
        void maybe_add_mixer_strip_width (XMLNode&);
        void show_editor_mixer (bool yn);
+       void create_editor_mixer ();
        void show_editor_list (bool yn);
        void set_selected_mixer_strip (TimeAxisView&);
        void hide_track_in_display (TimeAxisView& tv, bool temporary = false);
@@ -328,6 +327,10 @@ class Editor : public PublicEditor
        void toggle_measure_visibility ();
        void toggle_logo_visibility ();
 
+       double get_physical_screen_width () const { return physical_screen_width; };
+       double physical_screen_width;
+       double physical_screen_height;
+
        /* SMPTE timecode & video sync */
 
        void smpte_fps_chosen (ARDOUR::SmpteFormat format);
@@ -337,8 +340,13 @@ class Editor : public PublicEditor
        void update_smpte_mode();
        void update_video_pullup();
        void update_subframes_per_frame ();
-       /* xfades */
 
+       /* fades/xfades */
+
+       void toggle_region_fades ();
+       void toggle_region_fades_visible ();
+       void toggle_selected_region_fades (int dir);
+       void update_region_fade_visibility ();
        void toggle_auto_xfade ();
        void toggle_xfades_active ();
        void toggle_xfade_visibility ();
@@ -352,6 +360,7 @@ class Editor : public PublicEditor
        void update_layering_model ();
        
        void toggle_link_region_and_track_selection ();
+       void toggle_automation_follows_regions ();
 
        /* redirect shared ops menu. caller must free returned menu */
 
@@ -366,6 +375,8 @@ class Editor : public PublicEditor
        void scroll_tracks_down_line ();
        void scroll_tracks_up_line ();
 
+       void move_selected_tracks (bool up);
+
        bool new_regionviews_display_gain () { return _new_regionviews_show_envelope; }
        void prepare_for_cleanup ();
        void finish_cleanup ();
@@ -385,6 +396,8 @@ class Editor : public PublicEditor
        void toggle_meter_updating();
 
        void show_rhythm_ferret();
+       void show_bundle_manager ();
+       void show_global_port_matrix (ARDOUR::DataType);
 
        void goto_visual_state (uint32_t);
        void save_visual_state (uint32_t);
@@ -531,8 +544,8 @@ class Editor : public PublicEditor
        /* functions to be passed to mapover_tracks(), possibly with sigc::bind()-supplied arguments */
 
        void mapped_get_equivalent_regions (RouteTimeAxisView&, uint32_t, RegionView*, vector<RegionView*>*) const;
-       void mapped_use_new_playlist (RouteTimeAxisView&, uint32_t);
-       void mapped_use_copy_playlist (RouteTimeAxisView&, uint32_t);
+       void mapped_use_new_playlist (RouteTimeAxisView&, uint32_t, vector<boost::shared_ptr<ARDOUR::Playlist> > const &);
+       void mapped_use_copy_playlist (RouteTimeAxisView&, uint32_t, vector<boost::shared_ptr<ARDOUR::Playlist> > const &);
        void mapped_clear_playlist (RouteTimeAxisView&, uint32_t);
 
        /* end */
@@ -544,7 +557,7 @@ class Editor : public PublicEditor
 
        void set_selected_track (TimeAxisView&, Selection::Operation op = Selection::Set, bool no_remove=false);
        void select_all_tracks ();
-
+       
        int get_regionview_count_from_region_list (boost::shared_ptr<ARDOUR::Region> region);
        
        bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false);
@@ -582,7 +595,7 @@ class Editor : public PublicEditor
 
        void add_item_with_sensitivity (Gtk::Menu_Helpers::MenuList&, Gtk::Menu_Helpers::MenuElem, bool) const;
 
-       void handle_new_route (ARDOUR::Session::RouteList&);
+       void handle_new_route (ARDOUR::RouteList&);
        void remove_route (TimeAxisView *);
        bool route_removal;
 
@@ -643,6 +656,13 @@ class Editor : public PublicEditor
        ArdourCanvas::Group*      cd_marker_bar_group;
 
        /** The group containing all items that require horizontal scrolling. */
+       ArdourCanvas::Group* _background_group;
+       /* 
+          The _master_group is the group containing all items
+          that require horizontal scrolling..
+          It is primarily used to separate canvas items 
+          that require horizontal scrolling from those that do not. 
+       */
        ArdourCanvas::Group* _master_group;
 
        /* The group containing all trackviews.  Only scrolled vertically. */
@@ -773,6 +793,7 @@ class Editor : public PublicEditor
        static const double timebar_height;
        guint32 visible_timebars;
        gdouble canvas_timebars_vsize;
+       gdouble get_canvas_timebars_vsize () const { return canvas_timebars_vsize; }
        Gtk::Menu          *editor_ruler_menu;
        
        ArdourCanvas::SimpleRect* tempo_bar;
@@ -860,6 +881,7 @@ class Editor : public PublicEditor
        Gtk::Layout         controls_layout;
        bool control_layout_scroll (GdkEventScroll* ev);
        void controls_layout_size_request (Gtk::Requisition*);
+       sigc::connection controls_layout_size_request_connection;
 
        Gtk::HScrollbar     edit_hscrollbar;
        bool                _dragging_hscrollbar;
@@ -873,7 +895,6 @@ class Editor : public PublicEditor
        double canvas_width;
        double canvas_height;
        double full_canvas_height;
-       nframes64_t last_canvas_frame;
 
        bool track_canvas_map_handler (GdkEventAny*);
 
@@ -893,7 +914,10 @@ class Editor : public PublicEditor
        sigc::connection control_scroll_connection;
 
        gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;}
+       
+       ArdourCanvas::Group* get_background_group () const { return _background_group; }
        ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; }
+       double last_trackview_group_vertical_offset;
        void tie_vertical_scrolling ();
        void scroll_canvas_horizontally ();
        void scroll_canvas_vertically ();
@@ -934,16 +958,30 @@ class Editor : public PublicEditor
                    add (start);
                    add (end);
                    add (length);
+                       add (sync);
+                       add (fadein);
+                       add (fadeout);
+                       add (locked);
+                       add (glued);
+                       add (muted);
+                       add (opaque);
                        add (used);
                    add (path);
            }
-               Gtk::TreeModelColumn<Glib::ustring> name;
+           Gtk::TreeModelColumn<Glib::ustring> name;
            Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Region> > region;
            Gtk::TreeModelColumn<Gdk::Color> color_;
            Gtk::TreeModelColumn<Glib::ustring> start;
            Gtk::TreeModelColumn<Glib::ustring> end;
            Gtk::TreeModelColumn<Glib::ustring> length;
-               Gtk::TreeModelColumn<Glib::ustring> used;
+           Gtk::TreeModelColumn<Glib::ustring> sync;
+           Gtk::TreeModelColumn<Glib::ustring> fadein;
+           Gtk::TreeModelColumn<Glib::ustring> fadeout;
+           Gtk::TreeModelColumn<bool> locked;
+           Gtk::TreeModelColumn<bool> glued;
+           Gtk::TreeModelColumn<bool> muted;
+           Gtk::TreeModelColumn<bool> opaque;
+           Gtk::TreeModelColumn<Glib::ustring> used;
            Gtk::TreeModelColumn<Glib::ustring> path;
        };
            
@@ -956,6 +994,9 @@ class Editor : public PublicEditor
 
        void region_list_region_changed (ARDOUR::Change, boost::weak_ptr<ARDOUR::Region>);
        void region_list_selection_changed ();
+       sigc::connection region_list_change_connection;
+       void set_selected_in_region_list(RegionSelection&);
+       bool set_selected_in_region_list_subrow(boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &, int);
        bool region_list_selection_filter (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool yn);
        void region_name_edit (const Glib::ustring&, const Glib::ustring&);
        void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions);
@@ -1039,7 +1080,7 @@ class Editor : public PublicEditor
 
        /* track views */
        TrackViewList  track_views;
-       TimeAxisView     *trackview_by_y_position (double ypos);
+       std::pair<TimeAxisView*, ARDOUR::layer_t> trackview_by_y_position (double);
 
        static Gdk::Cursor* cross_hair_cursor;
        static Gdk::Cursor* trimmer_cursor;
@@ -1092,7 +1133,11 @@ class Editor : public PublicEditor
        void add_regions_to_region_display (std::vector<boost::weak_ptr<ARDOUR::Region> > & );
        void region_hidden (boost::shared_ptr<ARDOUR::Region>);
        void redisplay_regions ();
+       void populate_row (boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &);
        void update_region_row (boost::shared_ptr<ARDOUR::Region>);
+       bool update_region_subrows (boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &, int);
+       void update_all_region_rows ();
+       void update_all_region_subrows (Gtk::TreeModel::Row const &, int);
        bool no_region_list_redisplay;
        void insert_into_tmp_regionlist(boost::shared_ptr<ARDOUR::Region>);
 
@@ -1113,6 +1158,7 @@ class Editor : public PublicEditor
        void toggle_region_mute ();
        void toggle_region_lock ();
        void toggle_region_opaque ();
+       void toggle_record_enable ();
        void set_region_lock_style (ARDOUR::Region::PositionLockStyle);
        void raise_region ();
        void raise_region_to_top ();
@@ -1214,6 +1260,7 @@ class Editor : public PublicEditor
        
        void add_external_audio_action (Editing::ImportMode);
        void external_audio_dialog ();
+       void session_import_dialog ();
 
        int  check_whether_and_how_to_import(string, bool all_or_nothing = true);
        bool check_multichannel_status (const std::vector<Glib::ustring>& paths);
@@ -1222,16 +1269,14 @@ class Editor : public PublicEditor
        
        void bring_in_external_audio (Editing::ImportMode mode,  nframes64_t& pos);
 
-       void _do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
+       bool  idle_drop_paths  (std::vector<Glib::ustring> paths, nframes64_t frame, double ypos);
+       void  drop_paths_part_two  (const std::vector<Glib::ustring>& paths, nframes64_t frame, double ypos);
+       
        void do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
-       bool idle_do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
-
-       void _do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode,  nframes64_t&);
        void do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode,  nframes64_t&);
-       bool idle_do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode,  nframes64_t&);
 
        int  import_sndfiles (vector<Glib::ustring> paths, Editing::ImportMode mode,  ARDOUR::SrcQuality, nframes64_t& pos,
-                             int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&, bool);
+                             int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>, bool, uint32_t total);
        int  embed_sndfiles (vector<Glib::ustring> paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode, 
                             nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&);
 
@@ -1256,16 +1301,24 @@ class Editor : public PublicEditor
        void build_interthread_progress_window ();
        ARDOUR::InterThreadInfo* current_interthread_info;
 
-#ifdef FFT_ANALYSIS
        AnalysisWindow* analysis_window;
-#endif
 
        /* import specific info */
 
-       ARDOUR::Session::import_status import_status;
+       struct EditorImportStatus : public ARDOUR::Session::ImportStatus {
+           Editing::ImportMode mode;
+           nframes64_t pos;
+           int target_tracks;
+           int target_regions;
+           boost::shared_ptr<ARDOUR::Track> track;
+           bool replace;
+       };
+
+       EditorImportStatus import_status;
        gint import_progress_timeout (void *);
        static void *_import_thread (void *);
        void* import_thread ();
+       void finish_import ();
 
        /* to support this ... */
 
@@ -1314,6 +1367,7 @@ class Editor : public PublicEditor
 
        void add_location_mark (nframes64_t where);
        void add_location_from_audio_region ();
+       void add_locations_from_audio_region ();
        void add_location_from_selection ();
        void set_loop_from_selection (bool play);
        void set_punch_from_selection ();
@@ -1358,6 +1412,7 @@ class Editor : public PublicEditor
        double snap_threshold;
 
        void handle_gui_changes (const string &, void *);
+       bool ignore_gui_changes;
 
        void    hide_all_tracks (bool with_select);
 
@@ -1373,6 +1428,8 @@ class Editor : public PublicEditor
        Gtk::Menu fade_context_menu;
        void popup_fade_context_menu (int, int, ArdourCanvas::Item*, ItemType);
 
+       void region_gain_motion_callback (ArdourCanvas::Item*, GdkEvent*);
+
        void start_fade_in_grab (ArdourCanvas::Item*, GdkEvent*);
        void start_fade_out_grab (ArdourCanvas::Item*, GdkEvent*);
        void fade_in_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
@@ -1394,7 +1451,7 @@ class Editor : public PublicEditor
        void region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
        void create_region_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
        void create_region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
-       bool check_region_drag_possible (RouteTimeAxisView**);
+       bool check_region_drag_possible (RouteTimeAxisView**, ARDOUR::layer_t*);
        void possibly_copy_regions_during_grab (GdkEvent*);
        void region_drag_splice_motion_callback (ArdourCanvas::Item*, GdkEvent*);
        void region_drag_splice_finished_callback (ArdourCanvas::Item*, GdkEvent*);
@@ -1404,6 +1461,7 @@ class Editor : public PublicEditor
 
        void cursor_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
        void cursor_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
+       void cursor_drag_finished_ensure_locate_callback (ArdourCanvas::Item*, GdkEvent*);
        void marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
        void marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
        void control_point_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
@@ -1424,6 +1482,7 @@ class Editor : public PublicEditor
        void start_region_brush_grab (ArdourCanvas::Item*, GdkEvent*);
        void start_selection_grab (ArdourCanvas::Item*, GdkEvent*);
        void start_cursor_grab (ArdourCanvas::Item*, GdkEvent*);
+       void start_cursor_grab_no_stop (ArdourCanvas::Item*, GdkEvent*);
        void start_marker_grab (ArdourCanvas::Item*, GdkEvent*);
        void start_control_point_grab (ArdourCanvas::Item*, GdkEvent*);
        void start_line_grab_from_regionview (ArdourCanvas::Item*, GdkEvent*);
@@ -1504,7 +1563,6 @@ public:
        bool track_canvas_motion_notify_event (GdkEventMotion* event);
 
        Gtk::Allocation canvas_allocation;
-       bool canvas_idle_queued;
        void track_canvas_allocate (Gtk::Allocation alloc);
        bool track_canvas_size_allocated ();
 
@@ -1532,12 +1590,9 @@ public:
        
        ARDOUR::TempoMap::BBTPointList *current_bbt_points;
        
-       typedef vector<ArdourCanvas::SimpleLine*> TimeLineList;
-       TimeLineList free_measure_lines;
-       TimeLineList used_measure_lines;
+       TempoLines* tempo_lines;
 
        ArdourCanvas::Group* time_line_group;
-       ArdourCanvas::SimpleLine* get_time_line ();
 
        void hide_measures ();
        void draw_measures ();
@@ -1557,6 +1612,7 @@ public:
        void edit_meter_section (ARDOUR::MeterSection*);
        void edit_tempo_marker (ArdourCanvas::Item*);
        void edit_meter_marker (ArdourCanvas::Item*);
+       void edit_control_point (ArdourCanvas::Item*);
        
        void marker_menu_edit ();
        void marker_menu_remove ();
@@ -1577,7 +1633,7 @@ public:
        void new_transport_marker_menu_set_punch ();
        void update_loop_range_view (bool visibility=false);
        void update_punch_range_view (bool visibility=false);
-        gint new_transport_marker_menu_popdown (GdkEventAny*);
+        void new_transport_marker_menu_popdown ();
        void marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
        void tm_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
        void transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
@@ -1603,7 +1659,6 @@ public:
        void draw_metric_marks (const ARDOUR::Metrics& metrics);
 
        void compute_current_bbt_points (nframes_t left, nframes_t right);
-       int tempo_map_change_idle_handler_id;
        void tempo_map_changed (ARDOUR::Change);
        void redisplay_tempo (bool immediate_redraw);
        
@@ -1614,10 +1669,9 @@ public:
        uint32_t bbt_beat_subdivision;
 
        /* toolbar */
-       
+
        Gtk::ToggleButton editor_mixer_button;
        Gtk::ToggleButton editor_list_button;
-
        void editor_mixer_button_toggled ();
        void editor_list_button_toggled ();
 
@@ -1700,13 +1754,17 @@ public:
        /* midi toolbar */
 
        Gtk::HBox                midi_tool_button_box;
-       Gtkmm2ext::TearOff*      midi_tool_tearoff;
        Gtk::ToggleButton        midi_tool_pencil_button;
        Gtk::ToggleButton        midi_tool_select_button;
        Gtk::ToggleButton        midi_tool_resize_button;
        Gtk::ToggleButton        midi_tool_erase_button;
+       Gtk::Button              midi_panic_button;
+       Gtk::ToggleButton        midi_sound_notes;
        GroupedButtons          *midi_tool_button_set;
        void                     midi_edit_mode_toggled (Editing::MidiEditMode m);
+       void                     midi_panic_button_pressed ();
+       bool                     sound_notes () const { return midi_sound_notes.get_active(); }
+       
        bool                     ignore_midi_edit_mode_toggle;
 
        Gtkmm2ext::TearOff* midi_tools_tearoff;
@@ -1724,6 +1782,7 @@ public:
        void time_selection_changed ();
        void track_selection_changed ();
        void region_selection_changed ();
+       sigc::connection editor_regions_selection_changed_connection;
        void sensitize_the_right_region_actions (bool have_selected_regions);
        void point_selection_changed ();
        void marker_selection_changed ();
@@ -1765,7 +1824,9 @@ public:
        ArdourCanvas::SimpleRect*  range_marker_drag_rect;
 
        void update_marker_drag_item (ARDOUR::Location *);
-       
+#ifdef GTKOSX
+       ArdourCanvas::SimpleRect     *bogus_background_rect;
+#endif
        ArdourCanvas::SimpleRect     *transport_bar_range_rect;
        ArdourCanvas::SimpleRect     *transport_bar_preroll_rect;
        ArdourCanvas::SimpleRect     *transport_bar_postroll_rect;
@@ -1827,8 +1888,9 @@ public:
 
        void update_route_visibility ();
 
-       void sync_order_keys ();
-       bool ignore_route_order_sync;
+       void sync_order_keys (const char*);
+       bool route_redisplay_does_not_sync_order_keys;
+       bool route_redisplay_does_not_reset_order_keys;
 
        bool route_list_display_button_press (GdkEventButton*);
        void route_list_display_drag_data_received  (const Glib::RefPtr<Gdk::DragContext>& context,
@@ -1976,7 +2038,6 @@ public:
                                                       guint               info,
                                                       guint               time);
 
-
        void  drop_paths  (const Glib::RefPtr<Gdk::DragContext>& context,
                           gint                x,
                           gint                y,
@@ -2089,6 +2150,7 @@ public:
            Gtk::ComboBoxText     stretch_opts_selector;
            Gtk::Label            stretch_opts_label;
            Gtk::ToggleButton     precise_button;
+           Gtk::ToggleButton     preserve_formants_button;
            Gtk::HBox             opts_box;
 
            Gtk::Button*          cancel_button;
@@ -2131,7 +2193,9 @@ public:
 
        void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
        void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
-
+#ifdef GTKOSX
+       void ensure_all_elements_drawn ();
+#endif
        /* nudging tracks */
 
        void nudge_track (bool use_edit_point, bool forwards);
@@ -2230,6 +2294,7 @@ public:
        bool entered_track_canvas (GdkEventCrossing*);
        void set_entered_track (TimeAxisView*);
        void set_entered_regionview (RegionView*);
+       void ensure_track_visible (TimeAxisView*);
        gint left_automation_track ();
 
        bool _new_regionviews_show_envelope;
@@ -2286,15 +2351,11 @@ public:
        void snap_to_internal (nframes64_t& first, int32_t direction = 0, bool for_mark = false);
 
        RhythmFerret* rhythm_ferret;
+       BundleManager* _bundle_manager;
+       GlobalPortMatrixWindow* _global_port_matrix[ARDOUR::DataType::num_types];
 
        void fit_tracks ();
        void set_track_height (uint32_t h);
-       void set_track_height_largest ();
-       void set_track_height_large ();
-       void set_track_height_larger ();
-       void set_track_height_normal ();
-       void set_track_height_smaller ();
-       void set_track_height_small ();
 
        void remove_tracks ();
        void toggle_tracks_active ();
@@ -2306,6 +2367,12 @@ public:
        bool idle_resize();
        friend gboolean _idle_resize (gpointer);
        std::vector<TimeAxisView*> pending_resizes;
+
+       void visible_order_range (int*, int*) const;
+       bool y_movement_disallowed (int, int, int, int, int, std::bitset<512> const &, std::vector<int32_t> const &) const;
+
+       void located ();
+       bool _pending_locate_request;
 };
 
 #endif /* __ardour_editor_h__ */