Change the feedback alert to a flashing button; works
around part of #4432. git-svn-id: svn://localhost/ardour2/branches/3.0@10539 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
a74310ebbe
commit
cd2047cbff
|
@ -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"/>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
@ -572,6 +582,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)
|
||||
{
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue