summaryrefslogtreecommitdiff
path: root/gtk2_ardour/mixer_strip.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-12-08 16:07:28 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-12-08 16:07:28 +0000
commit3be16e8afbd891c0bfe7227158384ed0d127597f (patch)
tree73a8f761fc13cbd0613d3923a34748bb9aa761d2 /gtk2_ardour/mixer_strip.cc
parenta9bb336fc44ab4937978f5a0308e440ed632ea50 (diff)
partial patch/partial by-hand merge of 2.X commits 3169&3170 to 3.X codebase
git-svn-id: svn://localhost/ardour2/branches/3.0@4300 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/mixer_strip.cc')
-rw-r--r--gtk2_ardour/mixer_strip.cc337
1 files changed, 196 insertions, 141 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 373babf417..1a357dc002 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -82,34 +82,56 @@ speed_printer (char buf[32], Gtk::Adjustment& adj, void* arg)
}
#endif
-MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt, bool in_mixer)
- : AxisView(sess),
- RouteUI (rt, sess, _("Mute"), _("Solo"), _("Record")),
- _mixer(mx),
- _mixer_owned (in_mixer),
- pre_processor_box (PreFader, sess, rt, mx.plugin_selector(), mx.selection(), in_mixer),
- post_processor_box (PostFader, sess, rt, mx.plugin_selector(), mx.selection(), in_mixer),
- gpm (_route, sess),
- panners (_route, sess),
- button_table (3, 2),
- middle_button_table (1, 2),
- bottom_button_table (1, 2),
- meter_point_label (_("pre")),
- comment_button (_("Comments")),
- speed_adjustment (1.0, 0.001, 4.0, 0.001, 0.1),
- speed_spinner (&speed_adjustment, "MixerStripSpeedBase", true)
+MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, bool in_mixer)
+ : AxisView(sess)
+ , RouteUI (sess, _("Mute"), _("Solo"), _("Record"))
+ ,_mixer(mx)
+ , _mixer_owned (in_mixer)
+ , pre_processor_box (PreFader, sess, mx.plugin_selector(), mx.selection(), in_mixer)
+ , post_processor_box (PostFader, sess, mx.plugin_selector(), mx.selection(), in_mixer)
+ , gpm (sess)
+ , panners (sess)
+ , button_table (3, 2)
+ , middle_button_table (1, 2)
+ , bottom_button_table (1, 2)
+ , meter_point_label (_("pre"))
+ , comment_button (_("Comments"))
+ , speed_adjustment (1.0, 0.001, 4.0, 0.001, 0.1)
+ , speed_spinner (&speed_adjustment, "MixerStripSpeedBase", true)
+
+{
+ init ();
+}
+MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt, bool in_mixer)
+ : AxisView(sess)
+ , RouteUI (sess, _("Mute"), _("Solo"), _("Record"))
+ ,_mixer(mx)
+ , _mixer_owned (in_mixer)
+ , pre_processor_box (PreFader, sess, mx.plugin_selector(), mx.selection(), in_mixer)
+ , post_processor_box (PostFader, sess, mx.plugin_selector(), mx.selection(), in_mixer)
+ , gpm (sess)
+ , panners (sess)
+ , button_table (3, 2)
+ , middle_button_table (1, 2)
+ , bottom_button_table (1, 2)
+ , meter_point_label (_("pre"))
+ , comment_button (_("Comments"))
+ , speed_adjustment (1.0, 0.001, 4.0, 0.001, 0.1)
+ , speed_spinner (&speed_adjustment, "MixerStripSpeedBase", true)
+
{
- if (set_color_from_route()) {
- set_color (unique_random_color());
- }
+ init ();
+ set_route (rt);
+}
+void
+MixerStrip::init ()
+{
input_selector = 0;
output_selector = 0;
group_menu = 0;
- if (!_route->is_hidden()) {
- _marked_for_display = true;
- }
+ _marked_for_display = false;
route_ops_menu = 0;
ignore_comment_edit = false;
ignore_toggle = false;
@@ -118,40 +140,26 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
comment_area = 0;
_width_owner = 0;
- Gtk::Image *width_icon = manage (new Gtk::Image (::get_icon("strip_width")));
- Gtk::Image *hide_icon = manage (new Gtk::Image (::get_icon("hide")));
- width_button.add (*width_icon);
- hide_button.add (*hide_icon);
+ width_button.add (*(manage (new Gtk::Image (::get_icon("strip_width")))));
+ hide_button.add (*(manage (new Gtk::Image (::get_icon("hide")))));
input_label.set_text (_("Input"));
+ ARDOUR_UI::instance()->set_tip (&input_button, _("Click to choose inputs"), "");
input_button.add (input_label);
input_button.set_name ("MixerIOButton");
input_label.set_name ("MixerIOButtonLabel");
output_label.set_text (_("Output"));
+ ARDOUR_UI::instance()->set_tip (&output_button, _("Click to choose outputs"), "");
output_button.add (output_label);
output_button.set_name ("MixerIOButton");
output_label.set_name ("MixerIOButtonLabel");
- _route->meter_change.connect (mem_fun(*this, &MixerStrip::meter_changed));
+ ARDOUR_UI::instance()->set_tip (&meter_point_button, _("Select metering point"), "");
meter_point_button.add (meter_point_label);
meter_point_button.set_name ("MixerStripMeterPreButton");
meter_point_label.set_name ("MixerStripMeterPreButton");
- switch (_route->meter_point()) {
- case MeterInput:
- meter_point_label.set_text (_("input"));
- break;
-
- case MeterPreFader:
- meter_point_label.set_text (_("pre"));
- break;
-
- case MeterPostFader:
- meter_point_label.set_text (_("post"));
- break;
- }
-
/* TRANSLATORS: this string should be longest of the strings
used to describe meter points. In english, it's "input".
*/
@@ -183,56 +191,18 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
bottom_button_table.set_homogeneous (true);
bottom_button_table.attach (group_button, 0, 1, 0, 1);
- if (is_audio_track()) {
- boost::shared_ptr<AudioTrack> at = audio_track();
-
- at->FreezeChange.connect (mem_fun(*this, &MixerStrip::map_frozen));
-
-#ifdef VARISPEED_IN_MIXER_STRIP
- speed_adjustment.signal_value_changed().connect (mem_fun(*this, &MixerStrip::speed_adjustment_changed));
-
- speed_frame.set_name ("BaseFrame");
- speed_frame.set_shadow_type (Gtk::SHADOW_IN);
- speed_frame.add (speed_spinner);
-
- speed_spinner.set_print_func (speed_printer, 0);
-
- ARDOUR_UI::instance()->tooltips().set_tip (speed_spinner, _("Varispeed"));
-
- button_table.attach (speed_frame, 0, 2, 5, 6);
-#endif /* VARISPEED_IN_MIXER_STRIP */
-
- }
-
- if(rec_enable_button) {
- rec_enable_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::rec_enable_press), false);
- rec_enable_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::rec_enable_release));
-
- rec_enable_button->set_name ("MixerRecordEnableButton");
- button_table.attach (*rec_enable_button, 0, 2, 2, 3);
- }
-
name_button.add (name_label);
name_button.set_name ("MixerNameButton");
Gtkmm2ext::set_size_request_to_display_given_text (name_button, "longest label", 2, 2);
name_label.set_name ("MixerNameButtonLabel");
- if (_route->phase_invert()) {
- name_label.set_text (X_("Ø ") + name_label.get_text());
- } else {
- name_label.set_text (_route->name());
- }
-
+ ARDOUR_UI::instance()->set_tip (&group_button, _("Mix group"), "");
group_button.add (group_label);
group_button.set_name ("MixerGroupButton");
group_label.set_name ("MixerGroupButtonLabel");
comment_button.set_name ("MixerCommentButton");
- ARDOUR_UI::instance()->tooltips().set_tip (comment_button, _route->comment()=="" ?
- _("Click to Add/Edit Comments"):
- _route->comment());
-
comment_button.signal_clicked().connect (mem_fun(*this, &MixerStrip::comment_button_clicked));
global_vpacker.set_border_width (0);
@@ -269,19 +239,6 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
global_vpacker.pack_start (output_button, Gtk::PACK_SHRINK);
global_vpacker.pack_start (comment_button, Gtk::PACK_SHRINK);
- if (route()->is_master() || route()->is_control()) {
-
- if (scrollbar_height == 0) {
- HScrollbar scrollbar;
- Gtk::Requisition requisition(scrollbar.size_request ());
- scrollbar_height = requisition.height;
- }
-
- EventBox* spacer = manage (new EventBox);
- spacer->set_size_request (-1, scrollbar_height);
- global_vpacker.pack_start (*spacer, false, false);
- }
-
global_frame.add (global_vpacker);
global_frame.set_shadow_type (Gtk::SHADOW_IN);
global_frame.set_name ("BaseFrame");
@@ -298,22 +255,6 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
_session.engine().Stopped.connect (mem_fun(*this, &MixerStrip::engine_stopped));
_session.engine().Running.connect (mem_fun(*this, &MixerStrip::engine_running));
- _route->input_changed.connect (mem_fun(*this, &MixerStrip::input_changed));
- _route->output_changed.connect (mem_fun(*this, &MixerStrip::output_changed));
- _route->mute_changed.connect (mem_fun(*this, &RouteUI::mute_changed));
- _route->solo_changed.connect (mem_fun(*this, &RouteUI::solo_changed));
- _route->solo_safe_changed.connect (mem_fun(*this, &RouteUI::solo_changed));
- _route->mix_group_changed.connect (mem_fun(*this, &MixerStrip::mix_group_changed));
- _route->panner().Changed.connect (mem_fun(*this, &MixerStrip::connect_to_pan));
-
- if (is_audio_track()) {
- audio_track()->DiskstreamChanged.connect (mem_fun(*this, &MixerStrip::diskstream_changed));
- get_diskstream()->SpeedChanged.connect (mem_fun(*this, &MixerStrip::speed_changed));
- }
-
- _route->NameChanged.connect (mem_fun(*this, &RouteUI::name_changed));
- _route->comment_changed.connect (mem_fun(*this, &MixerStrip::comment_changed));
- _route->gui_changed.connect (mem_fun(*this, &MixerStrip::route_gui_changed));
input_button.signal_button_press_event().connect (mem_fun(*this, &MixerStrip::input_press), false);
output_button.signal_button_press_event().connect (mem_fun(*this, &MixerStrip::output_press), false);
@@ -323,11 +264,22 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
mute_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::mute_press), false);
mute_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::mute_release), false);
+ /* we don't need this if its not an audio track, but we don't know that yet and it doesn't
+ hurt (much).
+ */
+
+ rec_enable_button->set_name ("MixerRecordEnableButton");
+ rec_enable_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::rec_enable_press), false);
+ rec_enable_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::rec_enable_release));
+
name_button.signal_button_press_event().connect (mem_fun(*this, &MixerStrip::name_button_button_press), false);
group_button.signal_button_press_event().connect (mem_fun(*this, &MixerStrip::select_mix_group), false);
_width = (Width) -1;
- set_stuff_from_route ();
+
+ /* start off as a passthru strip. we'll correct this, if necessary,
+ in update_diskstream_display().
+ */
/* start off as a passthru strip. we'll correct this, if necessary,
in update_diskstream_display().
@@ -338,6 +290,126 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
else
set_name ("AudioTrackStripBase");
+ add_events (Gdk::BUTTON_RELEASE_MASK);
+}
+
+MixerStrip::~MixerStrip ()
+{
+ GoingAway(); /* EMIT_SIGNAL */
+
+ if (input_selector) {
+ delete input_selector;
+ }
+
+ if (output_selector) {
+ delete output_selector;
+ }
+}
+
+void
+MixerStrip::set_route (boost::shared_ptr<Route> rt)
+{
+ if (rec_enable_button->get_parent()) {
+ button_table.remove (*rec_enable_button);
+ }
+
+#ifdef VARISPEED_IN_MIXER_STRIP
+ if (speed_frame->get_parent()) {
+ button_table.remove (*speed_frame);
+ }
+#endif
+
+ RouteUI::set_route (rt);
+
+ panners.set_io (rt);
+ gpm.set_io (rt);
+ pre_processor_box.set_route (rt);
+ post_processor_box.set_route (rt);
+
+ if (set_color_from_route()) {
+ set_color (unique_random_color());
+ }
+
+ if (_mixer_owned && (route()->is_master() || route()->is_control())) {
+
+ if (scrollbar_height == 0) {
+ HScrollbar scrollbar;
+ Gtk::Requisition requisition(scrollbar.size_request ());
+ scrollbar_height = requisition.height;
+ }
+
+ EventBox* spacer = manage (new EventBox);
+ spacer->set_size_request (-1, scrollbar_height);
+ global_vpacker.pack_start (*spacer, false, false);
+ }
+
+ if (is_audio_track()) {
+
+ boost::shared_ptr<AudioTrack> at = audio_track();
+
+ connections.push_back (at->FreezeChange.connect (mem_fun(*this, &MixerStrip::map_frozen)));
+
+#ifdef VARISPEED_IN_MIXER_STRIP
+ speed_adjustment.signal_value_changed().connect (mem_fun(*this, &MixerStrip::speed_adjustment_changed));
+
+ speed_frame.set_name ("BaseFrame");
+ speed_frame.set_shadow_type (Gtk::SHADOW_IN);
+ speed_frame.add (speed_spinner);
+
+ speed_spinner.set_print_func (speed_printer, 0);
+
+ ARDOUR_UI::instance()->tooltips().set_tip (speed_spinner, _("Varispeed"));
+
+ button_table.attach (speed_frame, 0, 2, 5, 6);
+#endif /* VARISPEED_IN_MIXER_STRIP */
+
+ button_table.attach (*rec_enable_button, 0, 2, 2, 3);
+ }
+
+ if (_route->phase_invert()) {
+ name_label.set_text (X_("Ø ") + name_label.get_text());
+ } else {
+ name_label.set_text (_route->name());
+ }
+
+ switch (_route->meter_point()) {
+ case MeterInput:
+ meter_point_label.set_text (_("input"));
+ break;
+
+ case MeterPreFader:
+ meter_point_label.set_text (_("pre"));
+ break;
+
+ case MeterPostFader:
+ meter_point_label.set_text (_("post"));
+ break;
+ }
+
+ ARDOUR_UI::instance()->tooltips().set_tip (comment_button, _route->comment().empty() ?
+ _("Click to Add/Edit Comments"):
+ _route->comment());
+
+ connections.push_back (_route->meter_change.connect (mem_fun(*this, &MixerStrip::meter_changed)));
+ connections.push_back (_route->input_changed.connect (mem_fun(*this, &MixerStrip::input_changed)));
+ connections.push_back (_route->output_changed.connect (mem_fun(*this, &MixerStrip::output_changed)));
+ connections.push_back (_route->mute_changed.connect (mem_fun(*this, &RouteUI::mute_changed)));
+ connections.push_back (_route->solo_changed.connect (mem_fun(*this, &RouteUI::solo_changed)));
+ connections.push_back (_route->solo_safe_changed.connect (mem_fun(*this, &RouteUI::solo_changed)));
+ connections.push_back (_route->mix_group_changed.connect (mem_fun(*this, &MixerStrip::mix_group_changed)));
+ connections.push_back (_route->panner().Changed.connect (mem_fun(*this, &MixerStrip::connect_to_pan)));
+
+ if (is_audio_track()) {
+ connections.push_back (audio_track()->DiskstreamChanged.connect (mem_fun(*this, &MixerStrip::diskstream_changed)));
+ connections.push_back (get_diskstream()->SpeedChanged.connect (mem_fun(*this, &MixerStrip::speed_changed)));
+ }
+
+ connections.push_back (_route->NameChanged.connect (mem_fun(*this, &RouteUI::name_changed)));
+ connections.push_back (_route->comment_changed.connect (mem_fun(*this, &MixerStrip::comment_changed)));
+ connections.push_back (_route->gui_changed.connect (mem_fun(*this, &MixerStrip::route_gui_changed)));
+
+ set_stuff_from_route ();
+
/* now force an update of all the various elements */
pre_processor_box.update();
@@ -362,11 +434,6 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
add_events (Gdk::BUTTON_RELEASE_MASK);
- whvbox->show();
- hide_icon->show();
- width_icon->show();
- gain_meter_alignment->show_all();
-
pre_processor_box.show();
if (!route()->is_master() && !route()->is_control()) {
@@ -402,19 +469,6 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
show();
}
-MixerStrip::~MixerStrip ()
-{
- GoingAway(); /* EMIT_SIGNAL */
-
- if (input_selector) {
- delete input_selector;
- }
-
- if (output_selector) {
- delete output_selector;
- }
-}
-
void
MixerStrip::set_stuff_from_route ()
{
@@ -796,6 +850,7 @@ MixerStrip::update_output_display ()
break;
}
}
+
gpm.setup_meters ();
panners.setup_pan ();
}
@@ -1292,22 +1347,22 @@ MixerStrip::meter_changed (void *src)
ENSURE_GUI_THREAD (bind (mem_fun(*this, &MixerStrip::meter_changed), src));
switch (_route->meter_point()) {
- case MeterInput:
- meter_point_label.set_text (_("input"));
- break;
-
- case MeterPreFader:
- meter_point_label.set_text (_("pre"));
- break;
+ case MeterInput:
+ meter_point_label.set_text (_("input"));
+ break;
- case MeterPostFader:
- meter_point_label.set_text (_("post"));
- break;
+ case MeterPreFader:
+ meter_point_label.set_text (_("pre"));
+ break;
+
+ case MeterPostFader:
+ meter_point_label.set_text (_("post"));
+ break;
}
gpm.setup_meters ();
- // reset peak when meter point changes
- gpm.reset_peak_display();
- set_width(_width, this);
+ // reset peak when meter point changes
+ gpm.reset_peak_display();
+ set_width(_width, this);
}