diff --git a/x26dockwidget.cpp b/x26dockwidget.cpp index 7453ba5..3e67f33 100644 --- a/x26dockwidget.cpp +++ b/x26dockwidget.cpp @@ -316,12 +316,12 @@ X26DockWidget::X26DockWidget(TeletextWidget *parent): QDockWidget(parent) // Index 6 - DRCS mode QHBoxLayout *DRCSModeLayout = new QHBoxLayout; - m_DRCSModeRequiredAtL2p5CheckBox = new QCheckBox("L2.5"); - m_DRCSModeRequiredAtL3p5CheckBox = new QCheckBox("L3.5"); - DRCSModeLayout->addWidget(m_DRCSModeRequiredAtL2p5CheckBox); - DRCSModeLayout->addWidget(m_DRCSModeRequiredAtL3p5CheckBox); - connect(m_DRCSModeRequiredAtL2p5CheckBox, &QCheckBox::stateChanged, this, [=](const int value) { updateModelFromCookedWidget(value, Qt::UserRole+1); } ); - connect(m_DRCSModeRequiredAtL3p5CheckBox, &QCheckBox::stateChanged, this, [=](const int value) { updateModelFromCookedWidget(value, Qt::UserRole+2); } ); + m_DRCSModeRequiredAtLevelsComboBox = new QComboBox; + m_DRCSModeRequiredAtLevelsComboBox->addItem("L2.5 only"); + m_DRCSModeRequiredAtLevelsComboBox->addItem("L3.5 only"); + m_DRCSModeRequiredAtLevelsComboBox->addItem("L2.5 + 3.5"); + DRCSModeLayout->addWidget(m_DRCSModeRequiredAtLevelsComboBox); + connect(m_DRCSModeRequiredAtLevelsComboBox, QOverload::of(&QComboBox::currentIndexChanged), [=](const int value) { updateModelFromCookedWidget(value, Qt::UserRole+1); } ); m_DRCSModeGlobalRadioButton = new QRadioButton("Global"); m_DRCSModeNormalRadioButton = new QRadioButton("Normal"); QButtonGroup *DRCSModeButtonGroup = new QButtonGroup; @@ -788,18 +788,15 @@ void X26DockWidget::updateCookedTripletParameters(const QModelIndex &index) m_tripletParameterStackedLayout->setCurrentIndex(5); break; case 0x18: // DRCS mode - m_DRCSModeRequiredAtL2p5CheckBox->blockSignals(true); - m_DRCSModeRequiredAtL3p5CheckBox->blockSignals(true); + m_DRCSModeRequiredAtLevelsComboBox->blockSignals(true); m_DRCSModeGlobalRadioButton->blockSignals(true); m_DRCSModeNormalRadioButton->blockSignals(true); m_DRCSModeSubPageSpinBox->blockSignals(true); - m_DRCSModeRequiredAtL2p5CheckBox->setChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toBool()); - m_DRCSModeRequiredAtL3p5CheckBox->setChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+2).toBool()); + m_DRCSModeRequiredAtLevelsComboBox->setCurrentIndex(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toInt()); m_DRCSModeGlobalRadioButton->setChecked(!index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+3).toBool()); m_DRCSModeNormalRadioButton->setChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+3).toBool()); m_DRCSModeSubPageSpinBox->setValue(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+4).toInt()); - m_DRCSModeRequiredAtL2p5CheckBox->blockSignals(false); - m_DRCSModeRequiredAtL3p5CheckBox->blockSignals(false); + m_DRCSModeRequiredAtLevelsComboBox->blockSignals(false); m_DRCSModeGlobalRadioButton->blockSignals(false); m_DRCSModeNormalRadioButton->blockSignals(false); m_DRCSModeSubPageSpinBox->blockSignals(false); diff --git a/x26dockwidget.h b/x26dockwidget.h index 482aadf..674349f 100644 --- a/x26dockwidget.h +++ b/x26dockwidget.h @@ -83,7 +83,7 @@ private: QSpinBox *m_invokePOPSubPageSpinBox, *m_invokePOPPacketNumberSpinBox; QComboBox *m_invokePOPTripletNumberComboBox, *m_invokePOPPointerBitsComboBox; QStackedLayout *m_invokeObjectSourceStackedLayout, *m_tripletParameterStackedLayout; - QCheckBox *m_DRCSModeRequiredAtL2p5CheckBox, *m_DRCSModeRequiredAtL3p5CheckBox; + QComboBox *m_DRCSModeRequiredAtLevelsComboBox; QRadioButton *m_DRCSModeGlobalRadioButton, *m_DRCSModeNormalRadioButton; QSpinBox *m_DRCSModeSubPageSpinBox; QRadioButton *m_DRCSCharacterGlobalRadioButton, *m_DRCSCharacterNormalRadioButton; diff --git a/x26model.cpp b/x26model.cpp index 3b6ba7d..7063785 100644 --- a/x26model.cpp +++ b/x26model.cpp @@ -164,9 +164,9 @@ QVariant X26Model::data(const QModelIndex &index, int role) const case 0x30: result.append("L2.5 and 3.5"); break; - //case 0x00: - // result = "Reserved"; - // break; + case 0x00: + result.append("Reserved"); + break; } return result; case 0x1f: // Termination @@ -336,8 +336,8 @@ QVariant X26Model::data(const QModelIndex &index, int role) const // Required at which levels return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x18) >> 3) - 1; case 0x18: // DRCS mode - // Required at level 2.5 - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x10) == 0x10; + // Required at which levels + return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x30) >> 4) - 1; case 0x1f: // Termination // Intermed POP subpage|Last POP subpage|Local Object|Local enhance return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x06) >> 1); @@ -375,9 +375,6 @@ QVariant X26Model::data(const QModelIndex &index, int role) const case 0x15 ... 0x17: // Define object // Local object: Designation code return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x01) << 3) | ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x70) >> 4); - case 0x18: // DRCS mode - // Required at level 3.5 - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x20) == 0x20; case 0x1f: // Termination // More follows/Last return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x01) == 0x01; @@ -629,8 +626,8 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x27, (value.toInt()+1) << 3, role)); break; case 0x18: // DRCS Mode - // Required at level 2.5 - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x6f, value.toInt() << 3, role)); + // Required at which levels + m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x4f, (value.toInt()+1) << 4, role)); break; case 0x1f: // Termination // Intermed POP subpage|Last POP subpage|Local Object|Local enhance @@ -679,10 +676,6 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x0f, (value.toInt() & 0x07) << 4, role)); m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x38, value.toInt() >> 3, role)); break; - case 0x18: // DRCS Mode - // Required at level 3.5 - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x5f, value.toInt() << 4, role)); - break; case 0x1f: // Termination // More follows/Last m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x06, value.toInt(), role));