diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/MachinaGUI.cpp | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/gui/MachinaGUI.cpp b/src/gui/MachinaGUI.cpp index 1266147..8f8e607 100644 --- a/src/gui/MachinaGUI.cpp +++ b/src/gui/MachinaGUI.cpp @@ -445,15 +445,33 @@ MachinaGUI::menu_import_midi() dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK); + Gtk::HBox* extra_widget = Gtk::manage(new Gtk::HBox()); + Gtk::SpinButton* track_sb = Gtk::manage(new Gtk::SpinButton()); + track_sb->set_increments(1, 10); + track_sb->set_range(1, 256); + extra_widget->pack_start(*Gtk::manage(new Gtk::Label("")), true, true); + extra_widget->pack_start(*Gtk::manage(new Gtk::Label("Track: ")), false, false); + extra_widget->pack_start(*track_sb, false, false); + dialog.set_extra_widget(*extra_widget); + extra_widget->show_all(); + const int result = dialog.run(); if (result == Gtk::RESPONSE_OK) { SharedPtr<Machina::SMFDriver> file_driver(new Machina::SMFDriver()); - SharedPtr<Machina::Machine> machine = file_driver->learn(dialog.get_uri()); - machine->activate(); - machine->reset(); - _engine->driver()->set_machine(machine); - _canvas->build(machine); + SharedPtr<Machina::Machine> machine = file_driver->learn(dialog.get_uri(), + track_sb->get_value_as_int()); + + if (machine) { + machine->activate(); + machine->reset(); + _engine->driver()->set_machine(machine); + _canvas->build(machine); + } else { + Gtk::MessageDialog msg_dialog(*_main_window, "Error loading MIDI file", + false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + msg_dialog.run(); + } } } |