more hot wine.
[ardour.git] / gtk2_ardour / mixer_ui.h
index ab0223aa4db7d7740e2b5655110f37285e1bf453..8352ce76a259be9351c60fcfdc003d8e984d5862 100644 (file)
@@ -40,6 +40,8 @@
 #include "ardour/types.h"
 #include "ardour/session_handle.h"
 
+#include "gtkmm2ext/visibility_tracker.h"
+
 #include "enums.h"
 #include "mixer_actor.h"
 
@@ -53,7 +55,7 @@ class PluginSelector;
 class MixerGroupTabs;
 class MonitorSection;
 
-class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public MixerActor
+class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public MixerActor, public Gtkmm2ext::VisibilityTracker
 {
   public:
        static Mixer_UI* instance();
@@ -64,7 +66,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
 
        PluginSelector* plugin_selector();
 
-       void  set_strip_width (Width);
+       void  set_strip_width (Width, bool save = false);
        Width get_strip_width () const { return _strip_width; }
 
        void unselect_strip_in_display (MixerStrip*);
@@ -73,15 +75,25 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
        XMLNode& get_state (void);
        int set_state (const XMLNode& );
 
+       void show_mixer_list (bool yn);
+       
        void show_window ();
        bool hide_window (GdkEventAny *ev);
        void show_strip (MixerStrip *);
        void hide_strip (MixerStrip *);
 
+       void maximise_mixer_space();
+       void restore_mixer_space();
+
        void ensure_float (Gtk::Window&);
 
         MonitorSection* monitor_section() const { return _monitor_section; }
 
+       void deselect_all_strip_processors();
+       void delete_processors();
+
+       void select_none ();
+
   protected:
        void set_route_targets_for_operation ();
 
@@ -129,6 +141,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
        bool strip_scroller_button_release (GdkEventButton*);
        void scroll_left ();
        void scroll_right ();
+        void toggle_midi_input_active (bool flip_others);
 
        void add_strips (ARDOUR::RouteList&);
        void remove_strip (MixerStrip *);
@@ -168,7 +181,9 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
        void show_track_list_menu ();
 
        void set_all_strips_visibility (bool yn);
-       void set_all_audio_visibility (int tracks, bool yn);
+       void set_all_audio_midi_visibility (int, bool);
+        void track_visibility_changed (std::string const & path);
+        void update_track_visibility ();
 
        void hide_all_routes ();
        void show_all_routes ();
@@ -176,6 +191,8 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
        void hide_all_audiobus ();
        void show_all_audiotracks();
        void hide_all_audiotracks ();
+       void show_all_miditracks();
+       void hide_all_miditracks ();
 
        bool in_group_row_change;
 
@@ -244,8 +261,11 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
 
        Width _strip_width;
 
-        void sync_order_keys_from_model ();
-        void sync_model_from_order_keys (ARDOUR::RouteSortOrderKey);
+        void sync_order_keys_from_treeview ();
+        void sync_treeview_from_order_keys ();
+        void reset_remote_control_ids ();
+        void reset_order_keys ();
+
         bool ignore_reorder;
 
        void parameter_changed (std::string const &);
@@ -261,6 +281,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
            it during a session teardown.
        */
        bool _in_group_rebuild_or_clear;
+        bool _route_deletion_in_progress;
 
        void update_title ();
        MixerStrip* strip_by_x (int x);
@@ -271,6 +292,12 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
        bool _following_editor_selection;
 
        void monitor_section_going_away ();
+
+       /// true if we are in fullscreen mode
+       bool _maximised;
+
+       // true if mixer list is visible
+       bool _show_mixer_list;
 };
 
 #endif /* __ardour_mixer_ui_h__ */