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]);
|
||||
}
|
||||
m_levelRadioButton[0]->toggle();
|
||||
connect(m_levelRadioButton[0], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(0); m_textWidget->update(); });
|
||||
connect(m_levelRadioButton[1], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(1); m_textWidget->update(); });
|
||||
connect(m_levelRadioButton[2], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(2); m_textWidget->update(); });
|
||||
connect(m_levelRadioButton[3], &QAbstractButton::clicked, [=]() { m_textWidget->pageDecode()->setLevel(3); 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(); m_paletteDockWidget->setLevel3p5Accepted(false);});
|
||||
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(); m_paletteDockWidget->setLevel3p5Accepted(true);});
|
||||
statusBar()->showMessage(tr("Ready"));
|
||||
}
|
||||
|
||||
@@ -952,6 +952,8 @@ void MainWindow::loadFile(const QString &fileName)
|
||||
levelSeen = m_textWidget->document()->levelRequired();
|
||||
m_levelRadioButton[levelSeen]->toggle();
|
||||
m_textWidget->pageDecode()->setLevel(levelSeen);
|
||||
if (levelSeen == 3)
|
||||
m_paletteDockWidget->setLevel3p5Accepted(true);
|
||||
updatePageWidgets();
|
||||
|
||||
QApplication::restoreOverrideCursor();
|
||||
|
||||
@@ -39,6 +39,9 @@ PaletteDockWidget::PaletteDockWidget(TeletextWidget *parent): QDockWidget(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->setWindowTitle("Palette");
|
||||
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); });
|
||||
}
|
||||
}
|
||||
|
||||
updateLevel3p5Cursor();
|
||||
|
||||
m_showHexValuesCheckBox = new QCheckBox(tr("Show colour hex values"));
|
||||
paletteGridLayout->addWidget(m_showHexValuesCheckBox, 5, 1, 1, 8);
|
||||
connect(m_showHexValuesCheckBox, &QCheckBox::stateChanged, this, &PaletteDockWidget::updateAllColourButtons);
|
||||
@@ -70,26 +76,34 @@ void PaletteDockWidget::updateColourButton(int colourIndex)
|
||||
{
|
||||
if (colourIndex == 8)
|
||||
return;
|
||||
|
||||
QString colourString = QString("%1").arg(m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex), 3, 16, QChar('0'));
|
||||
if (m_showHexValuesCheckBox->isChecked())
|
||||
m_colourButton[colourIndex]->setText(colourString);
|
||||
else
|
||||
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 g = (m_parentMainWidget->document()->currentSubPage()->CLUT(colourIndex) >> 4) & 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';
|
||||
|
||||
QString qss = QString("background-color: #%1; color: #%2%2%2; border: none").arg(colourString).arg(blackOrWhite);
|
||||
m_colourButton[colourIndex]->setStyleSheet(qss);
|
||||
|
||||
if (m_parentMainWidget->document()->currentSubPage()->isPaletteDefault(colourIndex))
|
||||
// Default colour was set, disable Reset button if all colours in row are default as well
|
||||
m_resetButton[colourIndex>>3]->setEnabled(!m_parentMainWidget->document()->currentSubPage()->isPaletteDefault(colourIndex & 0x18, colourIndex | 0x07));
|
||||
else
|
||||
m_resetButton[colourIndex>>3]->setEnabled(true);
|
||||
if (m_parentMainWidget->document()->currentSubPage()->isPaletteDefault(colourIndex)) {
|
||||
// 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));
|
||||
// Check if CLUTs 0 and 1 are all default if necessary
|
||||
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()
|
||||
@@ -98,6 +112,41 @@ void PaletteDockWidget::updateAllColourButtons()
|
||||
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)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
@@ -106,6 +155,9 @@ void PaletteDockWidget::showEvent(QShowEvent *event)
|
||||
|
||||
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");
|
||||
|
||||
if (newColour.isValid())
|
||||
|
||||
@@ -36,18 +36,22 @@ public:
|
||||
|
||||
public slots:
|
||||
void updateColourButton(int);
|
||||
void setLevel3p5Accepted(bool);
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *);
|
||||
|
||||
private slots:
|
||||
void selectColour(int);
|
||||
void setLevel3p5Seen(bool);
|
||||
void updateLevel3p5Cursor();
|
||||
|
||||
private:
|
||||
void resetCLUT(int);
|
||||
|
||||
QPushButton *m_colourButton[32], *m_resetButton[4];
|
||||
QCheckBox *m_showHexValuesCheckBox;
|
||||
bool m_level3p5Accepted, m_level3p5Seen;
|
||||
|
||||
TeletextWidget *m_parentMainWidget;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user