From 1019f1b943ae17bb116bbd2223fcbd0532657055 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 6 Apr 2007 02:20:48 +0000 Subject: LASH project saving/restoring. git-svn-id: http://svn.drobilla.net/lad/patchage@400 a436a847-0d15-0410-975c-d299462d15a1 --- src/LashDriver.cpp | 174 ++++++++++++++++++++++++----------------------------- src/LashDriver.h | 23 +++++-- src/Makefile.am | 2 +- src/Patchage.cpp | 57 ++++++++++++------ src/Patchage.h | 2 + src/patchage.glade | 112 ++++++++++++++-------------------- 6 files changed, 183 insertions(+), 187 deletions(-) diff --git a/src/LashDriver.cpp b/src/LashDriver.cpp index a5110a1..d5ad43e 100644 --- a/src/LashDriver.cpp +++ b/src/LashDriver.cpp @@ -28,7 +28,6 @@ using std::string; LashDriver::LashDriver(Patchage* app, int argc, char** argv) : _app(app), - _client(NULL), _args(NULL) { _args = lash_extract_args(&argc, &argv); @@ -46,21 +45,26 @@ void LashDriver::attach(bool launch_daemon) { // Already connected - if (_client) + if (_server_interface && _server_interface->enabled()) return; int lash_flags = LASH_Server_Interface | LASH_Config_File; if (!launch_daemon) lash_flags |= LASH_No_Start_Server; - _client = lash_init(_args, PACKAGE_NAME, lash_flags, LASH_PROTOCOL(2, 0)); - if (!_client) { - _app->status_message("[LASH] Unable to attach to server"); - } else { - //lash_event_t* event = lash_event_new_with_type(LASH_Client_Name); - //lash_event_set_string(event, "Patchage"); - //lash_send_event(_client, event); + + _server_interface = Raul::LashServerInterface::create( + _args, PACKAGE_NAME, lash_flags); + + if (_server_interface) { + /*_server_interface->signal_save_file.connect(sigc::mem_fun(this, LashDriver::on_save_file)); + _server_interface->signal_restore_file.connect(sigc::mem_fun(this, LashDriver::on_restore_file)); + _server_interface->signal_quit.connect(sigc::mem_fun(this, LashDriver::on_quit));*/ + _server_interface->signal_project_add.connect(sigc::mem_fun(this, &LashDriver::on_project_add)); + signal_attached.emit(); _app->status_message("[LASH] Attached"); + } else { + _app->status_message("[LASH] Unable to attach to server"); } } @@ -68,106 +72,41 @@ LashDriver::attach(bool launch_daemon) void LashDriver::detach() { - _client = NULL; + _server_interface.reset(); _app->status_message("[LASH] Detached"); signal_detached.emit(); } void -LashDriver::process_events() +LashDriver::on_project_add(const SharedPtr project) { - lash_event_t* ev = NULL; - lash_config_t* conf = NULL; + _project_name = project->name(); +} - // Process events - while ((ev = lash_get_event(_client)) != NULL) { - handle_event(ev); - lash_event_destroy(ev); - } - // Process configs - while ((conf = lash_get_config(_client)) != NULL) { - handle_config(conf); - lash_config_destroy(conf); - } +void +LashDriver::on_save_file(const string& directory) +{ + cout << "[LashDriver] LASH Save File - " << directory << endl; + _app->store_window_location(); + _app->state_manager()->save(directory + "/locations"); } void -LashDriver::handle_event(lash_event_t* ev) +LashDriver::on_restore_file(const string& directory) { - LASH_Event_Type type = lash_event_get_type(ev); - const char* c_str = lash_event_get_string(ev); - string str = (c_str == NULL) ? "" : c_str; - - //cout << "[LashDriver] LASH Event. Type = " << (unsigned int)type << ", string = " << str << "**********" << endl; - - switch (type) { - case LASH_Project_Add: - cerr << "LASH project add\n"; - break; - case LASH_Project_Remove: - cerr << "LASH remove\n"; - break; - case LASH_Project_Dir: - cerr << "LASH project dir\n"; - break; - case LASH_Project_Name: - cerr << "LASH project name\n"; - break; - case LASH_Client_Add: - cerr << "LASH client add\n"; - break; - case LASH_Client_Name: - cerr << "LASH client name\n"; - break; - case LASH_Jack_Client_Name: - cerr << "LASH jack client name\n"; - break; - case LASH_Alsa_Client_ID: - cerr << "LASH alsa client id\n"; - break; - case LASH_Percentage: - cerr << "LASH percentage\n"; - break; - case LASH_Save: - cerr << "LASH save\n"; - break; - case LASH_Restore_Data_Set: - cerr << "LASH restore data set\n"; - break; - case LASH_Server_Lost: - cerr << "LASH server lost\n"; - break; - case LASH_Client_Remove: - cerr << "LASH client remove\n"; - break; - case LASH_Save_File: - cout << "[LashDriver] LASH Save File - " << str << endl; - _app->store_window_location(); - _app->state_manager()->save(str.append("/locations")); - lash_send_event(_client, lash_event_new_with_type(LASH_Save_File)); - break; - - case LASH_Restore_File: - cout << "[LashDriver] LASH Restore File - " << str << endl; - _app->state_manager()->load(str.append("/locations")); - _app->update_state(); - lash_send_event(_client, lash_event_new_with_type(LASH_Restore_File)); - break; - - case LASH_Save_Data_Set: - cout << "[LashDriver] LASH Save Data Set - " << endl; - lash_send_event(_client, lash_event_new_with_type(LASH_Save_Data_Set)); - break; - - case LASH_Quit: - cout << "[LashDriver] Quit" << endl; - _client = NULL; - _app->quit(); - break; - } + cout << "[LashDriver] LASH Restore File - " << directory << endl; + _app->state_manager()->load(directory + "/locations"); + _app->update_state(); +} + + +void +LashDriver::on_quit() +{ + cout << "[LashDriver] Quit" << endl; } @@ -184,6 +123,51 @@ LashDriver::handle_config(lash_config_t* conf) val = lash_config_get_value(conf); val_size = lash_config_get_value_size(conf); } + + +void +LashDriver::restore_project(const std::string& directory) +{ + _project_name = ""; + _server_interface->restore_project(directory); +} + + +void +LashDriver::set_project_directory(const std::string& directory) +{ + SharedPtr project = _server_interface->project(_project_name); + + if (project) + project->set_directory(directory); + else + cerr << "[LashDriver] No LASH project to set directory!" << endl; +} + + +void +LashDriver::save_project() +{ + SharedPtr project = _server_interface->project(_project_name); + + if (project) + project->save(); + else + cerr << "[LashDriver] No LASH project to save!" << endl; +} + + +void +LashDriver::close_project() +{ + cerr << "CLOSE PROJECT\n"; + SharedPtr project = _server_interface->project(_project_name); + + if (project) + project->close(); + else + cerr << "[LashDriver] No LASH project to close!" << endl; +} diff --git a/src/LashDriver.h b/src/LashDriver.h index cac5bfd..dde644a 100644 --- a/src/LashDriver.h +++ b/src/LashDriver.h @@ -19,6 +19,7 @@ #define LASHDRIVER_H #include +#include #include "Driver.h" class Patchage; @@ -32,7 +33,7 @@ public: void attach(bool launch_daemon); void detach(); - bool is_attached() const { return lash_enabled(_client); } + bool is_attached() const { return _server_interface->enabled(); } bool connect(boost::shared_ptr, boost::shared_ptr) { return false; } @@ -42,12 +43,24 @@ public: void refresh() {} - void process_events(); + void process_events() { _server_interface->process_events(); } + + void restore_project(const std::string& directory); + void set_project_directory(const std::string& directory); + void save_project(); + void close_project(); private: - Patchage* _app; - lash_client_t* _client; - lash_args_t* _args; + Patchage* _app; + std::string _project_name; + + lash_args_t* _args; + SharedPtr _server_interface; + + void on_project_add(const SharedPtr project); + void on_save_file(const std::string& directory); + void on_restore_file(const std::string& directory); + void on_quit(); void handle_event(lash_event_t* conf); void handle_config(lash_config_t* conf); diff --git a/src/Makefile.am b/src/Makefile.am index 97973d4..d5f1ab1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ AM_CXXFLAGS = -DPKGDATADIR=\"$(pkgdatadir)\" @LIBGLADEMM_CFLAGS@ @GNOMECANVASMM_CFLAGS@ @JACK_CFLAGS@ @ALSA_CFLAGS@ @LASH_CFLAGS@ @FLOWCANVAS_CFLAGS@ @RAUL_CFLAGS@ -patchage_LDADD = @LIBGLADEMM_LIBS@ @GNOMECANVASMM_LIBS@ @JACK_LIBS@ @ALSA_LIBS@ @LASH_LIBS@ @FLOWCANVAS_LIBS@ @RAUL_CFLAGS@ +patchage_LDADD = @LIBGLADEMM_LIBS@ @GNOMECANVASMM_LIBS@ @JACK_LIBS@ @ALSA_LIBS@ @LASH_LIBS@ @FLOWCANVAS_LIBS@ @RAUL_LIBS@ EXTRA_DIST = patchage.gladep diff --git a/src/Patchage.cpp b/src/Patchage.cpp index 4e48bb0..84d9024 100644 --- a/src/Patchage.cpp +++ b/src/Patchage.cpp @@ -129,14 +129,13 @@ Patchage::Patchage(int argc, char** argv) xml->get_widget_derived("jack_settings_win", _jack_settings_dialog); xml->get_widget("about_win", _about_window); xml->get_widget("jack_settings_menuitem", _menu_jack_settings); - xml->get_widget("launch_jack_menuitem", _menu_jack_launch); xml->get_widget("connect_to_jack_menuitem", _menu_jack_connect); xml->get_widget("disconnect_from_jack_menuitem", _menu_jack_disconnect); #ifdef HAVE_LASH xml->get_widget("open_session_menuitem", _menu_open_session); xml->get_widget("save_session_menuitem", _menu_save_session); xml->get_widget("save_session_as_menuitem", _menu_save_session_as); - xml->get_widget("launch_lash_menuitem", _menu_lash_launch); + xml->get_widget("close_session_menuitem", _menu_close_session); xml->get_widget("connect_to_lash_menuitem", _menu_lash_connect); xml->get_widget("disconnect_from_lash_menuitem", _menu_lash_disconnect); #endif @@ -201,11 +200,8 @@ Patchage::Patchage(int argc, char** argv) _menu_jack_settings->signal_activate().connect( sigc::hide_return(sigc::mem_fun(_jack_settings_dialog, &JackSettingsDialog::run))); - _menu_jack_launch->signal_activate().connect(sigc::bind( - sigc::mem_fun(_jack_driver, &JackDriver::attach), true)); - _menu_jack_connect->signal_activate().connect(sigc::bind( - sigc::mem_fun(_jack_driver, &JackDriver::attach), false)); + sigc::mem_fun(_jack_driver, &JackDriver::attach), true)); _menu_jack_disconnect->signal_activate().connect(sigc::mem_fun(_jack_driver, &JackDriver::detach)); @@ -213,7 +209,7 @@ Patchage::Patchage(int argc, char** argv) _menu_open_session->signal_activate().connect( sigc::mem_fun(this, &Patchage::menu_open_session)); _menu_save_session->signal_activate().connect( sigc::mem_fun(this, &Patchage::menu_save_session)); _menu_save_session_as->signal_activate().connect(sigc::mem_fun(this, &Patchage::menu_save_session_as)); - _menu_lash_launch->signal_activate().connect( sigc::mem_fun(this, &Patchage::menu_lash_launch)); + _menu_close_session->signal_activate().connect(sigc::mem_fun(this, &Patchage::menu_close_session)); _menu_lash_connect->signal_activate().connect( sigc::mem_fun(this, &Patchage::menu_lash_connect)); _menu_lash_disconnect->signal_activate().connect(sigc::mem_fun(this, &Patchage::menu_lash_disconnect)); #endif @@ -473,15 +469,11 @@ void Patchage::connect_widgets() { #ifdef HAVE_LASH - _lash_driver->signal_attached.connect(sigc::bind( - sigc::mem_fun(_menu_lash_launch, &Gtk::MenuItem::set_sensitive), false)); _lash_driver->signal_attached.connect(sigc::bind( sigc::mem_fun(_menu_lash_connect, &Gtk::MenuItem::set_sensitive), false)); _lash_driver->signal_attached.connect(sigc::bind( sigc::mem_fun(_menu_lash_disconnect, &Gtk::MenuItem::set_sensitive), true)); - _lash_driver->signal_detached.connect(sigc::bind( - sigc::mem_fun(_menu_lash_launch, &Gtk::MenuItem::set_sensitive), true)); _lash_driver->signal_detached.connect(sigc::bind( sigc::mem_fun(_menu_lash_connect, &Gtk::MenuItem::set_sensitive), true)); _lash_driver->signal_detached.connect(sigc::bind( @@ -494,8 +486,6 @@ Patchage::connect_widgets() _jack_driver->signal_attached.connect(sigc::bind( sigc::mem_fun(_jack_connect_toggle, &Gtk::ToggleButton::set_active), true)); - _jack_driver->signal_attached.connect(sigc::bind( - sigc::mem_fun(_menu_jack_launch, &Gtk::MenuItem::set_sensitive), false)); _jack_driver->signal_attached.connect(sigc::bind( sigc::mem_fun(_menu_jack_connect, &Gtk::MenuItem::set_sensitive), false)); _jack_driver->signal_attached.connect(sigc::bind( @@ -503,8 +493,6 @@ Patchage::connect_widgets() _jack_driver->signal_detached.connect(sigc::bind( sigc::mem_fun(_jack_connect_toggle, &Gtk::ToggleButton::set_active), false)); - _jack_driver->signal_detached.connect(sigc::bind( - sigc::mem_fun(_menu_jack_launch, &Gtk::MenuItem::set_sensitive), true)); _jack_driver->signal_detached.connect(sigc::bind( sigc::mem_fun(_menu_jack_connect, &Gtk::MenuItem::set_sensitive), true)); _jack_driver->signal_detached.connect(sigc::bind( @@ -528,29 +516,61 @@ Patchage::connect_widgets() void Patchage::menu_open_session() { + Gtk::FileChooserDialog dialog(*_main_window, "Open LASH Session", + Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); + + 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) { + _lash_driver->restore_project(dialog.get_filename()); + } } + void Patchage::menu_save_session() { + if (_lash_driver) + _lash_driver->save_project(); } + void Patchage::menu_save_session_as() { + if (!_lash_driver) + return; + + Gtk::FileChooserDialog dialog(*_main_window, "Save LASH Session", + 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) { + _lash_driver->set_project_directory(dialog.get_filename()); + _lash_driver->save_project(); + } } + void -Patchage::menu_lash_launch() +Patchage::menu_close_session() { - _lash_driver->attach(true); + cerr << "CLOSE SESSION\n"; + _lash_driver->close_project(); } void Patchage::menu_lash_connect() { - _lash_driver->attach(false); + _lash_driver->attach(true); } @@ -610,7 +630,6 @@ Patchage::on_pane_position_changed() if (_pane_closed && new_position < max_pane_position()) { // Auto open _user_pane_position = new_position; - cerr << "FOO\n"; _messages_expander->set_expanded(true); _pane_closed = false; _menu_view_messages->set_active(true); diff --git a/src/Patchage.h b/src/Patchage.h index 2c2c070..b240556 100644 --- a/src/Patchage.h +++ b/src/Patchage.h @@ -98,12 +98,14 @@ protected: Gtk::MenuItem* _menu_open_session; Gtk::MenuItem* _menu_save_session; Gtk::MenuItem* _menu_save_session_as; + Gtk::MenuItem* _menu_close_session; Gtk::MenuItem* _menu_lash_launch; Gtk::MenuItem* _menu_lash_connect; Gtk::MenuItem* _menu_lash_disconnect; void menu_open_session(); void menu_save_session(); void menu_save_session_as(); + void menu_close_session(); void menu_lash_launch(); void menu_lash_connect(); void menu_lash_disconnect(); diff --git a/src/patchage.glade b/src/patchage.glade index 4e60be5..399d8fe 100644 --- a/src/patchage.glade +++ b/src/patchage.glade @@ -46,13 +46,13 @@ True - _Open Session + _Open Project True - + True gtk-open 1 @@ -68,13 +68,13 @@ True - _Save Session + _Save Project True - + True gtk-save 1 @@ -90,13 +90,13 @@ True - Save Session _As... + Save Project _As... True - + True gtk-save-as 1 @@ -109,6 +109,27 @@ + + + True + _Close Project + True + + + + + True + gtk-close + 1 + 0.5 + 0.5 + 0 + 0 + + + + + True @@ -124,7 +145,7 @@ - + True gtk-save 1 @@ -174,7 +195,7 @@ - + True gtk-preferences 1 @@ -193,38 +214,16 @@ - - - True - Connect to JACK (Launch) - True - - - - - - True - gtk-execute - 1 - 0.5 - 0.5 - 0 - 0 - - - - - True - Connect to _JACK (Don't Launch) + Connect to _JACK True - + - + True gtk-connect 1 @@ -244,10 +243,10 @@ Disconnect from JACK True - + - + True gtk-disconnect 1 @@ -272,10 +271,10 @@ Connect to _ALSA True - + - + True gtk-connect 1 @@ -295,10 +294,10 @@ Disconnect from ALSA True - + - + True gtk-disconnect 1 @@ -317,38 +316,16 @@ - - - True - Connect to LASH (Launch) - True - - - - - - True - gtk-execute - 1 - 0.5 - 0.5 - 0 - 0 - - - - - True - Connect to _LASH (Don't Launch) + Connect to _LASH True - + - + True gtk-connect 1 @@ -368,10 +345,10 @@ Disconnect from LASH True - + - + True gtk-disconnect 1 @@ -404,6 +381,7 @@ True True + @@ -428,7 +406,7 @@ - + True gtk-refresh 1 -- cgit v1.2.1