summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/ardour3_ui_default.conf16
-rw-r--r--gtk2_ardour/ardour3_widget_list.rc1
-rw-r--r--gtk2_ardour/ardour_ui.cc15
-rw-r--r--gtk2_ardour/ardour_ui.h6
-rw-r--r--gtk2_ardour/ardour_ui2.cc24
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc1
-rw-r--r--gtk2_ardour/canvas_vars.h1
-rw-r--r--libs/ardour/ardour/session.h5
-rw-r--r--libs/ardour/session.cc3
9 files changed, 66 insertions, 6 deletions
diff --git a/gtk2_ardour/ardour3_ui_default.conf b/gtk2_ardour/ardour3_ui_default.conf
index 9c9d3d7156..f0a6e225d1 100644
--- a/gtk2_ardour/ardour3_ui_default.conf
+++ b/gtk2_ardour/ardour3_ui_default.conf
@@ -415,6 +415,22 @@
<Option name="rude audition: text" value="979797ff"/>
<Option name="rude audition: text active" value="ffffffff"/>
<Option name="rude audition: text mid" value="00000000"/>
+ <Option name="feedback alert: border start" value="997171ff"/>
+ <Option name="feedback alert: border end" value="000000ff"/>
+ <Option name="feedback alert: border start selected" value="000000ff"/>
+ <Option name="feedback alert: border end selected" value="00000000"/>
+ <Option name="feedback alert: fill start" value="684d4dff"/>
+ <Option name="feedback alert: fill end" value="513c3cff"/>
+ <Option name="feedback alert: fill start active" value="ff1f1fff"/>
+ <Option name="feedback alert: fill end active" value="e21b1bff"/>
+ <Option name="feedback alert: fill start mid" value="00000000"/>
+ <Option name="feedback alert: fill end mid" value="00000000"/>
+ <Option name="feedback alert: led" value="00000000"/>
+ <Option name="feedback alert: led active" value="00000000"/>
+ <Option name="feedback alert: led mid" value="00000000"/>
+ <Option name="feedback alert: text" value="969696ff"/>
+ <Option name="feedback alert: text active" value="e5e5e5ff"/>
+ <Option name="feedback alert: text mid" value="00000000"/>
<Option name="mute button: border start" value="ffcb8bff"/>
<Option name="mute button: border end" value="603600ff"/>
<Option name="mute button: border start selected" value="00000000"/>
diff --git a/gtk2_ardour/ardour3_widget_list.rc b/gtk2_ardour/ardour3_widget_list.rc
index 9cf7625da8..ac9348031f 100644
--- a/gtk2_ardour/ardour3_widget_list.rc
+++ b/gtk2_ardour/ardour3_widget_list.rc
@@ -395,6 +395,7 @@ widget "*send alert button" style:highest "small_text"
widget "*solo button" style:highest "monitor"
widget "*rude solo" style:highest "small_text"
widget "*rude audition" style:highest "small_text"
+widget "*feedback alert" style:highest "small_text"
widget "*transport option button" style:highest "small_text"
widget "*transport active option button" style:highest "small_text"
widget "*plugin bypass button" style:highest "small_text"
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 9c534c406a..5149ac40d1 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -161,10 +161,12 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
, auditioning_alert_button (_("AUDITION"))
, solo_alert_button (_("SOLO"))
+ , feedback_alert_button (_("FEEDBACK"))
, error_log_button (_("Errors"))
, _status_bar_visibility (X_("status-bar"))
+ , _feedback_exists (false)
{
using namespace Gtk::Menu_Helpers;
@@ -267,6 +269,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
/* tell the user about feedback */
ARDOUR::Session::FeedbackDetected.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::feedback_detected, this), gui_context ());
+ ARDOUR::Session::SuccessfulGraphSort.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::successful_graph_sort, this), gui_context ());
/* handle requests to deal with missing files */
@@ -3880,13 +3883,13 @@ ARDOUR_UI::drop_process_buffers ()
void
ARDOUR_UI::feedback_detected ()
{
- MessageDialog d (
- _("Something you have just done has generated a feedback path within Ardour's "
- "routing. Until this feedback is removed, Ardour's output will be as it was "
- "before you made the feedback-generating connection.")
- );
+ _feedback_exists = true;
+}
- d.run ();
+void
+ARDOUR_UI::successful_graph_sort ()
+{
+ _feedback_exists = false;
}
void
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 15975f29cf..cb74c12a11 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -444,12 +444,14 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
ArdourButton auditioning_alert_button;
ArdourButton solo_alert_button;
+ ArdourButton feedback_alert_button;
Gtk::VBox alert_box;
void solo_blink (bool);
void sync_blink (bool);
void audition_blink (bool);
+ void feedback_blink (bool);
void soloing_changed (bool);
void auditioning_changed (bool);
@@ -457,6 +459,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
bool solo_alert_press (GdkEventButton* ev);
bool audition_alert_press (GdkEventButton* ev);
+ bool feedback_alert_press (GdkEventButton *);
void big_clock_value_changed ();
void primary_clock_value_changed ();
@@ -734,6 +737,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
ArdourButton midi_panic_button;
void midi_panic ();
+
+ void successful_graph_sort ();
+ bool _feedback_exists;
};
#endif /* __ardour_gui_h__ */
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index e7cac302f7..9209b61afb 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -141,6 +141,7 @@ ARDOUR_UI::setup_tooltips ()
set_tip (time_master_button, string_compose (_("Does %1 control the time?"), PROGRAM_NAME));
set_tip (solo_alert_button, _("When active, something is soloed.\nClick to de-solo everything"));
set_tip (auditioning_alert_button, _("When active, auditioning is taking place\nClick to stop the audition"));
+ set_tip (feedback_alert_button, _("When active, there is a feedback loop."));
set_tip (primary_clock, _("Primary Clock"));
set_tip (secondary_clock, _("Secondary Clock"));
@@ -324,9 +325,12 @@ ARDOUR_UI::setup_transport ()
solo_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::solo_alert_press), false);
auditioning_alert_button.set_name ("rude audition");
auditioning_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_press), false);
+ feedback_alert_button.set_name ("feedback alert");
+ feedback_alert_button.signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::feedback_alert_press), false);
alert_box.pack_start (solo_alert_button, true, false);
alert_box.pack_start (auditioning_alert_button, true, false);
+ alert_box.pack_start (feedback_alert_button, true, false);
HBox* tbox = manage (new HBox);
tbox->set_spacing (2);
@@ -512,6 +516,12 @@ ARDOUR_UI::solo_alert_press (GdkEventButton*)
return true;
}
+bool
+ARDOUR_UI::feedback_alert_press (GdkEventButton *)
+{
+ return true;
+}
+
void
ARDOUR_UI::solo_blink (bool onoff)
{
@@ -573,6 +583,20 @@ ARDOUR_UI::audition_blink (bool onoff)
}
void
+ARDOUR_UI::feedback_blink (bool onoff)
+{
+ if (_feedback_exists) {
+ if (onoff) {
+ feedback_alert_button.set_active (true);
+ } else {
+ feedback_alert_button.set_active (false);
+ }
+ } else {
+ feedback_alert_button.set_active (false);
+ }
+}
+
+void
ARDOUR_UI::set_transport_sensitivity (bool yn)
{
ActionManager::set_sensitive (ActionManager::transport_sensitive_actions, yn);
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 8534e874ca..bb3887862d 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -154,6 +154,7 @@ ARDOUR_UI::set_session (Session *s)
Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::solo_blink));
Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::sync_blink));
Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::audition_blink));
+ Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::feedback_blink));
_session->RecordStateChanged.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::record_state_changed, this), gui_context());
_session->StepEditStatusChange.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::step_edit_status_change, this, _1), gui_context());
diff --git a/gtk2_ardour/canvas_vars.h b/gtk2_ardour/canvas_vars.h
index d35c8cad49..ac0fb81bdd 100644
--- a/gtk2_ardour/canvas_vars.h
+++ b/gtk2_ardour/canvas_vars.h
@@ -173,6 +173,7 @@ BUTTON_VARS(MonitorSectionSoloExclusiveButton, "monitor solo exclusive")
BUTTON_VARS(RudeSolo, "rude solo")
BUTTON_VARS(RudeIsolate, "rude isolate")
BUTTON_VARS(RudeAudition, "rude audition")
+BUTTON_VARS(FeedbackAlert, "feedback alert")
BUTTON_VARS(MuteButton, "mute button")
BUTTON_VARS(SoloButton, "solo button")
BUTTON_VARS(RecEnableButton, "record enable button")
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index c0e9e304fc..fd607cd6f6 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -833,6 +833,11 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
*/
static PBD::Signal0<void> FeedbackDetected;
+ /** Emitted when a graph sort has successfully completed, which means
+ that it has no feedback cycles.
+ */
+ static PBD::Signal0<void> SuccessfulGraphSort;
+
/* handlers can return an integer value:
0: config.set_audio_search_path() or config.set_midi_search_path() was used
to modify the search path and we should try to find it again.
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index e940009e94..6f03392548 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -130,6 +130,7 @@ PBD::Signal2<void,std::string, std::string> Session::Exported;
PBD::Signal1<int,boost::shared_ptr<Playlist> > Session::AskAboutPlaylistDeletion;
PBD::Signal0<void> Session::Quit;
PBD::Signal0<void> Session::FeedbackDetected;
+PBD::Signal0<void> Session::SuccessfulGraphSort;
static void clean_up_session_event (SessionEvent* ev) { delete ev; }
const SessionEvent::RTeventCallback Session::rt_cleanup (clean_up_session_event);
@@ -1390,6 +1391,8 @@ Session::resort_routes_using (boost::shared_ptr<RouteList> r)
}
#endif
+ SuccessfulGraphSort (); /* EMIT SIGNAL */
+
} else {
/* The topological sort failed, so we have a problem. Tell everyone
and stick to the old graph; this will continue to be processed, so