From 2e082dbc1937774f19ed08a1cb9de02d7e2ce735 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Tue, 6 Apr 2021 18:24:42 +0100 Subject: [PATCH] Change object invocation level 2.5/3.5 widget --- x26dockwidget.cpp | 27 +++++++++++---------------- x26dockwidget.h | 3 +-- x26model.cpp | 17 +++++------------ 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/x26dockwidget.cpp b/x26dockwidget.cpp index ebe82f8..7453ba5 100644 --- a/x26dockwidget.cpp +++ b/x26dockwidget.cpp @@ -243,12 +243,12 @@ X26DockWidget::X26DockWidget(TeletextWidget *parent): QDockWidget(parent) connect(m_objectSourceComboBox, QOverload::of(&QComboBox::currentIndexChanged), [=](const int value) { updateModelFromCookedWidget(value, Qt::UserRole+1); updateCookedTripletParameters(m_x26View->currentIndex()); } ); // Object required at which levels - m_objectRequiredAtL2p5CheckBox = new QCheckBox("L2.5"); - m_objectRequiredAtL3p5CheckBox = new QCheckBox("L3.5"); - invokeObjectLayout->addWidget(m_objectRequiredAtL2p5CheckBox); - invokeObjectLayout->addWidget(m_objectRequiredAtL3p5CheckBox); - connect(m_objectRequiredAtL2p5CheckBox, &QCheckBox::stateChanged, this, [=](const int value) { updateModelFromCookedWidget(value, Qt::UserRole+1); } ); - connect(m_objectRequiredAtL3p5CheckBox, &QCheckBox::stateChanged, this, [=](const int value) { updateModelFromCookedWidget(value, Qt::UserRole+4); } ); + m_objectRequiredAtLevelsComboBox = new QComboBox; + m_objectRequiredAtLevelsComboBox->addItem("L2.5 only"); + m_objectRequiredAtLevelsComboBox->addItem("L3.5 only"); + m_objectRequiredAtLevelsComboBox->addItem("L2.5 + 3.5"); + invokeObjectLayout->addWidget(m_objectRequiredAtLevelsComboBox); + connect(m_objectRequiredAtLevelsComboBox, QOverload::of(&QComboBox::currentIndexChanged), [=](const int value) { updateModelFromCookedWidget(value, Qt::UserRole+1); } ); // Invoke Local Objects QHBoxLayout *invokeLocalObjectLayout = new QHBoxLayout; @@ -743,18 +743,13 @@ void X26DockWidget::updateCookedTripletParameters(const QModelIndex &index) if (index.model()->data(index.model()->index(index.row(), 1), Qt::UserRole).toInt() & 0x04) { // Define object m_objectSourceComboBox->setVisible(false); - m_objectRequiredAtL2p5CheckBox->setVisible(true); - m_objectRequiredAtL3p5CheckBox->setVisible(true); - m_objectRequiredAtL2p5CheckBox->blockSignals(true); - m_objectRequiredAtL3p5CheckBox->blockSignals(true); - m_objectRequiredAtL2p5CheckBox->setChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toBool()); - m_objectRequiredAtL3p5CheckBox->setChecked(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+4).toBool()); - m_objectRequiredAtL2p5CheckBox->blockSignals(false); - m_objectRequiredAtL3p5CheckBox->blockSignals(false); + m_objectRequiredAtLevelsComboBox->setVisible(true); + m_objectRequiredAtLevelsComboBox->blockSignals(true); + m_objectRequiredAtLevelsComboBox->setCurrentIndex(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toInt()); + m_objectRequiredAtLevelsComboBox->blockSignals(false); } else { // Invoke object - m_objectRequiredAtL2p5CheckBox->setVisible(false); - m_objectRequiredAtL3p5CheckBox->setVisible(false); + m_objectRequiredAtLevelsComboBox->setVisible(false); m_objectSourceComboBox->setVisible(true); } m_objectSourceComboBox->blockSignals(true); diff --git a/x26dockwidget.h b/x26dockwidget.h index 2f81446..482aadf 100644 --- a/x26dockwidget.h +++ b/x26dockwidget.h @@ -78,8 +78,7 @@ private: QComboBox *m_flashModeComboBox, *m_flashRateComboBox; QComboBox *m_textSizeComboBox; QCheckBox *m_displayAttributeBoxingCheckBox, *m_displayAttributeConcealCheckBox, *m_displayAttributeInvertCheckBox, *m_displayAttributeUnderlineCheckBox; - QComboBox *m_objectSourceComboBox; - QCheckBox *m_objectRequiredAtL2p5CheckBox, *m_objectRequiredAtL3p5CheckBox; + QComboBox *m_objectSourceComboBox, *m_objectRequiredAtLevelsComboBox; QSpinBox *m_invokeLocalObjectDesignationCodeSpinBox, *m_invokeLocalObjectTripletNumberSpinBox; QSpinBox *m_invokePOPSubPageSpinBox, *m_invokePOPPacketNumberSpinBox; QComboBox *m_invokePOPTripletNumberComboBox, *m_invokePOPPointerBitsComboBox; diff --git a/x26model.cpp b/x26model.cpp index f52059c..3b6ba7d 100644 --- a/x26model.cpp +++ b/x26model.cpp @@ -333,8 +333,8 @@ QVariant X26Model::data(const QModelIndex &index, int role) const return ((m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x18) >> 3) - 1; break; case 0x15 ... 0x17: // Define object - // Required at level 2.5 - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x08) == 0x08; + // 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; @@ -426,9 +426,6 @@ QVariant X26Model::data(const QModelIndex &index, int role) const case 0x11 ... 0x13: // Invoke object // (G)POP object: Triplet number return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() >> 5; - case 0x15 ... 0x17: // Define object - // Required at level 3.5 - return (m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).address() & 0x10) == 0x10; case 0x18: // DRCS mode // Subpage return m_parentMainWidget->document()->currentSubPage()->enhancements()->at(index.row()).data() & 0x0f; @@ -520,7 +517,7 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role // Now set data values to avoid reserved bits if we need to // FIXME this can rather messily push multiple EditTripletCommands // that rely on mergeWith to tidy them up afterwards - // Also this just flips bits, where we could use default values + // Also this just flips bits, where we could use default values switch (intValue) { case 0x00: // Full screen colour case 0x20: // Foreground colour @@ -628,8 +625,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 0x15 ... 0x17: // Define object - // Required at level 2.5 - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x37, value.toInt() << 2, role)); + // Required at which levels + 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 @@ -744,10 +741,6 @@ bool X26Model::setData(const QModelIndex &index, const QVariant &value, int role // (G)POP object: Triplet number m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x1f, value.toInt() << 5, role)); break; - case 0x15 ... 0x17: // Define object - // Required at level 3.5 - m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETaddress, 0x2f, value.toInt() << 3, role)); - break; case 0x18: // DRCS Mode // Subpage m_parentMainWidget->document()->undoStack()->push(new EditTripletCommand(m_parentMainWidget->document(), this, index.row(), EditTripletCommand::ETdata, 0x70, value.toInt(), role));