Lock out CLUT 0-1 editing when Level is not 3.5
This commit is contained in:
@@ -836,10 +836,10 @@ void MainWindow::createStatusBar()
|
|||||||
statusBar()->addPermanentWidget(m_levelRadioButton[i]);
|
statusBar()->addPermanentWidget(m_levelRadioButton[i]);
|
||||||
}
|
}
|
||||||
m_levelRadioButton[0]->toggle();
|
m_levelRadioButton[0]->toggle();
|
||||||
connect(m_levelRadioButton[0], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(0); m_textWidget->update(); });
|
connect(m_levelRadioButton[0], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(0); m_textWidget->update(); m_paletteDockWidget->setLevel3p5Accepted(false); });
|
||||||
connect(m_levelRadioButton[1], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(1); m_textWidget->update(); });
|
connect(m_levelRadioButton[1], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(1); m_textWidget->update(); m_paletteDockWidget->setLevel3p5Accepted(false);});
|
||||||
connect(m_levelRadioButton[2], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(2); m_textWidget->update(); });
|
connect(m_levelRadioButton[2], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(2); m_textWidget->update(); m_paletteDockWidget->setLevel3p5Accepted(false);});
|
||||||
connect(m_levelRadioButton[3], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(3); m_textWidget->update(); });
|
connect(m_levelRadioButton[3], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(3); m_textWidget->update(); m_paletteDockWidget->setLevel3p5Accepted(true);});
|
||||||
statusBar()->showMessage(tr("Ready"));
|
statusBar()->showMessage(tr("Ready"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -952,6 +952,8 @@ void MainWindow::loadFile(const QString &fileName)
|
|||||||
levelSeen = m_textWidget->document()->levelRequired();
|
levelSeen = m_textWidget->document()->levelRequired();
|
||||||
m_levelRadioButton[levelSeen]->toggle();
|
m_levelRadioButton[levelSeen]->toggle();
|
||||||
m_textWidget->pageDecode()->setLevel(levelSeen);
|
m_textWidget->pageDecode()->setLevel(levelSeen);
|
||||||
|
if (levelSeen == 3)
|
||||||
|
m_paletteDockWidget->setLevel3p5Accepted(true);
|
||||||
updatePageWidgets();
|
updatePageWidgets();
|
||||||
|
|
||||||
QApplication::restoreOverrideCursor();
|
QApplication::restoreOverrideCursor();
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ PaletteDockWidget::PaletteDockWidget(TeletextWidget *parent): QDockWidget(parent
|
|||||||
|
|
||||||
m_parentMainWidget = parent;
|
m_parentMainWidget = parent;
|
||||||
|
|
||||||
|
m_level3p5Accepted = false; // true when Level 3.5 radio button is checked in main window
|
||||||
|
m_level3p5Seen = false; // true when CLUT 0 or 1 is redefined
|
||||||
|
|
||||||
this->setObjectName("PaletteDockWidget");
|
this->setObjectName("PaletteDockWidget");
|
||||||
this->setWindowTitle("Palette");
|
this->setWindowTitle("Palette");
|
||||||
for (int c=0; c<=7; c++)
|
for (int c=0; c<=7; c++)
|
||||||
@@ -57,6 +60,9 @@ PaletteDockWidget::PaletteDockWidget(TeletextWidget *parent): QDockWidget(parent
|
|||||||
connect(m_colourButton[i], &QAbstractButton::clicked, [=]() { selectColour(i); });
|
connect(m_colourButton[i], &QAbstractButton::clicked, [=]() { selectColour(i); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateLevel3p5Cursor();
|
||||||
|
|
||||||
m_showHexValuesCheckBox = new QCheckBox(tr("Show colour hex values"));
|
m_showHexValuesCheckBox = new QCheckBox(tr("Show colour hex values"));
|
||||||
paletteGridLayout->addWidget(m_showHexValuesCheckBox, 5, 1, 1, 8);
|
paletteGridLayout->addWidget(m_showHexValuesCheckBox, 5, 1, 1, 8);
|
||||||
connect(m_showHexValuesCheckBox, &QCheckBox::stateChanged, this, &PaletteDockWidget::updateAllColourButtons);
|
connect(m_showHexValuesCheckBox, &QCheckBox::stateChanged, this, &PaletteDockWidget::updateAllColourButtons);
|
||||||
@@ -70,26 +76,34 @@ void PaletteDockWidget::updateColourButton(int colourIndex)
|
|||||||
{
|
{
|
||||||
if (colourIndex == 8)
|
if (colourIndex == 8)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QString colourString = QString("%1").arg(m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex), 3, 16, QChar('0'));
|
QString colourString = QString("%1").arg(m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex), 3, 16, QChar('0'));
|
||||||
if (m_showHexValuesCheckBox->isChecked())
|
if (m_showHexValuesCheckBox->isChecked())
|
||||||
m_colourButton[colourIndex]->setText(colourString);
|
m_colourButton[colourIndex]->setText(colourString);
|
||||||
else
|
else
|
||||||
m_colourButton[colourIndex]->setText(nullptr);
|
m_colourButton[colourIndex]->setText(nullptr);
|
||||||
|
|
||||||
// Set text itself to black or white so it can be seen over background colour - http://alienryderflex.com/hsp.html
|
|
||||||
int r = m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex) >> 8;
|
int r = m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex) >> 8;
|
||||||
int g = (m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex) >> 4) & 0xf;
|
int g = (m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex) >> 4) & 0xf;
|
||||||
int b = m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex) & 0xf;
|
int b = m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex) & 0xf;
|
||||||
|
// Set text itself to black or white so it can be seen over background colour - http://alienryderflex.com/hsp.html
|
||||||
char blackOrWhite = (sqrt(r*r*0.299 + g*g*0.587 + b*b*0.114) > 7.647) ? '0' : 'f';
|
char blackOrWhite = (sqrt(r*r*0.299 + g*g*0.587 + b*b*0.114) > 7.647) ? '0' : 'f';
|
||||||
|
|
||||||
QString qss = QString("background-color: #%1; color: #%2%2%2; border: none").arg(colourString).arg(blackOrWhite);
|
QString qss = QString("background-color: #%1; color: #%2%2%2; border: none").arg(colourString).arg(blackOrWhite);
|
||||||
m_colourButton[colourIndex]->setStyleSheet(qss);
|
m_colourButton[colourIndex]->setStyleSheet(qss);
|
||||||
|
|
||||||
if (m_parentMainWidget->document()->currentSubPage()->isPaletteDefault(colourIndex))
|
if (m_parentMainWidget->document()->currentSubPage()->isPaletteDefault(colourIndex)) {
|
||||||
// Default colour was set, disable Reset button if all colours in row are default as well
|
// Default colour was set, disable Reset button if all colours in a CLUT row are default as well
|
||||||
m_resetButton[colourIndex>>3]->setEnabled(!m_parentMainWidget->document()->currentSubPage()->isPaletteDefault(colourIndex & 0x18, colourIndex | 0x07));
|
m_resetButton[colourIndex >> 3]->setEnabled(!m_parentMainWidget->document()->currentSubPage()->isPaletteDefault(colourIndex & 0x18, colourIndex | 0x07));
|
||||||
else
|
// Check if CLUTs 0 and 1 are all default if necessary
|
||||||
m_resetButton[colourIndex>>3]->setEnabled(true);
|
if (colourIndex < 16 && m_parentMainWidget->document()->currentSubPage()->isPaletteDefault(0, 15))
|
||||||
|
setLevel3p5Seen(false);
|
||||||
|
} else {
|
||||||
|
// Custom colour was set, enable Reset button for that CLUT
|
||||||
|
m_resetButton[colourIndex >> 3]->setEnabled(true);
|
||||||
|
if (colourIndex < 16)
|
||||||
|
setLevel3p5Seen(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaletteDockWidget::updateAllColourButtons()
|
void PaletteDockWidget::updateAllColourButtons()
|
||||||
@@ -98,6 +112,41 @@ void PaletteDockWidget::updateAllColourButtons()
|
|||||||
updateColourButton(i);
|
updateColourButton(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PaletteDockWidget::setLevel3p5Accepted(bool b)
|
||||||
|
{
|
||||||
|
if (b == m_level3p5Accepted)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_level3p5Accepted = b;
|
||||||
|
|
||||||
|
updateLevel3p5Cursor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PaletteDockWidget::setLevel3p5Seen(bool b)
|
||||||
|
{
|
||||||
|
if (b == m_level3p5Seen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_level3p5Seen = b;
|
||||||
|
|
||||||
|
updateLevel3p5Cursor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PaletteDockWidget::updateLevel3p5Cursor()
|
||||||
|
{
|
||||||
|
const Qt::CursorShape cursor = (m_level3p5Accepted || m_level3p5Seen) ? Qt::ArrowCursor : Qt::ForbiddenCursor;
|
||||||
|
|
||||||
|
if (m_colourButton[0]->cursor() == cursor)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (int i=0; i<16; i++) {
|
||||||
|
if (i == 8)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
m_colourButton[i]->setCursor(cursor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PaletteDockWidget::showEvent(QShowEvent *event)
|
void PaletteDockWidget::showEvent(QShowEvent *event)
|
||||||
{
|
{
|
||||||
Q_UNUSED(event);
|
Q_UNUSED(event);
|
||||||
@@ -106,6 +155,9 @@ void PaletteDockWidget::showEvent(QShowEvent *event)
|
|||||||
|
|
||||||
void PaletteDockWidget::selectColour(int colourIndex)
|
void PaletteDockWidget::selectColour(int colourIndex)
|
||||||
{
|
{
|
||||||
|
if (colourIndex < 16 && !m_level3p5Accepted && !m_level3p5Seen)
|
||||||
|
return;
|
||||||
|
|
||||||
const QColor newColour = QColorDialog::getColor(m_parentMainWidget->document()->currentSubPage()->CLUTtoQColor(colourIndex), this, "Select Colour");
|
const QColor newColour = QColorDialog::getColor(m_parentMainWidget->document()->currentSubPage()->CLUTtoQColor(colourIndex), this, "Select Colour");
|
||||||
|
|
||||||
if (newColour.isValid())
|
if (newColour.isValid())
|
||||||
|
|||||||
@@ -36,18 +36,22 @@ public:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateColourButton(int);
|
void updateColourButton(int);
|
||||||
|
void setLevel3p5Accepted(bool);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void showEvent(QShowEvent *);
|
void showEvent(QShowEvent *);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void selectColour(int);
|
void selectColour(int);
|
||||||
|
void setLevel3p5Seen(bool);
|
||||||
|
void updateLevel3p5Cursor();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void resetCLUT(int);
|
void resetCLUT(int);
|
||||||
|
|
||||||
QPushButton *m_colourButton[32], *m_resetButton[4];
|
QPushButton *m_colourButton[32], *m_resetButton[4];
|
||||||
QCheckBox *m_showHexValuesCheckBox;
|
QCheckBox *m_showHexValuesCheckBox;
|
||||||
|
bool m_level3p5Accepted, m_level3p5Seen;
|
||||||
|
|
||||||
TeletextWidget *m_parentMainWidget;
|
TeletextWidget *m_parentMainWidget;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user