Changeset 2084
- Timestamp:
- 06/03/09 13:31:22 (15 months ago)
- Location:
- trunk/ingen/src/gui
- Files:
-
- 2 modified
-
PatchCanvas.cpp (modified) (4 diffs)
-
PatchCanvas.hpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ingen/src/gui/PatchCanvas.cpp
r2080 r2084 183 183 const char* class_uri_str = slv2_value_as_string(class_uri); 184 184 185 _class_menus.insert(make_pair(class_uri_str, menu));186 187 185 const std::pair<LV2Children::const_iterator, LV2Children::const_iterator> kids 188 186 = children.equal_range(class_uri_str); … … 194 192 for (LV2Children::const_iterator i = kids.first; i != kids.second; ++i) { 195 193 SLV2PluginClass c = i->second; 196 Gtk::Menu_Helpers::MenuElem menu_elem = Gtk::Menu_Helpers::MenuElem( 197 slv2_value_as_string(slv2_plugin_class_get_label(c))); 198 194 const char* sub_label_str = slv2_value_as_string(slv2_plugin_class_get_label(c)); 195 const char* sub_uri_str = slv2_value_as_string(slv2_plugin_class_get_uri(c)); 196 197 Gtk::Menu_Helpers::MenuElem menu_elem = Gtk::Menu_Helpers::MenuElem(sub_label_str); 199 198 menu->items().push_back(menu_elem); 200 199 Gtk::MenuItem* menu_item = &(menu->items().back()); 201 200 202 201 Gtk::Menu* submenu = Gtk::manage(new Gtk::Menu()); 203 size_t num_items = build_plugin_class_menu(submenu, c, classes, children);204 205 202 menu_item->set_submenu(*submenu); 203 204 size_t num_child_items = build_plugin_class_menu(submenu, c, classes, children); 205 206 _class_menus.insert(make_pair(sub_uri_str, MenuRecord(menu_item, submenu))); 207 if (num_child_items == 0) 208 menu_item->hide(); 209 206 210 ++num_items; 207 211 } … … 324 328 325 329 pair<iterator,iterator> range = _class_menus.equal_range(class_uri_str); 326 if (range.first == _class_menus.end() || range.first->second == _plugin_menu) { 330 if (range.first == _class_menus.end() || range.first == range.second 331 || range.first->second.menu == _plugin_menu) { 327 332 _classless_menu->items().push_back(Gtk::Menu_Helpers::MenuElem(p->human_name(), 328 333 sigc::bind(sigc::mem_fun(this, &PatchCanvas::load_plugin), p))); 329 _classless_menu->show(); 334 if (!_classless_menu->is_visible()) 335 _classless_menu->show(); 330 336 } else { 331 337 // For each menu that represents plugin's class (possibly several) 332 338 for (iterator i = range.first; i != range.second ; ++i) { 333 Gtk::Menu* menu = i->second ;339 Gtk::Menu* menu = i->second.menu; 334 340 if (icon) { 335 341 Gtk::Image* image = new Gtk::Image(icon); … … 341 347 sigc::bind(sigc::mem_fun(this, &PatchCanvas::load_plugin), p))); 342 348 } 349 if (!i->second.item->is_visible()) 350 i->second.item->show(); 343 351 } 344 352 } -
trunk/ingen/src/gui/PatchCanvas.hpp
r2011 r2084 137 137 int _paste_count; 138 138 139 typedef std::multimap<const std::string, Gtk::Menu*> ClassMenus; 139 struct MenuRecord { 140 MenuRecord(Gtk::MenuItem* i, Gtk::Menu* m) : item(i), menu(m) {} 141 Gtk::MenuItem* item; 142 Gtk::Menu* menu; 143 }; 144 145 typedef std::multimap<const std::string, MenuRecord> ClassMenus; 146 140 147 ClassMenus _class_menus; 141 148
