aboutsummaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-03-22 01:16:48 +0000
committerDavid Robillard <d@drobilla.net>2007-03-22 01:16:48 +0000
commitb80654a5193536050c8f8e494ba5fd402b7a18aa (patch)
treee2f74b7341590587d32b01cc0595efd15e3ae59c /src/gui
parent9de593d8780ec6fec43703df7a532e65baa44510 (diff)
downloadmachina-b80654a5193536050c8f8e494ba5fd402b7a18aa.tar.gz
machina-b80654a5193536050c8f8e494ba5fd402b7a18aa.tar.bz2
machina-b80654a5193536050c8f8e494ba5fd402b7a18aa.zip
Cleaned up loading code.
Preliminary action loading code (queried from RDF but not actually created yet). Fixed URI/filename handling so command line 'machina' accepts either. git-svn-id: http://svn.drobilla.net/lad/machina@367 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/MachinaCanvas.cpp8
-rw-r--r--src/gui/MachinaGUI.cpp48
-rw-r--r--src/gui/MachinaGUI.hpp2
-rw-r--r--src/gui/main.cpp5
4 files changed, 43 insertions, 20 deletions
diff --git a/src/gui/MachinaCanvas.cpp b/src/gui/MachinaCanvas.cpp
index 34db1c1..10334d0 100644
--- a/src/gui/MachinaCanvas.cpp
+++ b/src/gui/MachinaCanvas.cpp
@@ -84,8 +84,10 @@ MachinaCanvas::canvas_event(GdkEvent* event)
{
static int last = 0;
- assert(event);
-
+ SharedPtr<Machina::Machine> machine = _app->machine();
+ if (!machine)
+ return false;
+
if (event->type == GDK_BUTTON_RELEASE
&& event->button.state & GDK_CONTROL_MASK) {
@@ -106,7 +108,7 @@ MachinaCanvas::canvas_event(GdkEvent* event)
view->resize();
view->raise_to_top();
- _app->machine()->add_node(node);
+ machine->add_node(node);
}
}
diff --git a/src/gui/MachinaGUI.cpp b/src/gui/MachinaGUI.cpp
index 83a7504..0ab4356 100644
--- a/src/gui/MachinaGUI.cpp
+++ b/src/gui/MachinaGUI.cpp
@@ -54,7 +54,8 @@ MachinaGUI::MachinaGUI(SharedPtr<Machina::Engine> engine)
fs.open(glade_filename.c_str());
if (fs.fail()) {
- cerr << "Unable to find machina.glade in current directory or " << PKGDATADIR << "." << endl;
+ cerr << "Unable to find machina.glade in current directory or "
+ << PKGDATADIR << "." << endl;
exit(EXIT_FAILURE);
}
fs.close();
@@ -330,10 +331,12 @@ MachinaGUI::menu_file_open()
const int result = dialog.run();
if (result == Gtk::RESPONSE_OK) {
- SharedPtr<Machina::Machine> new_machine = _engine->load_machine(dialog.get_uri());
- _canvas->destroy();
- _canvas->build(new_machine);
- _save_filename = dialog.get_filename();
+ _save_uri = dialog.get_uri();
+ SharedPtr<Machina::Machine> new_machine = _engine->load_machine(_save_uri);
+ if (new_machine) {
+ _canvas->destroy();
+ _canvas->build(new_machine);
+ }
}
}
@@ -341,13 +344,21 @@ MachinaGUI::menu_file_open()
void
MachinaGUI::menu_file_save()
{
- if (_save_filename == "") {
+ if (_save_uri == "" || _save_uri.substr(0, 5) != "file:") {
menu_file_save_as();
} else {
+ char* save_filename = raptor_uri_uri_string_to_filename(
+ (const unsigned char*)_save_uri.c_str());
+ if (!save_filename) {
+ cerr << "ERROR: Unable to create filename from \"" << _save_uri << "\"" << endl;
+ menu_file_save_as();
+ }
Raul::RDFWriter writer;
- writer.start_to_filename(_save_filename);
+ cout << "Writing machine to " << save_filename << endl;
+ writer.start_to_filename(save_filename);
machine()->write_state(writer);
writer.finish();
+ free(save_filename);
}
}
@@ -355,20 +366,24 @@ MachinaGUI::menu_file_save()
void
MachinaGUI::menu_file_save_as()
{
- Gtk::FileChooserDialog dialog(*_main_window, "Save Machine", Gtk::FILE_CHOOSER_ACTION_SAVE);
+ Gtk::FileChooserDialog dialog(*_main_window, "Save Machine",
+ Gtk::FILE_CHOOSER_ACTION_SAVE);
dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
dialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK);
- if (_save_filename.length() > 0)
- dialog.set_filename(_save_filename);
+ if (_save_uri.length() > 0)
+ dialog.set_uri(_save_uri);
const int result = dialog.run();
- assert(result == Gtk::RESPONSE_OK || result == Gtk::RESPONSE_CANCEL || result == Gtk::RESPONSE_NONE);
+ assert(result == Gtk::RESPONSE_OK
+ || result == Gtk::RESPONSE_CANCEL
+ || result == Gtk::RESPONSE_NONE);
if (result == Gtk::RESPONSE_OK) {
string filename = dialog.get_filename();
+
if (filename.length() < 8 || filename.substr(filename.length()-8) != ".machina")
filename += ".machina";
@@ -394,7 +409,7 @@ MachinaGUI::menu_file_save_as()
writer.start_to_filename(filename);
machine()->write_state(writer);
writer.finish();
- _save_filename = filename;
+ _save_uri = dialog.get_uri();
}
}
}
@@ -403,7 +418,8 @@ MachinaGUI::menu_file_save_as()
void
MachinaGUI::menu_import_midi()
{
- Gtk::FileChooserDialog dialog(*_main_window, "Learn from MIDI file", Gtk::FILE_CHOOSER_ACTION_OPEN);
+ 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);
@@ -444,7 +460,8 @@ MachinaGUI::menu_import_midi()
void
MachinaGUI::menu_export_midi()
{
- Gtk::FileChooserDialog dialog(*_main_window, "Export to a MIDI file", Gtk::FILE_CHOOSER_ACTION_SAVE);
+ 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);
@@ -468,7 +485,8 @@ MachinaGUI::menu_export_midi()
void
MachinaGUI::menu_export_graphviz()
{
- Gtk::FileChooserDialog dialog(*_main_window, "Export to a GraphViz DOT file", Gtk::FILE_CHOOSER_ACTION_SAVE);
+ Gtk::FileChooserDialog dialog(*_main_window, "Export to a GraphViz DOT file",
+ Gtk::FILE_CHOOSER_ACTION_SAVE);
dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
dialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK);
diff --git a/src/gui/MachinaGUI.hpp b/src/gui/MachinaGUI.hpp
index 6677d24..3c16f86 100644
--- a/src/gui/MachinaGUI.hpp
+++ b/src/gui/MachinaGUI.hpp
@@ -84,7 +84,7 @@ protected:
bool _refresh;
- string _save_filename;
+ string _save_uri;
boost::shared_ptr<MachinaCanvas> _canvas;
boost::shared_ptr<Machina::Engine> _engine;
diff --git a/src/gui/main.cpp b/src/gui/main.cpp
index 5f208b4..6f1fc4d 100644
--- a/src/gui/main.cpp
+++ b/src/gui/main.cpp
@@ -45,11 +45,14 @@ main(int argc, char** argv)
machine = file_driver->learn(filename);
}
+ if (!machine)
+ machine = SharedPtr<Machine>(new Machine());
+
// Build engine
SharedPtr<Driver> driver;
#ifdef WITH_JACK
driver = SharedPtr<Driver>(new JackDriver(machine));
- driver->attach("machina");
+ ((JackDriver*)driver.get())->attach("machina");
#endif
if (!driver)
driver = SharedPtr<Driver>(new SMFDriver(machine));