Rename TeletextPage class to LevelOnePage
This commit is contained in:
16
document.cpp
16
document.cpp
@@ -32,7 +32,7 @@ TeletextDocument::TeletextDocument()
|
|||||||
for (int i=0; i<6; i++)
|
for (int i=0; i<6; i++)
|
||||||
m_fastTextLink[i] = 0x8ff;
|
m_fastTextLink[i] = 0x8ff;
|
||||||
m_empty = true;
|
m_empty = true;
|
||||||
m_subPages.push_back(new TeletextPage);
|
m_subPages.push_back(new LevelOnePage);
|
||||||
m_currentSubPageIndex = 0;
|
m_currentSubPageIndex = 0;
|
||||||
m_undoStack = new QUndoStack(this);
|
m_undoStack = new QUndoStack(this);
|
||||||
m_cursorRow = 1;
|
m_cursorRow = 1;
|
||||||
@@ -51,9 +51,9 @@ void TeletextDocument::loadDocument(QFile *inFile)
|
|||||||
bool firstSubPageFound = false;
|
bool firstSubPageFound = false;
|
||||||
int cycleCommandsFound = 0;
|
int cycleCommandsFound = 0;
|
||||||
int mostRecentCycleValue = -1;
|
int mostRecentCycleValue = -1;
|
||||||
TeletextPage::CycleTypeEnum mostRecentCycleType;
|
LevelOnePage::CycleTypeEnum mostRecentCycleType;
|
||||||
|
|
||||||
TeletextPage* loadingPage = m_subPages[0];
|
LevelOnePage* loadingPage = m_subPages[0];
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
inLine = inFile->readLine(160).trimmed();
|
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
|
// 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...
|
// This assumes that PN is the first command of a new subpage...
|
||||||
if (firstSubPageFound) {
|
if (firstSubPageFound) {
|
||||||
m_subPages.push_back(new TeletextPage);
|
m_subPages.push_back(new LevelOnePage);
|
||||||
loadingPage = m_subPages.back();
|
loadingPage = m_subPages.back();
|
||||||
}
|
}
|
||||||
m_pageNumber = pageNumberRead;
|
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
|
// House-keep CT command values, in case it's the only one within multiple subpages
|
||||||
mostRecentCycleValue = cycleValueRead;
|
mostRecentCycleValue = cycleValueRead;
|
||||||
loadingPage->setCycleValue(cycleValueRead);
|
loadingPage->setCycleValue(cycleValueRead);
|
||||||
mostRecentCycleType = inLine.endsWith("C") ? TeletextPage::CTcycles : TeletextPage::CTseconds;
|
mostRecentCycleType = inLine.endsWith("C") ? LevelOnePage::CTcycles : LevelOnePage::CTseconds;
|
||||||
loadingPage->setCycleType(mostRecentCycleType);
|
loadingPage->setCycleType(mostRecentCycleType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -181,12 +181,12 @@ void TeletextDocument::selectSubPagePrevious()
|
|||||||
|
|
||||||
void TeletextDocument::insertSubPage(int beforeSubPageIndex, bool copySubPage)
|
void TeletextDocument::insertSubPage(int beforeSubPageIndex, bool copySubPage)
|
||||||
{
|
{
|
||||||
TeletextPage *insertedSubPage;
|
LevelOnePage *insertedSubPage;
|
||||||
|
|
||||||
if (copySubPage)
|
if (copySubPage)
|
||||||
insertedSubPage = new TeletextPage(*m_subPages.at(beforeSubPageIndex));
|
insertedSubPage = new LevelOnePage(*m_subPages.at(beforeSubPageIndex));
|
||||||
else
|
else
|
||||||
insertedSubPage = new TeletextPage;
|
insertedSubPage = new LevelOnePage;
|
||||||
if (beforeSubPageIndex == m_subPages.size())
|
if (beforeSubPageIndex == m_subPages.size())
|
||||||
m_subPages.push_back(insertedSubPage);
|
m_subPages.push_back(insertedSubPage);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
void loadDocument(QFile *);
|
void loadDocument(QFile *);
|
||||||
void saveDocument(QTextStream *);
|
void saveDocument(QTextStream *);
|
||||||
int numberOfSubPages() const { return m_subPages.size(); }
|
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; }
|
int currentSubPageIndex() const { return m_currentSubPageIndex; }
|
||||||
void selectSubPageIndex(int, bool=false);
|
void selectSubPageIndex(int, bool=false);
|
||||||
void selectSubPageNext();
|
void selectSubPageNext();
|
||||||
@@ -75,7 +75,7 @@ private:
|
|||||||
bool m_empty;
|
bool m_empty;
|
||||||
int m_pageNumber, m_currentSubPageIndex;
|
int m_pageNumber, m_currentSubPageIndex;
|
||||||
int m_fastTextLink[6];
|
int m_fastTextLink[6];
|
||||||
std::vector<TeletextPage *> m_subPages;
|
std::vector<LevelOnePage *> m_subPages;
|
||||||
QUndoStack *m_undoStack;
|
QUndoStack *m_undoStack;
|
||||||
int m_cursorRow, m_cursorColumn;
|
int m_cursorRow, m_cursorColumn;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
#include "levelonepage.h"
|
#include "levelonepage.h"
|
||||||
|
|
||||||
TeletextPage::TeletextPage()
|
LevelOnePage::LevelOnePage()
|
||||||
{
|
{
|
||||||
m_paddingX26Triplet.setAddress(41);
|
m_paddingX26Triplet.setAddress(41);
|
||||||
m_paddingX26Triplet.setMode(0x1e);
|
m_paddingX26Triplet.setMode(0x1e);
|
||||||
@@ -35,7 +35,7 @@ TeletextPage::TeletextPage()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// So far we only call clearPage() once, within the constructor
|
// 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 r=0; r<25; r++)
|
||||||
for (int c=0; c<40; c++)
|
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();
|
// 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);
|
QByteArray result(40, 0x00);
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ QByteArray TeletextPage::packet(int packetNumber, int designationCode)
|
|||||||
return PageBase::packet(packetNumber, designationCode);
|
return PageBase::packet(packetNumber, designationCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TeletextPage::setPacket(int packetNumber, QByteArray packetContents)
|
bool LevelOnePage::setPacket(int packetNumber, QByteArray packetContents)
|
||||||
{
|
{
|
||||||
if (packetNumber <= 24) {
|
if (packetNumber <= 24) {
|
||||||
for (int c=0; c<40; c++)
|
for (int c=0; c<40; c++)
|
||||||
@@ -143,7 +143,7 @@ bool TeletextPage::setPacket(int packetNumber, QByteArray packetContents)
|
|||||||
return PageBase::setPacket(packetNumber, 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) {
|
if (packetNumber == 26) {
|
||||||
// Preallocate entries in the localEnhance list to hold our incoming triplets.
|
// 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);
|
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) {
|
if (packetNumber <= 24) {
|
||||||
for (int c=0; c<40; c++)
|
for (int c=0; c<40; c++)
|
||||||
@@ -234,7 +234,7 @@ bool TeletextPage::packetNeeded(int packetNumber, int designationCode) const
|
|||||||
return PageBase::packetNeeded(packetNumber, designationCode);
|
return PageBase::packetNeeded(packetNumber, designationCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextPage::loadPagePacket(QByteArray &inLine)
|
void LevelOnePage::loadPagePacket(QByteArray &inLine)
|
||||||
{
|
{
|
||||||
bool lineNumberOk;
|
bool lineNumberOk;
|
||||||
int lineNumber, secondCommaPosition;
|
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)
|
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
|
//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);
|
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;
|
return pageStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString TeletextPage::exportURLHash(QString pageHash)
|
QString LevelOnePage::exportURLHash(QString pageHash)
|
||||||
{
|
{
|
||||||
int hashDigits[1167]={0};
|
int hashDigits[1167]={0};
|
||||||
int totalBits, charBit;
|
int totalBits, charBit;
|
||||||
@@ -378,28 +378,28 @@ QString TeletextPage::exportURLHash(QString pageHash)
|
|||||||
return pageHash;
|
return pageHash;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* void TeletextPage::setSubPageNumber(int newSubPageNumber) { m_subPageNumber = newSubPageNumber; } */
|
/* void LevelOnePage::setSubPageNumber(int newSubPageNumber) { m_subPageNumber = newSubPageNumber; } */
|
||||||
void TeletextPage::setControlBit(int bitNumber, bool active) { m_controlBits[bitNumber] = active; }
|
void LevelOnePage::setControlBit(int bitNumber, bool active) { m_controlBits[bitNumber] = active; }
|
||||||
void TeletextPage::setCycleValue(int newValue) { m_cycleValue = newValue; };
|
void LevelOnePage::setCycleValue(int newValue) { m_cycleValue = newValue; };
|
||||||
void TeletextPage::setCycleType(CycleTypeEnum newType) { m_cycleType = newType; }
|
void LevelOnePage::setCycleType(CycleTypeEnum newType) { m_cycleType = newType; }
|
||||||
void TeletextPage::setDefaultCharSet(int newDefaultCharSet) { m_defaultCharSet = newDefaultCharSet; }
|
void LevelOnePage::setDefaultCharSet(int newDefaultCharSet) { m_defaultCharSet = newDefaultCharSet; }
|
||||||
void TeletextPage::setDefaultNOS(int newDefaultNOS) { m_defaultNOS = newDefaultNOS; }
|
void LevelOnePage::setDefaultNOS(int newDefaultNOS) { m_defaultNOS = newDefaultNOS; }
|
||||||
|
|
||||||
void TeletextPage::setSecondCharSet(int newSecondCharSet)
|
void LevelOnePage::setSecondCharSet(int newSecondCharSet)
|
||||||
{
|
{
|
||||||
m_secondCharSet = newSecondCharSet;
|
m_secondCharSet = newSecondCharSet;
|
||||||
if (m_secondCharSet == 0xf)
|
if (m_secondCharSet == 0xf)
|
||||||
m_secondNOS = 0x7;
|
m_secondNOS = 0x7;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextPage::setSecondNOS(int newSecondNOS) { m_secondNOS = newSecondNOS; }
|
void LevelOnePage::setSecondNOS(int newSecondNOS) { m_secondNOS = newSecondNOS; }
|
||||||
void TeletextPage::setCharacter(int row, int column, unsigned char newCharacter) { m_level1Page[row][column] = newCharacter; }
|
void LevelOnePage::setCharacter(int row, int column, unsigned char newCharacter) { m_level1Page[row][column] = newCharacter; }
|
||||||
void TeletextPage::setDefaultScreenColour(int newDefaultScreenColour) { m_defaultScreenColour = newDefaultScreenColour; }
|
void LevelOnePage::setDefaultScreenColour(int newDefaultScreenColour) { m_defaultScreenColour = newDefaultScreenColour; }
|
||||||
void TeletextPage::setDefaultRowColour(int newDefaultRowColour) { m_defaultRowColour = newDefaultRowColour; }
|
void LevelOnePage::setDefaultRowColour(int newDefaultRowColour) { m_defaultRowColour = newDefaultRowColour; }
|
||||||
void TeletextPage::setColourTableRemap(int newColourTableRemap) { m_colourTableRemap = newColourTableRemap; }
|
void LevelOnePage::setColourTableRemap(int newColourTableRemap) { m_colourTableRemap = newColourTableRemap; }
|
||||||
void TeletextPage::setBlackBackgroundSubst(bool newBlackBackgroundSubst) { m_blackBackgroundSubst = newBlackBackgroundSubst; }
|
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)
|
if (renderLevel == 2)
|
||||||
return index>=16 ? m_CLUT[index] : defaultCLUT[index];
|
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];
|
return renderLevel==3 ? m_CLUT[index] : defaultCLUT[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextPage::setCLUT(int index, int newColour) { m_CLUT[index] = newColour; }
|
void LevelOnePage::setCLUT(int index, int newColour) { m_CLUT[index] = newColour; }
|
||||||
void TeletextPage::setLeftSidePanelDisplayed(bool newLeftSidePanelDisplayed) { m_leftSidePanelDisplayed = newLeftSidePanelDisplayed; }
|
void LevelOnePage::setLeftSidePanelDisplayed(bool newLeftSidePanelDisplayed) { m_leftSidePanelDisplayed = newLeftSidePanelDisplayed; }
|
||||||
void TeletextPage::setRightSidePanelDisplayed(bool newRightSidePanelDisplayed) { m_rightSidePanelDisplayed = newRightSidePanelDisplayed; }
|
void LevelOnePage::setRightSidePanelDisplayed(bool newRightSidePanelDisplayed) { m_rightSidePanelDisplayed = newRightSidePanelDisplayed; }
|
||||||
void TeletextPage::setSidePanelColumns(int newSidePanelColumns) { m_sidePanelColumns = newSidePanelColumns; }
|
void LevelOnePage::setSidePanelColumns(int newSidePanelColumns) { m_sidePanelColumns = newSidePanelColumns; }
|
||||||
void TeletextPage::setSidePanelStatusL25(bool newSidePanelStatusL25) { m_sidePanelStatusL25 = newSidePanelStatusL25; }
|
void LevelOnePage::setSidePanelStatusL25(bool newSidePanelStatusL25) { m_sidePanelStatusL25 = newSidePanelStatusL25; }
|
||||||
|
|
||||||
QString TeletextPage::colourHash(int whichCLUT)
|
QString LevelOnePage::colourHash(int whichCLUT)
|
||||||
{
|
{
|
||||||
QString resultHash;
|
QString resultHash;
|
||||||
|
|
||||||
|
|||||||
@@ -33,14 +33,14 @@
|
|||||||
QColor CLUTtoQColor(int myColour);
|
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
|
// 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
|
//Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum CycleTypeEnum { CTcycles, CTseconds };
|
enum CycleTypeEnum { CTcycles, CTseconds };
|
||||||
|
|
||||||
TeletextPage();
|
LevelOnePage();
|
||||||
|
|
||||||
QByteArray packet(int, int=0);
|
QByteArray packet(int, int=0);
|
||||||
bool setPacket(int, QByteArray);
|
bool setPacket(int, QByteArray);
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ TeletextWidget::TeletextWidget(QFrame *parent) : QFrame(parent)
|
|||||||
this->resize(QSize(480, 250));
|
this->resize(QSize(480, 250));
|
||||||
this->setAttribute(Qt::WA_NoSystemBackground);
|
this->setAttribute(Qt::WA_NoSystemBackground);
|
||||||
m_teletextDocument = new TeletextDocument();
|
m_teletextDocument = new TeletextDocument();
|
||||||
m_teletextPage = m_teletextDocument->currentSubPage();
|
m_levelOnePage = m_teletextDocument->currentSubPage();
|
||||||
m_pageRender.setTeletextPage(m_teletextPage);
|
m_pageRender.setTeletextPage(m_levelOnePage);
|
||||||
m_insertMode = false;
|
m_insertMode = false;
|
||||||
m_grid = false;
|
m_grid = false;
|
||||||
setFocusPolicy(Qt::StrongFocus);
|
setFocusPolicy(Qt::StrongFocus);
|
||||||
@@ -61,8 +61,8 @@ TeletextWidget::~TeletextWidget()
|
|||||||
|
|
||||||
void TeletextWidget::subPageSelected()
|
void TeletextWidget::subPageSelected()
|
||||||
{
|
{
|
||||||
m_teletextPage = m_teletextDocument->currentSubPage();
|
m_levelOnePage = m_teletextDocument->currentSubPage();
|
||||||
m_pageRender.setTeletextPage(m_teletextPage);
|
m_pageRender.setTeletextPage(m_levelOnePage);
|
||||||
refreshPage();
|
refreshPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ void TeletextWidget::toggleGrid(bool gridOn)
|
|||||||
|
|
||||||
void TeletextWidget::setControlBit(int bitNumber, bool active)
|
void TeletextWidget::setControlBit(int bitNumber, bool active)
|
||||||
{
|
{
|
||||||
m_teletextPage->setControlBit(bitNumber, active);
|
m_levelOnePage->setControlBit(bitNumber, active);
|
||||||
if (bitNumber == 1 || bitNumber == 2) {
|
if (bitNumber == 1 || bitNumber == 2) {
|
||||||
m_pageRender.decodePage();
|
m_pageRender.decodePage();
|
||||||
m_pageRender.renderPage();
|
m_pageRender.renderPage();
|
||||||
@@ -149,56 +149,56 @@ void TeletextWidget::setControlBit(int bitNumber, bool active)
|
|||||||
|
|
||||||
void TeletextWidget::setDefaultCharSet(int newDefaultCharSet)
|
void TeletextWidget::setDefaultCharSet(int newDefaultCharSet)
|
||||||
{
|
{
|
||||||
m_teletextPage->setDefaultCharSet(newDefaultCharSet);
|
m_levelOnePage->setDefaultCharSet(newDefaultCharSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextWidget::setDefaultNOS(int newDefaultNOS)
|
void TeletextWidget::setDefaultNOS(int newDefaultNOS)
|
||||||
{
|
{
|
||||||
m_teletextPage->setDefaultNOS(newDefaultNOS);
|
m_levelOnePage->setDefaultNOS(newDefaultNOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextWidget::setDefaultScreenColour(int newColour)
|
void TeletextWidget::setDefaultScreenColour(int newColour)
|
||||||
{
|
{
|
||||||
m_teletextPage->setDefaultScreenColour(newColour);
|
m_levelOnePage->setDefaultScreenColour(newColour);
|
||||||
m_pageRender.decodePage();
|
m_pageRender.decodePage();
|
||||||
m_pageRender.renderPage();
|
m_pageRender.renderPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextWidget::setDefaultRowColour(int newColour)
|
void TeletextWidget::setDefaultRowColour(int newColour)
|
||||||
{
|
{
|
||||||
m_teletextPage->setDefaultRowColour(newColour);
|
m_levelOnePage->setDefaultRowColour(newColour);
|
||||||
m_pageRender.decodePage();
|
m_pageRender.decodePage();
|
||||||
m_pageRender.renderPage();
|
m_pageRender.renderPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextWidget::setColourTableRemap(int newMap)
|
void TeletextWidget::setColourTableRemap(int newMap)
|
||||||
{
|
{
|
||||||
m_teletextPage->setColourTableRemap(newMap);
|
m_levelOnePage->setColourTableRemap(newMap);
|
||||||
m_pageRender.decodePage();
|
m_pageRender.decodePage();
|
||||||
m_pageRender.renderPage();
|
m_pageRender.renderPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextWidget::setBlackBackgroundSubst(bool substOn)
|
void TeletextWidget::setBlackBackgroundSubst(bool substOn)
|
||||||
{
|
{
|
||||||
m_teletextPage->setBlackBackgroundSubst(substOn);
|
m_levelOnePage->setBlackBackgroundSubst(substOn);
|
||||||
m_pageRender.decodePage();
|
m_pageRender.decodePage();
|
||||||
m_pageRender.renderPage();
|
m_pageRender.renderPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextWidget::setSidePanelWidths(int newLeftSidePanelColumns, int newRightSidePanelColumns)
|
void TeletextWidget::setSidePanelWidths(int newLeftSidePanelColumns, int newRightSidePanelColumns)
|
||||||
{
|
{
|
||||||
m_teletextPage->setLeftSidePanelDisplayed(newLeftSidePanelColumns != 0);
|
m_levelOnePage->setLeftSidePanelDisplayed(newLeftSidePanelColumns != 0);
|
||||||
m_teletextPage->setRightSidePanelDisplayed(newRightSidePanelColumns != 0);
|
m_levelOnePage->setRightSidePanelDisplayed(newRightSidePanelColumns != 0);
|
||||||
if (newLeftSidePanelColumns)
|
if (newLeftSidePanelColumns)
|
||||||
m_teletextPage->setSidePanelColumns((newLeftSidePanelColumns == 16) ? 0 : newLeftSidePanelColumns);
|
m_levelOnePage->setSidePanelColumns((newLeftSidePanelColumns == 16) ? 0 : newLeftSidePanelColumns);
|
||||||
else
|
else
|
||||||
m_teletextPage->setSidePanelColumns((newRightSidePanelColumns == 0) ? 0 : 16-newRightSidePanelColumns);
|
m_levelOnePage->setSidePanelColumns((newRightSidePanelColumns == 0) ? 0 : 16-newRightSidePanelColumns);
|
||||||
m_pageRender.updateSidePanels();
|
m_pageRender.updateSidePanels();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextWidget::setSidePanelAtL35Only(bool newSidePanelAtL35Only)
|
void TeletextWidget::setSidePanelAtL35Only(bool newSidePanelAtL35Only)
|
||||||
{
|
{
|
||||||
m_teletextPage->setSidePanelStatusL25(!newSidePanelAtL35Only);
|
m_levelOnePage->setSidePanelStatusL25(!newSidePanelAtL35Only);
|
||||||
m_pageRender.updateSidePanels();
|
m_pageRender.updateSidePanels();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ void TeletextWidget::keyPressEvent(QKeyEvent *event)
|
|||||||
char keyPressed = *qPrintable(event->text());
|
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 (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_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);
|
setCharacter(0x20);
|
||||||
switch (event->key()) {
|
switch (event->key()) {
|
||||||
case Qt::Key_Q:
|
case Qt::Key_Q:
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
TeletextDocument* m_teletextDocument;
|
TeletextDocument* m_teletextDocument;
|
||||||
TeletextPage* m_teletextPage;
|
LevelOnePage* m_levelOnePage;
|
||||||
bool m_insertMode, m_grid;
|
bool m_insertMode, m_grid;
|
||||||
QBasicTimer m_flashTimer;
|
QBasicTimer m_flashTimer;
|
||||||
int m_flashTiming, m_flashPhase;
|
int m_flashTiming, m_flashPhase;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ PageOptionsDockWidget::PageOptionsDockWidget(TeletextWidget *parent): QDockWidge
|
|||||||
m_cycleTypeCombo->addItem("cycles");
|
m_cycleTypeCombo->addItem("cycles");
|
||||||
m_cycleTypeCombo->addItem("seconds");
|
m_cycleTypeCombo->addItem("seconds");
|
||||||
pageCycleLayout->addWidget(m_cycleTypeCombo);
|
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);
|
subPageOptionsLayout->addLayout(pageCycleLayout);
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ void PageOptionsDockWidget::updateWidgets()
|
|||||||
m_cycleValueSpinBox->setValue(m_parentMainWidget->document()->currentSubPage()->cycleValue());
|
m_cycleValueSpinBox->setValue(m_parentMainWidget->document()->currentSubPage()->cycleValue());
|
||||||
m_cycleValueSpinBox->blockSignals(false);
|
m_cycleValueSpinBox->blockSignals(false);
|
||||||
m_cycleTypeCombo->blockSignals(true);
|
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);
|
m_cycleTypeCombo->blockSignals(false);
|
||||||
for (int i=0; i<=7; i++) {
|
for (int i=0; i<=7; i++) {
|
||||||
m_controlBitsAct[i]->blockSignals(true);
|
m_controlBitsAct[i]->blockSignals(true);
|
||||||
|
|||||||
96
render.cpp
96
render.cpp
@@ -60,9 +60,9 @@ TeletextPageRender::~TeletextPageRender()
|
|||||||
delete m_fontBitmap;
|
delete m_fontBitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextPageRender::setTeletextPage(TeletextPage *newCurrentPage)
|
void TeletextPageRender::setTeletextPage(LevelOnePage *newCurrentPage)
|
||||||
{
|
{
|
||||||
m_teletextPage = newCurrentPage;
|
m_levelOnePage = newCurrentPage;
|
||||||
m_level1Layer.setTeletextPage(newCurrentPage);
|
m_level1Layer.setTeletextPage(newCurrentPage);
|
||||||
updateSidePanels();
|
updateSidePanels();
|
||||||
}
|
}
|
||||||
@@ -103,13 +103,13 @@ void TeletextPageRender::updateSidePanels()
|
|||||||
int oldLeftSidePanelColumns = m_leftSidePanelColumns;
|
int oldLeftSidePanelColumns = m_leftSidePanelColumns;
|
||||||
int oldRightSidePanelColumns = m_rightSidePanelColumns;
|
int oldRightSidePanelColumns = m_rightSidePanelColumns;
|
||||||
|
|
||||||
if (m_renderLevel >= (3-m_teletextPage->sidePanelStatusL25()) && m_teletextPage->leftSidePanelDisplayed())
|
if (m_renderLevel >= (3-m_levelOnePage->sidePanelStatusL25()) && m_levelOnePage->leftSidePanelDisplayed())
|
||||||
m_leftSidePanelColumns = (m_teletextPage->sidePanelColumns() == 0) ? 16 : m_teletextPage->sidePanelColumns();
|
m_leftSidePanelColumns = (m_levelOnePage->sidePanelColumns() == 0) ? 16 : m_levelOnePage->sidePanelColumns();
|
||||||
else
|
else
|
||||||
m_leftSidePanelColumns = 0;
|
m_leftSidePanelColumns = 0;
|
||||||
|
|
||||||
if (m_renderLevel >= (3-m_teletextPage->sidePanelStatusL25()) && m_teletextPage->rightSidePanelDisplayed())
|
if (m_renderLevel >= (3-m_levelOnePage->sidePanelStatusL25()) && m_levelOnePage->rightSidePanelDisplayed())
|
||||||
m_rightSidePanelColumns = 16-m_teletextPage->sidePanelColumns();
|
m_rightSidePanelColumns = 16-m_levelOnePage->sidePanelColumns();
|
||||||
else
|
else
|
||||||
m_rightSidePanelColumns = 0;
|
m_rightSidePanelColumns = 0;
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@ void TeletextPageRender::buildEnhanceMap(TextLayer *enhanceLayer, int tripletNum
|
|||||||
int originModifierC=0;
|
int originModifierC=0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
x26Triplet = &m_teletextPage->localEnhance.at(tripletNumber);
|
x26Triplet = &m_levelOnePage->localEnhance.at(tripletNumber);
|
||||||
if (x26Triplet->isRowTriplet())
|
if (x26Triplet->isRowTriplet())
|
||||||
// Row address group
|
// Row address group
|
||||||
switch (x26Triplet->mode()) {
|
switch (x26Triplet->mode()) {
|
||||||
@@ -153,7 +153,7 @@ void TeletextPageRender::buildEnhanceMap(TextLayer *enhanceLayer, int tripletNum
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x10: // Origin modifier
|
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;
|
originModifierR = x26Triplet->address()-40;
|
||||||
originModifierC = x26Triplet->data();
|
originModifierC = x26Triplet->data();
|
||||||
}
|
}
|
||||||
@@ -168,21 +168,21 @@ void TeletextPageRender::buildEnhanceMap(TextLayer *enhanceLayer, int tripletNum
|
|||||||
break;
|
break;
|
||||||
int tripletPointer = ((x26Triplet->data() >> 4) | ((x26Triplet->address() & 1) << 3)) * 13 + (x26Triplet->data() & 0x0f);
|
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
|
// 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;
|
break;
|
||||||
// Check if we're pointing to an actual Object Definition of the same type
|
// 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;
|
break;
|
||||||
// The Object Definition can't declare it's at triplet 13-15; only 12 triplets per packet
|
// 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;
|
break;
|
||||||
// Check if the Object Definition triplet is where it declares it is
|
// 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;
|
break;
|
||||||
// Is the object required at the current presentation Level?
|
// 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;
|
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;
|
break;
|
||||||
EnhanceLayer *newLayer = new EnhanceLayer;
|
EnhanceLayer *newLayer = new EnhanceLayer;
|
||||||
m_textLayer.push_back(newLayer);
|
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());
|
enhanceLayer->enhanceMap.insert((activePosition.row() << 8) | activePosition.column(), ((x26Triplet->mode() | 0x20) << 8) | x26Triplet->data());
|
||||||
}
|
}
|
||||||
tripletNumber++;
|
tripletNumber++;
|
||||||
} while (!terminatorFound && tripletNumber < m_teletextPage->localEnhance.size());
|
} while (!terminatorFound && tripletNumber < m_levelOnePage->localEnhance.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeletextPageRender::decodePage()
|
void TeletextPageRender::decodePage()
|
||||||
@@ -249,14 +249,14 @@ void TeletextPageRender::decodePage()
|
|||||||
m_textLayer.pop_back();
|
m_textLayer.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
renderedFullScreenColour = (m_renderLevel >= 2) ? m_teletextPage->defaultScreenColour() : 0;
|
renderedFullScreenColour = (m_renderLevel >= 2) ? m_levelOnePage->defaultScreenColour() : 0;
|
||||||
downwardsFullRowColour = (m_renderLevel >= 2) ? m_teletextPage->defaultRowColour() : 0;
|
downwardsFullRowColour = (m_renderLevel >= 2) ? m_levelOnePage->defaultRowColour() : 0;
|
||||||
setFullScreenColour(renderedFullScreenColour);
|
setFullScreenColour(renderedFullScreenColour);
|
||||||
for (int r=0; r<25; r++)
|
for (int r=0; r<25; r++)
|
||||||
setFullRowColour(r ,downwardsFullRowColour);
|
setFullRowColour(r ,downwardsFullRowColour);
|
||||||
|
|
||||||
m_textLayer[1]->enhanceMap.clear();
|
m_textLayer[1]->enhanceMap.clear();
|
||||||
if (m_renderLevel == 0 || m_teletextPage->localEnhance.empty())
|
if (m_renderLevel == 0 || m_levelOnePage->localEnhance.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_textLayer[1]->setFullScreenColour(-1);
|
m_textLayer[1]->setFullScreenColour(-1);
|
||||||
@@ -321,14 +321,14 @@ void TeletextPageRender::renderPage(int r)
|
|||||||
return;
|
return;
|
||||||
int charWidth = resultAttributes.display.doubleWidth ? 24 : 12;
|
int charWidth = resultAttributes.display.doubleWidth ? 24 : 12;
|
||||||
int charHeight = resultAttributes.display.doubleHeight ? 20 : 10;
|
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;
|
// bool transparentForeground = false;
|
||||||
if (transparentBackground) {
|
if (transparentBackground) {
|
||||||
pixmapPainter.setCompositionMode(QPainter::CompositionMode_Clear);
|
pixmapPainter.setCompositionMode(QPainter::CompositionMode_Clear);
|
||||||
pixmapPainter.eraseRect(c*12, r*10, charWidth, charHeight);
|
pixmapPainter.eraseRect(c*12, r*10, charWidth, charHeight);
|
||||||
pixmapPainter.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
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
|
// Outside a boxed area
|
||||||
resultCharacter = { 0x20, 0, 0 };
|
resultCharacter = { 0x20, 0, 0 };
|
||||||
underlined = false;
|
underlined = false;
|
||||||
@@ -378,7 +378,7 @@ void TeletextPageRender::renderPage(int r)
|
|||||||
if (layerCharacter.code != 0x00)
|
if (layerCharacter.code != 0x00)
|
||||||
resultCharacter = layerCharacter;
|
resultCharacter = layerCharacter;
|
||||||
if (l == 0) {
|
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);
|
m_cell[r][c].level1Mosaic = (resultCharacter.set == 24 || resultCharacter.set == 25);
|
||||||
if (!m_cell[r][c].level1Mosaic)
|
if (!m_cell[r][c].level1Mosaic)
|
||||||
level1CharSet = resultCharacter.set;
|
level1CharSet = resultCharacter.set;
|
||||||
@@ -395,16 +395,16 @@ void TeletextPageRender::renderPage(int r)
|
|||||||
if (layerApplyAttributes.applyForeColour) {
|
if (layerApplyAttributes.applyForeColour) {
|
||||||
resultAttributes.foreColour = layerApplyAttributes.attribute.foreColour;
|
resultAttributes.foreColour = layerApplyAttributes.attribute.foreColour;
|
||||||
if (l == 0 && m_renderLevel >= 2)
|
if (l == 0 && m_renderLevel >= 2)
|
||||||
resultAttributes.foreColour |= m_foregroundRemap[m_teletextPage->colourTableRemap()];
|
resultAttributes.foreColour |= m_foregroundRemap[m_levelOnePage->colourTableRemap()];
|
||||||
}
|
}
|
||||||
if (layerApplyAttributes.applyBackColour) {
|
if (layerApplyAttributes.applyBackColour) {
|
||||||
resultAttributes.backColour = layerApplyAttributes.attribute.backColour;
|
resultAttributes.backColour = layerApplyAttributes.attribute.backColour;
|
||||||
if (l == 0) {
|
if (l == 0) {
|
||||||
if (m_renderLevel >= 2)
|
if (m_renderLevel >= 2)
|
||||||
if (resultAttributes.backColour == 0x20)
|
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
|
else
|
||||||
resultAttributes.backColour |= m_backgroundRemap[m_teletextPage->colourTableRemap()];
|
resultAttributes.backColour |= m_backgroundRemap[m_levelOnePage->colourTableRemap()];
|
||||||
else
|
else
|
||||||
if (resultAttributes.backColour == 0x20)
|
if (resultAttributes.backColour == 0x20)
|
||||||
resultAttributes.backColour = 0x00;
|
resultAttributes.backColour = 0x00;
|
||||||
@@ -474,19 +474,19 @@ void TeletextPageRender::renderPage(int r)
|
|||||||
m_cell[r][c].rightHalf = applyRightHalf;
|
m_cell[r][c].rightHalf = applyRightHalf;
|
||||||
|
|
||||||
if (!resultAttributes.display.invert) {
|
if (!resultAttributes.display.invert) {
|
||||||
foreQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.foreColour, m_renderLevel));
|
foreQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.foreColour, m_renderLevel));
|
||||||
backQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.backColour, m_renderLevel));
|
backQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.backColour, m_renderLevel));
|
||||||
} else {
|
} else {
|
||||||
foreQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.backColour, m_renderLevel));
|
foreQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.backColour, m_renderLevel));
|
||||||
backQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.foreColour, m_renderLevel));
|
backQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.foreColour, m_renderLevel));
|
||||||
}
|
}
|
||||||
|
|
||||||
renderCharacter();
|
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.setBackground(QBrush(QColor(0, 0, 0, 128)));
|
||||||
pixmapPainter.setPen(QColor(255, 255, 255, 224));
|
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)
|
if (resultAttributes.display.doubleHeight)
|
||||||
@@ -557,11 +557,11 @@ void TeletextPageRender::renderPage(int r)
|
|||||||
underlined = false;
|
underlined = false;
|
||||||
}
|
}
|
||||||
if (!resultAttributes.display.invert) {
|
if (!resultAttributes.display.invert) {
|
||||||
foreQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.foreColour, m_renderLevel));
|
foreQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.foreColour, m_renderLevel));
|
||||||
backQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.backColour, m_renderLevel));
|
backQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.backColour, m_renderLevel));
|
||||||
} else {
|
} else {
|
||||||
foreQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.backColour, m_renderLevel));
|
foreQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.backColour, m_renderLevel));
|
||||||
backQColour = CLUTtoQColor(m_teletextPage->CLUT(resultAttributes.foreColour, m_renderLevel));
|
backQColour = CLUTtoQColor(m_levelOnePage->CLUT(resultAttributes.foreColour, m_renderLevel));
|
||||||
}
|
}
|
||||||
if (resultAttributes.flash.ratePhase == 0) {
|
if (resultAttributes.flash.ratePhase == 0) {
|
||||||
// 1Hz flash
|
// 1Hz flash
|
||||||
@@ -629,12 +629,12 @@ void TeletextPageRender::updateFlashRequired(int newFlashRequired)
|
|||||||
|
|
||||||
inline void TeletextPageRender::setFullScreenColour(int newColour)
|
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);
|
m_finalFullScreenQColor = QColor(0, 0, 0, 0);
|
||||||
emit fullScreenColourChanged(QColor(0, 0, 0, 0));
|
emit fullScreenColourChanged(QColor(0, 0, 0, 0));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QColor newFullScreenQColor = CLUTtoQColor(m_teletextPage->CLUT(newColour, m_renderLevel));
|
QColor newFullScreenQColor = CLUTtoQColor(m_levelOnePage->CLUT(newColour, m_renderLevel));
|
||||||
m_finalFullScreenColour = newColour;
|
m_finalFullScreenColour = newColour;
|
||||||
if (m_finalFullScreenQColor != newFullScreenQColor) {
|
if (m_finalFullScreenQColor != newFullScreenQColor) {
|
||||||
m_finalFullScreenQColor = newFullScreenQColor;
|
m_finalFullScreenQColor = newFullScreenQColor;
|
||||||
@@ -644,12 +644,12 @@ inline void TeletextPageRender::setFullScreenColour(int newColour)
|
|||||||
|
|
||||||
inline void TeletextPageRender::setFullRowColour(int row, 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);
|
m_fullRowQColor[row] = QColor(0, 0, 0, 0);
|
||||||
emit fullRowColourChanged(row, QColor(0, 0, 0, 0));
|
emit fullRowColourChanged(row, QColor(0, 0, 0, 0));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QColor newFullRowQColor = CLUTtoQColor(m_teletextPage->CLUT(newColour, m_renderLevel));
|
QColor newFullRowQColor = CLUTtoQColor(m_levelOnePage->CLUT(newColour, m_renderLevel));
|
||||||
m_fullRowColour[row] = newColour;
|
m_fullRowColour[row] = newColour;
|
||||||
if (m_fullRowQColor[row] != newFullRowQColor) {
|
if (m_fullRowQColor[row] != newFullRowQColor) {
|
||||||
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::setFullScreenColour(int newColour) { m_layerFullScreenColour = newColour; }
|
||||||
|
|
||||||
void TextLayer::setFullRowColour(int r, int newColour, bool newDownwards)
|
void TextLayer::setFullRowColour(int r, int newColour, bool newDownwards)
|
||||||
@@ -835,7 +835,7 @@ void Level1Layer::updateRowCache(int r)
|
|||||||
bool doubleHeightAttrFound = false;
|
bool doubleHeightAttrFound = false;
|
||||||
|
|
||||||
for (int c=0; c<40; c++) {
|
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
|
// Set at spacing attributes
|
||||||
switch (charCode) {
|
switch (charCode) {
|
||||||
case 0x0c: // Normal size
|
case 0x0c: // Normal size
|
||||||
@@ -916,11 +916,11 @@ textCharacter Level1Layer::character(int r, int c)
|
|||||||
updateRowCache(r);
|
updateRowCache(r);
|
||||||
if (c > 39 || m_rowHeight[r] == RHbottomhalf)
|
if (c > 39 || m_rowHeight[r] == RHbottomhalf)
|
||||||
return { 0x20, 0 };
|
return { 0x20, 0 };
|
||||||
result.code = m_teletextPage->character(r, c);
|
result.code = m_levelOnePage->character(r, c);
|
||||||
if (m_teletextPage->secondCharSet() != 0xf && m_attributeCache[c].escSwitch)
|
if (m_levelOnePage->secondCharSet() != 0xf && m_attributeCache[c].escSwitch)
|
||||||
result.set = g0CharacterMap.value(((m_teletextPage->secondCharSet() << 3) | m_teletextPage->secondNOS()), 0);
|
result.set = g0CharacterMap.value(((m_levelOnePage->secondCharSet() << 3) | m_levelOnePage->secondNOS()), 0);
|
||||||
else
|
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) {
|
if (result.code < 0x20) {
|
||||||
result.code = m_attributeCache[c].held ? m_attributeCache[c].holdChar : 0x20;
|
result.code = m_attributeCache[c].held ? m_attributeCache[c].holdChar : 0x20;
|
||||||
if (m_attributeCache[c].held && c > 0)
|
if (m_attributeCache[c].held && c > 0)
|
||||||
@@ -965,7 +965,7 @@ void Level1Layer::attributes(int r, int c, applyAttributes *layerApplyAttributes
|
|||||||
return;
|
return;
|
||||||
if (c > 0) {
|
if (c > 0) {
|
||||||
// Set-after
|
// Set-after
|
||||||
characterCode = m_teletextPage->character(r, c-1);
|
characterCode = m_levelOnePage->character(r, c-1);
|
||||||
switch (characterCode) {
|
switch (characterCode) {
|
||||||
case 0x00 ... 0x07: // Alphanumeric + Foreground colour
|
case 0x00 ... 0x07: // Alphanumeric + Foreground colour
|
||||||
case 0x10 ... 0x17: // Mosaic + 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;
|
layerApplyAttributes->attribute.flash.ratePhase = 0;
|
||||||
break;
|
break;
|
||||||
case 0x0a: // End box
|
case 0x0a: // End box
|
||||||
if (m_teletextPage->character(r, c) == 0x0a) {
|
if (m_levelOnePage->character(r, c) == 0x0a) {
|
||||||
layerApplyAttributes->applyBoxingOnly = true;
|
layerApplyAttributes->applyBoxingOnly = true;
|
||||||
layerApplyAttributes->attribute.display.boxingWindow = false;
|
layerApplyAttributes->attribute.display.boxingWindow = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x0b: // Start box
|
case 0x0b: // Start box
|
||||||
if (m_teletextPage->character(r, c) == 0x0b) {
|
if (m_levelOnePage->character(r, c) == 0x0b) {
|
||||||
layerApplyAttributes->applyBoxingOnly = true;
|
layerApplyAttributes->applyBoxingOnly = true;
|
||||||
layerApplyAttributes->attribute.display.boxingWindow = true;
|
layerApplyAttributes->attribute.display.boxingWindow = true;
|
||||||
}
|
}
|
||||||
@@ -1008,7 +1008,7 @@ void Level1Layer::attributes(int r, int c, applyAttributes *layerApplyAttributes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Set-at
|
// Set-at
|
||||||
characterCode = m_teletextPage->character(r, c);
|
characterCode = m_levelOnePage->character(r, c);
|
||||||
switch (characterCode) {
|
switch (characterCode) {
|
||||||
case 0x09: // Steady
|
case 0x09: // Steady
|
||||||
layerApplyAttributes->applyFlash = true;
|
layerApplyAttributes->applyFlash = true;
|
||||||
|
|||||||
8
render.h
8
render.h
@@ -99,7 +99,7 @@ class TextLayer
|
|||||||
public:
|
public:
|
||||||
// TextLayer(TeletextPage* thePage) : currentPage(thePage) { };
|
// TextLayer(TeletextPage* thePage) : currentPage(thePage) { };
|
||||||
virtual ~TextLayer() = default;
|
virtual ~TextLayer() = default;
|
||||||
void setTeletextPage(TeletextPage*);
|
void setTeletextPage(LevelOnePage *);
|
||||||
virtual textCharacter character(int, int) =0;
|
virtual textCharacter character(int, int) =0;
|
||||||
virtual void attributes(int, int, applyAttributes *) =0;
|
virtual void attributes(int, int, applyAttributes *) =0;
|
||||||
virtual int fullScreenColour() const =0;
|
virtual int fullScreenColour() const =0;
|
||||||
@@ -113,7 +113,7 @@ public:
|
|||||||
QMultiMap<int, int> enhanceMap;
|
QMultiMap<int, int> enhanceMap;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TeletextPage* m_teletextPage;
|
LevelOnePage* m_levelOnePage;
|
||||||
int m_layerFullScreenColour=-1;
|
int m_layerFullScreenColour=-1;
|
||||||
int m_layerFullRowColour[25];
|
int m_layerFullRowColour[25];
|
||||||
bool m_layerFullRowDownwards[25];
|
bool m_layerFullRowDownwards[25];
|
||||||
@@ -184,7 +184,7 @@ public:
|
|||||||
void decodePage();
|
void decodePage();
|
||||||
void renderPage();
|
void renderPage();
|
||||||
void renderPage(int r);
|
void renderPage(int r);
|
||||||
void setTeletextPage(TeletextPage*);
|
void setTeletextPage(LevelOnePage *);
|
||||||
void updateSidePanels();
|
void updateSidePanels();
|
||||||
void buildEnhanceMap(TextLayer *, int=0);
|
void buildEnhanceMap(TextLayer *, int=0);
|
||||||
QPixmap* pagePixmap(int i) const { return m_pagePixmap[i]; };
|
QPixmap* pagePixmap(int i) const { return m_pagePixmap[i]; };
|
||||||
@@ -224,7 +224,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
textCell m_cell[25][72];
|
textCell m_cell[25][72];
|
||||||
TeletextPage* m_teletextPage;
|
LevelOnePage* m_levelOnePage;
|
||||||
int m_flashRequired;
|
int m_flashRequired;
|
||||||
int m_fullRowColour[25];
|
int m_fullRowColour[25];
|
||||||
QColor m_fullRowQColor[25];
|
QColor m_fullRowQColor[25];
|
||||||
|
|||||||
Reference in New Issue
Block a user