From e1a1bcf070342c08835ef8b987832bb249259b99 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Sun, 27 Jun 2021 14:45:51 +0100 Subject: [PATCH] Encapsulate X/26 triplet list in composition class --- pagex26base.cpp | 2 +- pagex26base.h | 4 ++-- render.cpp | 2 +- x26commands.cpp | 4 ++-- x26triplets.cpp | 21 +++++++++++++++++++++ x26triplets.h | 20 ++++++++++++++++++++ 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/pagex26base.cpp b/pagex26base.cpp index d78637e..03445ec 100644 --- a/pagex26base.cpp +++ b/pagex26base.cpp @@ -74,7 +74,7 @@ void PageX26Base::setEnhancementListFromPacket(int packetNumber, QByteArray pack newX26Triplet.setAddress(packetContents.at(i*3+1) & 0x3f); newX26Triplet.setMode(packetContents.at(i*3+2) & 0x1f); newX26Triplet.setData(((packetContents.at(i*3+3) & 0x3f) << 1) | ((packetContents.at(i*3+2) & 0x20) >> 5)); - m_enhancements[enhanceListPointer] = newX26Triplet; + m_enhancements.replace(enhanceListPointer, newX26Triplet); } if (newX26Triplet.mode() == 0x1f && newX26Triplet.address() == 0x3f && newX26Triplet.data() & 0x01) // Last triplet was a Termination Marker (without ..follows) so clean up the repeated ones diff --git a/pagex26base.h b/pagex26base.h index 5e850ba..f8d3f18 100644 --- a/pagex26base.h +++ b/pagex26base.h @@ -31,7 +31,7 @@ class PageX26Base : public PageBase //: public QObject //Q_OBJECT public: - QList *enhancements() { return &m_enhancements; }; + X26TripletList *enhancements() { return &m_enhancements; }; virtual int maxEnhancements() const =0; protected: @@ -39,7 +39,7 @@ protected: void setEnhancementListFromPacket(int, QByteArray); bool packetFromEnhancementListNeeded(int n) const { return ((m_enhancements.size()+12) / 13) > n; }; - QList m_enhancements; + X26TripletList m_enhancements; const X26Triplet m_paddingX26Triplet { 41, 0x1e, 0 }; }; diff --git a/render.cpp b/render.cpp index 65bcce8..61ded4f 100644 --- a/render.cpp +++ b/render.cpp @@ -273,7 +273,7 @@ void TeletextPageRender::decodePage() setFullRowColour(r ,downwardsFullRowColour); m_textLayer[1]->enhanceMap.clear(); - if (m_renderLevel == 0 || m_levelOnePage->enhancements()->empty()) + if (m_renderLevel == 0 || m_levelOnePage->enhancements()->isEmpty()) return; m_textLayer[1]->setFullScreenColour(-1); diff --git a/x26commands.cpp b/x26commands.cpp index 663670b..fb576f5 100644 --- a/x26commands.cpp +++ b/x26commands.cpp @@ -164,7 +164,7 @@ void EditTripletCommand::redo() if (m_teletextDocument->currentSubPageIndex() != m_subPageIndex) m_teletextDocument->selectSubPageIndex(m_subPageIndex, true); - m_teletextDocument->currentSubPage()->enhancements()->operator[](m_row) = m_newTriplet; + m_teletextDocument->currentSubPage()->enhancements()->replace(m_row, m_newTriplet); m_x26Model->emit dataChanged(m_x26Model->createIndex(m_row, 0), m_x26Model->createIndex(m_row, 3), {m_role}); m_teletextDocument->emit refreshNeeded(); @@ -179,7 +179,7 @@ void EditTripletCommand::undo() if (m_teletextDocument->currentSubPageIndex() != m_subPageIndex) m_teletextDocument->selectSubPageIndex(m_subPageIndex, true); - m_teletextDocument->currentSubPage()->enhancements()->operator[](m_row) = m_oldTriplet; + m_teletextDocument->currentSubPage()->enhancements()->replace(m_row, m_oldTriplet); m_x26Model->emit dataChanged(m_x26Model->createIndex(m_row, 0), m_x26Model->createIndex(m_row, 3), {m_role}); m_teletextDocument->emit refreshNeeded(); m_teletextDocument->emit tripletCommandHighlight(m_row); diff --git a/x26triplets.cpp b/x26triplets.cpp index 6de50ef..fcad995 100644 --- a/x26triplets.cpp +++ b/x26triplets.cpp @@ -50,3 +50,24 @@ void X26Triplet::setAddressColumn(int addressColumn) { m_address = addressColumn; } + + +void X26TripletList::append(const X26Triplet &value) +{ + m_list.append(value); +} + +void X26TripletList::insert(int i, const X26Triplet &value) +{ + m_list.insert(i, value); +} + +void X26TripletList::removeAt(int i) +{ + m_list.removeAt(i); +} + +void X26TripletList::replace(int i, const X26Triplet &value) +{ + m_list.replace(i, value); +} diff --git a/x26triplets.h b/x26triplets.h index b55278d..422ca0e 100644 --- a/x26triplets.h +++ b/x26triplets.h @@ -20,6 +20,8 @@ #ifndef X26TRIPLETS_H #define X26TRIPLETS_H +#include + class X26Triplet { public: @@ -46,7 +48,25 @@ public: private: int m_address, m_mode, m_data; +}; +class X26TripletList +{ +public: + void append(const X26Triplet &); + void insert(int, const X26Triplet &); + void removeAt(int); + void replace(int, const X26Triplet &); + + void removeLast() { m_list.removeLast(); } + + const X26Triplet &at(int i) const { return m_list.at(i); } + bool isEmpty() const { return m_list.isEmpty(); } + void reserve(int alloc) { m_list.reserve(alloc); } + int size() const { return m_list.size(); } + +private: + QList m_list; }; #endif