From 377470da47e421dafb5d3bfb9ad356730a081ca7 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Sun, 20 Dec 2020 19:38:23 +0000 Subject: [PATCH] Auto-select level when loading --- document.cpp | 13 +++++++++++ document.h | 1 + levelonepage.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ levelonepage.h | 1 + mainwindow.cpp | 31 +++++++++++++----------- mainwindow.h | 1 + 6 files changed, 95 insertions(+), 13 deletions(-) diff --git a/document.cpp b/document.cpp index b50faaa..68861bc 100644 --- a/document.cpp +++ b/document.cpp @@ -225,3 +225,16 @@ void TeletextDocument::cancelSelection() { m_selectionSubPage = nullptr; } + +int TeletextDocument::levelRequired() const +{ + int levelSeen = 0; + + for (auto &subPage : m_subPages) { + levelSeen = qMax(levelSeen, subPage->levelRequired()); + if (levelSeen == 3) + break; + } + + return levelSeen; +} diff --git a/document.h b/document.h index 0b58a90..5adb9c5 100644 --- a/document.h +++ b/document.h @@ -78,6 +78,7 @@ public: bool selectionActive() const { return m_selectionSubPage == currentSubPage(); } void setSelection(int, int, int, int); void cancelSelection(); + int levelRequired() const; signals: void cursorMoved(); diff --git a/levelonepage.cpp b/levelonepage.cpp index 5d35155..9ac33c8 100644 --- a/levelonepage.cpp +++ b/levelonepage.cpp @@ -446,6 +446,67 @@ bool LevelOnePage::isPaletteDefault(int fromColour, int toColour) const return true; } +int LevelOnePage::levelRequired() const +{ + if (!isPaletteDefault(0, 15)) + return 3; + + // TODO Check for X/28/1 for DCLUT for mode 1-3 DRCS characters - return 3 + + int levelSeen = (!isPaletteDefault(16,31) || m_leftSidePanelDisplayed || m_rightSidePanelDisplayed || m_defaultScreenColour !=0 || m_defaultRowColour !=0 || m_blackBackgroundSubst || m_colourTableRemap !=0 || m_defaultCharSet != 0 || m_secondCharSet != 0xf) ? 2 : 0; + + if (localEnhance.isEmpty()) + return levelSeen; + + for (int i=0; iaddPermanentWidget(new QLabel("Level")); - QRadioButton *level1 = new QRadioButton("1"); - QRadioButton *level15 = new QRadioButton("1.5"); - QRadioButton *level25 = new QRadioButton("2.5"); - QRadioButton *level35 = new QRadioButton("3.5"); - statusBar()->addPermanentWidget(level1); - statusBar()->addPermanentWidget(level15); - statusBar()->addPermanentWidget(level25); - statusBar()->addPermanentWidget(level35); - level1->toggle(); - connect(level1, &QAbstractButton::clicked, [=]() { m_textWidget->pageRender()->setRenderLevel(0); m_textWidget->update(); }); - connect(level15, &QAbstractButton::clicked, [=]() { m_textWidget->pageRender()->setRenderLevel(1); m_textWidget->update(); }); - connect(level25, &QAbstractButton::clicked, [=]() { m_textWidget->pageRender()->setRenderLevel(2); m_textWidget->update(); }); - connect(level35, &QAbstractButton::clicked, [=]() { m_textWidget->pageRender()->setRenderLevel(3); m_textWidget->update(); }); + m_levelRadioButton[0] = new QRadioButton("1"); + m_levelRadioButton[1] = new QRadioButton("1.5"); + m_levelRadioButton[2] = new QRadioButton("2.5"); + m_levelRadioButton[3] = new QRadioButton("3.5"); + statusBar()->addPermanentWidget(m_levelRadioButton[0]); + statusBar()->addPermanentWidget(m_levelRadioButton[1]); + statusBar()->addPermanentWidget(m_levelRadioButton[2]); + statusBar()->addPermanentWidget(m_levelRadioButton[3]); + m_levelRadioButton[0]->toggle(); + connect(m_levelRadioButton[0], &QAbstractButton::clicked, [=]() { m_textWidget->pageRender()->setRenderLevel(0); m_textWidget->update(); }); + connect(m_levelRadioButton[1], &QAbstractButton::clicked, [=]() { m_textWidget->pageRender()->setRenderLevel(1); m_textWidget->update(); }); + connect(m_levelRadioButton[2], &QAbstractButton::clicked, [=]() { m_textWidget->pageRender()->setRenderLevel(2); m_textWidget->update(); }); + connect(m_levelRadioButton[3], &QAbstractButton::clicked, [=]() { m_textWidget->pageRender()->setRenderLevel(3); m_textWidget->update(); }); statusBar()->showMessage(tr("Ready")); } @@ -717,6 +717,8 @@ bool MainWindow::maybeSave() void MainWindow::loadFile(const QString &fileName) { + int levelSeen; + QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this, tr("QTeletextMaker"), tr("Cannot read file %1:\n%2.").arg(QDir::toNativeSeparators(fileName), file.errorString())); @@ -726,6 +728,9 @@ void MainWindow::loadFile(const QString &fileName) QApplication::setOverrideCursor(Qt::WaitCursor); loadTTI(&file, m_textWidget->document()); + levelSeen = m_textWidget->document()->levelRequired(); + m_levelRadioButton[levelSeen]->toggle(); + m_textWidget->pageRender()->setRenderLevel(levelSeen); updatePageWidgets(); QApplication::restoreOverrideCursor(); diff --git a/mainwindow.h b/mainwindow.h index d4e2458..b807c67 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -115,6 +115,7 @@ private: QLabel *m_subPageLabel, *m_cursorPositionLabel; QToolButton *m_previousSubPageButton, *m_nextSubPageButton; + QRadioButton *m_levelRadioButton[4]; QString m_curFile; bool m_isUntitled;