Encapsulate X/26 triplet list in composition class
This commit is contained in:
@@ -74,7 +74,7 @@ void PageX26Base::setEnhancementListFromPacket(int packetNumber, QByteArray pack
|
|||||||
newX26Triplet.setAddress(packetContents.at(i*3+1) & 0x3f);
|
newX26Triplet.setAddress(packetContents.at(i*3+1) & 0x3f);
|
||||||
newX26Triplet.setMode(packetContents.at(i*3+2) & 0x1f);
|
newX26Triplet.setMode(packetContents.at(i*3+2) & 0x1f);
|
||||||
newX26Triplet.setData(((packetContents.at(i*3+3) & 0x3f) << 1) | ((packetContents.at(i*3+2) & 0x20) >> 5));
|
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)
|
if (newX26Triplet.mode() == 0x1f && newX26Triplet.address() == 0x3f && newX26Triplet.data() & 0x01)
|
||||||
// Last triplet was a Termination Marker (without ..follows) so clean up the repeated ones
|
// Last triplet was a Termination Marker (without ..follows) so clean up the repeated ones
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class PageX26Base : public PageBase //: public QObject
|
|||||||
//Q_OBJECT
|
//Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QList<X26Triplet> *enhancements() { return &m_enhancements; };
|
X26TripletList *enhancements() { return &m_enhancements; };
|
||||||
virtual int maxEnhancements() const =0;
|
virtual int maxEnhancements() const =0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -39,7 +39,7 @@ protected:
|
|||||||
void setEnhancementListFromPacket(int, QByteArray);
|
void setEnhancementListFromPacket(int, QByteArray);
|
||||||
bool packetFromEnhancementListNeeded(int n) const { return ((m_enhancements.size()+12) / 13) > n; };
|
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 };
|
const X26Triplet m_paddingX26Triplet { 41, 0x1e, 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ void TeletextPageRender::decodePage()
|
|||||||
setFullRowColour(r ,downwardsFullRowColour);
|
setFullRowColour(r ,downwardsFullRowColour);
|
||||||
|
|
||||||
m_textLayer[1]->enhanceMap.clear();
|
m_textLayer[1]->enhanceMap.clear();
|
||||||
if (m_renderLevel == 0 || m_levelOnePage->enhancements()->empty())
|
if (m_renderLevel == 0 || m_levelOnePage->enhancements()->isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_textLayer[1]->setFullScreenColour(-1);
|
m_textLayer[1]->setFullScreenColour(-1);
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ void EditTripletCommand::redo()
|
|||||||
if (m_teletextDocument->currentSubPageIndex() != m_subPageIndex)
|
if (m_teletextDocument->currentSubPageIndex() != m_subPageIndex)
|
||||||
m_teletextDocument->selectSubPageIndex(m_subPageIndex, true);
|
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_x26Model->emit dataChanged(m_x26Model->createIndex(m_row, 0), m_x26Model->createIndex(m_row, 3), {m_role});
|
||||||
m_teletextDocument->emit refreshNeeded();
|
m_teletextDocument->emit refreshNeeded();
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ void EditTripletCommand::undo()
|
|||||||
if (m_teletextDocument->currentSubPageIndex() != m_subPageIndex)
|
if (m_teletextDocument->currentSubPageIndex() != m_subPageIndex)
|
||||||
m_teletextDocument->selectSubPageIndex(m_subPageIndex, true);
|
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_x26Model->emit dataChanged(m_x26Model->createIndex(m_row, 0), m_x26Model->createIndex(m_row, 3), {m_role});
|
||||||
m_teletextDocument->emit refreshNeeded();
|
m_teletextDocument->emit refreshNeeded();
|
||||||
m_teletextDocument->emit tripletCommandHighlight(m_row);
|
m_teletextDocument->emit tripletCommandHighlight(m_row);
|
||||||
|
|||||||
@@ -50,3 +50,24 @@ void X26Triplet::setAddressColumn(int addressColumn)
|
|||||||
{
|
{
|
||||||
m_address = 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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
#ifndef X26TRIPLETS_H
|
#ifndef X26TRIPLETS_H
|
||||||
#define X26TRIPLETS_H
|
#define X26TRIPLETS_H
|
||||||
|
|
||||||
|
#include <QList>
|
||||||
|
|
||||||
class X26Triplet
|
class X26Triplet
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -46,7 +48,25 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int m_address, m_mode, m_data;
|
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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user