, RouteUI (sess)
,_mixer(mx)
, _mixer_owned (in_mixer)
- , pre_processor_box (PreFader, sess, mx.plugin_selector(), mx.selection(), this, in_mixer)
- , post_processor_box (PostFader, sess, mx.plugin_selector(), mx.selection(), this, in_mixer)
+ , processor_box (sess, mx.plugin_selector(), mx.selection(), this, in_mixer)
, gpm (sess)
, panners (sess)
, button_table (3, 2)
, RouteUI (sess)
,_mixer(mx)
, _mixer_owned (in_mixer)
- , pre_processor_box (PreFader, sess, mx.plugin_selector(), mx.selection(), this, in_mixer)
- , post_processor_box (PostFader, sess, mx.plugin_selector(), mx.selection(), this, in_mixer)
+ , processor_box (sess, mx.plugin_selector(), mx.selection(), this, in_mixer)
, gpm (sess)
, panners (sess)
, button_table (3, 2)
global_vpacker.pack_start (whvbox, Gtk::PACK_SHRINK);
global_vpacker.pack_start (button_table,Gtk::PACK_SHRINK);
- global_vpacker.pack_start (pre_processor_box, true, true);
+ global_vpacker.pack_start (processor_box, true, true);
global_vpacker.pack_start (middle_button_table,Gtk::PACK_SHRINK);
global_vpacker.pack_start (gain_meter_alignment,Gtk::PACK_SHRINK);
global_vpacker.pack_start (bottom_button_table,Gtk::PACK_SHRINK);
- global_vpacker.pack_start (post_processor_box, true, true);
if (!is_midi_track()) {
global_vpacker.pack_start (panners, Gtk::PACK_SHRINK);
}
else
set_name ("AudioTrackStripBase");
- add_events (Gdk::BUTTON_RELEASE_MASK);
+ add_events (Gdk::BUTTON_RELEASE_MASK|
+ Gdk::ENTER_NOTIFY_MASK|
+ Gdk::LEAVE_NOTIFY_MASK|
+ Gdk::KEY_PRESS_MASK|
+ Gdk::KEY_RELEASE_MASK);
+ set_flags (get_flags() | Gtk::CAN_FOCUS);
+
SwitchIO.connect (mem_fun (*this, &MixerStrip::switch_io));
}
_current_delivery = _route->main_outs ();
panners.set_panner (rt->main_outs()->panner());
- gpm.set_controls (rt, rt->shared_peak_meter(), rt->gain_control(), rt->amp());
- pre_processor_box.set_route (rt);
- post_processor_box.set_route (rt);
+ gpm.set_controls (rt, rt->shared_peak_meter(), rt->amp());
+ processor_box.set_route (rt);
if (set_color_from_route()) {
set_color (unique_random_color());
/* now force an update of all the various elements */
- pre_processor_box.update();
- post_processor_box.update();
+ processor_box.update();
mute_changed (0);
solo_changed (0);
name_changed ();
add_events (Gdk::BUTTON_RELEASE_MASK);
- pre_processor_box.show();
+ processor_box.show();
if (!route()->is_master() && !route()->is_control()) {
/* we don't allow master or control routes to be hidden */
button_table.show();
middle_button_table.show();
bottom_button_table.show();
- pre_processor_box.show_all ();
+ processor_box.show_all ();
gpm.show_all ();
panners.show_all ();
gain_meter_alignment.show ();
- post_processor_box.show_all ();
gain_unit_button.show();
gain_unit_label.show();
meter_point_button.show();
gpm.set_width (w);
panners.set_width (w);
- pre_processor_box.set_width (w);
- post_processor_box.set_width (w);
+ processor_box.set_width (w);
boost::shared_ptr<AutomationList> gain_automation = _route->gain_control()->alist();
}
void
-MixerStrip::input_changed (IOChange change, void *src)
+MixerStrip::input_changed (IOChange /*change*/, void */*src*/)
{
Gtkmm2ext::UI::instance()->call_slot (mem_fun(*this, &MixerStrip::update_input_display));
set_width_enum (_width, this);
}
void
-MixerStrip::output_changed (IOChange change, void *src)
+MixerStrip::output_changed (IOChange /*change*/, void */*src*/)
{
Gtkmm2ext::UI::instance()->call_slot (mem_fun(*this, &MixerStrip::update_output_display));
set_width_enum (_width, this);
if (at) {
switch (at->freeze_state()) {
case AudioTrack::Frozen:
- pre_processor_box.set_sensitive (false);
- post_processor_box.set_sensitive (false);
+ processor_box.set_sensitive (false);
break;
default:
- pre_processor_box.set_sensitive (true);
- post_processor_box.set_sensitive (true);
+ processor_box.set_sensitive (true);
// XXX need some way, maybe, to retoggle redirect editors
break;
}
_current_delivery = _route->internal_send_for (target);
+ cerr << "internal send from " << _route->name() << " to " << target->name() << " = "
+ << _current_delivery << endl;
+
if (_current_delivery) {
send = boost::dynamic_pointer_cast<Send>(_current_delivery);
send->set_metering (true);
_current_delivery->GoingAway.connect (mem_fun (*this, &MixerStrip::revert_to_default_display));
- gain_meter().set_controls (_route, send->meter(), send->amp()->gain_control(), send->amp());
+ gain_meter().set_controls (_route, send->meter(), send->amp());
panner_ui().set_panner (_current_delivery->panner());
} else {
_current_delivery = _route->main_outs ();
- gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->gain_control(), _route->amp());
+ gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp());
panner_ui().set_panner (_route->main_outs()->panner());
}
_current_delivery = _route->main_outs();
- gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->gain_control(), _route->amp());
+ 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 ();
case Wide:
rec_enable_button_label.set_text (_("Rec"));
mute_button_label.set_text (_("Mute"));
- switch (Config->get_solo_model()) {
- case SoloInPlace:
+ if (!Config->get_solo_control_is_listen_control()) {
solo_button_label.set_text (_("Solo"));
- break;
- case SoloAFL:
- solo_button_label.set_text (_("AFL"));
- break;
- case SoloPFL:
- solo_button_label.set_text (_("PFL"));
- break;
+ } else {
+ switch (Config->get_listen_position()) {
+ case AfterFaderListen:
+ solo_button_label.set_text (_("AFL"));
+ break;
+ case PreFaderListen:
+ solo_button_label.set_text (_("PFL"));
+ break;
+ }
}
break;
default:
rec_enable_button_label.set_text (_("R"));
mute_button_label.set_text (_("M"));
- switch (Config->get_solo_model()) {
- case SoloInPlace:
+ if (!Config->get_solo_control_is_listen_control()) {
solo_button_label.set_text (_("S"));
- break;
- case SoloAFL:
- solo_button_label.set_text (_("A"));
- break;
- case SoloPFL:
- solo_button_label.set_text (_("P"));
- break;
+ } else {
+ switch (Config->get_listen_position()) {
+ case AfterFaderListen:
+ solo_button_label.set_text (_("A"));
+ break;
+ case PreFaderListen:
+ solo_button_label.set_text (_("P"));
+ break;
+ }
}
break;
}
}
+
+bool
+MixerStrip::on_key_press_event (GdkEventKey* ev)
+{
+ GdkEventButton fake;
+ fake.type = GDK_BUTTON_PRESS;
+ fake.button = 1;
+ fake.state = ev->state;
+
+ switch (ev->keyval) {
+ case GDK_m:
+ mute_press (&fake);
+ return true;
+ break;
+
+ case GDK_s:
+ solo_press (&fake);
+ return true;
+ break;
+
+ case GDK_r:
+ rec_enable_press (&fake);
+ return true;
+ break;
+
+ case GDK_e:
+ show_sends_press (&fake);
+ return true;
+ break;
+
+ case GDK_g:
+ if (ev->state & Keyboard::PrimaryModifier) {
+ step_gain_down ();
+ } else {
+ step_gain_up ();
+ }
+ return true;
+ break;
+
+ case GDK_0:
+ if (_route) {
+ _route->set_gain (1.0, this);
+ }
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+
+bool
+MixerStrip::on_key_release_event (GdkEventKey* ev)
+{
+ GdkEventButton fake;
+ fake.type = GDK_BUTTON_RELEASE;
+ fake.button = 1;
+ fake.state = ev->state;
+
+ switch (ev->keyval) {
+ case GDK_m:
+ mute_release (&fake);
+ return true;
+ break;
+
+ case GDK_s:
+ solo_release (&fake);
+ return true;
+ break;
+
+ case GDK_r:
+ rec_enable_release (&fake);
+ return true;
+ break;
+
+ case GDK_e:
+ show_sends_release (&fake);
+ return true;
+ break;
+
+ case GDK_g:
+ return true;
+ break;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool
+MixerStrip::on_enter_notify_event (GdkEventCrossing*)
+{
+ Keyboard::magic_widget_grab_focus ();
+ grab_focus ();
+ return false;
+}
+
+bool
+MixerStrip::on_leave_notify_event (GdkEventCrossing* ev)
+{
+ switch (ev->detail) {
+ case GDK_NOTIFY_INFERIOR:
+ break;
+ default:
+ Keyboard::magic_widget_drop_focus ();
+ }
+
+ return false;
+}