# HG changeset patch # User Thomas HOCEDEZ # Date 1455628070 -3600 # Branch develop # Node ID 213ebf00e2462c28262106701781ad7cef4a9909 # Parent 4ef50fded19f0daa3453d3dd3f943e895b4dc56f #385: Add 'Open Recent' option in Tape.exe, 'File' dropdown menu. diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -101,7 +101,7 @@ isInitialized(false) { ui->setupUi(this); - + #if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) ui->lineEditFind->setClearButtonEnabled(true); ui->lineEditName->setClearButtonEnabled(true); @@ -113,15 +113,30 @@ search = QSharedPointer(new VTableSearch(ui->tableWidget)); ui->tabWidget->setVisible(false); - ui->mainToolBar->setContextMenuPolicy(Qt::PreventContextMenu); ui->toolBarGradation->setContextMenuPolicy(Qt::PreventContextMenu); - + + + for (int i = 0; i < MaxRecentFiles; ++i) + { + recentFileActs[i] = nullptr; + recentFileActs[i] = new QAction(this); + connect(recentFileActs[i], &QAction::triggered, this, &TMainWindow::OpenRecentFile); + ui->menuFile->insertAction(ui->actionPreferences, recentFileActs[i]); + recentFileActs[i]->setVisible(false); + + } + separatorAct = new QAction(this); + separatorAct->setSeparator(true); + separatorAct->setVisible(false); + ui->menuFile->insertAction(ui->actionPreferences, separatorAct ); + SetupMenu(); setWindowTitle(tr("untitled %1").arg(qApp->MainWindows().size()+1)); ReadSettings(); + #if defined(Q_OS_MAC) // On Mac deafault icon size is 32x32. @@ -1707,6 +1722,29 @@ } //--------------------------------------------------------------------------------------------------------------------- +void TMainWindow::UpdateRecentFileActions() +{ + qCDebug(tMainWindow, "Updating recent file actions."); + const QStringList files = qApp->TapeSettings()->GetRecentFileList(); + const int numRecentFiles = qMin(files.size(), static_cast(MaxRecentFiles)); + qCDebug(tMainWindow, "Updating recent file actions = %i ",numRecentFiles); + + for (int i = 0; i < numRecentFiles; ++i) + { + QString text = QString("&%1. %2").arg(i + 1).arg(StrippedName(files.at(i))); + qCDebug(tMainWindow, "file %i = %s",numRecentFiles,text); + recentFileActs[i]->setText(text); + recentFileActs[i]->setData(files.at(i)); + recentFileActs[i]->setVisible(true); + } + for (int j = numRecentFiles; j < MaxRecentFiles; ++j) + { + recentFileActs[j]->setVisible(false); + } + + separatorAct->setVisible(numRecentFiles>0); +} +//--------------------------------------------------------------------------------------------------------------------- void TMainWindow::PatternUnitChanged(int index) { pUnit = static_cast(comboBoxUnits->itemData(index).toInt()); @@ -1717,6 +1755,8 @@ //--------------------------------------------------------------------------------------------------------------------- void TMainWindow::SetupMenu() { + + // File connect(ui->actionNew, &QAction::triggered, this, &TMainWindow::FileNew); ui->actionNew->setShortcuts(QKeySequence::New); @@ -1737,7 +1777,7 @@ connect(ui->actionQuit, &QAction::triggered, this, &TMainWindow::close); ui->actionQuit->setShortcuts(QKeySequence::Quit); - + // Measurements connect(ui->actionAddCustom, &QAction::triggered, this, &TMainWindow::AddCustom); connect(ui->actionAddKnown, &QAction::triggered, this, &TMainWindow::AddKnown); @@ -1755,6 +1795,9 @@ // Help connect(ui->actionAboutQt, &QAction::triggered, this, &TMainWindow::AboutQt); connect(ui->actionAboutTape, &QAction::triggered, this, &TMainWindow::AboutApplication); + + //Actions for recent files loaded by a tape window application. + UpdateRecentFileActions(); } //--------------------------------------------------------------------------------------------------------------------- @@ -1768,7 +1811,7 @@ ui->tabWidget->setCurrentIndex(0); ui->plainTextEditNotes->setEnabled(true); - ui->toolBarGradation->setVisible(true); + ui->toolBarGradation->setVisible(true); //Actions for recent files loaded by a tape window application. if (mType == MeasurementsType::Standard) { @@ -1948,6 +1991,7 @@ InitUnits(); InitTable(); + } //--------------------------------------------------------------------------------------------------------------------- @@ -2025,6 +2069,20 @@ ui->lineEditPathToFile->setText(QDir::toNativeSeparators(curFile)); ui->lineEditPathToFile->setToolTip(QDir::toNativeSeparators(curFile)); ui->pushButtonShowInExplorer->setEnabled(true); + + qCDebug(tMainWindow, "Updating recent file list."); + VTapeSettings *settings = qApp->TapeSettings(); + QStringList files = settings->GetRecentFileList(); + files.removeAll(fileName); + files.prepend(fileName); + while (files.size() > MaxRecentFiles) + { + files.removeLast(); + } + + settings->SetRecentFileList(files); + UpdateRecentFileActions(); + } shownName += "[*]"; setWindowTitle(shownName); @@ -2422,6 +2480,20 @@ } //--------------------------------------------------------------------------------------------------------------------- +void TMainWindow::OpenRecentFile() +{ + QAction *action = qobject_cast(sender()); + if (action) + { + const QString filePath = action->data().toString(); + if (filePath.isEmpty() == false) + { + LoadFile(filePath); + } + } +} + +//--------------------------------------------------------------------------------------------------------------------- void TMainWindow::GUIReadOnly(bool ro) { ui->actionReadOnly->setChecked(ro); @@ -2698,7 +2770,7 @@ QAction *action = menu->addAction(tr("&New Window"), this, SLOT(NewWindow())); action->setMenuRole(QAction::NoRole); menu->addSeparator(); - + QList windows = qApp->MainWindows(); for (int i = 0; i < windows.count(); ++i) { diff --git a/src/app/tape/tmainwindow.h b/src/app/tape/tmainwindow.h --- a/src/app/tape/tmainwindow.h +++ b/src/app/tape/tmainwindow.h @@ -69,6 +69,8 @@ void OpenStandard(); void OpenTemplate(); void CreateFromExisting(); + void OpenRecentFile(); + protected: virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; @@ -152,6 +154,9 @@ QAction *actionDockDiagram; bool dockDiagramVisible; bool isInitialized; + enum { MaxRecentFiles = 5 }; + QAction *recentFileActs[MaxRecentFiles]; + QAction *separatorAct; void SetupMenu(); void InitWindow(); @@ -163,7 +168,7 @@ void ShowUnits(); void ShowHeaderUnits(QTableWidget *table, int column, const QString &unit); - + void UpdateRecentFileActions(); void MeasurementsWasSaved(bool saved); void SetCurrentFile(const QString &fileName); bool SaveMeasurements(const QString &fileName, QString &error);