Sanitize "well-known" ctrl API
[ardour.git] / gtk2_ardour / ardour_ui.h
index ab10e80136ea0472d698a41d5ca007a5e77d6766..93a9a0ef73b2da7dfa61335dd75a908521bcc3d9 100644 (file)
@@ -59,6 +59,7 @@
 #include "gtkmm2ext/stateful_button.h"
 #include "gtkmm2ext/bindable_button.h"
 #include "gtkmm2ext/bindings.h"
+#include "gtkmm2ext/visibility_tracker.h"
 
 #include "ardour/ardour.h"
 #include "ardour/types.h"
 #include "add_route_dialog.h"
 #include "ardour_button.h"
 #include "ardour_dialog.h"
+#include "ardour_spacer.h"
 #include "ardour_window.h"
 #include "editing.h"
 #include "enums.h"
+#include "mini_timeline.h"
+#include "shuttle_control.h"
 #include "visibility_group.h"
 #include "window_manager.h"
 
 #include "engine_dialog.h"
 #include "export_video_dialog.h"
 #include "global_port_matrix.h"
+#include "idleometer.h"
 #include "keyeditor.h"
 #include "location_ui.h"
 #include "lua_script_manager.h"
 #include "rc_option_editor.h"
+#include "route_dialogs.h"
 #include "route_params_ui.h"
 #include "session_option_editor.h"
 #include "speaker_dialog.h"
@@ -109,10 +115,12 @@ class RouteParams_UI;
 class SessionOptionEditor;
 class SpeakerDialog;
 class GlobalPortMatrixWindow;
+class IdleOMeter;
 #endif
 
 class VideoTimeLine;
 class ArdourKeyboard;
+class ArdourVSpacer;
 class AudioClock;
 class ButtonJoiner;
 class ConnectionEditor;
@@ -124,7 +132,6 @@ class PublicEditor;
 class SaveAsDialog;
 class SessionDialog;
 class SessionOptionEditorWindow;
-class ShuttleControl;
 class Splash;
 class TimeInfoBox;
 class Meterbridge;
@@ -201,6 +208,12 @@ public:
 
        static ARDOUR_UI *instance () { return theArdourUI; }
 
+       /* signal emitted when escape key is pressed. All UI components that
+          need to respond to Escape in some way (e.g. break drag, clear
+          selection, etc) should connect to and handle this.
+       */
+       PBD::Signal0<void> Escape;
+
        PublicEditor&     the_editor() { return *editor;}
        Mixer_UI* the_mixer() { return mixer; }
 
@@ -211,7 +224,7 @@ public:
        void toggle_monitor_section_visibility ();
        void toggle_keep_tearoffs();
 
-       void lua_script_manager();
+       void reset_focus (Gtk::Widget*);
 
        static PublicEditor* _instance;
 
@@ -227,6 +240,7 @@ public:
 
        XMLNode* main_window_settings() const;
        XMLNode* editor_settings() const;
+       XMLNode* preferences_settings() const;
        XMLNode* mixer_settings () const;
        XMLNode* keyboard_settings () const;
        XMLNode* tearoff_settings (const char*) const;
@@ -245,8 +259,6 @@ public:
        void focus_on_clock ();
        AudioClock*   big_clock;
 
-       TimeInfoBox* time_info_box;
-
        VideoTimeLine *video_timeline;
 
        void store_clock_modes ();
@@ -256,14 +268,13 @@ public:
        void synchronize_sync_source_and_video_pullup ();
 
        void add_route ();
+       void add_route_dialog_finished (int);
+
        void add_routes_part_two ();
        void add_routes_thread ();
 
        void start_duplicate_routes ();
 
-       void add_lua_script ();
-       void remove_lua_script ();
-
        void add_video (Gtk::Window* float_window);
        void remove_video ();
        void start_video_server_menu (Gtk::Window* float_window);
@@ -272,6 +283,9 @@ public:
        void flush_videotimeline_cache (bool localcacheonly=false);
        void export_video (bool range = false);
 
+       void session_add_vca (std::string const &, uint32_t);
+
+       void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool, ARDOUR::PresentationInfo::order_t order);
        void session_add_audio_track (
                int input_channels,
                int32_t output_channels,
@@ -279,9 +293,10 @@ public:
                ARDOUR::RouteGroup* route_group,
                uint32_t how_many,
                std::string const & name_template,
-               bool strict_io
+               bool strict_io,
+               ARDOUR::PresentationInfo::order_t order
                ) {
-               session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io);
+               session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io, order);
        }
 
        void session_add_audio_bus (
@@ -290,9 +305,10 @@ public:
                        ARDOUR::RouteGroup* route_group,
                        uint32_t how_many,
                        std::string const & name_template,
-                       bool strict_io
+                       bool strict_io,
+                       ARDOUR::PresentationInfo::order_t order
                        ) {
-               session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io);
+               session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io, order);
        }
 
        void session_add_midi_track (
@@ -300,15 +316,21 @@ public:
                        uint32_t how_many,
                        std::string const & name_template,
                        bool strict_io,
-                       ARDOUR::PluginInfoPtr instrument) {
-               session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument);
+                       ARDOUR::PluginInfoPtr instrument,
+                       ARDOUR::Plugin::PresetRecord* preset,
+                       ARDOUR::PresentationInfo::order_t order
+               ) {
+               session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument, preset, order);
        }
 
-       void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr);
-       void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr);
-       void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool);
-       void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr);
-
+       void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool,
+                                     ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
+                                     ARDOUR::PresentationInfo::order_t order);
+       void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord* pset,
+                                  ARDOUR::PresentationInfo::order_t order);
+       void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool,
+                                    ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*,
+                                    ARDOUR::PresentationInfo::order_t order);
        void display_insufficient_ports_message ();
 
        void attach_to_engine ();
@@ -357,6 +379,8 @@ public:
 
        Gtkmm2ext::ActionMap global_actions;
 
+       ARDOUR::PresentationInfo::order_t translate_order (RouteDialogs::InsertAt);
+
 protected:
        friend class PublicEditor;
 
@@ -367,6 +391,8 @@ protected:
        bool ignore_dual_punch;
        void toggle_punch_in ();
        void toggle_punch_out ();
+       void toggle_session_monitoring_in ();
+       void toggle_session_monitoring_disk ();
        void show_loop_punch_ruler_and_disallow_hide ();
        void reenable_hide_loop_punch_ruler_if_appropriate ();
        void toggle_auto_return ();
@@ -378,6 +404,7 @@ protected:
 
 private:
        Gtk::Window   _main_window;
+       Gtkmm2ext::VisibilityTracker* main_window_visibility;
        Gtk::VBox      main_vpacker;
        Gtk::HBox      status_bar_hpacker;
        Gtk::Notebook _tabs;
@@ -397,7 +424,7 @@ private:
        void button_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
        void key_change_tabbable_visibility (Gtkmm2ext::Tabbable*);
        void toggle_editor_and_mixer ();
-       
+
        void tabbable_state_change (Gtkmm2ext::Tabbable&);
 
        void toggle_meterbridge ();
@@ -448,19 +475,13 @@ private:
 
        /* Transport Control */
 
+       Gtk::Table               transport_table;
        Gtk::Frame               transport_frame;
        Gtk::HBox                transport_hbox;
-       Gtk::Fixed               transport_base;
-       Gtk::Fixed               transport_button_base;
-       Gtk::Frame               transport_button_frame;
-       Gtk::HBox                transport_button_hbox;
-       Gtk::VBox                transport_button_vbox;
-       Gtk::HBox                transport_option_button_hbox;
-       Gtk::VBox                transport_option_button_vbox;
-       Gtk::HBox                transport_clock_hbox;
-       Gtk::VBox                transport_clock_vbox;
-       Gtk::HBox                primary_clock_hbox;
-       Gtk::HBox                secondary_clock_hbox;
+
+       ArdourVSpacer *secondary_clock_spacer;
+       void repack_transport_hbox ();
+       void update_clock_visibility ();
 
        struct TransportControllable : public PBD::Controllable {
            enum ToggleType {
@@ -501,16 +522,33 @@ private:
        ArdourButton auto_loop_button;
        ArdourButton play_selection_button;
        ArdourButton rec_button;
+       ArdourButton punch_in_button;
+       ArdourButton punch_out_button;
+       ArdourButton layered_button;
+
+       ArdourVSpacer recpunch_spacer;
+       ArdourVSpacer monitoring_spacer;
+
+       ArdourButton monitor_in_button;
+       ArdourButton monitor_disk_button;
+       ArdourButton auto_input_button;
+
+       Gtk::Label   punch_label;
+       Gtk::Label   layered_label;
+
+       Gtk::Label   punch_space;
+       Gtk::Label   mon_space;
 
        void toggle_external_sync ();
        void toggle_time_master ();
        void toggle_video_sync ();
 
-       ShuttleControl* shuttle_box;
+       ShuttleControl shuttle_box;
+       MiniTimeline   mini_timeline;
+       TimeInfoBox   *time_info_box;
 
        ArdourButton auto_return_button;
        ArdourButton follow_edits_button;
-       ArdourButton auto_input_button;
        ArdourButton click_button;
        ArdourButton sync_button;
 
@@ -529,6 +567,11 @@ private:
        ArdourButton     editor_meter_peak_display;
        bool             editor_meter_peak_button_release (GdkEventButton*);
 
+       bool editor_meter_button_press (GdkEventButton* ev);
+       void popup_editor_meter_menu (GdkEventButton* ev);
+       void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
+       bool _suspend_editor_meter_callbacks;
+
        void blink_handler (bool);
        sigc::connection blink_connection;
 
@@ -546,10 +589,11 @@ private:
        void _auditioning_changed (bool);
 
        bool solo_alert_press (GdkEventButton* ev);
-       bool audition_alert_press (GdkEventButton* ev);
-       bool feedback_alert_press (GdkEventButton *);
+       void audition_alert_clicked ();
        bool error_alert_press (GdkEventButton *);
 
+       void layered_button_clicked ();
+
        void big_clock_value_changed ();
        void primary_clock_value_changed ();
        void secondary_clock_value_changed ();
@@ -615,6 +659,7 @@ private:
        void edit_metadata ();
        void import_metadata ();
 
+       void set_loop_sensitivity ();
        void set_transport_sensitivity (bool);
 
        //stuff for ProTools-style numpad
@@ -635,6 +680,8 @@ private:
        void transport_roll ();
        void transport_play_selection();
        void transport_play_preroll();
+       void transport_rec_preroll();
+       void transport_rec_count_in();
        void transport_forward (int option);
        void transport_rewind (int option);
        void transport_loop ();
@@ -659,13 +706,14 @@ private:
 
        bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
        void save_session_as ();
+       void archive_session ();
        void rename_session ();
-       void setup_order_hint (AddRouteDialog::InsertAt);
 
        int         create_mixer ();
        int         create_editor ();
        int         create_meterbridge ();
        int         create_luawindow ();
+       int         create_masters ();
 
        Meterbridge  *meterbridge;
        LuaWindow    *luawindow;
@@ -683,6 +731,7 @@ private:
        WM::Proxy<EngineControl> audio_midi_setup;
        WM::Proxy<ExportVideoDialog> export_video_dialog;
        WM::Proxy<LuaScriptManager> lua_script_window;
+       WM::Proxy<IdleOMeter> idleometer;
 
        /* Windows/Dialogs that require a creator method */
 
@@ -715,7 +764,7 @@ private:
 
        void install_actions ();
 
-       void toggle_record_enable (uint32_t);
+       void toggle_record_enable (uint16_t);
 
        uint32_t rec_enabled_streams;
        void count_recenabled_streams (ARDOUR::Route&);
@@ -768,7 +817,6 @@ private:
 
        std::vector<std::string> positional_sync_strings;
 
-       void toggle_send_midi_feedback ();
        void toggle_use_mmc ();
        void toggle_send_mmc ();
        void toggle_send_mtc ();
@@ -795,6 +843,7 @@ private:
 
        PBD::ScopedConnectionList forever_connections;
        PBD::ScopedConnection halt_connection;
+       PBD::ScopedConnection editor_meter_connection;
 
        void step_edit_status_change (bool);
 
@@ -807,6 +856,8 @@ private:
        int ambiguous_file (std::string file, std::vector<std::string> hits);
 
        bool click_button_clicked (GdkEventButton *);
+       bool click_button_scroll (GdkEventScroll *);
+       bool sync_button_clicked (GdkEventButton *);
 
        VisibilityGroup _status_bar_visibility;
 
@@ -864,6 +915,13 @@ private:
 
        void step_up_through_tabs ();
        void step_down_through_tabs ();
+
+       void escape ();
+       void close_current_dialog ();
+       void pre_release_dialog ();
+
+       bool bind_lua_action_script (GdkEventButton*, int);
+       void update_action_script_btn (int i, const std::string&);
 };
 
 #endif /* __ardour_gui_h__ */