Encapsulate X/26 triplet list in composition class

This commit is contained in:
G.K.MacGregor
2021-06-27 14:45:51 +01:00
parent cd531bd0a5
commit e1a1bcf070
6 changed files with 47 additions and 6 deletions

View File

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

View File

@@ -31,7 +31,7 @@ class PageX26Base : public PageBase //: public QObject
//Q_OBJECT
public:
QList<X26Triplet> *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<X26Triplet> m_enhancements;
X26TripletList m_enhancements;
const X26Triplet m_paddingX26Triplet { 41, 0x1e, 0 };
};

View File

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

View File

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

View File

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

View File

@@ -20,6 +20,8 @@
#ifndef X26TRIPLETS_H
#define X26TRIPLETS_H
#include <QList>
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<X26Triplet> m_list;
};
#endif