Added dialog to allow adding any Midi CC track.

Fix display/menu generation when adding a MIDI CC track.
Fix crash bug triggered by recording MIDI track with visible CC child track.


git-svn-id: svn://localhost/ardour2/trunk@2073 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2007-06-27 21:37:08 +00:00
parent a43185634c
commit fc7a2e9ee1
5 changed files with 31 additions and 10 deletions

View File

@ -84,6 +84,7 @@ gtkardour_files=Split("""
about.cc
actions.cc
add_route_dialog.cc
add_midi_cc_track_dialog.cc
ardour_dialog.cc
ardour_ui.cc
ardour_ui2.cc

View File

@ -117,7 +117,7 @@ AddRouteDialog::AddRouteDialog ()
VBox *dvbox = manage (new VBox);
HBox *dhbox = manage (new HBox);
ccframe.set_label (_("Channel Configuration"));
ccframe.set_label (_("Channel Configuration"));
ccframe.set_shadow_type (SHADOW_IN);
dvbox->pack_start (channel_combo, true, false, 5);

View File

@ -175,8 +175,21 @@ MidiRegionView::show_region_editor ()
GhostRegion*
MidiRegionView::add_ghost (AutomationTimeAxisView& atv)
{
throw; // FIXME
return NULL;
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&trackview);
assert(rtv);
double unit_position = _region->position () / samples_per_unit;
GhostRegion* ghost = new GhostRegion (atv, unit_position);
cerr << "FIXME: add notes to MIDI region ghost." << endl;
ghost->set_height ();
ghost->set_duration (_region->length() / samples_per_unit);
ghosts.push_back (ghost);
ghost->GoingAway.connect (mem_fun(*this, &MidiRegionView::remove_ghost));
return ghost;
}

View File

@ -49,6 +49,7 @@
#include "midi_time_axis.h"
#include "automation_time_axis.h"
#include "automation_midi_cc_line.h"
#include "add_midi_cc_track_dialog.h"
#include "canvas_impl.h"
#include "crossfade_view.h"
#include "enums.h"
@ -168,10 +169,13 @@ MidiTimeAxisView::build_automation_action_menu ()
void
MidiTimeAxisView::add_controller_track()
{
/* TODO: fancy controller selection dialog here... */
ParamID param(MidiCCAutomation, 7);
create_automation_child(param);
AddMidiCCTrackDialog dialog;
dialog.set_transient_for(editor);
int response = dialog.run();
if (response == Gtk::RESPONSE_ACCEPT) {
ParamID param = dialog.parameter();
create_automation_child(param);
}
}
void

View File

@ -1786,7 +1786,7 @@ RouteTimeAxisView::add_automation_child(ParamID param, AutomationTimeAxisView* t
track->Hiding.connect (bind (mem_fun (*this, &RouteTimeAxisView::automation_track_hidden), param));
bool hideit = true;
bool hideit = false;
XMLNode* node;
@ -1797,14 +1797,17 @@ RouteTimeAxisView::add_automation_child(ParamID param, AutomationTimeAxisView* t
}
}
}
_automation_tracks.insert(std::make_pair(param, new RouteAutomationNode(param, NULL, track)));
if (hideit) {
track->hide ();
} else {
_show_automation.insert(param);
_route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
}
_automation_tracks.insert(std::make_pair(param, new RouteAutomationNode(param, NULL, track)));
build_automation_action_menu();
}