X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faudio_time_axis.cc;h=437e0378368a983be49e6385481f9b8529f7e6f5;hb=823a1d36c1694a220b3b581741ffc92990e03eeb;hp=284d96b217ee9b3e9e87f46be1e9efbadfb0cd6d;hpb=4c000c13eecf4cb3d63be304fc0056ddaa35bb21;p=ardour.git diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 284d96b217..437e037836 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -49,14 +49,12 @@ #include "ardour_ui.h" #include "audio_time_axis.h" -#include "automation_gain_line.h" -#include "automation_pan_line.h" +#include "automation_line.h" #include "canvas_impl.h" #include "crossfade_view.h" #include "enums.h" -#include "gain_automation_time_axis.h" +#include "automation_time_axis.h" #include "keyboard.h" -#include "pan_automation_time_axis.h" #include "playlist_selector.h" #include "prompter.h" #include "public_editor.h" @@ -87,8 +85,7 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::sh _view = new AudioStreamView (*this); - create_automation_child (GainAutomation); - create_automation_child (PanAutomation); + create_automation_child (GainAutomation, false); ignore_toggle = false; @@ -109,7 +106,7 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::sh set_state (*xml_node); - _route->panner().Changed.connect (mem_fun(*this, &AudioTimeAxisView::update_pans)); + _route->panner().Changed.connect (bind (mem_fun(*this, &AudioTimeAxisView::update_pans), false)); update_control_names (); @@ -209,17 +206,35 @@ AudioTimeAxisView::append_extra_display_menu_items () items.push_back (MenuElem (_("Waveform"), *waveform_menu)); - - Menu *layers_menu = manage(new Menu); - MenuList &layers_items = layers_menu->items(); - layers_menu->set_name("ArdourContextMenu"); - - RadioMenuItem::Group layers_group; +} - layers_items.push_back(RadioMenuElem (layers_group, _("Overlaid"), bind (mem_fun (*this, &AudioTimeAxisView::set_layer_display), Overlaid))); - layers_items.push_back(RadioMenuElem (layers_group, _("Stacked"), bind (mem_fun (*this, &AudioTimeAxisView::set_layer_display), Stacked))); +Gtk::Menu* +AudioTimeAxisView::build_mode_menu() +{ + using namespace Menu_Helpers; + + Menu* mode_menu = manage (new Menu); + MenuList& items = mode_menu->items(); + mode_menu->set_name ("ArdourContextMenu"); + + RadioMenuItem::Group mode_group; + items.push_back (RadioMenuElem (mode_group, _("Normal"), + bind (mem_fun (*this, &AudioTimeAxisView::set_track_mode), ARDOUR::Normal))); + normal_track_mode_item = dynamic_cast(&items.back()); + items.push_back (RadioMenuElem (mode_group, _("Tape"), + bind (mem_fun (*this, &AudioTimeAxisView::set_track_mode), ARDOUR::Destructive))); + destructive_track_mode_item = dynamic_cast(&items.back()); + + switch (track()->mode()) { + case ARDOUR::Destructive: + destructive_track_mode_item->set_active (); + break; + case ARDOUR::Normal: + normal_track_mode_item->set_active (); + break; + } - items.push_back (MenuElem (_("Layers"), *layers_menu)); + return mode_menu; } void @@ -281,7 +296,7 @@ AudioTimeAxisView::set_waveform_scale (WaveformScale scale) } void -AudioTimeAxisView::create_automation_child (ParamID param) +AudioTimeAxisView::create_automation_child (Parameter param, bool show) { if (param.type() == GainAutomation) { @@ -291,39 +306,19 @@ AudioTimeAxisView::create_automation_child (ParamID param) return; } - GainAutomationTimeAxisView* gain_track = new GainAutomationTimeAxisView (_session, - _route, + boost::shared_ptr gain_track(new AutomationTimeAxisView (_session, + _route, _route, c, editor, *this, parent_canvas, - _route->describe_parameter(param), - c); - - AutomationLine* line = new AutomationGainLine ("automation gain", - *gain_track, - *gain_track->canvas_display, - c->list()); + _route->describe_parameter(param))); - line->set_line_color (ARDOUR_UI::config()->canvasvar_AutomationLine.get()); - - gain_track->add_line (*line); - - add_automation_child(ParamID(GainAutomation), gain_track); + add_automation_child(Parameter(GainAutomation), gain_track, show); } else if (param.type() == PanAutomation) { - - PanAutomationTimeAxisView* pan_track = new PanAutomationTimeAxisView (_session, - _route, - editor, - *this, - parent_canvas, - _route->describe_parameter(param)); ensure_xml_node (); - - add_automation_child(ParamID(PanAutomation), pan_track); - - update_pans (); + update_pans (show); } else { error << "AudioTimeAxisView: unknown automation child " << param.to_string() << endmsg; @@ -331,44 +326,27 @@ AudioTimeAxisView::create_automation_child (ParamID param) } void -AudioTimeAxisView::update_pans () +AudioTimeAxisView::update_pans (bool show) { Panner::iterator p; - - RouteAutomationNode* ran = automation_track(PanAutomation); - if (!ran) { - warning << _route << " has no pan automation track" << endmsg; - return; - } - - AutomationTimeAxisView* pan_track = ran->track; - - pan_track->clear_lines (); - - /* we don't draw lines for "greater than stereo" panning. - */ - - if (_route->n_outputs().n_audio() > 2) { - return; - } + uint32_t i = 0; for (p = _route->panner().begin(); p != _route->panner().end(); ++p) { - - AutomationLine* line; - - line = new AutomationPanLine ("automation pan", *pan_track, - *pan_track->canvas_display, - (*p)->automation()); - - if (p == _route->panner().begin()) { - /* first line is a nice orange */ - line->set_line_color (ARDOUR_UI::config()->canvasvar_AutomationLine.get()); - } else { - /* second line is a nice blue */ - line->set_line_color (ARDOUR_UI::config()->canvasvar_AutomationLine.get()); + boost::shared_ptr pan_control = (*p)->pan_control(); + + if (pan_control->parameter().type() == NullAutomation) { + error << "Pan control has NULL automation type!" << endmsg; + continue; } - pan_track->add_line (*line); + boost::shared_ptr pan_track(new AutomationTimeAxisView (_session, + _route, _route/*FIXME*/, pan_control, + editor, + *this, + parent_canvas, + _route->describe_parameter(pan_control->parameter()))); + add_automation_child(Parameter(PanAutomation, i), pan_track, show); + ++i; } } @@ -498,11 +476,3 @@ AudioTimeAxisView::update_control_names () } } -void -AudioTimeAxisView::set_layer_display (LayerDisplay d) -{ - AudioStreamView* asv = audio_view (); - if (asv) { - asv->set_layer_display (d); - } -}