diff --git a/levelonepage.cpp b/levelonepage.cpp index 70c0178..635c3fd 100644 --- a/levelonepage.cpp +++ b/levelonepage.cpp @@ -64,6 +64,7 @@ void LevelOnePage::clearPage() m_fastTextLink[i] = { 0x0ff, 0x3f7f }; /* m_subPageNumber = 0x0000; */ + m_cycleOn = false; m_cycleValue = 20; m_cycleType = CTseconds; m_defaultCharSet = 0; @@ -341,6 +342,7 @@ bool LevelOnePage::setControlBit(int bitNumber, bool active) } /* void LevelOnePage::setSubPageNumber(int newSubPageNumber) { m_subPageNumber = newSubPageNumber; } */ +void LevelOnePage::setCycleOn(int cycleOn) { m_cycleOn = cycleOn; }; void LevelOnePage::setCycleValue(int newValue) { m_cycleValue = newValue; }; void LevelOnePage::setCycleType(CycleTypeEnum newType) { m_cycleType = newType; } void LevelOnePage::setDefaultCharSet(int newDefaultCharSet) { m_defaultCharSet = newDefaultCharSet; } diff --git a/levelonepage.h b/levelonepage.h index 11344c7..ee10fc4 100644 --- a/levelonepage.h +++ b/levelonepage.h @@ -55,6 +55,8 @@ public: int maxEnhancements() const { return 208; }; /* void setSubPageNumber(int); */ + int cycleOn() const { return m_cycleOn; }; + void setCycleOn(int cycleOn); int cycleValue() const { return m_cycleValue; }; void setCycleValue(int newValue); CycleTypeEnum cycleType() const { return m_cycleType; }; @@ -107,6 +109,7 @@ public: private: unsigned char m_level1Page[25][40]; /* int m_subPageNumber; */ + bool m_cycleOn; int m_cycleValue; CycleTypeEnum m_cycleType; int m_defaultCharSet, m_defaultNOS, m_secondCharSet, m_secondNOS; diff --git a/loadsave.cpp b/loadsave.cpp index 41068bc..2f3e0e7 100644 --- a/loadsave.cpp +++ b/loadsave.cpp @@ -35,9 +35,6 @@ void loadTTI(QFile *inFile, TeletextDocument *document) { QByteArray inLine; bool firstSubPageAlreadyFound = false; - int cycleCommandsFound = 0; - int mostRecentCycleValue = -1; - LevelOnePage::CycleTypeEnum mostRecentCycleType; LevelOnePage* loadingPage = document->subPage(0); @@ -79,12 +76,9 @@ void loadTTI(QFile *inFile, TeletextDocument *document) bool cycleValueOk; int cycleValueRead = inLine.mid(3, inLine.size()-5).toInt(&cycleValueOk); if (cycleValueOk) { - cycleCommandsFound++; - // House-keep CT command values, in case it's the only one within multiple subpages - mostRecentCycleValue = cycleValueRead; + loadingPage->setCycleOn(true); loadingPage->setCycleValue(cycleValueRead); - mostRecentCycleType = inLine.endsWith("C") ? LevelOnePage::CTcycles : LevelOnePage::CTseconds; - loadingPage->setCycleType(mostRecentCycleType); + loadingPage->setCycleType(inLine.endsWith("C") ? LevelOnePage::CTcycles : LevelOnePage::CTseconds); } } if (inLine.startsWith("FL,")) { @@ -159,13 +153,6 @@ void loadTTI(QFile *inFile, TeletextDocument *document) } } } - // If there's more than one subpage but only one valid CT command was found, apply it to all subpages - // I don't know if this is correct - if (cycleCommandsFound == 1 && document->numberOfSubPages()>1) - for (int i=0; inumberOfSubPages(); i++) { - document->subPage(i)->setCycleValue(mostRecentCycleValue); - document->subPage(i)->setCycleType(mostRecentCycleType); - } } void importT42(QFile *inFile, TeletextDocument *document) @@ -467,19 +454,26 @@ void saveTTI(QSaveFile &file, const TeletextDocument &document) outStream << endl; #endif - // Cycle time - if (document.pageFunction() == TeletextDocument::PFLevelOnePage) - // Assume that only Level One Pages have configurable cycle times + // Cycle time - assume that only Level One Pages have configurable cycle times + if (document.pageFunction() == TeletextDocument::PFLevelOnePage && document.subPage(p)->cycleOn()) { outStream << QString("CT,%1,%2").arg(document.subPage(p)->cycleValue()).arg(document.subPage(p)->cycleType()==LevelOnePage::CTcycles ? 'C' : 'T'); - else - // X/28/0 specifies page function and coding but the PF command - // should make it obvious to a human that this isn't a Level One Page +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + outStream << Qt::endl; +#else + outStream << endl; +#endif + } + + // Not a Level One Page: X/28/0 specifies page function and coding but the PF command + // should make it obvious to a human that this isn't a Level One Page + if (document.pageFunction() != TeletextDocument::PFLevelOnePage) { outStream << QString("PF,%1,%2").arg(document.pageFunction()).arg(document.packetCoding()); #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - outStream << Qt::endl; + outStream << Qt::endl; #else - outStream << endl; + outStream << endl; #endif + } // FastText links bool writeFLCommand = false; diff --git a/pageoptionsdockwidget.cpp b/pageoptionsdockwidget.cpp index 546e497..c35973e 100644 --- a/pageoptionsdockwidget.cpp +++ b/pageoptionsdockwidget.cpp @@ -82,7 +82,9 @@ PageOptionsDockWidget::PageOptionsDockWidget(TeletextWidget *parent): QDockWidge // Cycle QHBoxLayout *pageCycleLayout = new QHBoxLayout; - pageCycleLayout->addWidget(new QLabel(tr("Page cycle"))); + m_cycleOnCheckBox = new QCheckBox(tr("Page cycle")); + pageCycleLayout->addWidget(m_cycleOnCheckBox); + connect(m_cycleOnCheckBox, &QCheckBox::stateChanged, this, &PageOptionsDockWidget::setCycleOn ); m_cycleValueSpinBox = new QSpinBox; m_cycleValueSpinBox->setRange(1, 99); m_cycleValueSpinBox->setWrapping(true); @@ -173,11 +175,19 @@ void PageOptionsDockWidget::updateWidgets() m_fastTextEdit[i]->setText(QString::number(absoluteLinkPageNumber, 16).toUpper()); m_fastTextEdit[i]->blockSignals(false); } + + const bool cycleOn = m_parentMainWidget->document()->currentSubPage()->cycleOn(); + + m_cycleOnCheckBox->blockSignals(true); + m_cycleOnCheckBox->setChecked(cycleOn); + m_cycleOnCheckBox->blockSignals(false); m_cycleValueSpinBox->blockSignals(true); m_cycleValueSpinBox->setValue(m_parentMainWidget->document()->currentSubPage()->cycleValue()); + m_cycleValueSpinBox->setEnabled(cycleOn); m_cycleValueSpinBox->blockSignals(false); m_cycleTypeCombo->blockSignals(true); m_cycleTypeCombo->setCurrentIndex(m_parentMainWidget->document()->currentSubPage()->cycleType() == LevelOnePage::CTseconds); + m_cycleTypeCombo->setEnabled(cycleOn); m_cycleTypeCombo->blockSignals(false); for (int i=0; i<=7; i++) { m_controlBitsAct[i]->blockSignals(true); @@ -217,6 +227,13 @@ void PageOptionsDockWidget::setFastTextLinkPageNumber(int linkNumber, const QStr m_parentMainWidget->document()->setFastTextLinkPageNumberOnAllSubPages(linkNumber, pageNumberRead); } +void PageOptionsDockWidget::setCycleOn(bool active) +{ + m_cycleValueSpinBox->setEnabled(active); + m_cycleTypeCombo->setEnabled(active); + m_parentMainWidget->document()->currentSubPage()->setCycleOn(active); +} + void PageOptionsDockWidget::updateDefaultNOSOptions() { while (m_defaultNOSCombo->count() > 0) diff --git a/pageoptionsdockwidget.h b/pageoptionsdockwidget.h index 56cfa20..6d44289 100644 --- a/pageoptionsdockwidget.h +++ b/pageoptionsdockwidget.h @@ -40,6 +40,7 @@ public: private: TeletextWidget *m_parentMainWidget; QLineEdit *m_pageNumberEdit, *m_pageDescriptionEdit; + QCheckBox *m_cycleOnCheckBox; QSpinBox *m_cycleValueSpinBox; QComboBox *m_cycleTypeCombo; QCheckBox *m_controlBitsAct[8]; @@ -56,6 +57,9 @@ private: void setSecondNOS(); void updateDefaultNOSOptions(); void updateSecondNOSOptions(); + +private slots: + void setCycleOn(bool active); }; struct languageComboBoxItem {