From f9ce912e79b0a4a38033d47595db4d1f0ca0336e Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Sun, 6 Dec 2020 17:57:05 +0000 Subject: [PATCH] Get "empty document detection" working --- document.cpp | 10 +++++++++- document.h | 5 ++--- levelonepage.cpp | 17 +++++++++++++++++ levelonepage.h | 2 ++ pagebase.cpp | 10 ++++++++++ pagebase.h | 2 ++ 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/document.cpp b/document.cpp index a6e5747..f379f8c 100644 --- a/document.cpp +++ b/document.cpp @@ -29,7 +29,6 @@ TeletextDocument::TeletextDocument() m_description.clear(); m_pageFunction = PFLevelOnePage; m_packetCoding = Coding7bit; - m_empty = true; m_subPages.push_back(new LevelOnePage); m_currentSubPageIndex = 0; m_undoStack = new QUndoStack(this); @@ -44,6 +43,15 @@ TeletextDocument::~TeletextDocument() delete(subPage); } +bool TeletextDocument::isEmpty() const +{ + for (auto &subPage : m_subPages) + if (!subPage->isEmpty()) + return false; + + return true; +} + /* void TeletextDocument::setPageFunction(PageFunctionEnum newPageFunction) { diff --git a/document.h b/document.h index 8b8f457..fb1efb1 100644 --- a/document.h +++ b/document.h @@ -37,8 +37,8 @@ public: TeletextDocument(); ~TeletextDocument(); - bool isEmpty() const { return m_empty; } - void setModified(bool); + + bool isEmpty() const; PageFunctionEnum pageFunction() const { return m_pageFunction; } // void setPageFunction(PageFunctionEnum); @@ -88,7 +88,6 @@ signals: private: QString m_description; - bool m_empty; int m_pageNumber, m_currentSubPageIndex; PageFunctionEnum m_pageFunction; PacketCodingEnum m_packetCoding; diff --git a/levelonepage.cpp b/levelonepage.cpp index c62b83f..7d11f1a 100644 --- a/levelonepage.cpp +++ b/levelonepage.cpp @@ -81,6 +81,23 @@ void LevelOnePage::clearPage() // If clearPage() is called outside constructor, we need to implement localEnhance.clear(); } +bool LevelOnePage::isEmpty() const +{ + if (!localEnhance.isEmpty()) + return false; + + for (int i=0; i<32; i++) + if (m_CLUT[i] != defaultCLUT[i]) + return false; + + for (int r=0; r<25; r++) + for (int c=0; c<40; c++) + if (m_level1Page[r][c] != 0x20) + return false; + + return true; +} + QByteArray LevelOnePage::packet(int packetNumber, int designationCode) const { QByteArray result(40, 0x00); diff --git a/levelonepage.h b/levelonepage.h index b1bcf2a..621ba0b 100644 --- a/levelonepage.h +++ b/levelonepage.h @@ -42,6 +42,8 @@ public: LevelOnePage(); LevelOnePage(const PageBase &); + bool isEmpty() const override; + QByteArray packet(int, int=0) const override; bool packetNeeded(int, int=0) const override; bool setPacket(int, QByteArray) override; diff --git a/pagebase.cpp b/pagebase.cpp index db84f29..3dd9abf 100644 --- a/pagebase.cpp +++ b/pagebase.cpp @@ -47,6 +47,16 @@ PageBase::~PageBase() if (m_packets[i] != nullptr) delete m_packets[i]; } + +bool PageBase::isEmpty() const +{ + for (int i=0; i<90; i++) + if (m_packets[i] != nullptr) + return false; + + return true; +} + QByteArray PageBase::packet(int packetNumber, int designationCode) const { int arrayIndex = packetNumber; diff --git a/pagebase.h b/pagebase.h index 96ccac7..b6125df 100644 --- a/pagebase.h +++ b/pagebase.h @@ -34,6 +34,8 @@ public: PageBase(const PageBase &); ~PageBase(); + virtual bool isEmpty() const; + virtual QByteArray packet(int, int=0) const; virtual bool packetNeeded(int, int=0) const; virtual bool setPacket(int, QByteArray);