From abf649d2ab6bc815f1f306d7934b045aeb318cd6 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Sun, 17 Jul 2022 15:16:53 +0100 Subject: [PATCH] Add reload from disk This is typically mapped to the F5 key, so the "secret force refresh" key has been temporarily moved to F6. --- document.cpp | 19 +++++++++++++++++++ document.h | 1 + mainwidget.cpp | 2 +- mainwindow.cpp | 33 +++++++++++++++++++++++++++++++++ mainwindow.h | 1 + 5 files changed, 55 insertions(+), 1 deletion(-) diff --git a/document.cpp b/document.cpp index 4da4def..5046af1 100644 --- a/document.cpp +++ b/document.cpp @@ -94,6 +94,25 @@ bool TeletextDocument::isEmpty() const return true; } +void TeletextDocument::clear() +{ + LevelOnePage *blankSubPage = new LevelOnePage; + + m_subPages.insert(m_subPages.begin(), blankSubPage); + + emit aboutToChangeSubPage(); + m_currentSubPageIndex = 0; + m_clutModel->setSubPage(m_subPages[0]); + emit subPageSelected(); + cancelSelection(); + m_undoStack->clear(); + + for (int i=m_subPages.size()-1; i>0; i--) { + delete(m_subPages[i]); + m_subPages.erase(m_subPages.begin()+i); + } +} + /* void TeletextDocument::setPageFunction(PageFunctionEnum newPageFunction) { diff --git a/document.h b/document.h index 15c60ce..900b20e 100644 --- a/document.h +++ b/document.h @@ -56,6 +56,7 @@ public: ~TeletextDocument(); bool isEmpty() const; + void clear(); PageFunctionEnum pageFunction() const { return m_pageFunction; } // void setPageFunction(PageFunctionEnum); diff --git a/mainwidget.cpp b/mainwidget.cpp index 81c8660..cd56e35 100644 --- a/mainwidget.cpp +++ b/mainwidget.cpp @@ -386,7 +386,7 @@ void TeletextWidget::keyPressEvent(QKeyEvent *event) case Qt::Key_PageDown: m_teletextDocument->selectSubPagePrevious(); break; - case Qt::Key_F5: + case Qt::Key_F6: m_pageDecode.decodePage(); m_pageRender.renderPage(true); update(); diff --git a/mainwindow.cpp b/mainwindow.cpp index 158798b..8c06c16 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -149,6 +149,34 @@ bool MainWindow::saveAs() return saveFile(fileName); } +void MainWindow::reload() +{ + if (m_isUntitled) + return; + + if (!m_textWidget->document()->undoStack()->isClean()) { + const QMessageBox::StandardButton ret = QMessageBox::warning(this, QApplication::applicationDisplayName(), tr("The document \"%1\" has been modified.\nDo you want to discard your changes?").arg(QFileInfo(m_curFile).fileName()), QMessageBox::Discard | QMessageBox::Cancel); + + if (ret != QMessageBox::Discard) + return; + } else { + const QMessageBox::StandardButton ret = QMessageBox::warning(this, QApplication::applicationDisplayName(), tr("Do you want to reload the document \"%1\" from disk?").arg(QFileInfo(m_curFile).fileName()), QMessageBox::Yes | QMessageBox::No); + + if (ret != QMessageBox::Yes) + return; + } + + int subPageIndex = m_textWidget->document()->currentSubPageIndex(); + + m_textWidget->document()->clear(); + loadFile(m_curFile); + + if (subPageIndex >= m_textWidget->document()->numberOfSubPages()) + subPageIndex = m_textWidget->document()->numberOfSubPages()-1; + + m_textWidget->document()->selectSubPageIndex(subPageIndex, true); +} + void MainWindow::exportPNG() { QString exportFileName = QFileDialog::getSaveFileName(this, tr("Export PNG"), QString(), "PNG image (*.png)"); @@ -328,6 +356,11 @@ void MainWindow::createActions() saveAsAct->setShortcuts(QKeySequence::SaveAs); saveAsAct->setStatusTip(tr("Save the document under a new name")); + const QIcon reloadIcon = QIcon::fromTheme("document-revert"); + QAction *reloadAct = fileMenu->addAction(reloadIcon, tr("Reload"), this, &MainWindow::reload); + reloadAct->setShortcuts(QKeySequence::Refresh); + reloadAct->setStatusTip(tr("Reload the document from disk")); + fileMenu->addSeparator(); QMenu *recentMenu = fileMenu->addMenu(tr("Recent")); diff --git a/mainwindow.h b/mainwindow.h index 421a837..a00fa8e 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -59,6 +59,7 @@ private slots: void open(); bool save(); bool saveAs(); + void reload(); void exportT42(); void exportZXNet(); void exportEditTF();