Implement DRCS context menus

This commit is contained in:
Gavin MacGregor
2025-06-19 16:10:41 +01:00
parent 962d308b56
commit 541654a7f7
3 changed files with 128 additions and 0 deletions

View File

@@ -1156,6 +1156,19 @@ void X26DockWidget::customMenuRequested(QPoint pos)
connect(static_cast<TripletCLUTQMenu *>(customMenu)->action(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+1); updateAllCookedTripletWidgets(index); }); connect(static_cast<TripletCLUTQMenu *>(customMenu)->action(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+1); updateAllCookedTripletWidgets(index); });
} }
break; break;
case 0x18: // DRCS mode
customMenu = new TripletDRCSModeQMenu(this);
static_cast<TripletDRCSModeQMenu *>(customMenu)->setSourceChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+3).toInt());
static_cast<TripletDRCSModeQMenu *>(customMenu)->setSubTableChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+4).toInt());
static_cast<TripletDRCSModeQMenu *>(customMenu)->setLevelsChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toInt());
for (int i=0; i<2; i++)
connect(static_cast<TripletDRCSModeQMenu *>(customMenu)->sourceAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+3); updateAllCookedTripletWidgets(index); });
for (int i=0; i<16; i++)
connect(static_cast<TripletDRCSModeQMenu *>(customMenu)->subTableAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+4); updateAllCookedTripletWidgets(index); });
for (int i=0; i<3; i++)
connect(static_cast<TripletDRCSModeQMenu *>(customMenu)->levelsAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+1); updateAllCookedTripletWidgets(index); });
break;
case 0x27: // Additional flash functions case 0x27: // Additional flash functions
customMenu = new TripletFlashQMenu(this); customMenu = new TripletFlashQMenu(this);
@@ -1177,6 +1190,16 @@ void X26DockWidget::customMenuRequested(QPoint pos)
connect(static_cast<TripletDisplayAttrsQMenu *>(customMenu)->otherAttrAction(i), &QAction::toggled, [=](const int checked) { updateModelFromCookedWidget(checked, Qt::UserRole+i+2); updateAllCookedTripletWidgets(index); }); connect(static_cast<TripletDisplayAttrsQMenu *>(customMenu)->otherAttrAction(i), &QAction::toggled, [=](const int checked) { updateModelFromCookedWidget(checked, Qt::UserRole+i+2); updateAllCookedTripletWidgets(index); });
} }
break; break;
case 0x2d: // DRCS character
customMenu = new TripletDRCSCharacterQMenu(this);
static_cast<TripletDRCSCharacterQMenu *>(customMenu)->setSourceChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toInt());
for (int i=0; i<50; i++)
if (i < 48)
connect(static_cast<TripletDRCSCharacterQMenu *>(customMenu)->characterAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+2); updateAllCookedTripletWidgets(index); });
else
connect(static_cast<TripletDRCSCharacterQMenu *>(customMenu)->sourceAction(i-48), &QAction::triggered, [=]() { updateModelFromCookedWidget(i-48, Qt::UserRole+1); updateAllCookedTripletWidgets(index); });
break;
case 0x2e: // Font style case 0x2e: // Font style
customMenu = new TripletFontStyleQMenu(this); customMenu = new TripletFontStyleQMenu(this);

View File

@@ -219,6 +219,78 @@ void TripletDisplayAttrsQMenu::setOtherAttrChecked(int n, bool b)
} }
TripletDRCSModeQMenu::TripletDRCSModeQMenu(QWidget *parent): QMenu(parent)
{
m_actions[16] = this->addAction(tr("Global DRCS"));
m_actions[17] = this->addAction(tr("Normal DRCS"));
m_sourceActionGroup = new QActionGroup(this);
for (int i=0; i<2; i++) {
m_actions[16+i]->setCheckable(true);
m_sourceActionGroup->addAction(m_actions[16+i]);
}
QMenu *subTable = this->addMenu(tr("Subtable"));
m_subTableActionGroup = new QActionGroup(this);
for (int i=0; i<16; i++) {
m_actions[i] = subTable->addAction(QString("%1").arg(i));
m_actions[i]->setCheckable(true);
m_subTableActionGroup->addAction(m_actions[i]);
}
QMenu *levels = this->addMenu(tr("Required at"));
m_actions[18] = levels->addAction("Level 2.5 only");
m_actions[19] = levels->addAction("Level 3.5 only");
m_actions[20] = levels->addAction("Level 2.5 and 3.5");
m_levelsActionGroup = new QActionGroup(this);
for (int i=0; i<3; i++) {
m_actions[18+i]->setCheckable(true);
m_levelsActionGroup->addAction(m_actions[18+i]);
}
}
void TripletDRCSModeQMenu::setSubTableChecked(int n)
{
m_actions[n]->setChecked(true);
}
void TripletDRCSModeQMenu::setSourceChecked(int n)
{
m_actions[16+n]->setChecked(true);
}
void TripletDRCSModeQMenu::setLevelsChecked(int n)
{
m_actions[18+n]->setChecked(true);
}
TripletDRCSCharacterQMenu::TripletDRCSCharacterQMenu(QWidget *parent): QMenu(parent)
{
QMenu *charRange[4];
m_actions[48] = this->addAction(tr("Global DRCS"));
m_actions[49] = this->addAction(tr("Normal DRCS"));
m_sourceActionGroup = new QActionGroup(this);
for (int i=0; i<2; i++) {
m_actions[48+i]->setCheckable(true);
m_sourceActionGroup->addAction(m_actions[48+i]);
}
for (int r=0; r<4; r++) {
charRange[r] = this->addMenu(QString("%1-%2").arg(r*12).arg(r*12+11));
for (int c=0; c<12; c++)
m_actions[r*12+c] = charRange[r]->addAction(QString("%1").arg(r*12+c));
}
}
void TripletDRCSCharacterQMenu::setSourceChecked(int n)
{
m_actions[48+n]->setChecked(true);
}
TripletFontStyleQMenu::TripletFontStyleQMenu(QWidget *parent): QMenu(parent) TripletFontStyleQMenu::TripletFontStyleQMenu(QWidget *parent): QMenu(parent)
{ {
m_actions[0] = this->addAction(tr("Proportional")); m_actions[0] = this->addAction(tr("Proportional"));

View File

@@ -188,6 +188,39 @@ private:
QActionGroup *m_sizeActionGroup, *m_otherActionGroup; QActionGroup *m_sizeActionGroup, *m_otherActionGroup;
}; };
class TripletDRCSModeQMenu : public QMenu
{
Q_OBJECT
public:
TripletDRCSModeQMenu(QWidget *parent = nullptr);
QAction *subTableAction(int n) const { return m_actions[n]; }
QAction *sourceAction(int n) const { return m_actions[n+16]; }
QAction *levelsAction(int n) const { return m_actions[n+18]; }
void setSubTableChecked(int n);
void setSourceChecked(int n);
void setLevelsChecked(int n);
private:
QAction *m_actions[21];
QActionGroup *m_subTableActionGroup, *m_sourceActionGroup, *m_levelsActionGroup;
};
class TripletDRCSCharacterQMenu : public QMenu
{
Q_OBJECT
public:
TripletDRCSCharacterQMenu(QWidget *parent = nullptr);
QAction *characterAction(int n) const { return m_actions[n]; };
QAction *sourceAction(int n) const { return m_actions[n+48]; };
void setSourceChecked(int n);
private:
QAction *m_actions[50];
QActionGroup *m_sourceActionGroup;
};
class TripletFontStyleQMenu : public QMenu class TripletFontStyleQMenu : public QMenu
{ {
Q_OBJECT Q_OBJECT