Store page numbers in Page classes

Although the document class keeps the page number, the sub pages may
need to know the page number as well. For example X/27 packets
contain relative magazine numbers which need the current page number
to calculate the actual page numbers referenced.
This commit is contained in:
G.K.MacGregor
2020-09-18 17:37:16 +01:00
parent 02d8fba193
commit 4cd080ab0e
3 changed files with 18 additions and 1 deletions

View File

@@ -33,6 +33,7 @@ TeletextDocument::TeletextDocument()
m_fastTextLink[i] = 0x8ff; m_fastTextLink[i] = 0x8ff;
m_empty = true; m_empty = true;
m_subPages.push_back(new LevelOnePage); m_subPages.push_back(new LevelOnePage);
m_subPages[0]->setPageNumber(m_pageNumber);
m_currentSubPageIndex = 0; m_currentSubPageIndex = 0;
m_undoStack = new QUndoStack(this); m_undoStack = new QUndoStack(this);
m_cursorRow = 1; m_cursorRow = 1;
@@ -70,6 +71,7 @@ void TeletextDocument::loadDocument(QFile *inFile)
// This assumes that PN is the first command of a new subpage... // This assumes that PN is the first command of a new subpage...
if (firstSubPageFound) { if (firstSubPageFound) {
m_subPages.push_back(new LevelOnePage); m_subPages.push_back(new LevelOnePage);
m_subPages.back()->setPageNumber(m_pageNumber);
loadingPage = m_subPages.back(); loadingPage = m_subPages.back();
} }
m_pageNumber = pageNumberRead; m_pageNumber = pageNumberRead;
@@ -187,6 +189,7 @@ void TeletextDocument::insertSubPage(int beforeSubPageIndex, bool copySubPage)
insertedSubPage = new LevelOnePage(*m_subPages.at(beforeSubPageIndex)); insertedSubPage = new LevelOnePage(*m_subPages.at(beforeSubPageIndex));
else else
insertedSubPage = new LevelOnePage; insertedSubPage = new LevelOnePage;
insertedSubPage->setPageNumber(m_pageNumber);
if (beforeSubPageIndex == m_subPages.size()) if (beforeSubPageIndex == m_subPages.size())
m_subPages.push_back(insertedSubPage); m_subPages.push_back(insertedSubPage);
else else
@@ -204,8 +207,11 @@ void TeletextDocument::setPageNumber(QString newPageNumberString)
// The LineEdit should check if a valid hex number was entered, but just in case... // The LineEdit should check if a valid hex number was entered, but just in case...
bool newPageNumberOk; bool newPageNumberOk;
int newPageNumberRead = newPageNumberString.toInt(&newPageNumberOk, 16); int newPageNumberRead = newPageNumberString.toInt(&newPageNumberOk, 16);
if (newPageNumberOk && newPageNumberRead >= 0x100 && newPageNumberRead <= 0x8fe) if (newPageNumberOk && newPageNumberRead >= 0x100 && newPageNumberRead <= 0x8fe) {
m_pageNumber = newPageNumberRead; m_pageNumber = newPageNumberRead;
for (auto &subPage : m_subPages)
subPage->setPageNumber(newPageNumberRead);
}
} }
void TeletextDocument::setDescription(QString newDescription) void TeletextDocument::setDescription(QString newDescription)

View File

@@ -23,6 +23,7 @@
PageBase::PageBase() PageBase::PageBase()
{ {
m_pageNumber = 0x8ff;
m_pageFunction = PFLOP; m_pageFunction = PFLOP;
m_packetCoding = PC7bit; m_packetCoding = PC7bit;
// We use nullptrs to keep track of allocated packets, so initialise them this way // We use nullptrs to keep track of allocated packets, so initialise them this way
@@ -34,6 +35,7 @@ PageBase::PageBase()
PageBase::PageBase(const PageBase &other) PageBase::PageBase(const PageBase &other)
{ {
setPageNumber(other.pageNumber());
setPageFunction(other.pageFunction()); setPageFunction(other.pageFunction());
setPacketCoding(other.packetCoding()); setPacketCoding(other.packetCoding());
for (int i=0; i<8; i++) for (int i=0; i<8; i++)
@@ -50,6 +52,11 @@ PageBase::~PageBase()
delete m_packets[i]; delete m_packets[i];
} }
void PageBase::setPageNumber(int newPageNumber)
{
m_pageNumber = newPageNumber;
}
QByteArray PageBase::packet(int packetNumber, int designationCode) const QByteArray PageBase::packet(int packetNumber, int designationCode) const
{ {
int arrayIndex = packetNumber; int arrayIndex = packetNumber;

View File

@@ -37,6 +37,9 @@ public:
PageBase(const PageBase &); PageBase(const PageBase &);
~PageBase(); ~PageBase();
int pageNumber() const { return m_pageNumber; }
void setPageNumber(int);
QByteArray packet(int, int=0) const; QByteArray packet(int, int=0) const;
bool packetNeeded(int, int=0) const; bool packetNeeded(int, int=0) const;
bool setPacket(int, QByteArray); bool setPacket(int, QByteArray);
@@ -57,6 +60,7 @@ public:
bool setPacketCoding(PacketCodingEnum); bool setPacketCoding(PacketCodingEnum);
private: private:
int m_pageNumber;
bool m_controlBits[8]; bool m_controlBits[8];
PageFunctionEnum m_pageFunction; PageFunctionEnum m_pageFunction;
PacketCodingEnum m_packetCoding; PacketCodingEnum m_packetCoding;