Improve scrolling performance for sessions containing hundreds of regions over many...
[ardour.git] / gtk2_ardour / editor.h
index d2b0043d6684b415e01ad796b5b8bd9de4fb1178..47937700710d3a9e7c553ba2ee0f447eb938bf08 100644 (file)
@@ -61,9 +61,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 +97,7 @@ class Marker;
 class GroupedButtons;
 class AutomationLine;
 class Selection;
+class TempoLines;
 class TimeSelection;
 class TrackSelection;
 class AutomationSelection;
@@ -238,7 +237,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,7 +260,6 @@ 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 */
@@ -860,6 +858,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;
@@ -894,6 +893,7 @@ class Editor : public PublicEditor
 
        gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;}
        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 +934,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;
        };
            
@@ -1092,7 +1106,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>);
 
@@ -1214,6 +1232,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);
@@ -1504,7 +1523,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 +1550,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 ();
@@ -1603,7 +1618,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 +1628,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 ();