summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/ardour.menus.in6
-rw-r--r--gtk2_ardour/ardour_ui.cc2
-rw-r--r--gtk2_ardour/ardour_ui.h5
-rw-r--r--gtk2_ardour/ardour_ui_dependents.cc12
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc51
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc10
-rw-r--r--gtk2_ardour/ardour_ui_mixer.cc14
-rw-r--r--gtk2_ardour/mixer_ui.h6
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/tabbable.h1
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"