diff --git a/src/app/puzzle/vpmainwindow.cpp b/src/app/puzzle/vpmainwindow.cpp index 7ec36522b..9f89b2579 100644 --- a/src/app/puzzle/vpmainwindow.cpp +++ b/src/app/puzzle/vpmainwindow.cpp @@ -230,7 +230,7 @@ void VPMainWindow::SetCurrentFile(const QString &fileName) curFile = fileName; if (not curFile.isEmpty()) { - auto settings = VPApplication::VApp()->PuzzleSettings(); + auto *settings = VPApplication::VApp()->PuzzleSettings(); QStringList files = settings->GetRecentFileList(); files.removeAll(fileName); files.prepend(fileName); @@ -362,6 +362,35 @@ void VPMainWindow::SetupMenu() QAction* actionDockWidgetToolOptions = ui->dockWidgetProperties->toggleViewAction(); ui->menuEdit->addAction(actionDockWidgetToolOptions); + // File + m_recentFileActs.fill(nullptr); + for (auto & recentFileAct : m_recentFileActs) + { + auto *action = new QAction(this); + recentFileAct = action; + connect(action, &QAction::triggered, this, [this]() + { + if (auto *senderAction = qobject_cast(sender())) + { + const QString filePath = senderAction->data().toString(); + if (not filePath.isEmpty()) + { + LoadFile(filePath); + } + } + }); + ui->menuFile->insertAction(ui->actionPreferences, recentFileAct); + recentFileAct->setVisible(false); + } + + m_separatorAct = new QAction(this); + m_separatorAct->setSeparator(true); + m_separatorAct->setVisible(false); + ui->menuFile->insertAction(ui->actionPreferences, m_separatorAct); + + // Actions for recent files loaded by a puzzle window application. + UpdateRecentFileActions(); + // Window connect(ui->menuWindow, &QMenu::aboutToShow, this, [this]() { diff --git a/src/app/puzzle/vpmainwindow.ui b/src/app/puzzle/vpmainwindow.ui index f984cdb6f..bc329c0b6 100644 --- a/src/app/puzzle/vpmainwindow.ui +++ b/src/app/puzzle/vpmainwindow.ui @@ -14,7 +14,7 @@ Puzzle - + :/puzzleicon/64x64/logo.png:/puzzleicon/64x64/logo.png @@ -53,6 +53,8 @@ + + @@ -205,7 +207,7 @@ - + :/puzzleicon/64x64/iconCurrentPiece.png:/puzzleicon/64x64/iconCurrentPiece.png @@ -406,7 +408,7 @@ - + :/puzzleicon/64x64/iconRotate90Clockwise.png:/puzzleicon/64x64/iconRotate90Clockwise.png @@ -426,7 +428,7 @@ - + :/puzzleicon/64x64/iconRotate90Anticlockwise.png:/puzzleicon/64x64/iconRotate90Anticlockwise.png @@ -446,7 +448,7 @@ - + :/puzzleicon/64x64/iconRotateGrainlineVertical.png:/puzzleicon/64x64/iconRotateGrainlineVertical.png @@ -466,7 +468,7 @@ - + :/puzzleicon/64x64/iconRotateGrainlineHorizontal.png:/puzzleicon/64x64/iconRotateGrainlineHorizontal.png @@ -626,7 +628,7 @@ - + :/puzzleicon/64x64/iconLayout.png:/puzzleicon/64x64/iconLayout.png @@ -778,7 +780,7 @@ - + :/puzzleicon/64x64/iconPortrait.png:/puzzleicon/64x64/iconPortrait.png @@ -801,7 +803,7 @@ - + :/puzzleicon/64x64/iconLandscape.png:/puzzleicon/64x64/iconLandscape.png @@ -985,7 +987,7 @@ - + :/puzzleicon/64x64/iconGrainlineVertical.png:/puzzleicon/64x64/iconGrainlineVertical.png @@ -1005,7 +1007,7 @@ - + :/puzzleicon/64x64/iconGrainlineHorizontal.png:/puzzleicon/64x64/iconGrainlineHorizontal.png @@ -1091,7 +1093,7 @@ - + :/puzzleicon/64x64/iconTiles.png:/puzzleicon/64x64/iconTiles.png @@ -1133,7 +1135,7 @@ 0 0 356 - 706 + 700 @@ -1201,7 +1203,7 @@ - + :/puzzleicon/64x64/iconPortrait.png:/puzzleicon/64x64/iconPortrait.png @@ -1221,7 +1223,7 @@ - + :/puzzleicon/64x64/iconLandscape.png:/puzzleicon/64x64/iconLandscape.png @@ -1379,7 +1381,7 @@ - + :/puzzleicon/64x64/iconProperties.png:/puzzleicon/64x64/iconProperties.png @@ -1421,7 +1423,7 @@ 0 0 356 - 706 + 700 @@ -1746,6 +1748,11 @@ Zoom sheet + + + Preferences + + @@ -1795,8 +1802,6 @@ checkBoxLayoutWarningPiecesSuperposition checkBoxLayoutWarningPiecesOutOfBound - - - +