diff options
-rw-r--r-- | gtk2_ardour/ardour3_ui_default.conf | 16 | ||||
-rw-r--r-- | gtk2_ardour/ardour3_widget_list.rc | 1 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 15 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui2.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_dialogs.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/canvas_vars.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 5 | ||||
-rw-r--r-- | libs/ardour/session.cc | 3 |
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 |