diff options
Diffstat (limited to 'src/progs')
-rw-r--r-- | src/progs/ingenuity/App.cpp | 16 | ||||
-rw-r--r-- | src/progs/ingenuity/ConnectWindow.cpp | 80 | ||||
-rw-r--r-- | src/progs/ingenuity/ConnectWindow.h | 2 | ||||
-rw-r--r-- | src/progs/ingenuity/ingenuity.glade | 44 |
4 files changed, 83 insertions, 59 deletions
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<ModelEngineInterface>& engine, const SharedPtr<SigCl void App::detach() { - _window_factory->clear(); - _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<Gnome::Glade::Xml>& 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<ModelEngineInterface> 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<ClientInterface> 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<PatchModel> root = PtrCast<PatchModel>(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 @@ <!--*- mode: xml -*--> <glade-interface> <widget class="GtkWindow" id="patch_win"> - <property name="title" translatable="yes">Ingen</property> + <property name="title" translatable="yes">Ingenuity</property> <property name="default_width">640</property> <property name="default_height">480</property> <property name="icon">ingen.svg</property> @@ -164,6 +164,21 @@ <child> <widget class="GtkMenu" id="edit2_menu"> <child> + <widget class="GtkImageMenuItem" id="patch_clear_menuitem"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Remove all objects from patch</property> + <property name="label">gtk-clear</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + <signal name="activate" handler="on_patch_clear_menuitem_activate"/> + </widget> + </child> + <child> + <widget class="GtkSeparatorMenuItem" id="separator99"> + <property name="visible">True</property> + </widget> + </child> + <child> <widget class="GtkImageMenuItem" id="patch_cut_menuitem"> <property name="visible">True</property> <property name="sensitive">False</property> @@ -277,16 +292,6 @@ </widget> </child> <child> - <widget class="GtkImageMenuItem" id="patch_clear_menuitem"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Remove all objects from patch</property> - <property name="label">gtk-clear</property> - <property name="use_underline">True</property> - <property name="use_stock">True</property> - <signal name="activate" handler="on_patch_clear_menuitem_activate"/> - </widget> - </child> - <child> <widget class="GtkImageMenuItem" id="patch_destroy_menuitem"> <property name="visible">True</property> <property name="tooltip" translatable="yes">Destoy this patch (remove it from the engine)</property> @@ -325,7 +330,7 @@ <child internal-child="image"> <widget class="GtkImage" id="image2132"> <property name="visible">True</property> - <property name="stock">gtk-connect</property> + <property name="stock">gtk-execute</property> <property name="icon_size">1</property> </widget> </child> @@ -359,7 +364,7 @@ <child internal-child="image"> <widget class="GtkImage" id="image2134"> <property name="visible">True</property> - <property name="stock">gtk-dialog-error</property> + <property name="stock">gtk-info</property> <property name="icon_size">1</property> </widget> </child> @@ -1595,7 +1600,7 @@ <property name="width_request">400</property> <property name="height_request">180</property> <property name="border_width">8</property> - <property name="title" translatable="yes">Error Messages</property> + <property name="title" translatable="yes">Messages - Ingenuity</property> <property name="icon">ingen.svg</property> <child> <widget class="GtkVBox" id="vbox12"> @@ -1662,7 +1667,7 @@ </widget> <widget class="GtkWindow" id="config_win"> <property name="border_width">8</property> - <property name="title" translatable="yes">Configuration</property> + <property name="title" translatable="yes">Configuration - Ingenuity</property> <property name="icon">ingen.svg</property> <child> <widget class="GtkVBox" id="vbox13"> @@ -1989,7 +1994,7 @@ </widget> <widget class="GtkWindow" id="node_properties_win"> <property name="border_width">6</property> - <property name="title" translatable="yes">window1</property> + <property name="title" translatable="yes">Node Properties - Ingenuity</property> <property name="icon">ingen.svg</property> <child> <widget class="GtkVBox" id="vbox17"> @@ -2213,7 +2218,7 @@ Contributors: <property name="width_request">320</property> <property name="height_request">340</property> <property name="border_width">8</property> - <property name="title" translatable="yes">Patches</property> + <property name="title" translatable="yes">Patches - Ingenuity</property> <property name="icon">ingen.svg</property> <child> <widget class="GtkScrolledWindow" id="scrolledwindow8"> @@ -2236,7 +2241,7 @@ Contributors: </widget> <widget class="GtkDialog" id="connect_win"> <property name="border_width">6</property> - <property name="title" translatable="yes">Connect to Engine</property> + <property name="title" translatable="yes">Engine - Ingenuity</property> <property name="resizable">False</property> <property name="icon">ingen.svg</property> <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> @@ -2922,9 +2927,10 @@ Thank you for contributing.</property> <widget class="GtkDialog" id="port_properties_win"> <property name="border_width">8</property> <property name="type">GTK_WINDOW_POPUP</property> - <property name="title" translatable="yes">Port Properties</property> + <property name="title" translatable="yes">Port Properties - Ingenuity</property> <property name="resizable">False</property> <property name="window_position">GTK_WIN_POS_MOUSE</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> <child internal-child="vbox"> <widget class="GtkVBox" id="dialog-vbox6"> |