update main window title appropriately
[ardour.git] / gtk2_ardour / ardour_ui.h
index b43b2d62a248ce32fae272750964d5f7c3c25b80..7b6c6f9e2146922eea8042bbe13ac8138ebe667c 100644 (file)
 #include <gtkmm/menubar.h>
 #include <gtkmm/textbuffer.h>
 #include <gtkmm/adjustment.h>
-#include <gtkmm2ext/gtk_ui.h>
-#include <gtkmm2ext/click_box.h>
-#include <gtkmm2ext/stateful_button.h>
-#include <gtkmm2ext/bindable_button.h>
+
+#include "gtkmm2ext/gtk_ui.h"
+#include "gtkmm2ext/click_box.h"
+#include "gtkmm2ext/stateful_button.h"
+#include "gtkmm2ext/bindable_button.h"
+#include "gtkmm2ext/bindings.h"
 
 #include "ardour/ardour.h"
 #include "ardour/types.h"
@@ -112,6 +114,7 @@ class ArdourKeyboard;
 class AudioClock;
 class ButtonJoiner;
 class ConnectionEditor;
+class DuplicateRouteDialog;
 class MainClock;
 class Mixer_UI;
 class ArdourPrompter;
@@ -201,6 +204,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
        void new_midi_tracer_window ();
        void toggle_editing_space();
        void toggle_mixer_space();
+       void toggle_mixer_list();
+       void toggle_monitor_section_visibility ();
        void toggle_keep_tearoffs();
 
        static PublicEditor* _instance;
@@ -248,6 +253,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
         void add_routes_part_two ();
         void add_routes_thread ();
 
+       void start_duplicate_routes ();
+
        void add_video (Gtk::Window* float_window);
        void remove_video ();
        void start_video_server_menu (Gtk::Window* float_window);
@@ -315,6 +322,22 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
 
        void hide_application ();
 
+       Gtk::Notebook& tabs();
+       Gtk::Window& main_window () { return _main_window; }
+
+       void setup_toplevel_window (Gtk::Window&, const std::string& name, void* owner);
+       
+       /* called from a static C function */
+
+       GtkNotebook* tab_window_root_drop (GtkNotebook* src,
+                                          GtkWidget* w,
+                                          gint x,
+                                          gint y,
+                                          gpointer user_data);
+
+       bool tabbed_window_state_event_handler (GdkEventWindowState*, void* object);
+       bool key_event_handler (GdkEventKey*, Gtk::Window* window);
+
   protected:
        friend class PublicEditor;
 
@@ -335,14 +358,21 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
        void toggle_session_options_window ();
 
   private:
-       PublicEditor*        editor;
-       Mixer_UI*            mixer;
-       NSM_Client*          nsm;
-       bool                _was_dirty;
-        bool                _mixer_on_top;
-        bool                _initial_verbose_plugin_scan;
-        bool first_time_engine_run;
-
+       Gtk::Window   _main_window;
+       Gtk::VBox      main_vpacker;
+       Gtk::HBox      status_bar_hpacker;
+       Gtk::Notebook _tabs;
+       PublicEditor*  editor;
+       Mixer_UI*      mixer;
+       Gtk::Tooltips _tooltips;
+       NSM_Client*    nsm;
+       bool          _was_dirty;
+        bool          _mixer_on_top;
+        bool          _initial_verbose_plugin_scan;
+       bool           first_time_engine_run;
+
+       Gtkmm2ext::Bindings _global_bindings;
+       
        void goto_editor_window ();
        void goto_mixer_window ();
        void toggle_mixer_window ();
@@ -354,6 +384,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
        void setup_clock ();
 
        static ARDOUR_UI *theArdourUI;
+       SessionDialog *_session_dialog;
 
         int starting ();
 
@@ -365,6 +396,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
        void update_autosave();
        sigc::connection _autosave_connection;
 
+       void session_dirty_changed ();
+       void update_title ();
+       
        void map_transport_state ();
        int32_t do_engine_start ();
 
@@ -383,8 +417,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
        void         start_clocking ();
        void         stop_clocking ();
 
-       bool main_window_state_event_handler (GdkEventWindowState*, bool window_was_editor);
-
        void update_transport_clocks (framepos_t pos);
        void record_state_changed ();
 
@@ -424,7 +456,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
            };
 
            TransportControllable (std::string name, ARDOUR_UI&, ToggleType);
-           void set_value (double);
+           void set_value (double, PBD::Controllable::GroupControlDisposition group_override);
            double get_value (void) const;
 
            ARDOUR_UI& ui;
@@ -603,6 +635,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
        bool process_snapshot_session_prompter (ArdourPrompter& prompter, bool switch_to_it);
        void snapshot_session (bool switch_to_it);
 
+       void quick_snapshot_session (bool switch_to_it);  //does not promtp for name, just makes a timestamped file
+
        SaveAsDialog* save_as_dialog;
 
        bool save_as_progress_update (float fraction, int64_t cnt, int64_t total, Gtk::Label* label, Gtk::ProgressBar* bar);
@@ -615,11 +649,14 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
 
        Meterbridge  *meterbridge;
        int         create_meterbridge ();
+
         /* Dialogs that can be created via new<T> */
 
+        RCOptionEditor* rc_option_editor;
+       Gtk::HBox rc_option_editor_placeholder;
+       
         WM::Proxy<SpeakerDialog> speaker_config_window;
         WM::Proxy<KeyEditor> key_editor;
-        WM::Proxy<RCOptionEditor> rc_option_editor;
         WM::Proxy<AddRouteDialog> add_route_dialog;
         WM::Proxy<About> about;
         WM::Proxy<LocationUIWindow> location_ui;
@@ -785,7 +822,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
 
         int do_audio_midi_setup (uint32_t);
        void audioengine_became_silent ();
+
+       DuplicateRouteDialog* duplicate_routes_dialog;
+
+       void grab_focus_after_dialog ();
+
+       void tabs_switch (GtkNotebookPage*, guint page_number);
+       void tabs_page_added (Gtk::Widget*, guint page_number);
+       void tabs_page_removed (Gtk::Widget*, guint page_number);
+       bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*);
 };
 
 #endif /* __ardour_gui_h__ */
-