Implement CLUT context menu
This commit is contained in:
@@ -1049,7 +1049,7 @@ void X26DockWidget::deleteTriplet()
|
|||||||
|
|
||||||
void X26DockWidget::customMenuRequested(QPoint pos)
|
void X26DockWidget::customMenuRequested(QPoint pos)
|
||||||
{
|
{
|
||||||
QMenu *customMenu;
|
QMenu *customMenu = nullptr;
|
||||||
|
|
||||||
QModelIndex index = m_x26View->indexAt(pos);
|
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();
|
const int modeExt = index.model()->data(index.model()->index(index.row(), 2), Qt::EditRole).toInt();
|
||||||
|
|
||||||
switch (modeExt) {
|
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 0x21: // G1 mosaic character
|
||||||
case 0x22: // G3 mosaic character at level 1.5
|
case 0x22: // G3 mosaic character at level 1.5
|
||||||
case 0x2b: // G3 mosaic character at level >=2.5
|
case 0x2b: // G3 mosaic character at level >=2.5
|
||||||
|
|||||||
28
x26menus.cpp
28
x26menus.cpp
@@ -19,8 +19,10 @@
|
|||||||
|
|
||||||
#include "x26menus.h"
|
#include "x26menus.h"
|
||||||
|
|
||||||
|
#include <QColor>
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
#include <QPixmap>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
#include "render.h"
|
#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)
|
TripletCharacterQMenu::TripletCharacterQMenu(int charSet, QWidget *parent): QMenu(parent)
|
||||||
{
|
{
|
||||||
QMenu *charRange[6];
|
QMenu *charRange[6];
|
||||||
|
|||||||
14
x26menus.h
14
x26menus.h
@@ -20,6 +20,7 @@
|
|||||||
#ifndef X26MENUS_H
|
#ifndef X26MENUS_H
|
||||||
#define X26MENUS_H
|
#define X26MENUS_H
|
||||||
|
|
||||||
|
#include <QColor>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
@@ -128,6 +129,19 @@ private:
|
|||||||
ModeTripletNames m_modeTripletNames;
|
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
|
class TripletCharacterQMenu : public QMenu
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|||||||
Reference in New Issue
Block a user