From 203d851e116d4590897eceab582f735fb30c4e26 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 23 Oct 2007 01:34:20 +0000 Subject: Plugin icon cache and plugin icons in the plugin dialog, from larsl. git-svn-id: http://svn.drobilla.net/lad/ingen@900 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/gui/App.cpp | 19 +++++++++++++++++++ src/libs/gui/App.hpp | 16 ++++++++++------ src/libs/gui/LoadPluginWindow.cpp | 25 ++++++------------------- src/libs/gui/LoadPluginWindow.hpp | 2 ++ src/libs/gui/PatchCanvas.cpp | 7 +------ 5 files changed, 38 insertions(+), 31 deletions(-) (limited to 'src/libs') diff --git a/src/libs/gui/App.cpp b/src/libs/gui/App.cpp index fde2fdaa..997ae791 100644 --- a/src/libs/gui/App.cpp +++ b/src/libs/gui/App.cpp @@ -355,6 +355,25 @@ App::quit() } +Glib::RefPtr +App::icon_from_path(const string& path) +{ + map >::iterator iter = _icons.find(path); + + if (iter != _icons.end()) + return iter->second; + + Glib::RefPtr buf; + try { + buf = Gdk::Pixbuf::create_from_file(path, 20, 20); + _icons.insert(make_pair(path, buf)); + } catch (...) { + buf = Glib::RefPtr(0); + } + return buf; +} + + } // namespace GUI } // namespace Ingen diff --git a/src/libs/gui/App.hpp b/src/libs/gui/App.hpp index 0b351003..a54db98f 100644 --- a/src/libs/gui/App.hpp +++ b/src/libs/gui/App.hpp @@ -93,13 +93,15 @@ public: void port_activity(Port* port); - ConnectWindow* connect_window() const { return _connect_window; } - Gtk::AboutDialog* about_dialog() const { return _about_dialog; } - MessagesWindow* messages_dialog() const { return _messages_window; } - PatchTreeWindow* patch_tree() const { return _patch_tree_window; } - Configuration* configuration() const { return _configuration; } - WindowFactory* window_factory() const { return _window_factory; } + ConnectWindow* connect_window() const { return _connect_window; } + Gtk::AboutDialog* about_dialog() const { return _about_dialog; } + MessagesWindow* messages_dialog() const { return _messages_window; } + PatchTreeWindow* patch_tree() const { return _patch_tree_window; } + Configuration* configuration() const { return _configuration; } + WindowFactory* window_factory() const { return _window_factory; } + Glib::RefPtr icon_from_path(const string& path); + const SharedPtr& engine() const { return _engine; } const SharedPtr& client() const { return _client; } const SharedPtr& store() const { return _store; } @@ -139,6 +141,8 @@ protected: PatchTreeWindow* _patch_tree_window; Gtk::AboutDialog* _about_dialog; WindowFactory* _window_factory; + + map > _icons; Ingen::Shared::World* _world; diff --git a/src/libs/gui/LoadPluginWindow.cpp b/src/libs/gui/LoadPluginWindow.cpp index cc488210..5abbcb72 100644 --- a/src/libs/gui/LoadPluginWindow.cpp +++ b/src/libs/gui/LoadPluginWindow.cpp @@ -54,6 +54,7 @@ LoadPluginWindow::LoadPluginWindow(BaseObjectType* cobject, const Glib::RefPtrset_model(_plugins_liststore); + _plugins_treeview->append_column("", _plugins_columns._col_icon); _plugins_treeview->append_column("Name", _plugins_columns._col_name); _plugins_treeview->append_column("Type", _plugins_columns._col_type); _plugins_treeview->append_column("URI", _plugins_columns._col_uri); @@ -61,9 +62,9 @@ LoadPluginWindow::LoadPluginWindow(BaseObjectType* cobject, const Glib::RefPtrappend_column("Label", _plugins_columns._col_label); // This could be nicer.. store the TreeViewColumns locally maybe? - _plugins_treeview->get_column(0)->set_sort_column(_plugins_columns._col_name); - _plugins_treeview->get_column(1)->set_sort_column(_plugins_columns._col_type); - _plugins_treeview->get_column(2)->set_sort_column(_plugins_columns._col_uri); + _plugins_treeview->get_column(1)->set_sort_column(_plugins_columns._col_name); + _plugins_treeview->get_column(2)->set_sort_column(_plugins_columns._col_type); + _plugins_treeview->get_column(3)->set_sort_column(_plugins_columns._col_uri); //m_plugins_treeview->get_column(3)->set_sort_column(_plugins_columns._col_library); //m_plugins_treeview->get_column(4)->set_sort_column(_plugins_columns._col_label); for (int i=0; i < 3; ++i) @@ -218,6 +219,7 @@ LoadPluginWindow::set_plugins(const Raul::Table > Gtk::TreeModel::iterator iter = _plugins_liststore->append(); Gtk::TreeModel::Row row = *iter; + row[_plugins_columns._col_icon] = App::instance().icon_from_path(plugin->icon_path()); row[_plugins_columns._col_name] = plugin->name(); //row[_plugins_columns._col_label] = plugin->plug_label(); if (!strcmp(plugin->type_uri(), "ingen:Internal")) @@ -298,22 +300,6 @@ LoadPluginWindow::generate_module_name(int offset) SharedPtr plugin = row.get_value(_plugins_columns._col_plugin_model); return plugin->default_node_name(_patch); } - /*char num_buf[3]; - for (uint i=0; i < 99; ++i) { - name = plugin->default_node_name(); - if (name == "") - name = plugin->name().substr(0, plugin->name().find(' ')); - if (i+offset != 0) { - snprintf(num_buf, 3, "%d", i+offset+1); - name += "_"; - name += num_buf; - } - if (!_patch->get_node(name)) - break; - else - name = ""; - } - }*/ return name; } @@ -440,6 +426,7 @@ LoadPluginWindow::clear_clicked() set_plugins(App::instance().store()->plugins()); } + bool LoadPluginWindow::on_key_press_event(GdkEventKey* event) { diff --git a/src/libs/gui/LoadPluginWindow.hpp b/src/libs/gui/LoadPluginWindow.hpp index 4ab4b0e7..da87be79 100644 --- a/src/libs/gui/LoadPluginWindow.hpp +++ b/src/libs/gui/LoadPluginWindow.hpp @@ -44,6 +44,7 @@ class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns() { + add(_col_icon); add(_col_name); add(_col_type); add(_col_uri); @@ -53,6 +54,7 @@ public: add(_col_plugin_model); } + Gtk::TreeModelColumn > _col_icon; Gtk::TreeModelColumn _col_name; Gtk::TreeModelColumn _col_type; Gtk::TreeModelColumn _col_uri; diff --git a/src/libs/gui/PatchCanvas.cpp b/src/libs/gui/PatchCanvas.cpp index d67f301c..0b136014 100644 --- a/src/libs/gui/PatchCanvas.cpp +++ b/src/libs/gui/PatchCanvas.cpp @@ -159,12 +159,7 @@ PatchCanvas::build_plugin_class_menu(Gtk::Menu* menu, SLV2Plugin p = i->second->slv2_plugin(); if (p && slv2_plugin_get_class(p) == plugin_class) { - Glib::RefPtr icon; - string icon_path = PluginModel::get_lv2_icon_path(p); - - if (icon_path != "") - icon = Gdk::Pixbuf::create_from_file(icon_path, 20, 20); - + Glib::RefPtr icon = App::instance().icon_from_path(PluginModel::get_lv2_icon_path(p)); if (icon) { Gtk::Image* image = new Gtk::Image(icon); menu->items().push_back(Gtk::Menu_Helpers::ImageMenuElem(i->second->name(), -- cgit v1.2.1