From 4cd080ab0e22827f6fc712f06a21017e8c35746f Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Fri, 18 Sep 2020 17:37:16 +0100 Subject: [PATCH] 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. --- document.cpp | 8 +++++++- pagebase.cpp | 7 +++++++ pagebase.h | 4 ++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/document.cpp b/document.cpp index d00fdec..dcd6846 100644 --- a/document.cpp +++ b/document.cpp @@ -33,6 +33,7 @@ TeletextDocument::TeletextDocument() m_fastTextLink[i] = 0x8ff; m_empty = true; m_subPages.push_back(new LevelOnePage); + m_subPages[0]->setPageNumber(m_pageNumber); m_currentSubPageIndex = 0; m_undoStack = new QUndoStack(this); m_cursorRow = 1; @@ -70,6 +71,7 @@ void TeletextDocument::loadDocument(QFile *inFile) // This assumes that PN is the first command of a new subpage... if (firstSubPageFound) { m_subPages.push_back(new LevelOnePage); + m_subPages.back()->setPageNumber(m_pageNumber); loadingPage = m_subPages.back(); } m_pageNumber = pageNumberRead; @@ -187,6 +189,7 @@ void TeletextDocument::insertSubPage(int beforeSubPageIndex, bool copySubPage) insertedSubPage = new LevelOnePage(*m_subPages.at(beforeSubPageIndex)); else insertedSubPage = new LevelOnePage; + insertedSubPage->setPageNumber(m_pageNumber); if (beforeSubPageIndex == m_subPages.size()) m_subPages.push_back(insertedSubPage); 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... bool newPageNumberOk; int newPageNumberRead = newPageNumberString.toInt(&newPageNumberOk, 16); - if (newPageNumberOk && newPageNumberRead >= 0x100 && newPageNumberRead <= 0x8fe) + if (newPageNumberOk && newPageNumberRead >= 0x100 && newPageNumberRead <= 0x8fe) { m_pageNumber = newPageNumberRead; + for (auto &subPage : m_subPages) + subPage->setPageNumber(newPageNumberRead); + } } void TeletextDocument::setDescription(QString newDescription) diff --git a/pagebase.cpp b/pagebase.cpp index ab891c8..71153bb 100644 --- a/pagebase.cpp +++ b/pagebase.cpp @@ -23,6 +23,7 @@ PageBase::PageBase() { + m_pageNumber = 0x8ff; m_pageFunction = PFLOP; m_packetCoding = PC7bit; // 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) { + setPageNumber(other.pageNumber()); setPageFunction(other.pageFunction()); setPacketCoding(other.packetCoding()); for (int i=0; i<8; i++) @@ -50,6 +52,11 @@ PageBase::~PageBase() delete m_packets[i]; } +void PageBase::setPageNumber(int newPageNumber) +{ + m_pageNumber = newPageNumber; +} + QByteArray PageBase::packet(int packetNumber, int designationCode) const { int arrayIndex = packetNumber; diff --git a/pagebase.h b/pagebase.h index 7bf64a9..c8e9699 100644 --- a/pagebase.h +++ b/pagebase.h @@ -37,6 +37,9 @@ public: PageBase(const PageBase &); ~PageBase(); + int pageNumber() const { return m_pageNumber; } + void setPageNumber(int); + QByteArray packet(int, int=0) const; bool packetNeeded(int, int=0) const; bool setPacket(int, QByteArray); @@ -57,6 +60,7 @@ public: bool setPacketCoding(PacketCodingEnum); private: + int m_pageNumber; bool m_controlBits[8]; PageFunctionEnum m_pageFunction; PacketCodingEnum m_packetCoding;