Implement CLUT context menu
This commit is contained in:
@@ -1049,7 +1049,7 @@ void X26DockWidget::deleteTriplet()
|
||||
|
||||
void X26DockWidget::customMenuRequested(QPoint pos)
|
||||
{
|
||||
QMenu *customMenu;
|
||||
QMenu *customMenu = nullptr;
|
||||
|
||||
QModelIndex index = m_x26View->indexAt(pos);
|
||||
|
||||
@@ -1064,6 +1064,23 @@ void X26DockWidget::customMenuRequested(QPoint pos)
|
||||
const int modeExt = index.model()->data(index.model()->index(index.row(), 2), Qt::EditRole).toInt();
|
||||
|
||||
switch (modeExt) {
|
||||
case 0x01: // Full Row colour
|
||||
case 0x07: // Address row 0
|
||||
customMenu = new TripletCLUTQMenu(true, this);
|
||||
connect(static_cast<TripletCLUTQMenu *>(customMenu)->action(32), &QAction::triggered, [=]() { updateModelFromCookedWidget(0, Qt::UserRole+2); updateAllCookedTripletWidgets(index); });
|
||||
connect(static_cast<TripletCLUTQMenu *>(customMenu)->action(33), &QAction::triggered, [=]() { updateModelFromCookedWidget(1, Qt::UserRole+2); updateAllCookedTripletWidgets(index); });
|
||||
// fall-through
|
||||
case 0x00: // Full Screen colour
|
||||
case 0x20: // Foreground colour
|
||||
case 0x23: // Background colour
|
||||
if (!customMenu)
|
||||
customMenu = new TripletCLUTQMenu(false, this);
|
||||
for (int m=0; m<32; m++) {
|
||||
static_cast<TripletCLUTQMenu *>(customMenu)->setColour(m, m_parentMainWidget->document()->currentSubPage()->CLUTtoQColor(m));
|
||||
connect(static_cast<TripletCLUTQMenu *>(customMenu)->action(m), &QAction::triggered, [=]() { updateModelFromCookedWidget(m, Qt::UserRole+1); updateAllCookedTripletWidgets(index); });
|
||||
}
|
||||
customMenu->addSeparator();
|
||||
break;
|
||||
case 0x21: // G1 mosaic character
|
||||
case 0x22: // G3 mosaic character at level 1.5
|
||||
case 0x2b: // G3 mosaic character at level >=2.5
|
||||
|
||||
28
x26menus.cpp
28
x26menus.cpp
@@ -19,8 +19,10 @@
|
||||
|
||||
#include "x26menus.h"
|
||||
|
||||
#include <QColor>
|
||||
#include <QIcon>
|
||||
#include <QMenu>
|
||||
#include <QPixmap>
|
||||
#include <QString>
|
||||
|
||||
#include "render.h"
|
||||
@@ -101,6 +103,32 @@ void TripletModeQMenu::addModeAction(QMenu *menu, int mode)
|
||||
}
|
||||
|
||||
|
||||
TripletCLUTQMenu::TripletCLUTQMenu(bool rows, QWidget *parent): QMenu(parent)
|
||||
{
|
||||
QMenu *clut[4];
|
||||
|
||||
for (int c=0; c<4; c++) {
|
||||
clut[c] = this->addMenu(QString("CLUT %1").arg(c));
|
||||
|
||||
for (int e=0; e<8; e++)
|
||||
m_actions[c*8+e] = clut[c]->addAction(QString("CLUT %1:%2").arg(c).arg(e));
|
||||
}
|
||||
|
||||
if (rows) {
|
||||
m_actions[32] = this->addAction(tr("This row only"));
|
||||
m_actions[33] = this->addAction(tr("Down to bottom"));
|
||||
}
|
||||
}
|
||||
|
||||
void TripletCLUTQMenu::setColour(int i, QColor c)
|
||||
{
|
||||
QPixmap menuColour(32, 32); // Should get downscaled to the menu text size
|
||||
|
||||
menuColour.fill(c);
|
||||
m_actions[i]->setIcon(QIcon(menuColour));
|
||||
}
|
||||
|
||||
|
||||
TripletCharacterQMenu::TripletCharacterQMenu(int charSet, QWidget *parent): QMenu(parent)
|
||||
{
|
||||
QMenu *charRange[6];
|
||||
|
||||
14
x26menus.h
14
x26menus.h
@@ -20,6 +20,7 @@
|
||||
#ifndef X26MENUS_H
|
||||
#define X26MENUS_H
|
||||
|
||||
#include <QColor>
|
||||
#include <QMenu>
|
||||
#include <QString>
|
||||
|
||||
@@ -128,6 +129,19 @@ private:
|
||||
ModeTripletNames m_modeTripletNames;
|
||||
};
|
||||
|
||||
class TripletCLUTQMenu : public QMenu
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TripletCLUTQMenu(bool rows, QWidget *parent = nullptr);
|
||||
QAction *action(int n) const { return m_actions[n]; };
|
||||
void setColour(int i, QColor c);
|
||||
|
||||
private:
|
||||
QAction *m_actions[34];
|
||||
};
|
||||
|
||||
class TripletCharacterQMenu : public QMenu
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Reference in New Issue
Block a user