summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-01-18 01:30:44 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-01-18 01:30:44 +0000
commit508c5eb5bd7e31d721c3a29fc734aab3a44aa8a9 (patch)
tree4937d96a3f4d366d4722c6225da147599b97a955 /gtk2_ardour
parent4b95a7912aa27b13c4715b9580ec1bb10dbfd7c3 (diff)
make monitor section an optional feature than can be added/removed as needed. this is a big commit, and breakage is possible. it has been moderately tested. this commit also locks the remote control ID of the master bus to 318 and the monitor section (if any) to 319. the numbers are based on MIDI Machine Control limits
git-svn-id: svn://localhost/ardour2/branches/3.0@11256 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_button.cc1
-rw-r--r--gtk2_ardour/mixer_ui.cc40
-rw-r--r--gtk2_ardour/mixer_ui.h2
-rw-r--r--gtk2_ardour/monitor_section.cc4
-rw-r--r--gtk2_ardour/session_option_editor.cc31
-rw-r--r--gtk2_ardour/session_option_editor.h3
6 files changed, 64 insertions, 17 deletions
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc
index 4689b912f3..55e94a996e 100644
--- a/gtk2_ardour/ardour_button.cc
+++ b/gtk2_ardour/ardour_button.cc
@@ -468,7 +468,6 @@ ArdourButton::on_button_release_event (GdkEventButton *ev)
if (_act_on_release) {
if (_action) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (_action);
_action->activate ();
return true;
}
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 474cef2395..053f8eb595 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -250,6 +250,9 @@ Mixer_UI::Mixer_UI ()
Mixer_UI::~Mixer_UI ()
{
+ if (_monitor_section) {
+ delete _monitor_section;
+ }
}
void
@@ -323,19 +326,21 @@ Mixer_UI::add_strip (RouteList& routes)
}
if (route->is_monitor()) {
+
if (!_monitor_section) {
_monitor_section = new MonitorSection (_session);
- out_packer.pack_end (_monitor_section->tearoff(), false, false);
- } else {
- _monitor_section->set_session (_session);
- }
+
+ XMLNode* mnode = ARDOUR_UI::instance()->tearoff_settings (X_("monitor-section"));
+ if (mnode) {
+ _monitor_section->tearoff().set_state (*mnode);
+ }
+ }
+ out_packer.pack_end (_monitor_section->tearoff(), false, false);
+ _monitor_section->set_session (_session);
_monitor_section->tearoff().show_all ();
- XMLNode* mnode = ARDOUR_UI::instance()->tearoff_settings (X_("monitor-section"));
- if (mnode) {
- _monitor_section->tearoff().set_state (*mnode);
- }
+ route->DropReferences.connect (*this, invalidator(*this), ui_bind (&Mixer_UI::monitor_section_going_away, this), gui_context());
/* no regular strip shown for control out */
@@ -384,25 +389,23 @@ Mixer_UI::remove_strip (MixerStrip* strip)
return;
}
- ENSURE_GUI_THREAD (*this, &Mixer_UI::remove_strip, strip);
-
TreeModel::Children rows = track_model->children();
TreeModel::Children::iterator ri;
list<MixerStrip *>::iterator i;
-
+
if ((i = find (strips.begin(), strips.end(), strip)) != strips.end()) {
strips.erase (i);
}
-
+
strip_redisplay_does_not_sync_order_keys = true;
-
+
for (ri = rows.begin(); ri != rows.end(); ++ri) {
if ((*ri)[track_columns.strip] == strip) {
track_model->erase (ri);
break;
}
}
-
+
strip_redisplay_does_not_sync_order_keys = false;
}
@@ -1850,3 +1853,12 @@ Mixer_UI::set_route_targets_for_operation ()
_route_targets.insert (ms);
}
}
+
+void
+Mixer_UI::monitor_section_going_away ()
+{
+ if (_monitor_section) {
+ out_packer.remove (_monitor_section->tearoff());
+ _monitor_section->set_session (0);
+ }
+}
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index 5a3b746457..febc62b8dd 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -275,6 +275,8 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
void follow_editor_selection ();
bool _following_editor_selection;
+
+ void monitor_section_going_away ();
};
#endif /* __ardour_mixer_ui_h__ */
diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc
index 7de31e7d41..11d6b6925c 100644
--- a/gtk2_ardour/monitor_section.cc
+++ b/gtk2_ardour/monitor_section.cc
@@ -214,7 +214,7 @@ MonitorSection::MonitorSection (Session* s)
act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all"));
if (act) {
cut_all_button.set_related_action (act);
- }
+ }
dim_all_button.set_text (_("dim"));
dim_all_button.set_name ("monitor section dim");
@@ -549,7 +549,7 @@ MonitorSection::cut_all ()
if (act) {
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
_monitor->set_cut_all (tact->get_active());
- }
+ }
}
void
diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc
index dc72e6a045..e5cd7780f1 100644
--- a/gtk2_ardour/session_option_editor.cc
+++ b/gtk2_ardour/session_option_editor.cc
@@ -260,6 +260,13 @@ SessionOptionEditor::SessionOptionEditor (Session* s)
sigc::mem_fun (*_session_config, &SessionConfiguration::set_auto_input)
));
+ add_option (_("Monitoring"), new BoolOption (
+ "have-monitor-section",
+ _("Use monitor section in this session"),
+ sigc::mem_fun (*this, &SessionOptionEditor::get_use_monitor_section),
+ sigc::mem_fun (*this, &SessionOptionEditor::set_use_monitor_section)
+ ));
+
/* Misc */
add_option (_("Misc"), new OptionEditorHeading (_("MIDI Options")));
@@ -341,3 +348,27 @@ SessionOptionEditor::parameter_changed (std::string const & p)
_sync_source->set_sensitive (!_session->config.get_external_sync ());
}
}
+
+/* the presence of absence of a monitor section is not really a regular session
+ * property so we provide these two functions to act as setter/getter slots
+ */
+
+bool
+SessionOptionEditor::set_use_monitor_section (bool yn)
+{
+ bool had_monitor_section = _session->monitor_out();
+
+ if (yn) {
+ _session->add_monitor_section ();
+ } else {
+ _session->remove_monitor_section ();
+ }
+
+ return had_monitor_section != yn;
+}
+
+bool
+SessionOptionEditor::get_use_monitor_section ()
+{
+ return _session->monitor_out() != 0;
+}
diff --git a/gtk2_ardour/session_option_editor.h b/gtk2_ardour/session_option_editor.h
index 2563f4153d..55d49a1e3a 100644
--- a/gtk2_ardour/session_option_editor.h
+++ b/gtk2_ardour/session_option_editor.h
@@ -35,4 +35,7 @@ private:
ARDOUR::SessionConfiguration* _session_config;
ComboOption<ARDOUR::SyncSource>* _sync_source;
+
+ bool set_use_monitor_section (bool);
+ bool get_use_monitor_section ();
};