History

implement support for menu item positioning

ZappoMan committed 12 years ago

Commit 00480991 parent 0b6e81b8 files · +111 −61Browse files

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

Unified · Split

interface/src/Menu.cpp+45−13
@@ -690,13 +690,28 @@ QAction* Menu::addActionToQMenuAndActionHash(QMenu* destinationMenu, · 689 unmodified lines
690 const char* member,690 const char* member,
691 QAction::MenuRole role,691 QAction::MenuRole role,
692 int menuItemLocation) {692 int menuItemLocation) {
693 QAction* action;693 QAction* action = NULL;
694 QAction* actionBefore = NULL;
695
696 if (menuItemLocation >= 0 && destinationMenu->actions().size() > menuItemLocation) {
697 actionBefore = destinationMenu->actions()[menuItemLocation];
698 }
694 699
695 if (receiver && member) {700 if (!actionBefore) {
696 action = destinationMenu->addAction(actionName, receiver, member, shortcut);701 if (receiver && member) {
702 action = destinationMenu->addAction(actionName, receiver, member, shortcut);
703 } else {
704 action = destinationMenu->addAction(actionName);
705 action->setShortcut(shortcut);
706 }
697 } else {707 } else {
698 action = destinationMenu->addAction(actionName);708 action = new QAction(actionName, destinationMenu);
699 action->setShortcut(shortcut);709 action->setShortcut(shortcut);
710 destinationMenu->insertAction(actionBefore, action);
711
712 if (receiver && member) {
713 connect(action, SIGNAL(triggered()), receiver, member);
714 }
700 }715 }
701 action->setMenuRole(role);716 action->setMenuRole(role);
702 717
@@ -1366,6 +1381,17 @@ QAction* Menu::getMenuAction(const QString& menuName) { · 663 unmodified lines
1366 return action;1381 return action;
1367}1382}
1368 1383
1384int Menu::findPositionOfMenuItem(QMenu* menu, const QString& searchMenuItem) {
1385 int position = 0;
1386 foreach(QAction* action, menu->actions()) {
1387 if (action->text() == searchMenuItem) {
1388 return position;
1389 }
1390 position++;
1391 }
1392 return UNSPECIFIED_POSITION; // not found
1393}
1394
1369QMenu* Menu::addMenu(const QString& menuName) {1395QMenu* Menu::addMenu(const QString& menuName) {
1370 QStringList menuTree = menuName.split(">");1396 QStringList menuTree = menuName.split(">");
1371 QMenu* addTo = NULL;1397 QMenu* addTo = NULL;
@@ -1416,24 +1442,30 @@ void Menu::addMenuItem(const MenuItemProperties& properties) { · 44 unmodified lines
1416 if (menuObj) {1442 if (menuObj) {
1417 QShortcut* shortcut = NULL;1443 QShortcut* shortcut = NULL;
1418 if (!properties.shortcutKeySequence.isEmpty()) {1444 if (!properties.shortcutKeySequence.isEmpty()) {
1419 shortcut = new QShortcut(properties.shortcutKey, this);1445 shortcut = new QShortcut(properties.shortcutKeySequence, this);
1420 }1446 }
1421 1447
1422 /**1448 // check for positioning requests
1423 // test insert in middle of menu...1449 int requestedPosition = properties.position;
1424 QAction* physics = getMenuAction("Edit>Physics");1450 if (requestedPosition == UNSPECIFIED_POSITION && !properties.beforeItem.isEmpty()) {
1425 QAction* testHack = new QAction("test", editMenu);1451 requestedPosition = findPositionOfMenuItem(menuObj, properties.beforeItem);
1426 editMenu->insertAction(gravity, testHack);1452 }
1427 **/1453 if (requestedPosition == UNSPECIFIED_POSITION && !properties.afterItem.isEmpty()) {
1454 int afterPosition = findPositionOfMenuItem(menuObj, properties.afterItem);
1455 if (afterPosition != UNSPECIFIED_POSITION) {
1456 requestedPosition = afterPosition + 1;
1457 }
1458 }
1428 1459
1429 QAction* menuItemAction;1460 QAction* menuItemAction;
1430 if (properties.isCheckable) {1461 if (properties.isCheckable) {
1431 menuItemAction = addCheckableActionToQMenuAndActionHash(menuObj, properties.menuItemName, 1462 menuItemAction = addCheckableActionToQMenuAndActionHash(menuObj, properties.menuItemName,
1432 properties.shortcutKeySequence, properties.isChecked, 1463 properties.shortcutKeySequence, properties.isChecked,
1433 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()));1464 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()), requestedPosition);
1434 } else {1465 } else {
1435 menuItemAction = addActionToQMenuAndActionHash(menuObj, properties.menuItemName, properties.shortcutKeySequence,1466 menuItemAction = addActionToQMenuAndActionHash(menuObj, properties.menuItemName, properties.shortcutKeySequence,
1436 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()));1467 MenuScriptingInterface::getInstance(), SLOT(menuItemTriggered()),
1468 QAction::NoRole, requestedPosition);
1437 }1469 }
1438 if (shortcut) {1470 if (shortcut) {
1439 connect(shortcut, SIGNAL(activated()), menuItemAction, SLOT(trigger()));1471 connect(shortcut, SIGNAL(activated()), menuItemAction, SLOT(trigger()));