Implement flash functions context menu

This commit is contained in:
G.K.MacGregor
2024-05-26 17:39:21 +01:00
parent 771bc66b89
commit 238515006d
3 changed files with 79 additions and 12 deletions

View File

@@ -1080,11 +1080,22 @@ void X26DockWidget::customMenuRequested(QPoint pos)
if (!customMenu) if (!customMenu)
customMenu = new TripletCLUTQMenu(false, this); customMenu = new TripletCLUTQMenu(false, this);
for (int m=0; m<32; m++) { for (int i=0; i<32; i++) {
static_cast<TripletCLUTQMenu *>(customMenu)->setColour(m, m_parentMainWidget->document()->currentSubPage()->CLUTtoQColor(m)); static_cast<TripletCLUTQMenu *>(customMenu)->setColour(i, m_parentMainWidget->document()->currentSubPage()->CLUTtoQColor(i));
connect(static_cast<TripletCLUTQMenu *>(customMenu)->action(m), &QAction::triggered, [=]() { updateModelFromCookedWidget(m, Qt::UserRole+1); updateAllCookedTripletWidgets(index); }); connect(static_cast<TripletCLUTQMenu *>(customMenu)->action(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+1); updateAllCookedTripletWidgets(index); });
} }
break; break;
case 0x27: // Additional flash functions
customMenu = new TripletFlashQMenu(this);
static_cast<TripletFlashQMenu *>(customMenu)->setModeChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toInt());
static_cast<TripletFlashQMenu *>(customMenu)->setRatePhaseChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+2).toInt());
for (int i=0; i<4; i++)
connect(static_cast<TripletFlashQMenu *>(customMenu)->modeAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+1); updateAllCookedTripletWidgets(index); });
for (int i=0; i<6; i++)
connect(static_cast<TripletFlashQMenu *>(customMenu)->ratePhaseAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+2); updateAllCookedTripletWidgets(index); });
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
@@ -1108,8 +1119,8 @@ void X26DockWidget::customMenuRequested(QPoint pos)
case 0x3f: // G0 character with diacritical case 0x3f: // G0 character with diacritical
customMenu = new TripletCharacterQMenu(m_x26Model->data(index.model()->index(index.row(), 2), Qt::UserRole+2).toInt(), this); customMenu = new TripletCharacterQMenu(m_x26Model->data(index.model()->index(index.row(), 2), Qt::UserRole+2).toInt(), this);
for (int m=0; m<96; m++) for (int i=0; i<96; i++)
connect(static_cast<TripletCharacterQMenu *>(customMenu)->action(m), &QAction::triggered, [=]() { updateModelFromCookedWidget(m+32, Qt::UserRole+1); updateAllCookedTripletWidgets(index); }); connect(static_cast<TripletCharacterQMenu *>(customMenu)->action(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i+32, Qt::UserRole+1); updateAllCookedTripletWidgets(index); });
break; break;
} }
@@ -1119,7 +1130,7 @@ void X26DockWidget::customMenuRequested(QPoint pos)
customMenu = new QMenu(this); customMenu = new QMenu(this);
TripletModeQMenu *modeChangeMenu = new TripletModeQMenu(this); TripletModeQMenu *modeChangeMenu = new TripletModeQMenu(this);
modeChangeMenu->setTitle(tr("Change mode")); modeChangeMenu->setTitle(tr("Change triplet mode"));
customMenu->addMenu(modeChangeMenu); customMenu->addMenu(modeChangeMenu);
customMenu->addSeparator(); customMenu->addSeparator();
@@ -1132,10 +1143,10 @@ void X26DockWidget::customMenuRequested(QPoint pos)
insertAfterQMenu->setTitle(tr("Insert after")); insertAfterQMenu->setTitle(tr("Insert after"));
customMenu->addMenu(insertAfterQMenu); customMenu->addMenu(insertAfterQMenu);
for (int m=0; m<64; m++) { for (int i=0; i<64; i++) {
connect(static_cast<TripletModeQMenu *>(modeChangeMenu)->action(m), &QAction::triggered, [=]() { cookedModeMenuSelected(m); }); connect(static_cast<TripletModeQMenu *>(modeChangeMenu)->action(i), &QAction::triggered, [=]() { cookedModeMenuSelected(i); });
connect(static_cast<TripletModeQMenu *>(insertBeforeQMenu)->action(m), &QAction::triggered, [=]() { insertTriplet(m, false); }); connect(static_cast<TripletModeQMenu *>(insertBeforeQMenu)->action(i), &QAction::triggered, [=]() { insertTriplet(i, false); });
connect(static_cast<TripletModeQMenu *>(insertAfterQMenu)->action(m), &QAction::triggered, [=]() { insertTriplet(m, true); }); connect(static_cast<TripletModeQMenu *>(insertAfterQMenu)->action(i), &QAction::triggered, [=]() { insertTriplet(i, true); });
} }
QAction *insertCopyAct = new QAction(tr("Insert copy"), this); QAction *insertCopyAct = new QAction(tr("Insert copy"), this);
@@ -1152,8 +1163,8 @@ void X26DockWidget::customMenuRequested(QPoint pos)
appendModeMenu->setTitle(tr("Append")); appendModeMenu->setTitle(tr("Append"));
customMenu->addMenu(appendModeMenu); customMenu->addMenu(appendModeMenu);
for (int m=0; m<64; m++) for (int i=0; i<64; i++)
connect(static_cast<TripletModeQMenu *>(appendModeMenu)->action(m), &QAction::triggered, [=]() { insertTriplet(m, m_x26Model->rowCount()); }); connect(static_cast<TripletModeQMenu *>(appendModeMenu)->action(i), &QAction::triggered, [=]() { insertTriplet(i, m_x26Model->rowCount()); });
} }
customMenu->popup(m_x26View->viewport()->mapToGlobal(pos)); customMenu->popup(m_x26View->viewport()->mapToGlobal(pos));

View File

@@ -19,6 +19,7 @@
#include "x26menus.h" #include "x26menus.h"
#include <QActionGroup>
#include <QColor> #include <QColor>
#include <QIcon> #include <QIcon>
#include <QMenu> #include <QMenu>
@@ -140,3 +141,41 @@ TripletCharacterQMenu::TripletCharacterQMenu(int charSet, QWidget *parent): QMen
m_actions[r*16+c] = charRange[r]->addAction(QIcon(m_fontBitmap.charBitmap(r*16+c+32, charSet)), QString("0x%1").arg(r*16+c+32, 2, 16, QChar('0'))); m_actions[r*16+c] = charRange[r]->addAction(QIcon(m_fontBitmap.charBitmap(r*16+c+32, charSet)), QString("0x%1").arg(r*16+c+32, 2, 16, QChar('0')));
} }
} }
TripletFlashQMenu::TripletFlashQMenu(QWidget *parent): QMenu(parent)
{
QMenu *flashModeMenu = this->addMenu(tr("Flash mode"));
m_actions[0] = flashModeMenu->addAction(tr("Steady"));
m_actions[1] = flashModeMenu->addAction(tr("Normal"));
m_actions[2] = flashModeMenu->addAction(tr("Invert"));
m_actions[3] = flashModeMenu->addAction(tr("Adjacent CLUT"));
m_modeActionGroup = new QActionGroup(this);
for (int i=0; i<4; i++) {
m_actions[i]->setCheckable(true);
m_modeActionGroup->addAction(m_actions[i]);
}
QMenu *flashRatePhaseMenu = this->addMenu(tr("Flash rate/phase"));
m_actions[4] = flashRatePhaseMenu->addAction(tr("Slow 1Hz"));
m_actions[5] = flashRatePhaseMenu->addAction(tr("Fast 2Hz phase 1"));
m_actions[6] = flashRatePhaseMenu->addAction(tr("Fast 2Hz phase 2"));
m_actions[7] = flashRatePhaseMenu->addAction(tr("Fast 2Hz phase 3"));
m_actions[8] = flashRatePhaseMenu->addAction(tr("Fast 2Hz inc/right"));
m_actions[9] = flashRatePhaseMenu->addAction(tr("Fast 2Hz dec/left"));
m_ratePhaseActionGroup = new QActionGroup(this);
for (int i=4; i<10; i++) {
m_actions[i]->setCheckable(true);
m_ratePhaseActionGroup->addAction(m_actions[i]);
}
}
void TripletFlashQMenu::setModeChecked(int n)
{
m_actions[n]->setChecked(true);
}
void TripletFlashQMenu::setRatePhaseChecked(int n)
{
m_actions[n+4]->setChecked(true);
}

View File

@@ -20,6 +20,7 @@
#ifndef X26MENUS_H #ifndef X26MENUS_H
#define X26MENUS_H #define X26MENUS_H
#include <QActionGroup>
#include <QColor> #include <QColor>
#include <QMenu> #include <QMenu>
#include <QString> #include <QString>
@@ -155,4 +156,20 @@ private:
TeletextFontBitmap m_fontBitmap; TeletextFontBitmap m_fontBitmap;
}; };
class TripletFlashQMenu : public QMenu
{
Q_OBJECT
public:
TripletFlashQMenu(QWidget *parent = nullptr);
QAction *modeAction(int n) const { return m_actions[n]; };
QAction *ratePhaseAction(int n) const { return m_actions[n+4]; };
void setModeChecked(int n);
void setRatePhaseChecked(int n);
private:
QAction *m_actions[10];
QActionGroup *m_modeActionGroup, *m_ratePhaseActionGroup;
};
#endif #endif