diff options
author | David Robillard <d@drobilla.net> | 2007-06-27 15:51:50 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-06-27 15:51:50 +0000 |
commit | d7bd270aa10b3a8669223debe4c1b572ae876e2b (patch) | |
tree | db9ad92cb5096a54a9d7e91873fe73530ceaf21b /gtk2_ardour/midi_time_axis.cc | |
parent | d7afe01c307e35719dc1ee41c079f81f40f009df (diff) |
Big ol' automation refactor.
Things with automation parameters now inherit from Automatable, which handles serialization, fetching/adding/removing parameters, etc.
Use AutomationList everywhere instead of Curve, make Curve a member of AutomationList instead (towards other types of "Curve" needed for CC, among other things).
Work towards MIDI CC sending "automation" tracks.
git-svn-id: svn://localhost/ardour2/trunk@2069 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_time_axis.cc')
-rw-r--r-- | gtk2_ardour/midi_time_axis.cc | 85 |
1 files changed, 59 insertions, 26 deletions
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index dd008bd9c5..960ca36af9 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -48,6 +48,7 @@ #include "ardour_ui.h" #include "midi_time_axis.h" #include "automation_time_axis.h" +#include "automation_midi_cc_line.h" #include "canvas_impl.h" #include "crossfade_view.h" #include "enums.h" @@ -61,6 +62,7 @@ #include "public_editor.h" #include "redirect_automation_line.h" #include "redirect_automation_time_axis.h" +#include "midi_controller_time_axis.h" #include "region_view.h" #include "rgb_macros.h" #include "selection.h" @@ -147,30 +149,67 @@ MidiTimeAxisView::hide () } void -MidiTimeAxisView::set_state (const XMLNode& node) +MidiTimeAxisView::build_automation_action_menu () { - const XMLProperty *prop; + using namespace Menu_Helpers; + + RouteTimeAxisView::build_automation_action_menu (); + + MenuList& automation_items = automation_action_menu->items(); - TimeAxisView::set_state (node); + automation_items.push_back (SeparatorElem()); + + automation_items.push_back (MenuElem (_("Controller..."), + mem_fun(*this, &MidiTimeAxisView::add_controller_track))); +} + +/** Prompt for a controller with a dialog and add an automation track for it + */ +void +MidiTimeAxisView::add_controller_track() +{ + /* TODO: fancy controller selection dialog here... */ + + ParamID param(MidiCCAutomation, 7); + create_automation_child(param); +} + +void +MidiTimeAxisView::create_automation_child (ParamID param) +{ + if (param.type() == MidiCCAutomation) { - if ((prop = node.property ("shown_editor")) != 0) { - if (prop->value() == "no") { - _marked_for_display = false; - } else { - _marked_for_display = true; - } + /* FIXME: this all probably leaks */ + + ARDOUR::AutomationList* al = _route->automation_list(param); + + if (!al) + al = new ARDOUR::AutomationList(param, 0, 127, 64); + + _route->add_automation_parameter(al); + + MidiControllerTimeAxisView* track = new MidiControllerTimeAxisView (_session, + _route, + editor, + *this, + parent_canvas, + _route->describe_parameter(param), + param, + *al); + + AutomationMidiCCLine* line = new AutomationMidiCCLine (param.to_string(), + *track, + *track->canvas_display, + *al); + + line->set_line_color (Config->canvasvar_AutomationLine.get()); + + track->add_line(*line); + + add_automation_child(param, track); + } else { - _marked_for_display = true; - } - - XMLNodeList nlist = node.children(); - XMLNodeConstIterator niter; - XMLNode *child_node; - - for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - child_node = *niter; - - // uh... do stuff.. + error << "MidiTimeAxisView: unknown automation child " << param.to_string() << endmsg; } } @@ -205,9 +244,3 @@ MidiTimeAxisView::route_active_changed () } } -XMLNode* -MidiTimeAxisView::get_child_xml_node (const string & childname) -{ - return RouteUI::get_child_xml_node (childname); -} - |