| 1400 | } |
| 1401 | |
| 1402 | void MapEditorController::createMobileGUI() |
| 1403 | { |
| 1404 | // Create mobile-specific actions |
| 1405 | mobile_symbol_selector_action = new QAction(tr("Select symbol"), this); |
| 1406 | connect(mobile_symbol_selector_action, &QAction::triggered, this, &MapEditorController::mobileSymbolSelectorClicked); |
| 1407 | |
| 1408 | mobile_symbol_button_menu = new QMenu(window); |
| 1409 | mobile_symbol_button_menu->addAction(QString{}); // reserved for symbol name |
| 1410 | auto* description_action = mobile_symbol_button_menu->addAction(QApplication::translate("OpenOrienteering::SymbolPropertiesWidget", "Description")); |
| 1411 | connect(description_action, &QAction::triggered, this, [this]() { |
| 1412 | auto* symbol = symbol_widget->getSingleSelectedSymbol(); |
| 1413 | auto document = QString{ symbol->getNumberAsString() + QLatin1Char(' ') |
| 1414 | + QLatin1String("<b>") + symbol->getName() + QLatin1String("</b>\n\n") |
| 1415 | + symbol->getDescription() }; |
| 1416 | // Cf. SymbolToolTip::scheduleShow |
| 1417 | document.replace(QLatin1Char('\n'), QStringLiteral("<br>")); |
| 1418 | document.remove(QLatin1Char('\r')); |
| 1419 | TextBrowserDialog description_dialog(document, window); |
| 1420 | description_dialog.exec(); |
| 1421 | }); |
| 1422 | mobile_symbol_button_menu->addSeparator(); |
| 1423 | auto* hide_symbol_action = mobile_symbol_button_menu->addAction(QApplication::translate("OpenOrienteering::SymbolRenderWidget", "Hide objects with this symbol")); |
| 1424 | hide_symbol_action->setCheckable(true); |
| 1425 | connect(hide_symbol_action, &QAction::triggered, this, [this](bool value) { |
| 1426 | auto* symbol = symbol_widget->getSingleSelectedSymbol(); |
| 1427 | symbol->setHidden(value); |
| 1428 | if (!value && map->removeSymbolFromSelection(symbol, false)) |
| 1429 | map->emitSelectionChanged(); |
| 1430 | map->updateAllMapWidgets(); |
| 1431 | map->setSymbolsDirty(); |
| 1432 | selectedSymbolsChanged(); |
| 1433 | }); |
| 1434 | auto* protected_symbol_action = mobile_symbol_button_menu->addAction(QApplication::translate("OpenOrienteering::SymbolRenderWidget", "Protect objects with this symbol")); |
| 1435 | protected_symbol_action->setCheckable(true); |
| 1436 | connect(protected_symbol_action, &QAction::triggered, this, [this](bool value) { |
| 1437 | auto* symbol = symbol_widget->getSingleSelectedSymbol(); |
| 1438 | symbol->setProtected(value); |
| 1439 | if (!value && map->removeSymbolFromSelection(symbol, false)) |
| 1440 | map->emitSelectionChanged(); |
| 1441 | map->setSymbolsDirty(); |
| 1442 | selectedSymbolsChanged(); |
| 1443 | }); |
| 1444 | |
| 1445 | QAction* hide_top_bar_action = new QAction(QIcon(QString::fromLatin1(":/images/arrow-thin-upleft.png")), tr("Hide top bar"), this); |
| 1446 | connect(hide_top_bar_action, &QAction::triggered, this, &MapEditorController::hideTopActionBar); |
| 1447 | |
| 1448 | QAction* show_top_bar_action = new QAction(QIcon(QString::fromLatin1(":/images/arrow-thin-downright.png")), tr("Show top bar"), this); |
| 1449 | connect(show_top_bar_action, &QAction::triggered, this, &MapEditorController::showTopActionBar); |
| 1450 | |
| 1451 | QAction* mappart_action = new QAction(QIcon(QString::fromLatin1(":/images/map-parts.png")), tr("Map parts"), this); |
| 1452 | auto* mappart_group = new QActionGroup(window); |
| 1453 | auto* mappart_menu = new QMenu(window); |
| 1454 | mappart_action->setMenu(mappart_menu); |
| 1455 | |
| 1456 | // Don't use QMenu::aboutToShow because it causes menu mispositioning near |
| 1457 | // lower screen border when triggered from QToolButton. |
| 1458 | connect(mappart_action, &QAction::hovered, this, [this, mappart_menu, mappart_group]() { |
| 1459 | mappart_menu->clear(); |
nothing calls this directly
no test coverage detected