diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-01-23 16:26:41 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:38 -0400 |
commit | 5c658db4bff20aea644751f58c7e8c85385d3b2c (patch) | |
tree | bd326adae482ff6bcbb27c647a3d3065e2aad232 | |
parent | 87481a2ee17023686991e1a87182c2e8ed335690 (diff) |
most of the changes required to add a new master faders tabbable
the visibility button isn't actually working correctly
-rw-r--r-- | gtk2_ardour/ardour.menus.in | 6 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 5 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_dependents.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_dialogs.cc | 51 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_mixer.cc | 14 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.h | 6 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/tabbable.h | 1 |
9 files changed, 98 insertions, 9 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index d8ea6eb669..d5cb227cb3 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -558,6 +558,12 @@ <menuitem action='attach-preferences'/> <menuitem action='detach-preferences'/> </menu> + <menu action='MastersMenu'> + <menuitem action='show-preferences'/> + <menuitem action='hide-preferences'/> + <menuitem action='attach-preferences'/> + <menuitem action='detach-preferences'/> + </menu> <menuitem action='toggle-meterbridge'/> <menuitem action='toggle-luawindow'/> <separator/> diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 31450f2b23..65b098dd4c 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -255,6 +255,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) , main_window_visibility (0) , editor (0) , mixer (0) + , masters (0) , nsm (0) , _was_dirty (false) , _mixer_on_top (false) @@ -311,6 +312,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) , editor_visibility_button (S_("Window|Editor")) , mixer_visibility_button (S_("Window|Mixer")) , prefs_visibility_button (S_("Window|Preferences")) + , masters_visibility_button (S_("Windows|Masters")) { Gtkmm2ext::init (localedir); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 3039ecc172..a0e747f5e6 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -119,6 +119,7 @@ class ButtonJoiner; class ConnectionEditor; class DuplicateRouteDialog; class MainClock; +class MasterFaders; class Mixer_UI; class ArdourPrompter; class PublicEditor; @@ -204,6 +205,7 @@ public: PublicEditor& the_editor() { return *editor;} Mixer_UI* the_mixer() { return mixer; } + MasterFaders* the_masters() { return masters; } void new_midi_tracer_window (); void toggle_editing_space(); @@ -384,6 +386,7 @@ private: Gtk::Notebook _tabs; PublicEditor* editor; Mixer_UI* mixer; + MasterFaders* masters; Gtk::Tooltips _tooltips; NSM_Client* nsm; bool _was_dirty; @@ -667,6 +670,7 @@ private: int create_editor (); int create_meterbridge (); int create_luawindow (); + int create_masters (); Meterbridge *meterbridge; LuaWindow *luawindow; @@ -853,6 +857,7 @@ private: ArdourButton editor_visibility_button; ArdourButton mixer_visibility_button; ArdourButton prefs_visibility_button; + ArdourButton masters_visibility_button; bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev, Gtkmm2ext::Bindings*); bool try_gtk_accel_binding (GtkWindow* win, GdkEventKey* ev, bool translate, GdkModifierType modifier); diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index 68e29f57f8..9240ada261 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -36,6 +36,7 @@ #include "actions.h" #include "ardour_ui.h" #include "public_editor.h" +#include "master_faders.h" #include "meterbridge.h" #include "luawindow.h" #include "mixer_ui.h" @@ -162,7 +163,8 @@ ARDOUR_UI::tab_window_root_drop (GtkNotebook* src, tabbable = mixer; } else if (w == GTK_WIDGET(rc_option_editor->contents().gobj())) { tabbable = rc_option_editor; - } else { + } else if (w == GTK_WIDGET(masters->contents().gobj())) { + tabbable = masters; return 0; } @@ -264,8 +266,14 @@ ARDOUR_UI::setup_windows () return -1; } + if (create_masters()) { + error << _("UI: cannot setup meterbridge") << endmsg; + return -1; + } + /* order of addition affects order seen in initial window display */ + masters->add_to_notebook (_tabs, _("Masters")); rc_option_editor->add_to_notebook (_tabs, _("Preferences")); mixer->add_to_notebook (_tabs, _("Mixer")); editor->add_to_notebook (_tabs, _("Editor")); @@ -381,6 +389,8 @@ ARDOUR_UI::setup_windows () _tabs.set_current_page (_tabs.page_num (mixer->contents())); } else if (rc_option_editor && current_tab == "preferences") { _tabs.set_current_page (_tabs.page_num (rc_option_editor->contents())); + } else if (masters && current_tab == "masters") { + _tabs.set_current_page (_tabs.page_num (masters->contents())); } else if (editor) { _tabs.set_current_page (_tabs.page_num (editor->contents())); } diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index cc0d9f9d24..302f52b503 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -52,6 +52,7 @@ #include "lua_script_manager.h" #include "luawindow.h" #include "main_clock.h" +#include "master_faders.h" #include "meterbridge.h" #include "meter_patterns.h" #include "monitor_section.h" @@ -550,6 +551,7 @@ ARDOUR_UI::tabs_page_added (Widget*,guint) editor_visibility_button.drag_source_set (drag_target_entries); mixer_visibility_button.drag_source_set (drag_target_entries); prefs_visibility_button.drag_source_set (drag_target_entries); + masters_visibility_button.drag_source_set (drag_target_entries); editor_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (editor->name(), Pango::FontDescription ("Sans 24"), @@ -563,6 +565,10 @@ ARDOUR_UI::tabs_page_added (Widget*,guint) Pango::FontDescription ("Sans 24"), 0, 0, Gdk::Color ("red"))); + masters_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (masters->name(), + Pango::FontDescription ("Sans 24"), + 0, 0, + Gdk::Color ("red"))); } } @@ -573,6 +579,7 @@ ARDOUR_UI::tabs_page_removed (Widget*, guint) editor_visibility_button.drag_source_unset (); mixer_visibility_button.drag_source_unset (); prefs_visibility_button.drag_source_unset (); + masters_visibility_button.drag_source_unset (); } } @@ -581,29 +588,61 @@ ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page) { if (editor && (page == (guint) _tabs.page_num (editor->contents()))) { editor_visibility_button.set_active_state (Gtkmm2ext::ImplicitActive); + if (mixer && (mixer->tabbed() || mixer->tabbed_by_default())) { mixer_visibility_button.set_active_state (Gtkmm2ext::Off); } + if (rc_option_editor && (rc_option_editor->tabbed() || rc_option_editor->tabbed_by_default())) { prefs_visibility_button.set_active_state (Gtkmm2ext::Off); } } else if (mixer && (page == (guint) _tabs.page_num (mixer->contents()))) { + if (editor && (editor->tabbed() || editor->tabbed_by_default())) { editor_visibility_button.set_active_state (Gtkmm2ext::Off); } + mixer_visibility_button.set_active_state (Gtkmm2ext::ImplicitActive); if (rc_option_editor && (rc_option_editor->tabbed() || rc_option_editor->tabbed_by_default())) { prefs_visibility_button.set_active_state (Gtkmm2ext::Off); } - } else { + + if (masters && (masters->tabbed() || masters->tabbed_by_default())) { + masters_visibility_button.set_active_state (Gtkmm2ext::Off); + } + + } else if (page == (guint) _tabs.page_num (rc_option_editor->contents())) { + if (editor && (editor->tabbed() || editor->tabbed_by_default())) { editor_visibility_button.set_active_state (Gtkmm2ext::Off); } + if (mixer && (mixer->tabbed() || mixer->tabbed_by_default())) { mixer_visibility_button.set_active_state (Gtkmm2ext::Off); } + prefs_visibility_button.set_active_state (Gtkmm2ext::ImplicitActive); + + if (masters && (masters->tabbed() || masters->tabbed_by_default())) { + masters_visibility_button.set_active_state (Gtkmm2ext::Off); + } + + } else if (page == (guint) _tabs.page_num (masters->contents())) { + + if (editor && (editor->tabbed() || editor->tabbed_by_default())) { + editor_visibility_button.set_active_state (Gtkmm2ext::Off); + } + + if (mixer && (mixer->tabbed() || mixer->tabbed_by_default())) { + mixer_visibility_button.set_active_state (Gtkmm2ext::Off); + } + + if (rc_option_editor && (rc_option_editor->tabbed() || rc_option_editor->tabbed_by_default())) { + prefs_visibility_button.set_active_state (Gtkmm2ext::Off); + } + + masters_visibility_button.set_active_state (Gtkmm2ext::ImplicitActive); } } @@ -692,14 +731,22 @@ ARDOUR_UI::tabbable_state_change (Tabbable& t) vis_button = &editor_visibility_button; other_vis_buttons.push_back (&mixer_visibility_button); other_vis_buttons.push_back (&prefs_visibility_button); + other_vis_buttons.push_back (&masters_visibility_button); } else if (&t == mixer) { vis_button = &mixer_visibility_button; other_vis_buttons.push_back (&editor_visibility_button); other_vis_buttons.push_back (&prefs_visibility_button); - } else { + other_vis_buttons.push_back (&masters_visibility_button); + } else if (&t == rc_option_editor) { vis_button = &prefs_visibility_button; other_vis_buttons.push_back (&editor_visibility_button); + other_vis_buttons.push_back (&masters_visibility_button); other_vis_buttons.push_back (&mixer_visibility_button); + } else if (&t == masters) { + vis_button = &masters_visibility_button; + other_vis_buttons.push_back (&editor_visibility_button); + other_vis_buttons.push_back (&mixer_visibility_button); + other_vis_buttons.push_back (&prefs_visibility_button); } if (!vis_button) { diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 596aa07127..96d82277ea 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -46,6 +46,7 @@ #include "public_editor.h" #include "audio_clock.h" #include "keyboard.h" +#include "master_faders.h" #include "monitor_section.h" #include "engine_dialog.h" #include "editor.h" @@ -126,6 +127,7 @@ ARDOUR_UI::install_actions () global_actions.register_action (main_menu_actions, X_("MixerMenu"), _("Mixer")); global_actions.register_action (main_menu_actions, X_("EditorMenu"), _("Editor")); global_actions.register_action (main_menu_actions, X_("PrefsMenu"), _("Preferences")); + global_actions.register_action (main_menu_actions, X_("MastersMenu"), _("Master Faders")); global_actions.register_action (main_menu_actions, X_("DetachMenu"), _("Detach")); global_actions.register_action (main_menu_actions, X_("Help"), _("Help")); global_actions.register_action (main_menu_actions, X_("KeyMouseActions"), _("Misc. Shortcuts")); @@ -248,18 +250,22 @@ ARDOUR_UI::install_actions () global_actions.register_action (common_actions, X_("show-mixer"), _("Show"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::show_tabbable), mixer)); global_actions.register_action (common_actions, X_("show-preferences"), _("Show"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::show_tabbable), rc_option_editor)); global_actions.register_action (common_actions, X_("menu-show-preferences"), _("Preferences"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::show_tabbable), rc_option_editor)); + global_actions.register_action (common_actions, X_("show-masters"), _("Show"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::show_tabbable), masters)); global_actions.register_action (common_actions, X_("hide-editor"), _("Hide"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::hide_tabbable), editor)); global_actions.register_action (common_actions, X_("hide-mixer"), _("Hide"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::hide_tabbable), mixer)); global_actions.register_action (common_actions, X_("hide-preferences"), _("Hide"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::hide_tabbable), rc_option_editor)); + global_actions.register_action (common_actions, X_("hide-masters"), _("Hide"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::hide_tabbable), masters)); global_actions.register_action (common_actions, X_("attach-editor"), _("Attach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::attach_tabbable), editor)); global_actions.register_action (common_actions, X_("attach-mixer"), _("Attach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::attach_tabbable), mixer)); global_actions.register_action (common_actions, X_("attach-preferences"), _("Attach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::attach_tabbable), rc_option_editor)); + global_actions.register_action (common_actions, X_("attach-masters"), _("Attach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::attach_tabbable), masters)); global_actions.register_action (common_actions, X_("detach-editor"), _("Detach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::detach_tabbable), editor)); global_actions.register_action (common_actions, X_("detach-mixer"), _("Detach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::detach_tabbable), mixer)); global_actions.register_action (common_actions, X_("detach-preferences"), _("Detach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::detach_tabbable), rc_option_editor)); + global_actions.register_action (common_actions, X_("detach-masters"), _("Detach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::detach_tabbable), masters)); /* These "change" actions are not intended to be used inside menus, but are for the tab/window control buttons, which have somewhat odd @@ -268,6 +274,7 @@ ARDOUR_UI::install_actions () global_actions.register_action (common_actions, X_("change-editor-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::button_change_tabbable_visibility), editor)); global_actions.register_action (common_actions, X_("change-mixer-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::button_change_tabbable_visibility), mixer)); global_actions.register_action (common_actions, X_("change-preferences-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::button_change_tabbable_visibility), rc_option_editor)); + global_actions.register_action (common_actions, X_("change-masters"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::button_change_tabbable_visibility), masters)); /* These "change" actions are not intended to be used inside menus, but are for the tab/window control key bindings, which have somewhat odd @@ -276,6 +283,7 @@ ARDOUR_UI::install_actions () global_actions.register_action (common_actions, X_("key-change-editor-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::key_change_tabbable_visibility), editor)); global_actions.register_action (common_actions, X_("key-change-mixer-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::key_change_tabbable_visibility), mixer)); global_actions.register_action (common_actions, X_("key-change-preferences-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::key_change_tabbable_visibility), rc_option_editor)); + global_actions.register_action (common_actions, X_("key-change-masters-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::key_change_tabbable_visibility), masters)); global_actions.register_action (common_actions, X_("previous-tab"), _("Previous Tab"), sigc::mem_fun (*this, &ARDOUR_UI::step_up_through_tabs)); global_actions.register_action (common_actions, X_("next-tab"), _("Next Tab"), sigc::mem_fun (*this, &ARDOUR_UI::step_down_through_tabs)); @@ -705,6 +713,8 @@ ARDOUR_UI::save_ardour_state () current_tab = "mixer"; } else if (current_page_number == _tabs.page_num (rc_option_editor->contents())) { current_tab = "preferences"; + } else if (masters && (current_page_number == _tabs.page_num (masters->contents()))) { + current_tab == "masters"; } main_window_node.add_property (X_("current-tab"), current_tab); diff --git a/gtk2_ardour/ardour_ui_mixer.cc b/gtk2_ardour/ardour_ui_mixer.cc index 921cd7bc57..570253b533 100644 --- a/gtk2_ardour/ardour_ui_mixer.cc +++ b/gtk2_ardour/ardour_ui_mixer.cc @@ -27,6 +27,7 @@ #include "actions.h" #include "ardour_ui.h" +#include "master_faders.h" #include "mixer_ui.h" #include "meterbridge.h" @@ -69,3 +70,16 @@ ARDOUR_UI::create_meterbridge () return 0; } +int +ARDOUR_UI::create_masters () +{ + try { + masters = MasterFaders::instance (); + } + + catch (failed_constructor& err) { + return -1; + } + + return 0; +} diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index 39bd39278a..7bfe8b1bdd 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -146,12 +146,6 @@ class Mixer_UI : public Gtkmm2ext::Tabbable, public PBD::ScopedConnectionList, p MixerGroupTabs* _group_tabs; - // 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_scroll_event (GdkEventScroll*); void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*); diff --git a/libs/gtkmm2ext/gtkmm2ext/tabbable.h b/libs/gtkmm2ext/gtkmm2ext/tabbable.h index 1e85ed8782..e72a86d2d8 100644 --- a/libs/gtkmm2ext/gtkmm2ext/tabbable.h +++ b/libs/gtkmm2ext/gtkmm2ext/tabbable.h @@ -25,6 +25,7 @@ #include <gtkmm/button.h> #include <gtkmm/image.h> #include <gtkmm/label.h> +#include <gtkmm/notebook.h> #include "gtkmm2ext/cairo_icon.h" #include "gtkmm2ext/window_proxy.h" |