aboutsummaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-03-03 04:40:05 +0000
committerDavid Robillard <d@drobilla.net>2007-03-03 04:40:05 +0000
commit43cca924857a2c9b8833d0f3e441a5d277ad42fe (patch)
tree86591a16c7f44674dbb264d245151086474995bd /src/gui
parent085f3de0f526ac2ad7b00bfbc76be18b33a5c3c5 (diff)
downloadmachina-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.cpp52
-rw-r--r--src/gui/MachinaGUI.hpp4
-rw-r--r--src/gui/machina.glade63
-rw-r--r--src/gui/main.cpp2
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));