mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
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
9 changed files with 66 additions and 6 deletions
|
|
@ -415,6 +415,22 @@
|
||||||
<Option name="rude audition: text" value="979797ff"/>
|
<Option name="rude audition: text" value="979797ff"/>
|
||||||
<Option name="rude audition: text active" value="ffffffff"/>
|
<Option name="rude audition: text active" value="ffffffff"/>
|
||||||
<Option name="rude audition: text mid" value="00000000"/>
|
<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 start" value="ffcb8bff"/>
|
||||||
<Option name="mute button: border end" value="603600ff"/>
|
<Option name="mute button: border end" value="603600ff"/>
|
||||||
<Option name="mute button: border start selected" value="00000000"/>
|
<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 "*solo button" style:highest "monitor"
|
||||||
widget "*rude solo" style:highest "small_text"
|
widget "*rude solo" style:highest "small_text"
|
||||||
widget "*rude audition" 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 option button" style:highest "small_text"
|
||||||
widget "*transport active option button" style:highest "small_text"
|
widget "*transport active option button" style:highest "small_text"
|
||||||
widget "*plugin bypass 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"))
|
, auditioning_alert_button (_("AUDITION"))
|
||||||
, solo_alert_button (_("SOLO"))
|
, solo_alert_button (_("SOLO"))
|
||||||
|
, feedback_alert_button (_("FEEDBACK"))
|
||||||
|
|
||||||
, error_log_button (_("Errors"))
|
, error_log_button (_("Errors"))
|
||||||
|
|
||||||
, _status_bar_visibility (X_("status-bar"))
|
, _status_bar_visibility (X_("status-bar"))
|
||||||
|
, _feedback_exists (false)
|
||||||
|
|
||||||
{
|
{
|
||||||
using namespace Gtk::Menu_Helpers;
|
using namespace Gtk::Menu_Helpers;
|
||||||
|
|
@ -267,6 +269,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
|
||||||
/* tell the user about feedback */
|
/* tell the user about feedback */
|
||||||
|
|
||||||
ARDOUR::Session::FeedbackDetected.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::feedback_detected, this), gui_context ());
|
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 */
|
/* handle requests to deal with missing files */
|
||||||
|
|
||||||
|
|
@ -3880,13 +3883,13 @@ ARDOUR_UI::drop_process_buffers ()
|
||||||
void
|
void
|
||||||
ARDOUR_UI::feedback_detected ()
|
ARDOUR_UI::feedback_detected ()
|
||||||
{
|
{
|
||||||
MessageDialog d (
|
_feedback_exists = true;
|
||||||
_("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.")
|
|
||||||
);
|
|
||||||
|
|
||||||
d.run ();
|
void
|
||||||
|
ARDOUR_UI::successful_graph_sort ()
|
||||||
|
{
|
||||||
|
_feedback_exists = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -444,12 +444,14 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
||||||
|
|
||||||
ArdourButton auditioning_alert_button;
|
ArdourButton auditioning_alert_button;
|
||||||
ArdourButton solo_alert_button;
|
ArdourButton solo_alert_button;
|
||||||
|
ArdourButton feedback_alert_button;
|
||||||
|
|
||||||
Gtk::VBox alert_box;
|
Gtk::VBox alert_box;
|
||||||
|
|
||||||
void solo_blink (bool);
|
void solo_blink (bool);
|
||||||
void sync_blink (bool);
|
void sync_blink (bool);
|
||||||
void audition_blink (bool);
|
void audition_blink (bool);
|
||||||
|
void feedback_blink (bool);
|
||||||
|
|
||||||
void soloing_changed (bool);
|
void soloing_changed (bool);
|
||||||
void auditioning_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 solo_alert_press (GdkEventButton* ev);
|
||||||
bool audition_alert_press (GdkEventButton* ev);
|
bool audition_alert_press (GdkEventButton* ev);
|
||||||
|
bool feedback_alert_press (GdkEventButton *);
|
||||||
|
|
||||||
void big_clock_value_changed ();
|
void big_clock_value_changed ();
|
||||||
void primary_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;
|
ArdourButton midi_panic_button;
|
||||||
void midi_panic ();
|
void midi_panic ();
|
||||||
|
|
||||||
|
void successful_graph_sort ();
|
||||||
|
bool _feedback_exists;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __ardour_gui_h__ */
|
#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 (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 (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 (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 (primary_clock, _("Primary Clock"));
|
||||||
set_tip (secondary_clock, _("Secondary 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);
|
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.set_name ("rude audition");
|
||||||
auditioning_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_press), false);
|
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 (solo_alert_button, true, false);
|
||||||
alert_box.pack_start (auditioning_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);
|
HBox* tbox = manage (new HBox);
|
||||||
tbox->set_spacing (2);
|
tbox->set_spacing (2);
|
||||||
|
|
@ -512,6 +516,12 @@ ARDOUR_UI::solo_alert_press (GdkEventButton*)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ARDOUR_UI::feedback_alert_press (GdkEventButton *)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ARDOUR_UI::solo_blink (bool onoff)
|
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
|
void
|
||||||
ARDOUR_UI::set_transport_sensitivity (bool yn)
|
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::solo_blink));
|
||||||
Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::sync_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::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->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());
|
_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(RudeSolo, "rude solo")
|
||||||
BUTTON_VARS(RudeIsolate, "rude isolate")
|
BUTTON_VARS(RudeIsolate, "rude isolate")
|
||||||
BUTTON_VARS(RudeAudition, "rude audition")
|
BUTTON_VARS(RudeAudition, "rude audition")
|
||||||
|
BUTTON_VARS(FeedbackAlert, "feedback alert")
|
||||||
BUTTON_VARS(MuteButton, "mute button")
|
BUTTON_VARS(MuteButton, "mute button")
|
||||||
BUTTON_VARS(SoloButton, "solo button")
|
BUTTON_VARS(SoloButton, "solo button")
|
||||||
BUTTON_VARS(RecEnableButton, "record enable button")
|
BUTTON_VARS(RecEnableButton, "record enable button")
|
||||||
|
|
|
||||||
|
|
@ -833,6 +833,11 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
||||||
*/
|
*/
|
||||||
static PBD::Signal0<void> FeedbackDetected;
|
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:
|
/* handlers can return an integer value:
|
||||||
0: config.set_audio_search_path() or config.set_midi_search_path() was used
|
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.
|
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::Signal1<int,boost::shared_ptr<Playlist> > Session::AskAboutPlaylistDeletion;
|
||||||
PBD::Signal0<void> Session::Quit;
|
PBD::Signal0<void> Session::Quit;
|
||||||
PBD::Signal0<void> Session::FeedbackDetected;
|
PBD::Signal0<void> Session::FeedbackDetected;
|
||||||
|
PBD::Signal0<void> Session::SuccessfulGraphSort;
|
||||||
|
|
||||||
static void clean_up_session_event (SessionEvent* ev) { delete ev; }
|
static void clean_up_session_event (SessionEvent* ev) { delete ev; }
|
||||||
const SessionEvent::RTeventCallback Session::rt_cleanup (clean_up_session_event);
|
const SessionEvent::RTeventCallback Session::rt_cleanup (clean_up_session_event);
|
||||||
|
|
@ -1390,6 +1391,8 @@ Session::resort_routes_using (boost::shared_ptr<RouteList> r)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
SuccessfulGraphSort (); /* EMIT SIGNAL */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* The topological sort failed, so we have a problem. Tell everyone
|
/* The topological sort failed, so we have a problem. Tell everyone
|
||||||
and stick to the old graph; this will continue to be processed, so
|
and stick to the old graph; this will continue to be processed, so
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue