# HG changeset patch # User Chris Cannam # Date 1159185941 0 # Node ID 8cd725696138824025d392cf6bdf1b654004add5 # Parent da7a3828727fc427114c6286a958d2e8ce394e6d * Add a friendlier setup mechanism to SubdividingMenu, and use it for all the plugin menus, not just the by-name and by-maker ones diff -r da7a3828727f -r 8cd725696138 main/MainWindow.cpp --- a/main/MainWindow.cpp Mon Sep 25 11:21:12 2006 +0000 +++ b/main/MainWindow.cpp Mon Sep 25 12:05:41 2006 +0000 @@ -598,12 +598,14 @@ vector types = TransformFactory::getInstance()->getAllTransformTypes(); - map > categoryMenus; - map > makerMenus; + map > categoryMenus; + map > makerMenus; map byPluginNameMenus; map > pluginNameMenus; + set pendingMenus; + m_recentTransformsMenu = m_transformsMenu->addMenu(tr("&Recent Transforms")); m_rightButtonTransformsMenu->addMenu(m_recentTransformsMenu); connect(&m_recentTransforms, SIGNAL(recentChanged()), @@ -620,8 +622,11 @@ } QString byCategoryLabel = tr("%1 by Category").arg(*i); - QMenu *byCategoryMenu = m_transformsMenu->addMenu(byCategoryLabel); + SubdividingMenu *byCategoryMenu = new SubdividingMenu(byCategoryLabel, + 20, 40); + m_transformsMenu->addMenu(byCategoryMenu); m_rightButtonTransformsMenu->addMenu(byCategoryMenu); + pendingMenus.insert(byCategoryMenu); vector categories = TransformFactory::getInstance()->getTransformCategories(*i); @@ -648,11 +653,13 @@ key += *k; if (categoryMenus[*i].find(key) == categoryMenus[*i].end()) { + SubdividingMenu *m = new SubdividingMenu(*k, 20, 40); + pendingMenus.insert(m); + categoryMenus[*i][key] = m; if (parentKey == "") { - categoryMenus[*i][key] = byCategoryMenu->addMenu(*k); + byCategoryMenu->addMenu(m); } else { - categoryMenus[*i][key] = - categoryMenus[*i][parentKey]->addMenu(*k); + categoryMenus[*i][parentKey]->addMenu(m); } } } @@ -662,38 +669,29 @@ byPluginNameMenus[*i] = new SubdividingMenu(byPluginNameLabel); m_transformsMenu->addMenu(byPluginNameMenus[*i]); m_rightButtonTransformsMenu->addMenu(byPluginNameMenus[*i]); + pendingMenus.insert(byPluginNameMenus[*i]); QString byMakerLabel = tr("%1 by Maker").arg(*i); - QMenu *byMakerMenu = m_transformsMenu->addMenu(byMakerLabel); + SubdividingMenu *byMakerMenu = new SubdividingMenu(byMakerLabel, 20, 40); + m_transformsMenu->addMenu(byMakerMenu); m_rightButtonTransformsMenu->addMenu(byMakerMenu); + pendingMenus.insert(byMakerMenu); vector makers = TransformFactory::getInstance()->getTransformMakers(*i); - + for (vector::iterator j = makers.begin(); j != makers.end(); ++j) { QString maker = *j; if (maker == "") maker = tr("Unknown"); - makerMenus[*i][maker] = byMakerMenu->addMenu(maker); + makerMenus[*i][maker] = new SubdividingMenu(maker, 30, 40); + byMakerMenu->addMenu(makerMenus[*i][maker]); + pendingMenus.insert(makerMenus[*i][maker]); } } - map > pluginNameLists; - - for (unsigned int i = 0; i < transforms.size(); ++i) { - QString description = transforms[i].description; - if (description == "") description = transforms[i].name; - QString type = transforms[i].type; - QString pluginName = description.section(": ", 0, 0); - pluginNameLists[type].insert(tr("%1").arg(pluginName)); - } - - for (vector::iterator i = types.begin(); i != types.end(); ++i) { - byPluginNameMenus[*i]->setEntries(pluginNameLists[*i]); - } - for (unsigned int i = 0; i < transforms.size(); ++i) { QString description = transforms[i].description; @@ -731,7 +729,7 @@ << description.toStdString() << "\" (maker = \"" << maker.toStdString() << "\")" << std::endl; } else { - makerMenus[type][maker]->addAction(action); + makerMenus[type][maker]->addAction(pluginName, action); } action = new QAction(tr("%1...").arg(output == "" ? pluginName : output), this); @@ -763,6 +761,11 @@ } } + for (set::iterator i = pendingMenus.begin(); + i != pendingMenus.end(); ++i) { + (*i)->entriesAdded(); + } + setupRecentTransformsMenu(); menu = m_paneMenu;