Add enum representing page Control Bits

This commit is contained in:
G.K.MacGregor
2020-11-22 12:19:48 +00:00
parent 9a57ae5469
commit e205846f97
5 changed files with 13 additions and 11 deletions

View File

@@ -99,8 +99,8 @@ void TeletextDocument::loadDocument(QFile *inFile)
bool pageStatusOk;
int pageStatusRead = inLine.mid(3, 4).toInt(&pageStatusOk, 16);
if (pageStatusOk) {
loadingPage->setControlBit(0, pageStatusRead & 0x4000);
for (int i=1, pageStatusBit=0x0001; i<8; i++, pageStatusBit<<=1)
loadingPage->setControlBit(PageBase::C4ErasePage, pageStatusRead & 0x4000);
for (int i=PageBase::C5Newsflash, pageStatusBit=0x0001; i<=PageBase::C11SerialMagazine; i++, pageStatusBit<<=1)
loadingPage->setControlBit(i, pageStatusRead & pageStatusBit);
loadingPage->setDefaultNOS(((pageStatusRead & 0x0200) >> 9) | ((pageStatusRead & 0x0100) >> 7) | ((pageStatusRead & 0x0080) >> 5));
}

View File

@@ -42,7 +42,7 @@ LevelOnePage::LevelOnePage(const PageBase &other)
localEnhance.reserve(208);
clearPage();
for (int i=0; i<8; i++)
for (int i=PageBase::C4ErasePage; i<=PageBase::C11SerialMagazine; i++)
setControlBit(i, other.controlBit(i));
for (int i=0; i<90; i++)
if (other.packetNeededArrayIndex(i))
@@ -426,8 +426,8 @@ void LevelOnePage::savePage(QTextStream *outStream, int pageNumber, int subPageN
int LevelOnePage::controlBitsToPS() const
{
//TODO map page language for regions other than 0
int pageStatus = 0x8000 | (controlBit(0) << 14) | ((m_defaultNOS & 1) << 9) | ((m_defaultNOS & 2) << 7) | ((m_defaultNOS & 4) << 5);
for (int i=1; i<8; i++)
int pageStatus = 0x8000 | (controlBit(PageBase::C4ErasePage) << 14) | ((m_defaultNOS & 1) << 9) | ((m_defaultNOS & 2) << 7) | ((m_defaultNOS & 4) << 5);
for (int i=C5Newsflash; i<=C11SerialMagazine; i++)
pageStatus |= controlBit(i) << (i-1);
return pageStatus;
}

View File

@@ -26,13 +26,13 @@ PageBase::PageBase()
// We use nullptrs to keep track of allocated packets, so initialise them this way
for (int i=0; i<90; i++)
m_packets[i] = nullptr;
for (int i=0; i<8; i++)
for (int i=PageBase::C4ErasePage; i<=PageBase::C11SerialMagazine; i++)
m_controlBits[i] = false;
}
PageBase::PageBase(const PageBase &other)
{
for (int i=0; i<8; i++)
for (int i=PageBase::C4ErasePage; i<=PageBase::C11SerialMagazine; i++)
setControlBit(i, other.controlBit(i));
for (int i=0; i<90; i++)
if (other.packetNeededArrayIndex(i))

View File

@@ -28,6 +28,8 @@ class PageBase //: public QObject
//Q_OBJECT
public:
enum ControlBitsEnum { C4ErasePage, C5Newsflash, C6Subtitle, C7SuppressHeader, C8Update, C9InterruptedSequence, C10InhibitDisplay, C11SerialMagazine };
PageBase();
PageBase(const PageBase &);
~PageBase();

View File

@@ -321,14 +321,14 @@ void TeletextPageRender::renderPage(int r)
return;
int charWidth = resultAttributes.display.doubleWidth ? 24 : 12;
int charHeight = resultAttributes.display.doubleHeight ? 20 : 10;
bool transparentBackground = (m_levelOnePage->controlBit(1) || m_levelOnePage->controlBit(2) || m_mix) && !resultAttributes.display.boxingWindow;
bool transparentBackground = (m_levelOnePage->controlBit(PageBase::C5Newsflash) || m_levelOnePage->controlBit(PageBase::C6Subtitle) || m_mix) && !resultAttributes.display.boxingWindow;
// bool transparentForeground = false;
if (transparentBackground) {
pixmapPainter.setCompositionMode(QPainter::CompositionMode_Clear);
pixmapPainter.eraseRect(c*12, r*10, charWidth, charHeight);
pixmapPainter.setCompositionMode(QPainter::CompositionMode_SourceOver);
}
if ((m_levelOnePage->controlBit(1) || m_levelOnePage->controlBit(2)) && !resultAttributes.display.boxingWindow) {
if ((m_levelOnePage->controlBit(PageBase::C5Newsflash) || m_levelOnePage->controlBit(PageBase::C6Subtitle)) && !resultAttributes.display.boxingWindow) {
// Outside a boxed area
resultCharacter = { 0x20, 0, 0 };
underlined = false;
@@ -629,7 +629,7 @@ void TeletextPageRender::updateFlashRequired(int newFlashRequired)
inline void TeletextPageRender::setFullScreenColour(int newColour)
{
if (m_mix || m_levelOnePage->controlBit(1) || m_levelOnePage->controlBit(2)) {
if (m_mix || m_levelOnePage->controlBit(PageBase::C5Newsflash) || m_levelOnePage->controlBit(PageBase::C6Subtitle)) {
m_finalFullScreenQColor = QColor(0, 0, 0, 0);
emit fullScreenColourChanged(QColor(0, 0, 0, 0));
return;
@@ -644,7 +644,7 @@ inline void TeletextPageRender::setFullScreenColour(int newColour)
inline void TeletextPageRender::setFullRowColour(int row, int newColour)
{
if (m_mix || m_levelOnePage->controlBit(1) || m_levelOnePage->controlBit(2)) {
if (m_mix || m_levelOnePage->controlBit(PageBase::C5Newsflash) || m_levelOnePage->controlBit(PageBase::C6Subtitle)) {
m_fullRowQColor[row] = QColor(0, 0, 0, 0);
emit fullRowColourChanged(row, QColor(0, 0, 0, 0));
return;