diff --git a/levelonepage.cpp b/levelonepage.cpp index 8cc9704..6ae586a 100644 --- a/levelonepage.cpp +++ b/levelonepage.cpp @@ -81,7 +81,7 @@ void LevelOnePage::clearPage() // If clearPage() is called outside constructor, we need to implement localEnhance.clear(); } -QByteArray LevelOnePage::packet(int packetNumber, int designationCode) +QByteArray LevelOnePage::packet(int packetNumber, int designationCode) const { QByteArray result(40, 0x00); @@ -256,8 +256,7 @@ bool LevelOnePage::setPacket(int packetNumber, int designationCode, QByteArray p int CLUToffset = (designationCode == 0) ? 16 : 0; m_defaultCharSet = ((packetContents.at(2) >> 4) & 0x3) | ((packetContents.at(3) << 2) & 0xc); - // Don't set m_defaultNOS directly as we need to keep control bits in subclass in sync - setDefaultNOS((packetContents.at(2) >> 1) & 0x7); + m_defaultNOS = (packetContents.at(2) >> 1) & 0x7; m_secondCharSet = ((packetContents.at(3) >> 5) & 0x1) | ((packetContents.at(4) << 1) & 0xe); m_secondNOS = (packetContents.at(3) >> 2) & 0x7; @@ -329,6 +328,43 @@ bool LevelOnePage::packetNeeded(int packetNumber, int designationCode) const return PageBase::packetNeeded(packetNumber, designationCode); } +bool LevelOnePage::controlBit(int bitNumber) const +{ + switch (bitNumber) { + case C12NOS: + return (m_defaultNOS & 1) == 1; + case C13NOS: + return (m_defaultNOS & 2) == 2; + case C14NOS: + return (m_defaultNOS & 4) == 4; + default: + return PageBase::controlBit(bitNumber); + } +} + +bool LevelOnePage::setControlBit(int bitNumber, bool active) +{ + switch (bitNumber) { + case C12NOS: + m_defaultNOS &= 0x06; + if (active) + m_defaultNOS |= 0x01; + return true; + case C13NOS: + m_defaultNOS &= 0x05; + if (active) + m_defaultNOS |= 0x02; + return true; + case C14NOS: + m_defaultNOS &= 0x03; + if (active) + m_defaultNOS |= 0x04; + return true; + default: + return PageBase::setControlBit(bitNumber, active); + } +} + void LevelOnePage::loadPagePacket(QByteArray &inLine) { bool lineNumberOk; @@ -451,9 +487,6 @@ void LevelOnePage::setDefaultCharSet(int newDefaultCharSet) { m_defaultCharSet = void LevelOnePage::setDefaultNOS(int defaultNOS) { m_defaultNOS = defaultNOS; - setControlBit(C12NOS, defaultNOS & 1); - setControlBit(C13NOS, defaultNOS & 2); - setControlBit(C14NOS, defaultNOS & 4); } void LevelOnePage::setSecondCharSet(int newSecondCharSet) diff --git a/levelonepage.h b/levelonepage.h index 28adb1e..765d0eb 100644 --- a/levelonepage.h +++ b/levelonepage.h @@ -43,10 +43,13 @@ public: LevelOnePage(); LevelOnePage(const PageBase &); - QByteArray packet(int, int=0); - bool setPacket(int, QByteArray); - bool setPacket(int, int, QByteArray); - bool packetNeeded(int, int=0) const; + QByteArray packet(int, int=0) const override; + bool packetNeeded(int, int=0) const override; + bool setPacket(int, QByteArray) override; + bool setPacket(int, int, QByteArray) override; + + bool controlBit(int bitNumber) const override; + bool setControlBit(int, bool) override; void clearPage(); void loadPagePacket(QByteArray &); diff --git a/loadsave.cpp b/loadsave.cpp index 601e0bf..83f067c 100644 --- a/loadsave.cpp +++ b/loadsave.cpp @@ -19,10 +19,11 @@ #include "loadsave.h" +#include #include +#include #include "document.h" -#include "levelonepage.h" #include "pagebase.h" // Used by TTI and hashstring diff --git a/loadsave.h b/loadsave.h index 3e1ba6b..7179d5e 100644 --- a/loadsave.h +++ b/loadsave.h @@ -20,12 +20,15 @@ #ifndef LOADSAVE_H #define LOADSAVE_H +#include #include +#include #include "document.h" #include "pagebase.h" int controlBitsToPS(PageBase *); + void saveTTI(QSaveFile &, const TeletextDocument &); #endif diff --git a/pagebase.cpp b/pagebase.cpp index bcd1ba3..db84f29 100644 --- a/pagebase.cpp +++ b/pagebase.cpp @@ -99,7 +99,7 @@ bool PageBase::setPacketArrayIndex(int arrayIndex, QByteArray packetContents) return true; } - +/* bool PageBase::deletePacket(int packetNumber, int designationCode) { int arrayIndex = packetNumber; @@ -119,7 +119,7 @@ bool PageBase::deletePacketArrayIndex(int arrayIndex) return true; } - +*/ bool PageBase::setControlBit(int bitNumber, bool active) { m_controlBits[bitNumber] = active; diff --git a/pagebase.h b/pagebase.h index 4b1a513..96ccac7 100644 --- a/pagebase.h +++ b/pagebase.h @@ -34,19 +34,19 @@ public: PageBase(const PageBase &); ~PageBase(); - QByteArray packet(int, int=0) const; - bool packetNeeded(int, int=0) const; - bool setPacket(int, QByteArray); - bool setPacket(int, int, QByteArray); - bool deletePacket(int, int=0); + virtual QByteArray packet(int, int=0) const; + virtual bool packetNeeded(int, int=0) const; + virtual bool setPacket(int, QByteArray); + virtual bool setPacket(int, int, QByteArray); +// bool deletePacket(int, int=0); + + virtual bool controlBit(int bitNumber) const { return m_controlBits[bitNumber]; } + virtual bool setControlBit(int, bool); QByteArray packetArrayIndex(int) const; bool packetNeededArrayIndex(int) const; bool setPacketArrayIndex(int, QByteArray); - bool deletePacketArrayIndex(int); - - bool controlBit(int bitNumber) const { return m_controlBits[bitNumber]; } - bool setControlBit(int, bool); +// bool deletePacketArrayIndex(int); private: bool m_controlBits[11];