MCPcopy Create free account
hub / github.com/benkuper/Chataigne / buildPopupMenu

Method buildPopupMenu

Source/Module/ModuleFactory.cpp:186–244  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

184}
185
186void ModuleFactory::buildPopupMenu(int startOffset)
187{
188 MessageManagerLock mmLock;
189
190 menu.clear();
191
192 OwnedArray<PopupMenu> subMenus;
193 Array<String> subMenuNames;
194 Array<bool> lastDefIsCustom;
195
196 for (auto& d : defs)
197 {
198 ModuleDefinition* md = static_cast<ModuleDefinition*>(d);
199 int itemID = defs.indexOf(d) + 1 + startOffset;//start at 1 for menu
200
201 if (md->menuPath.isEmpty())
202 {
203 menu.addItem(itemID, md->type, true, false, md->icon);
204 continue;
205 }
206
207 int subMenuIndex = -1;
208
209 for (int i = 0; i < subMenus.size(); ++i)
210 {
211 if (subMenuNames[i] == md->menuPath)
212 {
213 subMenuIndex = i;
214 break;
215 }
216 }
217 if (subMenuIndex == -1)
218 {
219 subMenuNames.add(md->menuPath);
220 lastDefIsCustom.add(false);
221 subMenus.add(new PopupMenu());
222 subMenuIndex = subMenus.size() - 1;
223 }
224
225
226 if (md->isCustomModule && !lastDefIsCustom[subMenuIndex])
227 {
228 if (subMenus[subMenuIndex]->getNumItems() > 0) subMenus[subMenuIndex]->addSeparator();
229 subMenus[subMenuIndex]->addSectionHeader("Community Modules");
230 }
231
232 String label = md->type;
233 if (md->isLocalModule) label += " (local)";
234 if (md->newVersionAvailable) label += " (Update available)";
235
236 subMenus[subMenuIndex]->addItem(itemID, label, true, false, md->icon);
237 lastDefIsCustom.set(subMenuIndex, md->isCustomModule);
238 }
239
240 for (int i = 0; i < subMenus.size(); ++i) menu.addSubMenu(subMenuNames[i], *subMenus[i]);
241
242 menu.addSeparator();
243 menu.addItem(-1, "Get more modules...");

Callers 1

Calls 5

isEmptyMethod · 0.80
clearMethod · 0.45
sizeMethod · 0.45
addMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected