Skip to content

Commit

Permalink
Implement CLUT context menu
Browse files Browse the repository at this point in the history
  • Loading branch information
gkthemac committed Apr 30, 2024
1 parent 12649e3 commit 05cf313
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
19 changes: 18 additions & 1 deletion x26dockwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1049,7 +1049,7 @@ void X26DockWidget::deleteTriplet()

void X26DockWidget::customMenuRequested(QPoint pos)
{
QMenu *customMenu;
QMenu *customMenu = nullptr;

QModelIndex index = m_x26View->indexAt(pos);

Expand All @@ -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
Expand Down
28 changes: 28 additions & 0 deletions x26menus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@

#include "x26menus.h"

#include <QColor>
#include <QIcon>
#include <QMenu>
#include <QPixmap>
#include <QString>

#include "render.h"
Expand Down Expand Up @@ -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];
Expand Down
14 changes: 14 additions & 0 deletions x26menus.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#ifndef X26MENUS_H
#define X26MENUS_H

#include <QColor>
#include <QMenu>
#include <QString>

Expand Down Expand Up @@ -128,6 +129,19 @@ class TripletModeQMenu : public QMenu
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
Expand Down

0 comments on commit 05cf313

Please sign in to comment.