History

added checkable menus and sub menus

ZappoMan committed 12 years ago

Commit 374b1291 parent a3d0c203 files · +238 −72Browse files

Showing the changes to interface/src/Menu.cpp (1 of 3 files). Show all

Unified · Split

interface/src/Menu.cpp+180−43
@@ -1286,63 +1286,162 @@ QString Menu::replaceLastOccurrence(QChar search, QChar replace, QString string) · 1285 unmodified lines
1286 return string;1286 return string;
1287}1287}
1288 1288
1289void Menu::addTopMenu(const QString& menu) {1289QAction* Menu::getActionFromName(const QString& menuName, QMenu* menu) {
1290 addMenu(menu);1290 QList<QAction*> menuActions;
1291 if (menu) {
1292 menuActions = menu->actions();
1293 } else {
1294 menuActions = actions();
1295 }
1296
1297 foreach (QAction* menuAction, menuActions) {
1298 if (menuName == menuAction->text()) {
1299 return menuAction;
1300 }
1301 }
1302 return NULL;
1303}
1291 1304
1292 QMenuBar::repaint();1305QMenu* Menu::getSubMenuFromName(const QString& menuName, QMenu* menu) {
1306 QAction* action = getActionFromName(menuName, menu);
1307 if (action) {
1308 return action->menu();
1309 }
1310 return NULL;
1311}
1312
1313QMenu* Menu::getMenuParent(const QString& menuName, QString& finalMenuPart) {
1314 QStringList menuTree = menuName.split(">");
1315 QMenu* parent = NULL;
1316 QMenu* menu = NULL;
1317 foreach (QString menuTreePart, menuTree) {
1318 parent = menu;
1319 finalMenuPart = menuTreePart.trimmed();
1320 menu = getSubMenuFromName(finalMenuPart, parent);
1321 if (!menu) {
1322 break;
1323 }
1324 }
1325 return parent;
1326}
1327
1328QMenu* Menu::getMenu(const QString& menuName) {
1329 QStringList menuTree = menuName.split(">");
1330 QMenu* parent = NULL;
1331 QMenu* menu = NULL;
1332 int item = 0;
1333 foreach (QString menuTreePart, menuTree) {
1334 menu = getSubMenuFromName(menuTreePart.trimmed(), parent);
1335 if (!menu) {
1336 break;
1337 }
1338 parent = menu;
1339 item++;
1340 }
1341 return menu;
1342}
1293 1343
1294 QList<QAction*> topLevelMenus = actions();1344QAction* Menu::getMenuAction(const QString& menuName) {
1295 foreach (QAction* topLevelMenuAction, topLevelMenus) {1345 QStringList menuTree = menuName.split(">");
1296 qDebug() << "menu:" << topLevelMenuAction->text();1346 QMenu* parent = NULL;
1347 QAction* action = NULL;
1348 foreach (QString menuTreePart, menuTree) {
1349 action = getActionFromName(menuTreePart.trimmed(), parent);
1350 if (!action) {
1351 break;
1352 }
1353 parent = action->menu();
1297 }1354 }
1355 return action;
1298}1356}
1299 1357
1300void Menu::removeTopMenu(const QString& menu) {1358QMenu* Menu::addMenu(const QString& menuName) {
1301 QList<QAction*> topLevelMenus = actions();1359 QStringList menuTree = menuName.split(">");
1302 foreach (QAction* topLevelMenuAction, topLevelMenus) {1360 QMenu* addTo = NULL;
1303 if (topLevelMenuAction->text() == menu) {1361 QMenu* menu = NULL;
1304 QMenuBar::removeAction(topLevelMenuAction);1362 foreach (QString menuTreePart, menuTree) {
1363 menu = getSubMenuFromName(menuTreePart.trimmed(), addTo);
1364 if (!menu) {
1365 if (!addTo) {
1366 menu = QMenuBar::addMenu(menuTreePart.trimmed());
1367 } else {
1368 menu = addTo->addMenu(menuTreePart.trimmed());
1369 }
1305 }1370 }
1371 addTo = menu;
1306 }1372 }
1373
1374 QMenuBar::repaint();
1375 return menu;
1307}1376}
1308 1377
1309void Menu::addMenuItem(const QString& menu, const QString& menuitem) {1378void Menu::removeMenu(const QString& menuName) {
1310 KeyEvent noKey;1379 QAction* action = getMenuAction(menuName);
1311 addMenuItem(menu, menuitem, noKey);1380
1381 // only proceed if the menu actually exists
1382 if (action) {
1383 QString finalMenuPart;
1384 QMenu* parent = getMenuParent(menuName, finalMenuPart);
1385
1386 if (parent) {
1387 removeAction(parent, finalMenuPart);
1388 } else {
1389 QMenuBar::removeAction(action);
1390 }
1391
1392 QMenuBar::repaint();
1393 }
1312}1394}
1313 1395
1314void Menu::addMenuItem(const QString& menu, const QString& menuitem, const KeyEvent& shortcutKey) {1396void Menu::addMenuItem(const QString& menuName, const QString& menuitem, bool checkable, bool checked) {
1315 QKeySequence shortcut(shortcutKey);1397 QMenu* menuObj = getMenu(menuName);
1316 addMenuItem(menu, menuitem, shortcut);1398 if (menuObj) {
1399 if (checkable) {
1400 addCheckableActionToQMenuAndActionHash(menuObj, menuitem, 0, checked,
1401 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()));
1402 } else {
1403 addActionToQMenuAndActionHash(menuObj, menuitem, 0,
1404 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()));
1405 }
1406 QMenuBar::repaint();
1407 }
1317}1408}
1318 1409
1319void Menu::addMenuItem(const QString& menu, const QString& menuitem, const QString& shortcutKey) {1410void Menu::addMenuItem(const QString& menuName, const QString& menuitem, const KeyEvent& shortcutKey, bool checkable, bool checked) {
1320 QKeySequence shortcut(shortcutKey);1411 QKeySequence shortcut(shortcutKey);
1321 addMenuItem(menu, menuitem, shortcut);1412 addMenuItem(menuName, menuitem, shortcut, checkable, checked);
1322}1413}
1323 1414
1324void Menu::addMenuItem(const QString& menu, const QString& menuitem, const QKeySequence& shortcutKey) {1415void Menu::addMenuItem(const QString& menuName, const QString& menuitem, const QString& shortcutKey, bool checkable, bool checked) {
1325 QList<QAction*> topLevelMenus = actions();1416 QKeySequence shortcut(shortcutKey);
1326 foreach (QAction* topLevelMenuAction, topLevelMenus) {1417 addMenuItem(menuName, menuitem, shortcut, checkable, checked);
1327 if (topLevelMenuAction->text() == menu) {1418}
1328 // add the menu item here...
1329 QMenu* menuObj = topLevelMenuAction->menu();
1330 if (menuObj) {
1331 QShortcut* shortcut = new QShortcut(shortcutKey, this);
1332 QAction* menuItemAction = addActionToQMenuAndActionHash(menuObj, menuitem, shortcutKey,
1333 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()));
1334 1419
1335 connect(shortcut, SIGNAL(activated()), menuItemAction, SLOT(trigger()));1420void Menu::addMenuItem(const QString& menuName, const QString& menuitem, const QKeySequence& shortcutKey, bool checkable, bool checked) {
1336 }1421 QMenu* menuObj = getMenu(menuName);
1422 if (menuObj) {
1423 QShortcut* shortcut = new QShortcut(shortcutKey, this);
1424 QAction* menuItemAction;
1425 if (checkable) {
1426 menuItemAction = addCheckableActionToQMenuAndActionHash(menuObj, menuitem, shortcutKey, checked,
1427 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()));
1428 } else {
1429 menuItemAction = addActionToQMenuAndActionHash(menuObj, menuitem, shortcutKey,
1430 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()));
1337 }1431 }
1432 connect(shortcut, SIGNAL(activated()), menuItemAction, SLOT(trigger()));
1433 QMenuBar::repaint();
1338 }1434 }
1339 QMenuBar::repaint();
1340}1435}
1341 1436
1342void Menu::removeMenuItem(const QString& menu, const QString& menuitem) {1437void Menu::removeMenuItem(const QString& menu, const QString& menuitem) {
1438 QMenu* menuObj = getMenu(menu);
1439 if (menuObj) {
1440 removeAction(menuObj, menuitem);
1441 }
1442 QMenuBar::repaint();
1343};1443};
1344 1444
1345
1346MenuScriptingInterface* MenuScriptingInterface::_instance = NULL;1445MenuScriptingInterface* MenuScriptingInterface::_instance = NULL;
1347QMutex MenuScriptingInterface::_instanceMutex;1446QMutex MenuScriptingInterface::_instanceMutex;
1348 1447
@@ -1373,34 +1472,64 @@ void MenuScriptingInterface::menuItemTriggered() { · 24 unmodified lines
1373 }1472 }
1374}1473}
1375 1474
1376 1475void MenuScriptingInterface::addMenu(const QString& menu) {
1377 1476 QMetaObject::invokeMethod(Menu::getInstance(), "addMenu", Q_ARG(const QString&, menu));
1378void MenuScriptingInterface::addTopMenu(const QString& menu) {
1379 QMetaObject::invokeMethod(Menu::getInstance(), "addTopMenu", Q_ARG(const QString&, menu));
1380}1477}
1381 1478
1382void MenuScriptingInterface::removeTopMenu(const QString& menu) {1479void MenuScriptingInterface::removeMenu(const QString& menu) {
1383 QMetaObject::invokeMethod(Menu::getInstance(), "removeTopMenu", Q_ARG(const QString&, menu));1480 QMetaObject::invokeMethod(Menu::getInstance(), "removeMenu", Q_ARG(const QString&, menu));
1384}1481}
1385 1482
1386void MenuScriptingInterface::addMenuItemWithKeyEvent(const QString& menu, const QString& menuitem, const KeyEvent& shortcutKey) {1483void MenuScriptingInterface::addMenuItemWithKeyEvent(const QString& menu, const QString& menuitem, const KeyEvent& shortcutKey) {
1387 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem", 1484 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem",
1388 Q_ARG(const QString&, menu),1485 Q_ARG(const QString&, menu),
1389 Q_ARG(const QString&, menuitem),1486 Q_ARG(const QString&, menuitem),
1390 Q_ARG(const KeyEvent&, shortcutKey));1487 Q_ARG(const KeyEvent&, shortcutKey),
1488 Q_ARG(bool, false),
1489 Q_ARG(bool, false));
1391}1490}
1392 1491
1393void MenuScriptingInterface::addMenuItem(const QString& menu, const QString& menuitem, const QString& shortcutKey) {1492void MenuScriptingInterface::addMenuItem(const QString& menu, const QString& menuitem, const QString& shortcutKey) {
1394 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem", 1493 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem",
1395 Q_ARG(const QString&, menu),1494 Q_ARG(const QString&, menu),
1396 Q_ARG(const QString&, menuitem),1495 Q_ARG(const QString&, menuitem),
1397 Q_ARG(const QString&, shortcutKey));1496 Q_ARG(const QString&, shortcutKey),
1497 Q_ARG(bool, false),
1498 Q_ARG(bool, false));
1398}1499}
1399 1500
1400void MenuScriptingInterface::addMenuItem(const QString& menu, const QString& menuitem) {1501void MenuScriptingInterface::addMenuItem(const QString& menu, const QString& menuitem) {
1401 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem", 1502 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem",
1402 Q_ARG(const QString&, menu),1503 Q_ARG(const QString&, menu),
1403 Q_ARG(const QString&, menuitem));1504 Q_ARG(const QString&, menuitem),
1505 Q_ARG(bool, false),
1506 Q_ARG(bool, false));
1507}
1508
1509void MenuScriptingInterface::addCheckableMenuItemWithKeyEvent(const QString& menu, const QString& menuitem, const KeyEvent& shortcutKey, bool checked) {
1510 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem",
1511 Q_ARG(const QString&, menu),
1512 Q_ARG(const QString&, menuitem),
1513 Q_ARG(const KeyEvent&, shortcutKey),
1514 Q_ARG(bool, true),
1515 Q_ARG(bool, checked));
1516}
1517
1518void MenuScriptingInterface::addCheckableMenuItem(const QString& menu, const QString& menuitem, const QString& shortcutKey, bool checked) {
1519 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem",
1520 Q_ARG(const QString&, menu),
1521 Q_ARG(const QString&, menuitem),
1522 Q_ARG(const QString&, shortcutKey),
1523 Q_ARG(bool, true),
1524 Q_ARG(bool, checked));
1525}
1526
1527void MenuScriptingInterface::addCheckableMenuItem(const QString& menu, const QString& menuitem, bool checked) {
1528 QMetaObject::invokeMethod(Menu::getInstance(), "addMenuItem",
1529 Q_ARG(const QString&, menu),
1530 Q_ARG(const QString&, menuitem),
1531 Q_ARG(bool, true),
1532 Q_ARG(bool, checked));
1404}1533}
1405 1534
1406void MenuScriptingInterface::removeMenuItem(const QString& menu, const QString& menuitem) {1535void MenuScriptingInterface::removeMenuItem(const QString& menu, const QString& menuitem) {
@@ -1408,3 +1537,11 @@ void MenuScriptingInterface::removeMenuItem(const QString& menu, const QString& · 1 unmodified line
1408 Q_ARG(const QString&, menu),1537 Q_ARG(const QString&, menu),
1409 Q_ARG(const QString&, menuitem));1538 Q_ARG(const QString&, menuitem));
1410};1539};
1540
1541bool MenuScriptingInterface::isOptionChecked(const QString& menuOption) {
1542 return Menu::getInstance()->isOptionChecked(menuOption);
1543}
1544
1545void MenuScriptingInterface::setIsOptionChecked(const QString& menuOption, bool isChecked) {
1546 return Menu::getInstance()->setIsOptionChecked(menuOption, isChecked);
1547}