diff options
author | David Robillard <d@drobilla.net> | 2007-03-03 04:40:05 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-03-03 04:40:05 +0000 |
commit | 43cca924857a2c9b8833d0f3e441a5d277ad42fe (patch) | |
tree | 86591a16c7f44674dbb264d245151086474995bd /src/gui | |
parent | 085f3de0f526ac2ad7b00bfbc76be18b33a5c3c5 (diff) | |
download | machina-43cca924857a2c9b8833d0f3e441a5d277ad42fe.tar.gz machina-43cca924857a2c9b8833d0f3e441a5d277ad42fe.tar.bz2 machina-43cca924857a2c9b8833d0f3e441a5d277ad42fe.zip |
SMF writing work.
git-svn-id: http://svn.drobilla.net/lad/machina@343 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/MachinaGUI.cpp | 52 | ||||
-rw-r--r-- | src/gui/MachinaGUI.hpp | 4 | ||||
-rw-r--r-- | src/gui/machina.glade | 63 | ||||
-rw-r--r-- | src/gui/main.cpp | 2 |
4 files changed, 115 insertions, 6 deletions
diff --git a/src/gui/MachinaGUI.cpp b/src/gui/MachinaGUI.cpp index 3dd0c96..65ecb13 100644 --- a/src/gui/MachinaGUI.cpp +++ b/src/gui/MachinaGUI.cpp @@ -17,12 +17,13 @@ #include <cmath> #include <sstream> -#include <libgnomecanvasmm.h> -#include <libglademm/xml.h> #include <fstream> #include <pthread.h> +#include <libgnomecanvasmm.h> +#include <libglademm/xml.h> #include <raul/RDFWriter.h> #include <machina/Machine.hpp> +#include <machina/SMFDriver.hpp> #include "MachinaGUI.hpp" #include "MachinaCanvas.hpp" #include "NodeView.hpp" @@ -114,6 +115,8 @@ MachinaGUI::MachinaGUI(SharedPtr<Machina::Engine> engine) xml->get_widget("save_menuitem", _menu_file_save); xml->get_widget("save_as_menuitem", _menu_file_save_as); xml->get_widget("quit_menuitem", _menu_file_quit); + xml->get_widget("learn_midi_menuitem", _menu_learn_midi); + xml->get_widget("export_midi_menuitem", _menu_export_midi); xml->get_widget("view_toolbar_menuitem", _menu_view_toolbar); //xml->get_widget("view_refresh_menuitem", _menu_view_refresh); //xml->get_widget("view_messages_menuitem", _menu_view_messages); @@ -151,6 +154,10 @@ MachinaGUI::MachinaGUI(SharedPtr<Machina::Engine> engine) sigc::mem_fun(this, &MachinaGUI::menu_file_save_as)); _menu_file_quit->signal_activate().connect( sigc::mem_fun(this, &MachinaGUI::menu_file_quit)); + _menu_learn_midi->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_learn_midi)); + _menu_export_midi->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_export_midi)); //_menu_view_refresh->signal_activate().connect( // sigc::mem_fun(this, &MachinaGUI::menu_view_refresh)); _menu_view_toolbar->signal_toggled().connect( @@ -352,9 +359,7 @@ void MachinaGUI::menu_file_open() { Gtk::FileChooserDialog dialog(*_main_window, "Open Machine", Gtk::FILE_CHOOSER_ACTION_OPEN); - dialog.set_local_only(false); - dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK); @@ -432,6 +437,45 @@ MachinaGUI::menu_file_save_as() void +MachinaGUI::menu_learn_midi() +{ + Gtk::FileChooserDialog dialog(*_main_window, "Learn from MIDI file", Gtk::FILE_CHOOSER_ACTION_OPEN); + dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + dialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK); + + 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()); + } +} + + +void +MachinaGUI::menu_export_midi() +{ + Gtk::FileChooserDialog dialog(*_main_window, "Export to a MIDI file", Gtk::FILE_CHOOSER_ACTION_SAVE); + dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + dialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK); + + const int result = dialog.run(); + + if (result == Gtk::RESPONSE_OK) { + SharedPtr<Machina::SMFDriver> file_driver(new Machina::SMFDriver()); + _engine->driver()->deactivate(); + const SharedPtr<Machina::Machine> m = _engine->machine(); + m->set_sink(file_driver); + file_driver->start(dialog.get_filename()); + file_driver->run(m, 32); // FIXME: hardcoded max length. TODO: solve halting problem + m->set_sink(_engine->driver()); + m->reset(); + _engine->driver()->activate(); + } +} + + +void MachinaGUI::on_pane_position_changed() { // avoid infinite recursion... diff --git a/src/gui/MachinaGUI.hpp b/src/gui/MachinaGUI.hpp index 47142b0..962a6f9 100644 --- a/src/gui/MachinaGUI.hpp +++ b/src/gui/MachinaGUI.hpp @@ -59,6 +59,8 @@ protected: void menu_file_open(); void menu_file_save(); void menu_file_save_as(); + void menu_learn_midi(); + void menu_export_midi(); //void show_messages_toggled(); void show_toolbar_toggled(); //void menu_view_refresh(); @@ -98,6 +100,8 @@ protected: Gtk::MenuItem* _menu_file_save; Gtk::MenuItem* _menu_file_save_as; Gtk::MenuItem* _menu_file_quit; + Gtk::MenuItem* _menu_learn_midi; + Gtk::MenuItem* _menu_export_midi; Gtk::MenuItem* _menu_help_about; Gtk::CheckMenuItem* _menu_view_toolbar; //Gtk::CheckMenuItem* _menu_view_messages; diff --git a/src/gui/machina.glade b/src/gui/machina.glade index 6e5d7e9..d82f528 100644 --- a/src/gui/machina.glade +++ b/src/gui/machina.glade @@ -77,6 +77,34 @@ </child> <child> + <widget class="GtkImageMenuItem" id="export_midi_menuitem"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Export MIDI...</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_export_midi_menuitem_activate" last_modification_time="Fri, 02 Mar 2007 20:59:46 GMT"/> + <accelerator key="E" modifiers="GDK_CONTROL_MASK" signal="activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image6"> + <property name="visible">True</property> + <property name="stock">gtk-convert</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkSeparatorMenuItem" id="separator6"> + <property name="visible">True</property> + </widget> + </child> + + <child> <widget class="GtkImageMenuItem" id="quit_menuitem"> <property name="visible">True</property> <property name="label">gtk-quit</property> @@ -90,6 +118,41 @@ </child> <child> + <widget class="GtkMenuItem" id="machine_menu"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Machine</property> + <property name="use_underline">True</property> + + <child> + <widget class="GtkMenu" id="machine_menu_menu"> + + <child> + <widget class="GtkImageMenuItem" id="learn_midi_menuitem"> + <property name="visible">True</property> + <property name="label" translatable="yes">Learn MIDI...</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_learn_midi_menuitem_activate" last_modification_time="Fri, 02 Mar 2007 21:00:16 GMT"/> + <accelerator key="L" modifiers="GDK_CONTROL_MASK" signal="activate"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image7"> + <property name="visible">True</property> + <property name="stock">gtk-media-record</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + </widget> + </child> + </widget> + </child> + + <child> <widget class="GtkMenuItem" id="view_menu"> <property name="visible">True</property> <property name="label" translatable="yes">_View</property> diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 4e4bc07..3e7f737 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -34,8 +34,6 @@ main(int argc, char** argv) SharedPtr<JackDriver> driver(new JackDriver()); - MidiAction::set_driver(driver); - driver->attach("machina"); SharedPtr<Engine> engine(new Engine(driver)); |