Option to fit a route group to the editor window.
[ardour.git] / gtk2_ardour / editor.h
index 37f66e71ab5e112f475ba416627a4dab99ba4981..20e9927823a6a2dbac0d1a37de4285851413f289 100644 (file)
@@ -114,6 +114,7 @@ class TimeAxisView;
 class TimeFXDialog;
 class TimeSelection;
 class TrackSelection;
+class EditorGroupTabs;
 
 /* <CMT Additions> */
 class ImageFrameView;
@@ -192,7 +193,7 @@ class Editor : public PublicEditor
 
        TimeAxisView* get_named_time_axis(const std::string & name) ;
        void foreach_time_axis_view (sigc::slot<void,TimeAxisView&>);
-       void add_to_idle_resize (TimeAxisView*, uint32_t);
+       void add_to_idle_resize (TimeAxisView*, int32_t);
 
        RouteTimeAxisView* get_route_view_by_id (PBD::ID& id);
 
@@ -344,6 +345,7 @@ class Editor : public PublicEditor
        void toggle_zero_line_visibility ();
        void toggle_waveforms_while_recording ();
        void set_summary ();
+       void set_group_tabs ();
        void toggle_measure_visibility ();
        void toggle_logo_visibility ();
 
@@ -399,16 +401,13 @@ class Editor : public PublicEditor
        void goto_visual_state (uint32_t);
        void save_visual_state (uint32_t);
 
-       void queue_draw_resize_line (int at);
-       void start_resize_line_ops ();
-       void end_resize_line_ops ();
+       void update_rec_display ();
 
   protected:
        void map_transport_state ();
        void map_position_change (nframes64_t);
 
        void on_realize();
-       bool on_expose_event (GdkEventExpose*);
 
   private:
 
@@ -600,10 +599,6 @@ class Editor : public PublicEditor
        Gtk::VBox           global_vpacker;
        Gtk::VBox           vpacker;
 
-       bool need_resize_line;
-       int  resize_line_y;
-       int  old_resize_line_y;
-
        Gdk::Cursor*          current_canvas_cursor;
        void set_canvas_cursor ();
        Gdk::Cursor* which_grabber_cursor ();
@@ -1065,6 +1060,7 @@ class Editor : public PublicEditor
        /* track views */
        TrackViewList track_views;
        std::pair<TimeAxisView*, ARDOUR::layer_t> trackview_by_y_position (double);
+       TrackSelection axis_views_from_routes (std::list<ARDOUR::Route *>) const;
 
        static Gdk::Cursor* cross_hair_cursor;
        static Gdk::Cursor* trimmer_cursor;
@@ -1177,6 +1173,7 @@ class Editor : public PublicEditor
        void reverse_region ();
        void strip_region_silence ();
        void normalize_region ();
+       double _last_normalization_value;
        void denormalize_region ();
        void adjust_region_scale_amplitude (bool up);
        void quantize_region ();
@@ -1677,6 +1674,7 @@ public:
        Glib::RefPtr<Gtk::RadioAction> zoom_focus_action (Editing::ZoomFocus);
 
        Gtk::HBox           zoom_box;
+       Gtk::VBox           zoom_vbox;
 
        void                zoom_adjustment_changed();
 
@@ -1769,22 +1767,30 @@ public:
        void reposition_zoom_rect (nframes64_t start, nframes64_t end);
        
        /* diskstream/route display management */
+       Glib::RefPtr<Gdk::Pixbuf> rec_enabled_icon;
+       Glib::RefPtr<Gdk::Pixbuf> rec_disabled_icon;
 
        struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
            RouteDisplayModelColumns() { 
                    add (text);
                    add (visible);
+                   add (rec_enabled);
                    add (temporary_visible);
+                   add (is_track);
                    add (tv);
                    add (route);
            }
            Gtk::TreeModelColumn<Glib::ustring>  text;
            Gtk::TreeModelColumn<bool>           visible;
+           Gtk::TreeModelColumn<bool>           rec_enabled;
            Gtk::TreeModelColumn<bool>           temporary_visible;
+           Gtk::TreeModelColumn<bool>           is_track;
            Gtk::TreeModelColumn<TimeAxisView*>  tv;
            Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Route> >  route;
        };
 
+       void on_tv_rec_enable_toggled(const Glib::ustring& path_string);
+
        RouteDisplayModelColumns         route_display_columns;
        Glib::RefPtr<Gtk::ListStore>     route_display_model;
        Glib::RefPtr<Gtk::TreeSelection> route_display_selection;
@@ -1837,12 +1843,10 @@ public:
 
         struct GroupListModelColumns : public Gtk::TreeModel::ColumnRecord {
                 GroupListModelColumns () {
-                      add (is_active);
                       add (is_visible);
                        add (text);
                       add (routegroup);
                 }
-               Gtk::TreeModelColumn<bool> is_active;
                Gtk::TreeModelColumn<bool> is_visible;
                Gtk::TreeModelColumn<std::string> text;
                Gtk::TreeModelColumn<ARDOUR::RouteGroup*>   routegroup;
@@ -1852,23 +1856,28 @@ public:
        Glib::RefPtr<Gtk::ListStore> group_model;
        Glib::RefPtr<Gtk::TreeSelection> group_selection;
 
-       Gtk::TreeView          edit_group_display;
-       Gtk::ScrolledWindow    edit_group_display_scroller;
-       Gtk::Menu*             edit_group_list_menu;
-
-       void build_edit_group_list_menu ();
-       void activate_all_edit_groups ();
-       void disable_all_edit_groups ();
-
-       bool in_edit_group_row_change;
-       void edit_group_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
-       void edit_group_name_edit (const Glib::ustring&, const Glib::ustring&);
-       void new_edit_group ();
-       void edit_group_list_button_clicked ();
-       gint edit_group_list_button_press_event (GdkEventButton* ev);
-       void add_edit_group (ARDOUR::RouteGroup* group);
-       void remove_selected_edit_group ();
-       void edit_groups_changed ();
+       Gtk::TreeView          route_group_display;
+       Gtk::ScrolledWindow    route_group_display_scroller;
+       Gtk::Menu*             route_group_list_menu;
+
+       void build_route_group_list_menu (ARDOUR::RouteGroup *);
+       void activate_all_route_groups ();
+       void disable_all_route_groups ();
+
+       bool in_route_group_row_change;
+       void route_group_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
+       void route_group_name_edit (const Glib::ustring&, const Glib::ustring&);
+       void new_route_group ();
+       void new_route_group_from_selection ();
+       void new_route_group_from_rec_enabled ();
+       void new_route_group_from_soloed ();
+       void edit_route_group (ARDOUR::RouteGroup *);
+       void fit_route_group (ARDOUR::RouteGroup *);
+       void route_group_list_button_clicked ();
+       gint route_group_list_button_press_event (GdkEventButton* ev);
+       void add_route_group (ARDOUR::RouteGroup* group);
+       void remove_selected_route_group ();
+       void route_groups_changed ();
        void group_flags_changed (void*, ARDOUR::RouteGroup*);
 
        Gtk::VBox           list_vpacker;
@@ -2013,10 +2022,10 @@ public:
        void freeze_route ();
        void unfreeze_route ();
 
-       /* edit-group solo + mute */
+       /* route-group solo + mute */
 
-       void set_edit_group_solo (ARDOUR::Route&, bool);
-       void set_edit_group_mute (ARDOUR::Route&, bool);
+       void set_route_group_solo (ARDOUR::Route&, bool);
+       void set_route_group_mute (ARDOUR::Route&, bool);
 
        /* duplication */
 
@@ -2213,7 +2222,8 @@ public:
        BundleManager* _bundle_manager;
        GlobalPortMatrixWindow* _global_port_matrix[ARDOUR::DataType::num_types];
 
-       void fit_tracks ();
+       void fit_tracks (TrackSelection &);
+       void fit_selected_tracks ();
        void set_track_height (uint32_t h);
 
        void remove_tracks ();
@@ -2221,10 +2231,10 @@ public:
 
        bool _have_idled;
        int resize_idle_id;
-       int32_t resize_idle_target;
        bool idle_resize();
        friend gboolean _idle_resize (gpointer);
-       std::vector<TimeAxisView*> pending_resizes;
+       int32_t _pending_resize_amount;
+       TimeAxisView* _pending_resize_view;
 
        void visible_order_range (int*, int*) const;
 
@@ -2237,6 +2247,10 @@ public:
        void update_canvas_now ();
        void streamview_height_changed ();
 
+       EditorGroupTabs* _group_tabs;
+
+       void set_route_group_activation (ARDOUR::RouteGroup *, bool);
+
        friend class Drag;
        friend class RegionDrag;
        friend class RegionMoveDrag;
@@ -2262,6 +2276,7 @@ public:
        friend class RegionInsertDrag;
 
        friend class EditorSummary;
+       friend class EditorGroupTabs;
 };
 
 #endif /* __ardour_editor_h__ */