diff --git a/src/qteletextmaker/x26dockwidget.cpp b/src/qteletextmaker/x26dockwidget.cpp index 9c38b9a..daf26d8 100644 --- a/src/qteletextmaker/x26dockwidget.cpp +++ b/src/qteletextmaker/x26dockwidget.cpp @@ -1156,6 +1156,19 @@ void X26DockWidget::customMenuRequested(QPoint pos) connect(static_cast(customMenu)->action(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+1); updateAllCookedTripletWidgets(index); }); } break; + case 0x18: // DRCS mode + customMenu = new TripletDRCSModeQMenu(this); + + static_cast(customMenu)->setSourceChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+3).toInt()); + static_cast(customMenu)->setSubTableChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+4).toInt()); + static_cast(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(customMenu)->sourceAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+3); updateAllCookedTripletWidgets(index); }); + for (int i=0; i<16; i++) + connect(static_cast(customMenu)->subTableAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+4); updateAllCookedTripletWidgets(index); }); + for (int i=0; i<3; i++) + connect(static_cast(customMenu)->levelsAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+1); updateAllCookedTripletWidgets(index); }); + break; case 0x27: // Additional flash functions customMenu = new TripletFlashQMenu(this); @@ -1177,6 +1190,16 @@ void X26DockWidget::customMenuRequested(QPoint pos) connect(static_cast(customMenu)->otherAttrAction(i), &QAction::toggled, [=](const int checked) { updateModelFromCookedWidget(checked, Qt::UserRole+i+2); updateAllCookedTripletWidgets(index); }); } break; + case 0x2d: // DRCS character + customMenu = new TripletDRCSCharacterQMenu(this); + + static_cast(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(customMenu)->characterAction(i), &QAction::triggered, [=]() { updateModelFromCookedWidget(i, Qt::UserRole+2); updateAllCookedTripletWidgets(index); }); + else + connect(static_cast(customMenu)->sourceAction(i-48), &QAction::triggered, [=]() { updateModelFromCookedWidget(i-48, Qt::UserRole+1); updateAllCookedTripletWidgets(index); }); + break; case 0x2e: // Font style customMenu = new TripletFontStyleQMenu(this); diff --git a/src/qteletextmaker/x26menus.cpp b/src/qteletextmaker/x26menus.cpp index 308c44d..987409f 100644 --- a/src/qteletextmaker/x26menus.cpp +++ b/src/qteletextmaker/x26menus.cpp @@ -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) { m_actions[0] = this->addAction(tr("Proportional")); diff --git a/src/qteletextmaker/x26menus.h b/src/qteletextmaker/x26menus.h index 008c678..f6e2186 100644 --- a/src/qteletextmaker/x26menus.h +++ b/src/qteletextmaker/x26menus.h @@ -188,6 +188,39 @@ private: 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 { Q_OBJECT