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_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)

View File

@@ -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;

View File

@@ -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;