-
- try {
- boost::shared_ptr<Region> r = selection->regions.front()->region();
- AudioRegion & region (dynamic_cast<AudioRegion &> (*r));
-
- RouteTimeAxisViewPtr rtv = boost::dynamic_pointer_cast<RouteTimeAxisView> (selection->regions.front()->get_time_axis_view());
- AudioTrack & track (dynamic_cast<AudioTrack &> (*rtv->route()));
-
- ExportRegionDialog dialog (*this, region, track);
- dialog.set_session (session);
- dialog.run();
-
- } catch (std::bad_cast & e) {
- error << "Exporting Region failed!" << endmsg;
- return;
+
+ boost::shared_ptr<Region> r = selection->regions.front()->region();
+ boost::shared_ptr<AudioRegion> audio_region = boost::dynamic_pointer_cast<AudioRegion>(r);
+ boost::shared_ptr<MidiRegion> midi_region = boost::dynamic_pointer_cast<MidiRegion>(r);
+
+ if (audio_region) {
+
+ RouteTimeAxisView & rtv (dynamic_cast<RouteTimeAxisView &> (selection->regions.front()->get_time_axis_view()));
+ AudioTrack & track (dynamic_cast<AudioTrack &> (*rtv.route()));
+
+ ExportRegionDialog dialog (*this, *(audio_region.get()), track);
+ dialog.set_session (_session);
+ dialog.run ();
+
+ } else if (midi_region) {
+
+ MidiExportDialog dialog (*this, midi_region);
+ dialog.set_session (_session);
+
+ bool finished = false;
+ while (!finished) {
+ switch (dialog.run ()) {
+ case Gtk::RESPONSE_ACCEPT:
+ finished = process_midi_export_dialog (dialog, midi_region);
+ break;
+ default:
+ finished = true;
+ return;
+ }
+ }