Move Diskstream ownership to Track, so that Session no longer holds lists of Diskstre...
[ardour.git] / gtk2_ardour / mixer_ui.h
index 673a6195946165ead156f20b86b0b44a89bd7070..935e85559e7d2240320295a969ac09ba6847881a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2000 Paul Davis 
+    Copyright (C) 2000 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 #include <gtkmm/treeview.h>
 
 #include "pbd/stateful.h"
+#include "pbd/signals.h"
 
 #include "ardour/ardour.h"
+#include "ardour/session_handle.h"
 
 #include "route_processor_selection.h"
 #include "enums.h"
 namespace ARDOUR {
        class Route;
        class RouteGroup;
-       class Session;
-       class AudioDiskstream;
 };
 
 class MixerStrip;
 class PluginSelector;
 class MixerGroupTabs;
+class MonitorSection;
 
-class Mixer_UI : public Gtk::Window
+class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr
 {
   public:
        Mixer_UI ();
        ~Mixer_UI();
 
-       void connect_to_session (ARDOUR::Session *);
-       
-       PluginSelector&  plugin_selector() { return *_plugin_selector; }
+       void set_session (ARDOUR::Session *);
+
+       PluginSelector* plugin_selector();
 
        void  set_strip_width (Width);
        Width get_strip_width () const { return _strip_width; }
@@ -79,14 +80,11 @@ class Mixer_UI : public Gtk::Window
        void set_auto_rebinding(bool);
 
        RouteRedirectSelection& selection() { return _selection; }
+        MonitorSection* monitor_section() const { return _monitor_section; }
 
-       static const char* get_order_key();
-       
   private:
-       ARDOUR::Session         *session;
-
        bool                                    _visible;
-       
+
        Gtk::HBox                               global_hpacker;
        Gtk::VBox                               global_vpacker;
        Gtk::ScrolledWindow             scroller;
@@ -110,17 +108,21 @@ class Mixer_UI : public Gtk::Window
 
        // for restoring window geometry.
        int m_root_x, m_root_y, m_width, m_height;
-       
+
        void set_window_pos_and_size ();
        void get_window_pos_and_size ();
 
        bool on_key_press_event (GdkEventKey*);
+       bool on_key_release_event (GdkEventKey*);
+       bool on_scroll_event (GdkEventScroll*);
 
        void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*);
-       
+
        std::list<MixerStrip *> strips;
 
        bool strip_scroller_button_release (GdkEventButton*);
+       void scroll_left ();
+       void scroll_right ();
 
        void add_strip (ARDOUR::RouteList&);
        void remove_strip (MixerStrip *);
@@ -144,8 +146,8 @@ class Mixer_UI : public Gtk::Window
        gint start_updating ();
        gint stop_updating ();
 
-       void disconnect_from_session ();
-       
+       void session_going_away ();
+
        sigc::connection fast_screen_update_connection;
        void fast_update_strips ();
 
@@ -154,10 +156,8 @@ class Mixer_UI : public Gtk::Window
        void redisplay_track_list ();
        bool no_track_list_redisplay;
        bool track_display_button_press (GdkEventButton*);
-#ifdef GTKOSX
-       void queue_draw_all_strips ();
-#endif
-       
+       void strip_width_changed ();
+
        void track_list_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
        void track_list_delete (const Gtk::TreeModel::Path&);
        void track_list_reorder (const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter, int* new_order);
@@ -167,7 +167,7 @@ class Mixer_UI : public Gtk::Window
 
        void set_all_strips_visibility (bool yn);
        void set_all_audio_visibility (int tracks, bool yn);
-       
+
        void hide_all_routes ();
        void show_all_routes ();
        void show_all_audiobus ();
@@ -195,14 +195,14 @@ class Mixer_UI : public Gtk::Window
        void track_column_click (gint);
        void build_track_menu ();
 
+        MonitorSection* _monitor_section;
        PluginSelector    *_plugin_selector;
 
-       void strip_name_changed (MixerStrip *);
-
-       void group_flags_changed (void *src, ARDOUR::RouteGroup *);
+       void strip_property_changed (const PBD::PropertyChange&, MixerStrip *);
+       void route_group_property_changed (ARDOUR::RouteGroup *, const PBD::PropertyChange &);
 
        /* various treeviews */
-       
+
        struct TrackDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
            TrackDisplayModelColumns () {
                    add (text);
@@ -217,7 +217,7 @@ class Mixer_UI : public Gtk::Window
        };
 
        struct GroupDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
-           GroupDisplayModelColumns() { 
+           GroupDisplayModelColumns() {
                    add (visible);
                    add (text);
                    add (group);
@@ -245,7 +245,7 @@ class Mixer_UI : public Gtk::Window
 
        Width _strip_width;
 
-       void sync_order_keys (const char *src);
+       void sync_order_keys (std::string const &);
        bool strip_redisplay_does_not_reset_order_keys;
        bool strip_redisplay_does_not_sync_order_keys;
        bool ignore_sync;