/** * Start the process of opening a file selected from the recent files menu. * Emit openFile() if the file still exists, otherwise display an error * message. */ void QQMenuHelper::openRecent() { QAction *action = qobject_cast<QAction *>(sender()); if (!action) { return; } QString path = action->text(); if (!QFile::exists(path)) { QMessageBox::warning(mainWindow, qApp->applicationName(), tr("File does not exist")); recentFiles.removeOne(path); updateRecentMenu(); return; } if (QFileInfo(path).isDir()) { QMessageBox::warning(mainWindow, qApp->applicationName(), tr("The selected item is a directory")); } emit openFile(path); }
/** * <p>Adjust the "File" menu and toolbar contents as appropriate for the file * selection screen. Sets the "File" menu to have the following content:</p> * <ul> * <li>New</li> * <li>Open</li> * <li>Open Recent <i>(submenu)</i></li> * <li>(items added using addToFileMenu() go here)</li> * <li>Preferences</li> * <li><i>(separator)</i></li> * <li>Quit</li> * </ul> * <p>Also shows the "New" and "Open" buttons on the toolbar (and on the Mac, * makes sure no document icon is shown in the titlebar). This method should * be called after the visibility of any application-specific actions has * been updated (due to a Maemo implementation detail).</p> */ void QQMenuHelper::updateFileSelectorMenu() { // update action visibility fileNewAction->setVisible(true); fileOpenAction->setVisible(true); updateRecentMenu(); recent->menuAction()->setVisible(true); fileSaveAction->setVisible(false); fileSeparatorAction->setVisible(false); closeAction->setVisible(false); // enable and disable actions as appropriate for the current state fileNewAction->setEnabled(true); fileOpenAction->setEnabled(true); fileSaveAction->setEnabled(false); closeAction->setEnabled(false); #if defined(Q_WS_HILDON) || defined(Q_WS_MAEMO_5) QMenuBar *mb = mainWindow->menuBar(); mb->clear(); mb->addAction(fileNewAction); mb->addAction(fileOpenAction); int count = extraFileActions.count(); for (int i = 0; i < count; i++) { if (extraFileActions[i]->isVisible()) { mb->addAction(extraFileActions[i]); } } mb->addAction(prefsAction); mb->addAction(helpAction); mb->addAction(aboutAction); #endif #if defined(Q_WS_MAC) mainWindow->setWindowIcon(QIcon()); #endif }
MacMenu::MacMenu() : QMenuBar(nullptr) { // // File menu // QMenu *filemenu = addMenu(MainWindow::tr("&File")); QAction *newdocument = makeAction(filemenu, "newdocument", MainWindow::tr("&New"), QKeySequence::New); QAction *open = makeAction(filemenu, "opendocument", MainWindow::tr("&Open..."), QKeySequence::Open); connect(newdocument, &QAction::triggered, this, &MacMenu::newDocument); connect(open, &QAction::triggered, this, &MacMenu::openDocument); _recent = filemenu->addMenu(MainWindow::tr("Open &Recent")); connect(_recent, &QMenu::triggered, this, &MacMenu::openRecent); // Relocated menu items QAction *quit = makeAction(filemenu, "exitprogram", MainWindow::tr("&Quit"), QKeySequence("Ctrl+Q")); quit->setMenuRole(QAction::QuitRole); connect(quit, &QAction::triggered, this, &MacMenu::quitAll); QAction *preferences = makeAction(filemenu, 0, MainWindow::tr("Prefere&nces"), QKeySequence()); preferences->setMenuRole(QAction::PreferencesRole); connect(preferences, &QAction::triggered, &MainWindow::showSettings); // // Session menu // QMenu *sessionmenu = addMenu(MainWindow::tr("&Session")); QAction *host = makeAction(sessionmenu, "hostsession", MainWindow::tr("&Host..."), QKeySequence()); QAction *join = makeAction(sessionmenu, "joinsession", MainWindow::tr("&Join..."), QKeySequence()); host->setEnabled(false); connect(join, &QAction::triggered, this, &MacMenu::joinSession); // // Window menu (Mac specific) // _windows = addMenu(MainWindow::tr("Window")); connect(_windows, &QMenu::triggered, this, &MacMenu::winSelect); connect(_windows, &QMenu::aboutToShow, this, &MacMenu::updateWinMenu); QAction *minimize = makeAction(_windows, 0, tr("Minimize"), QKeySequence("ctrl+m")); _windows->addSeparator(); connect(minimize, &QAction::triggered, this, &MacMenu::winMinimize); // // Help menu // QMenu *helpmenu = addMenu(MainWindow::tr("&Help")); QAction *homepage = makeAction(helpmenu, "dphomepage", MainWindow::tr("&Homepage"), QKeySequence()); QAction *about = makeAction(helpmenu, "dpabout", MainWindow::tr("&About Drawpile"), QKeySequence()); about->setMenuRole(QAction::AboutRole); QAction *aboutqt = makeAction(helpmenu, "aboutqt", MainWindow::tr("About &Qt"), QKeySequence()); aboutqt->setMenuRole(QAction::AboutQtRole); connect(homepage, &QAction::triggered, &MainWindow::homepage); connect(about, &QAction::triggered, &MainWindow::about); connect(aboutqt, &QAction::triggered, &QApplication::aboutQt); // // Initialize // updateRecentMenu(); }