@@ -112,6 +112,7 @@ MainWindow::MainWindow(const QString &fileToOpen)
112112 , mRootIndex(QModelIndex())
113113 , mPreferencesDialog(new gui::PreferencesDialog(this ))
114114 , mRecentProjectsLimit(SettingsManager::value(" recentProjectsLimit" ).toInt())
115+ , mRecentFilesLimit(SettingsManager::value(" recentFilesLimit" ).toInt())
115116 , mSceneCustomizer(new SceneCustomizer())
116117 , mInitialFileToOpen(fileToOpen)
117118{
@@ -343,6 +344,7 @@ void MainWindow::connectActions()
343344 connect (mUi ->tabs , &QTabWidget::currentChanged, this , &MainWindow::sceneSelectionChanged);
344345 connect (&*mTextManager , &text::TextManager::textChanged, this , &MainWindow::setTextChanged);
345346 connect (&*mTextManager , &text::TextManager::textChanged, mUi ->actionUndo , &QAction::setEnabled);
347+ connect (&*mTextManager , &text::TextManager::needRefreshRecentFileList, this , &MainWindow::refreshRecentFilesList);
346348
347349 connect (&*mProjectManager , &ProjectManager::afterOpen, mUi ->paletteTree , &PaletteTree::refreshUserPalettes);
348350 connect (&*mProjectManager , &ProjectManager::closed, mUi ->paletteTree , &PaletteTree::refreshUserPalettes);
@@ -598,6 +600,31 @@ void MainWindow::refreshRecentProjectsList(const QString &fileName)
598600 SettingsManager::setValue (" recentProjects" , previousString);
599601}
600602
603+ void MainWindow::refreshRecentFilesList (const QString &fileName) {
604+ auto previousString = SettingsManager::value (" recentFiles" ).toString ();
605+ auto previousList = previousString.split (" ;" , QString::SkipEmptyParts);
606+ previousList.removeOne (fileName);
607+
608+ if (!previousList.isEmpty () && (previousList.size () == mRecentFilesLimit )) {
609+ previousList.removeLast ();
610+ }
611+
612+ previousString.clear ();
613+ if (mRecentFilesLimit > 0 ) {
614+ previousList.push_front (fileName);
615+ QStringListIterator iterator (previousList);
616+ while (iterator.hasNext ()) {
617+ const auto recentFileName = iterator.next ();
618+ const QFileInfo fileInfo (recentFileName);
619+ if (fileInfo.exists () && fileInfo.isFile ()) {
620+ previousString = previousString + recentFileName + " ;" ;
621+ }
622+ }
623+ }
624+
625+ SettingsManager::setValue (" recentFiles" , previousString);
626+ }
627+
601628void MainWindow::openRecentProjectsMenu ()
602629{
603630 mRecentProjectsMenu ->clear ();
@@ -616,6 +643,26 @@ void MainWindow::openRecentProjectsMenu()
616643 }
617644}
618645
646+ void MainWindow::openRecentFilesMenu ()
647+ {
648+ mRecentFilesMenu ->clear ();
649+ const auto stringList = SettingsManager::value (" recentFiles" ).toString ();
650+ auto recentFiles = stringList.split (" ;" , QString::SkipEmptyParts);
651+ mRecentFilesLimit = SettingsManager::value (" recentFilesLimit" , mRecentFilesLimit ).toInt ();
652+ while (recentFiles.size () > mRecentFilesLimit ) {
653+ recentFiles.pop_front ();
654+ }
655+
656+ for (auto &&filePath : recentFiles) {
657+ const QFileInfo fileInfo (filePath);
658+ if (fileInfo.exists () && fileInfo.isFile ()) {
659+ mRecentFilesMenu ->addAction (filePath);
660+ QObject::connect (mRecentFilesMenu ->actions ().last (), &QAction::triggered
661+ , &*mProjectManager , [this , filePath](){ mProjectManager ->openExisting (filePath);});
662+ }
663+ }
664+ }
665+
619666void MainWindow::tryToSave ()
620667{
621668 if (!mProjectManager ->saveText () && !mProjectManager ->saveOrSuggestToSaveAs ()) {
@@ -2149,6 +2196,10 @@ void MainWindow::initRecentProjectsMenu()
21492196 mRecentProjectsMenu = new QMenu (tr (" Recent projects" ), mUi ->menu_File );
21502197 mUi ->menu_File ->insertMenu (mUi ->menu_File ->actions ().at (1 ), mRecentProjectsMenu );
21512198 connect (mRecentProjectsMenu , &QMenu::aboutToShow, this , &MainWindow::openRecentProjectsMenu);
2199+
2200+ mRecentFilesMenu = new QMenu (tr (" Recent files" ), mUi ->menu_File );
2201+ mUi ->menu_File ->insertMenu (mUi ->menu_File ->actions ().at (2 ), mRecentFilesMenu );
2202+ connect (mRecentFilesMenu , &QMenu::aboutToShow, this , &MainWindow::openRecentFilesMenu);
21522203}
21532204
21542205void MainWindow::saveDiagramAsAPictureToFile (const QString &fileName)
0 commit comments