#include "ardour/amp.h"
#include "ardour/session.h"
#include "ardour/audioengine.h"
+#include "ardour/internal_send.h"
#include "ardour/route.h"
#include "ardour/route_group.h"
#include "ardour/audio_track.h"
MixerStrip::edit_output_configuration ()
{
if (output_selector == 0) {
- output_selector = new IOSelectorWindow (_session, _route->output());
+
+ boost::shared_ptr<Send> send;
+ boost::shared_ptr<IO> output;
+
+ if ((send = boost::dynamic_pointer_cast<Send>(_current_delivery)) != 0) {
+ if (!boost::dynamic_pointer_cast<InternalSend>(send)) {
+ output = send->output();
+ } else {
+ output = _route->output ();
+ }
+ } else {
+ output = _route->output ();
+ }
+
+ output_selector = new IOSelectorWindow (_session, output);
}
if (output_selector->is_visible()) {
MixerStrip::route_active_changed ()
{
RouteUI::route_active_changed ();
+ reset_strip_style ();
+}
+
+void
+MixerStrip::reset_strip_style ()
+{
+ if (_current_delivery && boost::dynamic_pointer_cast<Send>(_current_delivery)) {
+
+ gpm.set_fader_name ("SendStripBase");
- if (is_midi_track()) {
- if (_route->active()) {
- set_name ("MidiTrackStripBase");
- gpm.set_meter_strip_name ("MidiTrackStripBase");
- } else {
- set_name ("MidiTrackStripBaseInactive");
- gpm.set_meter_strip_name ("MidiTrackStripBaseInactive");
- }
- gpm.set_fader_name ("MidiTrackFader");
- } else if (is_audio_track()) {
- if (_route->active()) {
- set_name ("AudioTrackStripBase");
- gpm.set_meter_strip_name ("AudioTrackMetrics");
- } else {
- set_name ("AudioTrackStripBaseInactive");
- gpm.set_meter_strip_name ("AudioTrackMetricsInactive");
- }
- gpm.set_fader_name ("AudioTrackFader");
} else {
- if (_route->active()) {
- set_name ("AudioBusStripBase");
- gpm.set_meter_strip_name ("AudioBusMetrics");
+
+ if (is_midi_track()) {
+ if (_route->active()) {
+ set_name ("MidiTrackStripBase");
+ gpm.set_meter_strip_name ("MidiTrackStripBase");
+ } else {
+ set_name ("MidiTrackStripBaseInactive");
+ gpm.set_meter_strip_name ("MidiTrackStripBaseInactive");
+ }
+ gpm.set_fader_name ("MidiTrackFader");
+ } else if (is_audio_track()) {
+ if (_route->active()) {
+ set_name ("AudioTrackStripBase");
+ gpm.set_meter_strip_name ("AudioTrackMetrics");
+ } else {
+ set_name ("AudioTrackStripBaseInactive");
+ gpm.set_meter_strip_name ("AudioTrackMetricsInactive");
+ }
+ gpm.set_fader_name ("AudioTrackFader");
} else {
- set_name ("AudioBusStripBaseInactive");
- gpm.set_meter_strip_name ("AudioBusMetricsInactive");
+ if (_route->active()) {
+ set_name ("AudioBusStripBase");
+ gpm.set_meter_strip_name ("AudioBusMetrics");
+ } else {
+ set_name ("AudioBusStripBaseInactive");
+ gpm.set_meter_strip_name ("AudioBusMetricsInactive");
+ }
+ gpm.set_fader_name ("AudioBusFader");
+
+ /* (no MIDI busses yet) */
}
- gpm.set_fader_name ("AudioBusFader");
-
- /* (no MIDI busses yet) */
}
}
{
}
+/** Called when the metering point has changed */
void
MixerStrip::meter_changed (void *src)
{
gpm.setup_meters ();
// reset peak when meter point changes
gpm.reset_peak_display();
- set_width_enum (_width, this);
}
void
MixerStrip::switch_io (boost::shared_ptr<Route> target)
{
+ /* don't respond to switch IO signal outside of the mixer window */
+
+ if (!_mixer_owned) {
+ return;
+ }
+
if (_route == target || _route->is_master()) {
/* don't change the display for the target or the master bus */
return;
}
send_gone_connection.disconnect ();
-
+ input_button.set_sensitive (true);
+ output_button.set_sensitive (true);
}
void
MixerStrip::show_send (boost::shared_ptr<Send> send)
{
assert (send != 0);
+
drop_send ();
_current_delivery = send;
+
send->set_metering (true);
send_gone_connection = _current_delivery->GoingAway.connect (mem_fun (*this, &MixerStrip::revert_to_default_display));
panner_ui().set_panner (_current_delivery->panner());
panner_ui().setup_pan ();
+
+ input_button.set_sensitive (false);
+
+ if (boost::dynamic_pointer_cast<InternalSend>(send)) {
+ output_button.set_sensitive (false);
+ }
+
+ reset_strip_style ();
}
void
gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp());
gain_meter().setup_meters ();
+
panner_ui().set_panner (_route->main_outs()->panner());
panner_ui().setup_pan ();
+
+ reset_strip_style ();
}
void