From 6eed83b13188d3cb6c4676d74c589f61e4e853dc Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 27 Nov 2008 05:41:22 +0000 Subject: Make use of status bar. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@1789 a436a847-0d15-0410-975c-d299462d15a1 --- src/client/ObjectModel.hpp | 2 +- src/gui/PatchView.cpp | 28 ++++++++++++++++++++-------- src/gui/PatchView.hpp | 6 ++++-- src/gui/PatchWindow.cpp | 40 ++++++++++++++++++++++++++++++---------- src/gui/PatchWindow.hpp | 2 ++ 5 files changed, 57 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/client/ObjectModel.hpp b/src/client/ObjectModel.hpp index d4c74ee0..5f4eb11c 100644 --- a/src/client/ObjectModel.hpp +++ b/src/client/ObjectModel.hpp @@ -62,7 +62,7 @@ public: virtual ~ObjectModel(); const Atom& get_variable(const string& key) const; - Atom& get_variable( string& key); + Atom& get_variable(string& key); virtual void set_property(const string& key, const Atom& value) { ResourceImpl::set_property(key, value); diff --git a/src/gui/PatchView.cpp b/src/gui/PatchView.cpp index 6e2ff1cd..02e6fc97 100644 --- a/src/gui/PatchView.cpp +++ b/src/gui/PatchView.cpp @@ -107,11 +107,11 @@ PatchView::set_patch(SharedPtr patch) _poly_spin->signal_value_changed().connect( sigc::mem_fun(*this, &PatchView::poly_changed)); - _canvas->signal_port_entered.connect( - sigc::mem_fun(*this, &PatchView::canvas_port_entered)); - _canvas->signal_item_entered.connect( sigc::mem_fun(*this, &PatchView::canvas_item_entered)); + + _canvas->signal_item_left.connect( + sigc::mem_fun(*this, &PatchView::canvas_item_left)); _canvas->grab_focus(); } @@ -155,20 +155,32 @@ PatchView::editable_toggled() void -PatchView::canvas_port_entered(FlowCanvas::Port* port) +PatchView::canvas_item_entered(Gnome::Canvas::Item* item) { - Port* p = dynamic_cast(port); + NodeModule* m = dynamic_cast(item); + if (m) { + signal_object_entered.emit(m->node().get()); + return; + } + + Port* p = dynamic_cast(item); if (p) signal_object_entered.emit(p->model().get()); } void -PatchView::canvas_item_entered(FlowCanvas::Item* item) +PatchView::canvas_item_left(Gnome::Canvas::Item* item) { NodeModule* m = dynamic_cast(item); - if (m) - signal_object_entered.emit(m->node().get()); + if (m) { + signal_object_left.emit(m->node().get()); + return; + } + + Port* p = dynamic_cast(item); + if (p) + signal_object_left.emit(p->model().get()); } diff --git a/src/gui/PatchView.hpp b/src/gui/PatchView.hpp index beb1de2f..77da6263 100644 --- a/src/gui/PatchView.hpp +++ b/src/gui/PatchView.hpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "raul/SharedPtr.hpp" #include "raul/Atom.hpp" @@ -65,6 +66,7 @@ public: static SharedPtr create(SharedPtr patch); sigc::signal signal_object_entered; + sigc::signal signal_object_left; private: void set_patch(SharedPtr patch); @@ -75,8 +77,8 @@ private: void refresh_clicked(); void on_editable_sig(bool locked); void editable_toggled(); - void canvas_port_entered(FlowCanvas::Port* port); - void canvas_item_entered(FlowCanvas::Item* item); + void canvas_item_entered(Gnome::Canvas::Item* item); + void canvas_item_left(Gnome::Canvas::Item* item); void property_changed(const std::string& predicate, const Raul::Atom& value); diff --git a/src/gui/PatchWindow.cpp b/src/gui/PatchWindow.cpp index fe3c498a..280682ba 100644 --- a/src/gui/PatchWindow.cpp +++ b/src/gui/PatchWindow.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include "raul/AtomRDF.hpp" #include "interface/EngineInterface.hpp" #include "client/PatchModel.hpp" @@ -43,6 +44,9 @@ namespace Ingen { namespace GUI { +static const int STATUS_CONTEXT_ENGINE = 0; +static const int STATUS_CONTEXT_PATCH = 1; +static const int STATUS_CONTEXT_HOVER = 2; PatchWindow::PatchWindow(BaseObjectType* cobject, const Glib::RefPtr& xml) : Gtk::Window(cobject) @@ -87,11 +91,11 @@ PatchWindow::PatchWindow(BaseObjectType* cobject, const Glib::RefPtrget_widget("patch_help_about_menuitem", _menu_help_about); _menu_view_control_window->property_sensitive() = false; - //m_status_bar->push(App::instance().engine()->engine_url()); - //m_status_bar->pack_start(*Gtk::manage(new Gtk::Image(Gtk::Stock::CONNECT, Gtk::ICON_SIZE_MENU)), false, false); + string engine_name = App::instance().engine()->uri(); + if (engine_name == "ingen:internal") + engine_name = "internal engine"; + _status_bar->push(string("Connected to ") + engine_name, STATUS_CONTEXT_ENGINE); - /*_menu_open->signal_activate().connect( - sigc::mem_fun(this, &PatchWindow::event_open));*/ _menu_import->signal_activate().connect( sigc::mem_fun(this, &PatchWindow::event_import)); _menu_import_location->signal_activate().connect( @@ -192,10 +196,12 @@ PatchWindow::set_patch(SharedPtr patch, SharedPtr view) new_port_connection.disconnect(); removed_port_connection.disconnect(); _entered_connection.disconnect(); + _left_connection.disconnect(); - _patch = patch; + _status_bar->pop(STATUS_CONTEXT_PATCH); - _view = view; + _patch = patch; + _view = view; if (!_view) _view = _breadcrumb_box->view(patch->path()); @@ -253,6 +259,7 @@ PatchWindow::set_patch(SharedPtr patch, SharedPtr view) show_all(); _view->signal_object_entered.connect(sigc::mem_fun(this, &PatchWindow::object_entered)); + _view->signal_object_left.connect(sigc::mem_fun(this, &PatchWindow::object_left)); _enable_signal = true; } @@ -289,13 +296,12 @@ PatchWindow::patch_port_removed(SharedPtr port) void PatchWindow::object_entered(ObjectModel* model) { - _status_bar->pop(); string msg = model->path(); NodeModel* node = dynamic_cast(model); if (node) { PluginModel* plugin = (PluginModel*)node->plugin(); if (plugin) - msg.append(" \"").append(plugin->human_name()).append("\""); + msg.append((boost::format(" (%1%)") % plugin->human_name()).str()); } PortModel* port = dynamic_cast(model); @@ -304,7 +310,8 @@ PatchWindow::object_entered(ObjectModel* model) if (parent) { const PluginModel* plugin = dynamic_cast(parent->plugin()); if (plugin) { - msg.append(" \"").append(plugin->port_human_name(port->index())).append("\""); + msg.append((boost::format(" (%1%)") + % plugin->port_human_name(port->index())).str()); const Atom& value = port->value(); if (value.is_valid()) { const Redland::Node node = AtomRDF::atom_to_node( @@ -315,7 +322,14 @@ PatchWindow::object_entered(ObjectModel* model) } } - _status_bar->push(msg); + _status_bar->push(msg, STATUS_CONTEXT_HOVER); +} + + +void +PatchWindow::object_left(ObjectModel* model) +{ + _status_bar->pop(STATUS_CONTEXT_HOVER); } @@ -372,6 +386,9 @@ PatchWindow::event_save() } else { const Glib::ustring& filename = Glib::filename_from_uri(doc->second.get_string()); App::instance().loader()->save_patch(_patch, filename); + _status_bar->push( + (boost::format("Wrote %1% to %2%") % _patch->path() % filename).str(), + STATUS_CONTEXT_PATCH); } } @@ -420,6 +437,9 @@ PatchWindow::event_save_as() if (confirm) { App::instance().loader()->save_patch(_patch, filename); _patch->set_variable("ingen:document", Atom(Glib::filename_to_uri(filename).c_str())); + _status_bar->push( + (boost::format("Wrote %1% to %2%") % _patch->path() % filename).str(), + STATUS_CONTEXT_PATCH); } } App::instance().configuration()->set_patch_folder(dialog.get_current_folder()); diff --git a/src/gui/PatchWindow.hpp b/src/gui/PatchWindow.hpp index a0c9792c..3e0c75bf 100644 --- a/src/gui/PatchWindow.hpp +++ b/src/gui/PatchWindow.hpp @@ -77,6 +77,7 @@ private: void patch_port_added(SharedPtr port); void patch_port_removed(SharedPtr port); void object_entered(ObjectModel* model); + void object_left(ObjectModel* model); void event_import(); void event_import_location(); @@ -143,6 +144,7 @@ private: Gtk::Statusbar* _status_bar; sigc::connection _entered_connection; + sigc::connection _left_connection; /** Invisible bin used to store breadcrumbs when not shown by a view */ Gtk::Alignment _breadcrumb_bin; -- cgit v1.2.1