From e19f2f14e830b016c27fc1369a34055a1764a0f5 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 1 May 2007 05:53:04 +0000 Subject: GUI cleanups. Fixed cancelling current connection attempt in engine window (w/ disconnect button). Automatically attempt to connect to running local server on the default port. git-svn-id: http://svn.drobilla.net/lad/ingen@488 a436a847-0d15-0410-975c-d299462d15a1 --- src/progs/ingenuity/App.cpp | 16 ++++--- src/progs/ingenuity/ConnectWindow.cpp | 80 ++++++++++++++++++++--------------- src/progs/ingenuity/ConnectWindow.h | 2 + src/progs/ingenuity/ingenuity.glade | 44 ++++++++++--------- 4 files changed, 83 insertions(+), 59 deletions(-) (limited to 'src/progs') diff --git a/src/progs/ingenuity/App.cpp b/src/progs/ingenuity/App.cpp index e1e4912d..8ffcd710 100644 --- a/src/progs/ingenuity/App.cpp +++ b/src/progs/ingenuity/App.cpp @@ -120,13 +120,15 @@ App::attach(const SharedPtr& engine, const SharedPtrclear(); - _store->clear(); - - _loader.reset(); - _store.reset(); - _client.reset(); - _engine.reset(); + if (_engine) { + _window_factory->clear(); + _store->clear(); + + _loader.reset(); + _store.reset(); + _client.reset(); + _engine.reset(); + } } diff --git a/src/progs/ingenuity/ConnectWindow.cpp b/src/progs/ingenuity/ConnectWindow.cpp index ac26c6fa..9fe45dfa 100644 --- a/src/progs/ingenuity/ConnectWindow.cpp +++ b/src/progs/ingenuity/ConnectWindow.cpp @@ -74,10 +74,11 @@ struct QueuedModelEngineInterface : public QueuedEngineInterface, public ModelEn ConnectWindow::ConnectWindow(BaseObjectType* cobject, const Glib::RefPtr& xml) -: Gtk::Dialog(cobject) -, _mode(CONNECT_REMOTE) -, _ping_id(-1) -, _attached(false) + : Gtk::Dialog(cobject) + , _mode(CONNECT_REMOTE) + , _ping_id(-1) + , _attached(false) + , _connect_stage(0) { xml->get_widget("connect_icon", _icon); xml->get_widget("connect_progress_bar", _progress_bar); @@ -106,6 +107,7 @@ ConnectWindow::start() resize(100, 100); init(); show(); + connect(); } @@ -143,6 +145,9 @@ ConnectWindow::connect() assert(!App::instance().client()); _connect_button->set_sensitive(false); + _disconnect_button->set_sensitive(true); + + _connect_stage = 0; if (_mode == CONNECT_REMOTE) { SharedPtr engine( @@ -215,6 +220,7 @@ ConnectWindow::connect() void ConnectWindow::disconnect() { + _connect_stage = -1; _attached = false; _progress_bar->set_fraction(0.0); @@ -224,6 +230,9 @@ ConnectWindow::disconnect() App::instance().detach(); init(); + + _connect_button->set_sensitive(true); + _disconnect_button->set_sensitive(false); } @@ -284,10 +293,8 @@ ConnectWindow::gtk_callback() gettimeofday(&now, NULL); static timeval last = now; - static int stage = 0; - /* Connecting to engine */ - if (stage == 0) { + if (_connect_stage == 0) { assert(!_attached); assert(App::instance().engine()); @@ -306,13 +313,13 @@ ConnectWindow::gtk_callback() App::instance().engine()->set_next_response_id(_ping_id); App::instance().engine()->ping(); - ++stage; + ++_connect_stage; - } else if (stage == 1) { + } else if (_connect_stage == 1) { if (_attached) { App::instance().engine()->activate(); - ++stage; + ++_connect_stage; } else { const float ms_since_last = (now.tv_sec - last.tv_sec) * 1000.0f + (now.tv_usec - last.tv_usec) * 0.001f; @@ -322,15 +329,15 @@ ConnectWindow::gtk_callback() last = now; } } - } else if (stage == 2) { + } else if (_connect_stage == 2) { _progress_label->set_text(string("Registering as client...")); //App::instance().engine()->register_client(App::instance().engine()->client_hooks()); // FIXME //auto_ptr client(new ThreadedSigClientInterface(); App::instance().engine()->register_client(ClientKey(), App::instance().client()); App::instance().engine()->load_plugins(); - ++stage; - } else if (stage == 3) { + ++_connect_stage; + } else if (_connect_stage == 3) { // Register idle callback to process events and whatnot // (Gtk refreshes at priority G_PRIORITY_HIGH_IDLE+20) /*Glib::signal_timeout().connect( @@ -342,14 +349,14 @@ ConnectWindow::gtk_callback() _progress_label->set_text(string("Requesting plugins...")); App::instance().engine()->request_plugins(); - ++stage; - } else if (stage == 4) { + ++_connect_stage; + } else if (_connect_stage == 4) { // Wait for first plugins message if (App::instance().store()->plugins().size() > 0) { _progress_label->set_text(string("Receiving plugins...")); - ++stage; + ++_connect_stage; } - } else if (stage == 5) { + } else if (_connect_stage == 5) { // FIXME /*if (App::instance().store().plugins().size() < _client->num_plugins()) { static char buf[32]; @@ -360,31 +367,26 @@ ConnectWindow::gtk_callback() App::instance().store().plugins().size() / (double)_client->num_plugins()); } else {*/ _progress_bar->set_text(""); - ++stage; + ++_connect_stage; //} - } else if (stage == 6) { + } else if (_connect_stage == 6) { _progress_label->set_text(string("Waiting for root patch...")); App::instance().engine()->request_all_objects(); - ++stage; - } else if (stage == 7) { + ++_connect_stage; + } else if (_connect_stage == 7) { if (App::instance().store()->objects().size() > 0) { SharedPtr root = PtrCast(App::instance().store()->object("/")); assert(root); App::instance().window_factory()->present_patch(root); - ++stage; + ++_connect_stage; } - } else if (stage == 8) { + } else if (_connect_stage == 8) { _progress_label->set_text("Connected to engine"); - ++stage; - } else if (stage == 9) { - stage = -1; + ++_connect_stage; + } else if (_connect_stage == 9) { + ++_connect_stage; hide(); - } - - if (stage != 5) // yeah, ew - _progress_bar->pulse(); - - if (stage == -1) { // finished connecting + } else if (_connect_stage == 10) { _icon->set(Gtk::Stock::CONNECT, Gtk::ICON_SIZE_LARGE_TOOLBAR); _progress_bar->set_fraction(1.0); _url_entry->set_sensitive(false); @@ -393,7 +395,19 @@ ConnectWindow::gtk_callback() _port_spinbutton->set_sensitive(false); _launch_radio->set_sensitive(false); _internal_radio->set_sensitive(false); - stage = 0; // set ourselves up for next time (if there is one) + _connect_stage = 0; // set ourselves up for next time (if there is one) + return false; // deregister this callback + } + + if (_connect_stage != 5) // yeah, ew + _progress_bar->pulse(); + + if (_connect_stage == -1) { // we were cancelled + _icon->set(Gtk::Stock::DISCONNECT, Gtk::ICON_SIZE_LARGE_TOOLBAR); + _progress_bar->set_fraction(0.0); + _connect_button->set_sensitive(true); + _disconnect_button->set_sensitive(false); + _connect_stage = 0; // set ourselves up for next time (if there is one) return false; // deregister this callback } else { return true; diff --git a/src/progs/ingenuity/ConnectWindow.h b/src/progs/ingenuity/ConnectWindow.h index 0aa03313..7e137066 100644 --- a/src/progs/ingenuity/ConnectWindow.h +++ b/src/progs/ingenuity/ConnectWindow.h @@ -63,6 +63,8 @@ private: Mode _mode; int32_t _ping_id; bool _attached; + + int _connect_stage; Gtk::Image* _icon; Gtk::ProgressBar* _progress_bar; diff --git a/src/progs/ingenuity/ingenuity.glade b/src/progs/ingenuity/ingenuity.glade index 12f292e7..6eaf300e 100644 --- a/src/progs/ingenuity/ingenuity.glade +++ b/src/progs/ingenuity/ingenuity.glade @@ -3,7 +3,7 @@ - Ingen + Ingenuity 640 480 ingen.svg @@ -163,6 +163,21 @@ True + + + True + Remove all objects from patch + gtk-clear + True + True + + + + + + True + + True @@ -276,16 +291,6 @@ - - - True - Remove all objects from patch - gtk-clear - True - True - - - True @@ -325,7 +330,7 @@ True - gtk-connect + gtk-execute 1 @@ -359,7 +364,7 @@ True - gtk-dialog-error + gtk-info 1 @@ -1595,7 +1600,7 @@ 400 180 8 - Error Messages + Messages - Ingenuity ingen.svg @@ -1662,7 +1667,7 @@ 8 - Configuration + Configuration - Ingenuity ingen.svg @@ -1989,7 +1994,7 @@ 6 - window1 + Node Properties - Ingenuity ingen.svg @@ -2213,7 +2218,7 @@ Contributors: 320 340 8 - Patches + Patches - Ingenuity ingen.svg @@ -2236,7 +2241,7 @@ Contributors: 6 - Connect to Engine + Engine - Ingenuity False ingen.svg GDK_WINDOW_TYPE_HINT_DIALOG @@ -2922,9 +2927,10 @@ Thank you for contributing. 8 GTK_WINDOW_POPUP - Port Properties + Port Properties - Ingenuity False GTK_WIN_POS_MOUSE + True GDK_WINDOW_TYPE_HINT_DIALOG -- cgit v1.2.1