Rename TeletextPage class to LevelOnePage

This commit is contained in:
G.K.MacGregor
2020-09-16 11:15:46 +01:00
parent a1e0986e5c
commit 0f864c7787
9 changed files with 114 additions and 114 deletions

View File

@@ -32,7 +32,7 @@ TeletextDocument::TeletextDocument()
for (int i=0; i<6; i++)
m_fastTextLink[i] = 0x8ff;
m_empty = true;
m_subPages.push_back(new TeletextPage);
m_subPages.push_back(new LevelOnePage);
m_currentSubPageIndex = 0;
m_undoStack = new QUndoStack(this);
m_cursorRow = 1;
@@ -51,9 +51,9 @@ void TeletextDocument::loadDocument(QFile *inFile)
bool firstSubPageFound = false;
int cycleCommandsFound = 0;
int mostRecentCycleValue = -1;
TeletextPage::CycleTypeEnum mostRecentCycleType;
LevelOnePage::CycleTypeEnum mostRecentCycleType;
TeletextPage* loadingPage = m_subPages[0];
LevelOnePage* loadingPage = m_subPages[0];
for (;;) {
inLine = inFile->readLine(160).trimmed();
@@ -69,7 +69,7 @@ void TeletextDocument::loadDocument(QFile *inFile)
// When second and subsequent PN commands are found, firstSubPageFound==true at this point
// This assumes that PN is the first command of a new subpage...
if (firstSubPageFound) {
m_subPages.push_back(new TeletextPage);
m_subPages.push_back(new LevelOnePage);
loadingPage = m_subPages.back();
}
m_pageNumber = pageNumberRead;
@@ -100,7 +100,7 @@ void TeletextDocument::loadDocument(QFile *inFile)
// House-keep CT command values, in case it's the only one within multiple subpages
mostRecentCycleValue = cycleValueRead;
loadingPage->setCycleValue(cycleValueRead);
mostRecentCycleType = inLine.endsWith("C") ? TeletextPage::CTcycles : TeletextPage::CTseconds;
mostRecentCycleType = inLine.endsWith("C") ? LevelOnePage::CTcycles : LevelOnePage::CTseconds;
loadingPage->setCycleType(mostRecentCycleType);
}
}
@@ -181,12 +181,12 @@ void TeletextDocument::selectSubPagePrevious()
void TeletextDocument::insertSubPage(int beforeSubPageIndex, bool copySubPage)
{
TeletextPage *insertedSubPage;
LevelOnePage *insertedSubPage;
if (copySubPage)
insertedSubPage = new TeletextPage(*m_subPages.at(beforeSubPageIndex));
insertedSubPage = new LevelOnePage(*m_subPages.at(beforeSubPageIndex));
else
insertedSubPage = new TeletextPage;
insertedSubPage = new LevelOnePage;
if (beforeSubPageIndex == m_subPages.size())
m_subPages.push_back(insertedSubPage);
else

View File

@@ -40,7 +40,7 @@ public:
void loadDocument(QFile *);
void saveDocument(QTextStream *);
int numberOfSubPages() const { return m_subPages.size(); }
TeletextPage* currentSubPage() const { return m_subPages[m_currentSubPageIndex]; }
LevelOnePage* currentSubPage() const { return m_subPages[m_currentSubPageIndex]; }
int currentSubPageIndex() const { return m_currentSubPageIndex; }
void selectSubPageIndex(int, bool=false);
void selectSubPageNext();
@@ -75,7 +75,7 @@ private:
bool m_empty;
int m_pageNumber, m_currentSubPageIndex;
int m_fastTextLink[6];
std::vector<TeletextPage *> m_subPages;
std::vector<LevelOnePage *> m_subPages;
QUndoStack *m_undoStack;
int m_cursorRow, m_cursorColumn;
};

View File

@@ -25,7 +25,7 @@
#include "levelonepage.h"
TeletextPage::TeletextPage()
LevelOnePage::LevelOnePage()
{
m_paddingX26Triplet.setAddress(41);
m_paddingX26Triplet.setMode(0x1e);
@@ -35,7 +35,7 @@ TeletextPage::TeletextPage()
}
// So far we only call clearPage() once, within the constructor
void TeletextPage::clearPage()
void LevelOnePage::clearPage()
{
for (int r=0; r<25; r++)
for (int c=0; c<40; c++)
@@ -61,7 +61,7 @@ void TeletextPage::clearPage()
// If clearPage() is called outside constructor, we need to implement localEnhance.clear();
}
QByteArray TeletextPage::packet(int packetNumber, int designationCode)
QByteArray LevelOnePage::packet(int packetNumber, int designationCode)
{
QByteArray result(40, 0x00);
@@ -132,7 +132,7 @@ QByteArray TeletextPage::packet(int packetNumber, int designationCode)
return PageBase::packet(packetNumber, designationCode);
}
bool TeletextPage::setPacket(int packetNumber, QByteArray packetContents)
bool LevelOnePage::setPacket(int packetNumber, QByteArray packetContents)
{
if (packetNumber <= 24) {
for (int c=0; c<40; c++)
@@ -143,7 +143,7 @@ bool TeletextPage::setPacket(int packetNumber, QByteArray packetContents)
return PageBase::setPacket(packetNumber, packetContents);
}
bool TeletextPage::setPacket(int packetNumber, int designationCode, QByteArray packetContents)
bool LevelOnePage::setPacket(int packetNumber, int designationCode, QByteArray packetContents)
{
if (packetNumber == 26) {
// Preallocate entries in the localEnhance list to hold our incoming triplets.
@@ -201,7 +201,7 @@ bool TeletextPage::setPacket(int packetNumber, int designationCode, QByteArray p
return PageBase::setPacket(packetNumber, designationCode, packetContents);
}
bool TeletextPage::packetNeeded(int packetNumber, int designationCode) const
bool LevelOnePage::packetNeeded(int packetNumber, int designationCode) const
{
if (packetNumber <= 24) {
for (int c=0; c<40; c++)
@@ -234,7 +234,7 @@ bool TeletextPage::packetNeeded(int packetNumber, int designationCode) const
return PageBase::packetNeeded(packetNumber, designationCode);
}
void TeletextPage::loadPagePacket(QByteArray &inLine)
void LevelOnePage::loadPagePacket(QByteArray &inLine)
{
bool lineNumberOk;
int lineNumber, secondCommaPosition;
@@ -271,7 +271,7 @@ void TeletextPage::loadPagePacket(QByteArray &inLine)
}
}
void TeletextPage::savePage(QTextStream *outStream, int pageNumber, int subPageNumber)
void LevelOnePage::savePage(QTextStream *outStream, int pageNumber, int subPageNumber)
{
auto writePacketsWithDesignationCodes=[&](int packetNumber)
{
@@ -313,7 +313,7 @@ void TeletextPage::savePage(QTextStream *outStream, int pageNumber, int subPageN
}
}
int TeletextPage::controlBitsToPS() const
int LevelOnePage::controlBitsToPS() const
{
//TODO map page language for regions other than 0
int pageStatus = 0x8000 | (m_controlBits[0] << 14) | ((m_defaultNOS & 1) << 9) | ((m_defaultNOS & 2) << 7) | ((m_defaultNOS & 4) << 5);
@@ -322,7 +322,7 @@ int TeletextPage::controlBitsToPS() const
return pageStatus;
}
QString TeletextPage::exportURLHash(QString pageHash)
QString LevelOnePage::exportURLHash(QString pageHash)
{
int hashDigits[1167]={0};
int totalBits, charBit;
@@ -378,28 +378,28 @@ QString TeletextPage::exportURLHash(QString pageHash)
return pageHash;
}
/* void TeletextPage::setSubPageNumber(int newSubPageNumber) { m_subPageNumber = newSubPageNumber; } */
void TeletextPage::setControlBit(int bitNumber, bool active) { m_controlBits[bitNumber] = active; }
void TeletextPage::setCycleValue(int newValue) { m_cycleValue = newValue; };
void TeletextPage::setCycleType(CycleTypeEnum newType) { m_cycleType = newType; }
void TeletextPage::setDefaultCharSet(int newDefaultCharSet) { m_defaultCharSet = newDefaultCharSet; }
void TeletextPage::setDefaultNOS(int newDefaultNOS) { m_defaultNOS = newDefaultNOS; }
/* void LevelOnePage::setSubPageNumber(int newSubPageNumber) { m_subPageNumber = newSubPageNumber; } */
void LevelOnePage::setControlBit(int bitNumber, bool active) { m_controlBits[bitNumber] = active; }
void LevelOnePage::setCycleValue(int newValue) { m_cycleValue = newValue; };
void LevelOnePage::setCycleType(CycleTypeEnum newType) { m_cycleType = newType; }
void LevelOnePage::setDefaultCharSet(int newDefaultCharSet) { m_defaultCharSet = newDefaultCharSet; }
void LevelOnePage::setDefaultNOS(int newDefaultNOS) { m_defaultNOS = newDefaultNOS; }
void TeletextPage::setSecondCharSet(int newSecondCharSet)
void LevelOnePage::setSecondCharSet(int newSecondCharSet)
{
m_secondCharSet = newSecondCharSet;
if (m_secondCharSet == 0xf)
m_secondNOS = 0x7;
}
void TeletextPage::setSecondNOS(int newSecondNOS) { m_secondNOS = newSecondNOS; }
void TeletextPage::setCharacter(int row, int column, unsigned char newCharacter) { m_level1Page[row][column] = newCharacter; }
void TeletextPage::setDefaultScreenColour(int newDefaultScreenColour) { m_defaultScreenColour = newDefaultScreenColour; }
void TeletextPage::setDefaultRowColour(int newDefaultRowColour) { m_defaultRowColour = newDefaultRowColour; }
void TeletextPage::setColourTableRemap(int newColourTableRemap) { m_colourTableRemap = newColourTableRemap; }
void TeletextPage::setBlackBackgroundSubst(bool newBlackBackgroundSubst) { m_blackBackgroundSubst = newBlackBackgroundSubst; }
void LevelOnePage::setSecondNOS(int newSecondNOS) { m_secondNOS = newSecondNOS; }
void LevelOnePage::setCharacter(int row, int column, unsigned char newCharacter) { m_level1Page[row][column] = newCharacter; }
void LevelOnePage::setDefaultScreenColour(int newDefaultScreenColour) { m_defaultScreenColour = newDefaultScreenColour; }
void LevelOnePage::setDefaultRowColour(int newDefaultRowColour) { m_defaultRowColour = newDefaultRowColour; }
void LevelOnePage::setColourTableRemap(int newColourTableRemap) { m_colourTableRemap = newColourTableRemap; }
void LevelOnePage::setBlackBackgroundSubst(bool newBlackBackgroundSubst) { m_blackBackgroundSubst = newBlackBackgroundSubst; }
int TeletextPage::CLUT(int index, int renderLevel) const
int LevelOnePage::CLUT(int index, int renderLevel) const
{
if (renderLevel == 2)
return index>=16 ? m_CLUT[index] : defaultCLUT[index];
@@ -407,13 +407,13 @@ int TeletextPage::CLUT(int index, int renderLevel) const
return renderLevel==3 ? m_CLUT[index] : defaultCLUT[index];
}
void TeletextPage::setCLUT(int index, int newColour) { m_CLUT[index] = newColour; }
void TeletextPage::setLeftSidePanelDisplayed(bool newLeftSidePanelDisplayed) { m_leftSidePanelDisplayed = newLeftSidePanelDisplayed; }
void TeletextPage::setRightSidePanelDisplayed(bool newRightSidePanelDisplayed) { m_rightSidePanelDisplayed = newRightSidePanelDisplayed; }
void TeletextPage::setSidePanelColumns(int newSidePanelColumns) { m_sidePanelColumns = newSidePanelColumns; }
void TeletextPage::setSidePanelStatusL25(bool newSidePanelStatusL25) { m_sidePanelStatusL25 = newSidePanelStatusL25; }
void LevelOnePage::setCLUT(int index, int newColour) { m_CLUT[index] = newColour; }
void LevelOnePage::setLeftSidePanelDisplayed(bool newLeftSidePanelDisplayed) { m_leftSidePanelDisplayed = newLeftSidePanelDisplayed; }
void LevelOnePage::setRightSidePanelDisplayed(bool newRightSidePanelDisplayed) { m_rightSidePanelDisplayed = newRightSidePanelDisplayed; }
void LevelOnePage::setSidePanelColumns(int newSidePanelColumns) { m_sidePanelColumns = newSidePanelColumns; }
void LevelOnePage::setSidePanelStatusL25(bool newSidePanelStatusL25) { m_sidePanelStatusL25 = newSidePanelStatusL25; }
QString TeletextPage::colourHash(int whichCLUT)
QString LevelOnePage::colourHash(int whichCLUT)
{
QString resultHash;

View File

@@ -33,14 +33,14 @@
QColor CLUTtoQColor(int myColour);
// If we inherit from QObject then we can't copy construct, so "make a new subpage that's a copy of this one" wouldn't work
class TeletextPage : public PageBase //: public QObject
class LevelOnePage : public PageBase //: public QObject
{
//Q_OBJECT
public:
enum CycleTypeEnum { CTcycles, CTseconds };
TeletextPage();
LevelOnePage();
QByteArray packet(int, int=0);
bool setPacket(int, QByteArray);

View File

@@ -39,8 +39,8 @@ TeletextWidget::TeletextWidget(QFrame *parent) : QFrame(parent)
this->resize(QSize(480, 250));
this->setAttribute(Qt::WA_NoSystemBackground);
m_teletextDocument = new TeletextDocument();
m_teletextPage = m_teletextDocument->currentSubPage();
m_pageRender.setTeletextPage(m_teletextPage);
m_levelOnePage = m_teletextDocument->currentSubPage();
m_pageRender.setTeletextPage(m_levelOnePage);
m_insertMode = false;
m_grid = false;
setFocusPolicy(Qt::StrongFocus);
@@ -61,8 +61,8 @@ TeletextWidget::~TeletextWidget()
void TeletextWidget::subPageSelected()
{
m_teletextPage = m_teletextDocument->currentSubPage();
m_pageRender.setTeletextPage(m_teletextPage);
m_levelOnePage = m_teletextDocument->currentSubPage();
m_pageRender.setTeletextPage(m_levelOnePage);
refreshPage();
}
@@ -140,7 +140,7 @@ void TeletextWidget::toggleGrid(bool gridOn)
void TeletextWidget::setControlBit(int bitNumber, bool active)
{
m_teletextPage->setControlBit(bitNumber, active);
m_levelOnePage->setControlBit(bitNumber, active);
if (bitNumber == 1 || bitNumber == 2) {
m_pageRender.decodePage();
m_pageRender.renderPage();
@@ -149,56 +149,56 @@ void TeletextWidget::setControlBit(int bitNumber, bool active)
void TeletextWidget::setDefaultCharSet(int newDefaultCharSet)
{
m_teletextPage->setDefaultCharSet(newDefaultCharSet);
m_levelOnePage->setDefaultCharSet(newDefaultCharSet);
}
void TeletextWidget::setDefaultNOS(int newDefaultNOS)
{
m_teletextPage->setDefaultNOS(newDefaultNOS);
m_levelOnePage->setDefaultNOS(newDefaultNOS);
}
void TeletextWidget::setDefaultScreenColour(int newColour)
{
m_teletextPage->setDefaultScreenColour(newColour);
m_levelOnePage->setDefaultScreenColour(newColour);
m_pageRender.decodePage();
m_pageRender.renderPage();
}
void TeletextWidget::setDefaultRowColour(int newColour)
{
m_teletextPage->setDefaultRowColour(newColour);
m_levelOnePage->setDefaultRowColour(newColour);
m_pageRender.decodePage();
m_pageRender.renderPage();
}
void TeletextWidget::setColourTableRemap(int newMap)
{
m_teletextPage->setColourTableRemap(newMap);
m_levelOnePage->setColourTableRemap(newMap);
m_pageRender.decodePage();
m_pageRender.renderPage();
}
void TeletextWidget::setBlackBackgroundSubst(bool substOn)
{
m_teletextPage->setBlackBackgroundSubst(substOn);
m_levelOnePage->setBlackBackgroundSubst(substOn);
m_pageRender.decodePage();
m_pageRender.renderPage();
}
void TeletextWidget::setSidePanelWidths(int newLeftSidePanelColumns, int newRightSidePanelColumns)
{
m_teletextPage->setLeftSidePanelDisplayed(newLeftSidePanelColumns != 0);
m_teletextPage->setRightSidePanelDisplayed(newRightSidePanelColumns != 0);
m_levelOnePage->setLeftSidePanelDisplayed(newLeftSidePanelColumns != 0);
m_levelOnePage->setRightSidePanelDisplayed(newRightSidePanelColumns != 0);
if (newLeftSidePanelColumns)
m_teletextPage->setSidePanelColumns((newLeftSidePanelColumns == 16) ? 0 : newLeftSidePanelColumns);
m_levelOnePage->setSidePanelColumns((newLeftSidePanelColumns == 16) ? 0 : newLeftSidePanelColumns);
else
m_teletextPage->setSidePanelColumns((newRightSidePanelColumns == 0) ? 0 : 16-newRightSidePanelColumns);
m_levelOnePage->setSidePanelColumns((newRightSidePanelColumns == 0) ? 0 : 16-newRightSidePanelColumns);
m_pageRender.updateSidePanels();
}
void TeletextWidget::setSidePanelAtL35Only(bool newSidePanelAtL35Only)
{
m_teletextPage->setSidePanelStatusL25(!newSidePanelAtL35Only);
m_levelOnePage->setSidePanelStatusL25(!newSidePanelAtL35Only);
m_pageRender.updateSidePanels();
}
@@ -214,7 +214,7 @@ void TeletextWidget::keyPressEvent(QKeyEvent *event)
char keyPressed = *qPrintable(event->text());
// if (attributes[cursorRow][cursorColumn].mosaics && (keyPressed < 0x40 || keyPressed > 0x5f) && (((keyPressed >= '1' && keyPressed <= '9') && (event->modifiers() & Qt::KeypadModifier)) || (keyPressed >= 'a' && keyPressed <= 'z'))) {
if (m_pageRender.level1MosaicAttribute(m_teletextDocument->cursorRow(), m_teletextDocument->cursorColumn()) && (keyPressed < 0x40 || keyPressed > 0x5f) && (((keyPressed >= '1' && keyPressed <= '9') && (event->modifiers() & Qt::KeypadModifier)) || (keyPressed >= 'a' && keyPressed <= 'z'))) {
if (!(m_teletextPage->character(m_teletextDocument->cursorRow(), m_teletextDocument->cursorColumn()) & 0x20))
if (!(m_levelOnePage->character(m_teletextDocument->cursorRow(), m_teletextDocument->cursorColumn()) & 0x20))
setCharacter(0x20);
switch (event->key()) {
case Qt::Key_Q:

View File

@@ -81,7 +81,7 @@ protected:
private:
TeletextDocument* m_teletextDocument;
TeletextPage* m_teletextPage;
LevelOnePage* m_levelOnePage;
bool m_insertMode, m_grid;
QBasicTimer m_flashTimer;
int m_flashTiming, m_flashPhase;

View File

@@ -91,7 +91,7 @@ PageOptionsDockWidget::PageOptionsDockWidget(TeletextWidget *parent): QDockWidge
m_cycleTypeCombo->addItem("cycles");
m_cycleTypeCombo->addItem("seconds");
pageCycleLayout->addWidget(m_cycleTypeCombo);
connect(m_cycleTypeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int index) { m_parentMainWidget->document()->currentSubPage()->setCycleType(index == 0 ? TeletextPage::CTcycles : TeletextPage::CTseconds); } );
connect(m_cycleTypeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int index) { m_parentMainWidget->document()->currentSubPage()->setCycleType(index == 0 ? LevelOnePage::CTcycles : LevelOnePage::CTseconds); } );
subPageOptionsLayout->addLayout(pageCycleLayout);
@@ -169,7 +169,7 @@ void PageOptionsDockWidget::updateWidgets()
m_cycleValueSpinBox->setValue(m_parentMainWidget->document()->currentSubPage()->cycleValue());
m_cycleValueSpinBox->blockSignals(false);
m_cycleTypeCombo->blockSignals(true);
m_cycleTypeCombo->setCurrentIndex(m_parentMainWidget->document()->currentSubPage()->cycleType() == TeletextPage::CTseconds);
m_cycleTypeCombo->setCurrentIndex(m_parentMainWidget->document()->currentSubPage()->cycleType() == LevelOnePage::CTseconds);
m_cycleTypeCombo->blockSignals(false);
for (int i=0; i<=7; i++) {
m_controlBitsAct[i]->blockSignals(true);

View File

@@ -60,9 +60,9 @@ TeletextPageRender::~TeletextPageRender()
delete m_fontBitmap;
}
void TeletextPageRender::setTeletextPage(TeletextPage *newCurrentPage)
void TeletextPageRender::setTeletextPage(LevelOnePage *newCurrentPage)
{
m_teletextPage = newCurrentPage;
m_levelOnePage = newCurrentPage;
m_level1Layer.setTeletextPage(newCurrentPage);
updateSidePanels();
}
@@ -103,13 +103,13 @@ void TeletextPageRender::updateSidePanels()
int oldLeftSidePanelColumns = m_leftSidePanelColumns;
int oldRightSidePanelColumns = m_rightSidePanelColumns;
if (m_renderLevel >= (3-m_teletextPage->sidePanelStatusL25()) && m_teletextPage->leftSidePanelDisplayed())
m_leftSidePanelColumns = (m_teletextPage->sidePanelColumns() == 0) ? 16 : m_teletextPage->sidePanelColumns();
if (m_renderLevel >= (3-m_levelOnePage->sidePanelStatusL25()) && m_levelOnePage->leftSidePanelDisplayed())
m_leftSidePanelColumns = (m_levelOnePage->sidePanelColumns() == 0) ? 16 : m_levelOnePage->sidePanelColumns();
else
m_leftSidePanelColumns = 0;
if (m_renderLevel >= (3-m_teletextPage->sidePanelStatusL25()) && m_teletextPage->rightSidePanelDisplayed())
m_rightSidePanelColumns = 16-m_teletextPage->sidePanelColumns();
if (m_renderLevel >= (3-m_levelOnePage->sidePanelStatusL25()) && m_levelOnePage->rightSidePanelDisplayed())
m_rightSidePanelColumns = 16-m_levelOnePage->sidePanelColumns();
else
m_rightSidePanelColumns = 0;
@@ -128,7 +128,7 @@ void TeletextPageRender::buildEnhanceMap(TextLayer *enhanceLayer, int tripletNum
int originModifierC=0;
do {
x26Triplet = &m_teletextPage->localEnhance.at(tripletNumber);
x26Triplet = &m_levelOnePage->localEnhance.at(tripletNumber);
if (x26Triplet->isRowTriplet())
// Row address group
switch (x26Triplet->mode()) {
@@ -153,7 +153,7 @@ void TeletextPageRender::buildEnhanceMap(TextLayer *enhanceLayer, int tripletNum
}
break;
case 0x10: // Origin modifier
if (m_renderLevel >= 2 && (tripletNumber+1) < m_teletextPage->localEnhance.size() && m_teletextPage->localEnhance.at(tripletNumber+1).mode() >= 0x11 && m_teletextPage->localEnhance.at(tripletNumber+1).mode() <= 0x13 && x26Triplet->address() >= 40 && x26Triplet->data() < 72) {
if (m_renderLevel >= 2 && (tripletNumber+1) < m_levelOnePage->localEnhance.size() && m_levelOnePage->localEnhance.at(tripletNumber+1).mode() >= 0x11 && m_levelOnePage->localEnhance.at(tripletNumber+1).mode() <= 0x13 && x26Triplet->address() >= 40 && x26Triplet->data() < 72) {
originModifierR = x26Triplet->address()-40;
originModifierC = x26Triplet->data();
}
@@ -168,21 +168,21 @@ void TeletextPageRender::buildEnhanceMap(TextLayer *enhanceLayer, int tripletNum
break;
int tripletPointer = ((x26Triplet->data() >> 4) | ((x26Triplet->address() & 1) << 3)) * 13 + (x26Triplet->data() & 0x0f);
// Can't point to triplet beyond the end of the Local Enhancement Data
if ((tripletPointer+1) >= m_teletextPage->localEnhance.size())
if ((tripletPointer+1) >= m_levelOnePage->localEnhance.size())
break;
// Check if we're pointing to an actual Object Definition of the same type
if ((x26Triplet->mode() | 0x04) != m_teletextPage->localEnhance.at(tripletPointer).mode())
if ((x26Triplet->mode() | 0x04) != m_levelOnePage->localEnhance.at(tripletPointer).mode())
break;
// The Object Definition can't declare it's at triplet 13-15; only 12 triplets per packet
if ((m_teletextPage->localEnhance.at(tripletPointer).data() & 0x0f) > 12)
if ((m_levelOnePage->localEnhance.at(tripletPointer).data() & 0x0f) > 12)
break;
// Check if the Object Definition triplet is where it declares it is
if ((((m_teletextPage->localEnhance.at(tripletPointer).data() >> 4) | ((m_teletextPage->localEnhance.at(tripletPointer).address() & 1) << 3)) * 13 + (m_teletextPage->localEnhance.at(tripletPointer).data() & 0x0f)) != tripletPointer)
if ((((m_levelOnePage->localEnhance.at(tripletPointer).data() >> 4) | ((m_levelOnePage->localEnhance.at(tripletPointer).address() & 1) << 3)) * 13 + (m_levelOnePage->localEnhance.at(tripletPointer).data() & 0x0f)) != tripletPointer)
break;
// Is the object required at the current presentation Level?
if (m_renderLevel == 2 && (m_teletextPage->localEnhance.at(tripletPointer).address() & 0x08) == 0x00)
if (m_renderLevel == 2 && (m_levelOnePage->localEnhance.at(tripletPointer).address() & 0x08) == 0x00)
break;
if (m_renderLevel == 3 && (m_teletextPage->localEnhance.at(tripletPointer).address() & 0x10) == 0x00)
if (m_renderLevel == 3 && (m_levelOnePage->localEnhance.at(tripletPointer).address() & 0x10) == 0x00)
break;
EnhanceLayer *newLayer = new EnhanceLayer;
m_textLayer.push_back(newLayer);
@@ -229,7 +229,7 @@ void TeletextPageRender::buildEnhanceMap(TextLayer *enhanceLayer, int tripletNum
enhanceLayer->enhanceMap.insert((activePosition.row() << 8) | activePosition.column(), ((x26Triplet->mode() | 0x20) << 8) | x26Triplet->data());
}
tripletNumber++;
} while (!terminatorFound && tripletNumber < m_teletextPage->localEnhance.size());
} while (!terminatorFound && tripletNumber < m_levelOnePage->localEnhance.size());
}
void TeletextPageRender::decodePage()
@@ -249,14 +249,14 @@ void TeletextPageRender::decodePage()
m_textLayer.pop_back();
}
renderedFullScreenColour = (m_renderLevel >= 2) ? m_teletextPage->defaultScreenColour() : 0;
downwardsFullRowColour = (m_renderLevel >= 2) ? m_teletextPage->defaultRowColour() : 0;
renderedFullScreenColour = (m_renderLevel >= 2) ? m_levelOnePage->defaultScreenColour() : 0;
downwardsFullRowColour = (m_renderLevel >= 2) ? m_levelOnePage->defaultRowColour() : 0;
setFullScreenColour(renderedFullScreenColour);
for (int r=0; r<25; r++)
setFullRowColour(r ,downwardsFullRowColour);
m_textLayer[1]->enhanceMap.clear();
if (m_renderLevel == 0 || m_teletextPage->localEnhance.empty())
if (m_renderLevel == 0 || m_levelOnePage->localEnhance.empty())
return;
m_textLayer[1]->setFullScreenColour(-1);
@@ -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_teletextPage->controlBit(1) || m_teletextPage->controlBit(2) || m_mix) && !resultAttributes.display.boxingWindow;
bool transparentBackground = (m_levelOnePage->controlBit(1) || m_levelOnePage->controlBit(2) || 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_teletextPage->controlBit(1) || m_teletextPage->controlBit(2)) && !resultAttributes.display.boxingWindow) {
if ((m_levelOnePage->controlBit(1) || m_levelOnePage->controlBit(2)) && !resultAttributes.display.boxingWindow) {
// Outside a boxed area
resultCharacter = { 0x20, 0, 0 };
underlined = false;
@@ -378,7 +378,7 @@ void TeletextPageRender::renderPage(int r)
if (layerCharacter.code != 0x00)
resultCharacter = layerCharacter;
if (l == 0) {
// m_cell[r][c].level1Mosaic = (resultCharacter.set == 24 || resultCharacter.set == 25) && m_teletextPage->character(r, c) >= 0x20;
// m_cell[r][c].level1Mosaic = (resultCharacter.set == 24 || resultCharacter.set == 25) && m_levelOnePage->character(r, c) >= 0x20;
m_cell[r][c].level1Mosaic = (resultCharacter.set == 24 || resultCharacter.set == 25);
if (!m_cell[r][c].level1Mosaic)
level1CharSet = resultCharacter.set;
@@ -395,16 +395,16 @@ void TeletextPageRender::renderPage(int r)
if (layerApplyAttributes.applyForeColour) {
resultAttributes.foreColour = layerApplyAttributes.attribute.foreColour;
if (l == 0 && m_renderLevel >= 2)
resultAttributes.foreColour |= m_foregroundRemap[m_teletextPage->colourTableRemap()];
resultAttributes.foreColour |= m_foregroundRemap[m_levelOnePage->colourTableRemap()];
}
if (layerApplyAttributes.applyBackColour) {
resultAttributes.backColour = layerApplyAttributes.attribute.backColour;
if (l == 0) {
if (m_renderLevel >= 2)
if (resultAttributes.backColour == 0x20)
resultAttributes.backColour = (c > 39 || m_teletextPage->blackBackgroundSubst()) ? m_fullRowColour[r] : m_backgroundRemap[m_teletextPage->colourTableRemap()];
resultAttributes.backColour = (c > 39 || m_levelOnePage->blackBackgroundSubst()) ? m_fullRowColour[r] : m_backgroundRemap[m_levelOnePage->colourTableRemap()];
else
resultAttributes.backColour |= m_backgroundRemap[m_teletextPage->colourTableRemap()];
resultAttributes.backColour |= m_backgroundRemap[m_levelOnePage->colourTableRemap()];
else
if (resultAttributes.backColour == 0x20)
resultAttributes.backColour = 0x00;
@@ -474,19 +474,19 @@ void TeletextPageRender::renderPage(int r)
m_cell[r][c].rightHalf = applyRightHalf;
if (!resultAttributes.display.invert) {
foreQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.foreColour, m_renderLevel));
backQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.backColour, m_renderLevel));
foreQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.foreColour, m_renderLevel));
backQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.backColour, m_renderLevel));
} else {
foreQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.backColour, m_renderLevel));
backQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.foreColour, m_renderLevel));
foreQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.backColour, m_renderLevel));
backQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.foreColour, m_renderLevel));
}
renderCharacter();
if (m_showCodes && c < 40 && m_teletextPage->character(r, c)<0x20 && !m_level1Layer.isRowBottomHalf(r) && !m_cell[r][c].bottomHalf) {
if (m_showCodes && c < 40 && m_levelOnePage->character(r, c)<0x20 && !m_level1Layer.isRowBottomHalf(r) && !m_cell[r][c].bottomHalf) {
pixmapPainter.setBackground(QBrush(QColor(0, 0, 0, 128)));
pixmapPainter.setPen(QColor(255, 255, 255, 224));
pixmapPainter.drawPixmap(c*12, r*10, 12, 10, *m_fontBitmap, (m_teletextPage->character(r, c)+32)*12, 250, 12, 10);
pixmapPainter.drawPixmap(c*12, r*10, 12, 10, *m_fontBitmap, (m_levelOnePage->character(r, c)+32)*12, 250, 12, 10);
}
if (resultAttributes.display.doubleHeight)
@@ -557,11 +557,11 @@ void TeletextPageRender::renderPage(int r)
underlined = false;
}
if (!resultAttributes.display.invert) {
foreQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.foreColour, m_renderLevel));
backQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.backColour, m_renderLevel));
foreQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.foreColour, m_renderLevel));
backQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.backColour, m_renderLevel));
} else {
foreQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.backColour, m_renderLevel));
backQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.foreColour, m_renderLevel));
foreQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.backColour, m_renderLevel));
backQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.foreColour, m_renderLevel));
}
if (resultAttributes.flash.ratePhase == 0) {
// 1Hz flash
@@ -629,12 +629,12 @@ void TeletextPageRender::updateFlashRequired(int newFlashRequired)
inline void TeletextPageRender::setFullScreenColour(int newColour)
{
if (m_mix || m_teletextPage->controlBit(1) || m_teletextPage->controlBit(2)) {
if (m_mix || m_levelOnePage->controlBit(1) || m_levelOnePage->controlBit(2)) {
m_finalFullScreenQColor = QColor(0, 0, 0, 0);
emit fullScreenColourChanged(QColor(0, 0, 0, 0));
return;
}
QColor newFullScreenQColor = CLUTtoQColor(m_teletextPage->CLUT(newColour, m_renderLevel));
QColor newFullScreenQColor = CLUTtoQColor(m_levelOnePage->CLUT(newColour, m_renderLevel));
m_finalFullScreenColour = newColour;
if (m_finalFullScreenQColor != newFullScreenQColor) {
m_finalFullScreenQColor = newFullScreenQColor;
@@ -644,12 +644,12 @@ inline void TeletextPageRender::setFullScreenColour(int newColour)
inline void TeletextPageRender::setFullRowColour(int row, int newColour)
{
if (m_mix || m_teletextPage->controlBit(1) || m_teletextPage->controlBit(2)) {
if (m_mix || m_levelOnePage->controlBit(1) || m_levelOnePage->controlBit(2)) {
m_fullRowQColor[row] = QColor(0, 0, 0, 0);
emit fullRowColourChanged(row, QColor(0, 0, 0, 0));
return;
}
QColor newFullRowQColor = CLUTtoQColor(m_teletextPage->CLUT(newColour, m_renderLevel));
QColor newFullRowQColor = CLUTtoQColor(m_levelOnePage->CLUT(newColour, m_renderLevel));
m_fullRowColour[row] = newColour;
if (m_fullRowQColor[row] != newFullRowQColor) {
m_fullRowQColor[row] = newFullRowQColor;
@@ -657,7 +657,7 @@ inline void TeletextPageRender::setFullRowColour(int row, int newColour)
}
}
void TextLayer::setTeletextPage(TeletextPage *newCurrentPage) { m_teletextPage = newCurrentPage; }
void TextLayer::setTeletextPage(LevelOnePage *newCurrentPage) { m_levelOnePage = newCurrentPage; }
void TextLayer::setFullScreenColour(int newColour) { m_layerFullScreenColour = newColour; }
void TextLayer::setFullRowColour(int r, int newColour, bool newDownwards)
@@ -835,7 +835,7 @@ void Level1Layer::updateRowCache(int r)
bool doubleHeightAttrFound = false;
for (int c=0; c<40; c++) {
unsigned char charCode = m_teletextPage->character(r, c);
unsigned char charCode = m_levelOnePage->character(r, c);
// Set at spacing attributes
switch (charCode) {
case 0x0c: // Normal size
@@ -916,11 +916,11 @@ textCharacter Level1Layer::character(int r, int c)
updateRowCache(r);
if (c > 39 || m_rowHeight[r] == RHbottomhalf)
return { 0x20, 0 };
result.code = m_teletextPage->character(r, c);
if (m_teletextPage->secondCharSet() != 0xf && m_attributeCache[c].escSwitch)
result.set = g0CharacterMap.value(((m_teletextPage->secondCharSet() << 3) | m_teletextPage->secondNOS()), 0);
result.code = m_levelOnePage->character(r, c);
if (m_levelOnePage->secondCharSet() != 0xf && m_attributeCache[c].escSwitch)
result.set = g0CharacterMap.value(((m_levelOnePage->secondCharSet() << 3) | m_levelOnePage->secondNOS()), 0);
else
result.set = g0CharacterMap.value(((m_teletextPage->defaultCharSet() << 3) | m_teletextPage->defaultNOS()), 0);
result.set = g0CharacterMap.value(((m_levelOnePage->defaultCharSet() << 3) | m_levelOnePage->defaultNOS()), 0);
if (result.code < 0x20) {
result.code = m_attributeCache[c].held ? m_attributeCache[c].holdChar : 0x20;
if (m_attributeCache[c].held && c > 0)
@@ -965,7 +965,7 @@ void Level1Layer::attributes(int r, int c, applyAttributes *layerApplyAttributes
return;
if (c > 0) {
// Set-after
characterCode = m_teletextPage->character(r, c-1);
characterCode = m_levelOnePage->character(r, c-1);
switch (characterCode) {
case 0x00 ... 0x07: // Alphanumeric + Foreground colour
case 0x10 ... 0x17: // Mosaic + Foreground colour
@@ -979,13 +979,13 @@ void Level1Layer::attributes(int r, int c, applyAttributes *layerApplyAttributes
layerApplyAttributes->attribute.flash.ratePhase = 0;
break;
case 0x0a: // End box
if (m_teletextPage->character(r, c) == 0x0a) {
if (m_levelOnePage->character(r, c) == 0x0a) {
layerApplyAttributes->applyBoxingOnly = true;
layerApplyAttributes->attribute.display.boxingWindow = false;
}
break;
case 0x0b: // Start box
if (m_teletextPage->character(r, c) == 0x0b) {
if (m_levelOnePage->character(r, c) == 0x0b) {
layerApplyAttributes->applyBoxingOnly = true;
layerApplyAttributes->attribute.display.boxingWindow = true;
}
@@ -1008,7 +1008,7 @@ void Level1Layer::attributes(int r, int c, applyAttributes *layerApplyAttributes
}
}
// Set-at
characterCode = m_teletextPage->character(r, c);
characterCode = m_levelOnePage->character(r, c);
switch (characterCode) {
case 0x09: // Steady
layerApplyAttributes->applyFlash = true;

View File

@@ -99,7 +99,7 @@ class TextLayer
public:
// TextLayer(TeletextPage* thePage) : currentPage(thePage) { };
virtual ~TextLayer() = default;
void setTeletextPage(TeletextPage*);
void setTeletextPage(LevelOnePage *);
virtual textCharacter character(int, int) =0;
virtual void attributes(int, int, applyAttributes *) =0;
virtual int fullScreenColour() const =0;
@@ -113,7 +113,7 @@ public:
QMultiMap<int, int> enhanceMap;
protected:
TeletextPage* m_teletextPage;
LevelOnePage* m_levelOnePage;
int m_layerFullScreenColour=-1;
int m_layerFullRowColour[25];
bool m_layerFullRowDownwards[25];
@@ -184,7 +184,7 @@ public:
void decodePage();
void renderPage();
void renderPage(int r);
void setTeletextPage(TeletextPage*);
void setTeletextPage(LevelOnePage *);
void updateSidePanels();
void buildEnhanceMap(TextLayer *, int=0);
QPixmap* pagePixmap(int i) const { return m_pagePixmap[i]; };
@@ -224,7 +224,7 @@ protected:
private:
textCell m_cell[25][72];
TeletextPage* m_teletextPage;
LevelOnePage* m_levelOnePage;
int m_flashRequired;
int m_fullRowColour[25];
QColor m_fullRowQColor[25];