diff --git a/x26dockwidget.cpp b/x26dockwidget.cpp index 1e416de..8520ce3 100644 --- a/x26dockwidget.cpp +++ b/x26dockwidget.cpp @@ -287,13 +287,15 @@ X26DockWidget::X26DockWidget(TeletextWidget *parent): QDockWidget(parent) // Invoke Local Objects QHBoxLayout *invokeLocalObjectLayout = new QHBoxLayout; - invokeLocalObjectLayout->addWidget(new QLabel(tr("Designation"))); + m_invokeLocalObjectDesignationCodeLabel = new QLabel(tr("Designation")); + invokeLocalObjectLayout->addWidget(m_invokeLocalObjectDesignationCodeLabel); m_invokeLocalObjectDesignationCodeSpinBox = new QSpinBox; m_invokeLocalObjectDesignationCodeSpinBox->setMaximum(15); invokeLocalObjectLayout->addWidget(m_invokeLocalObjectDesignationCodeSpinBox); connect(m_invokeLocalObjectDesignationCodeSpinBox, QOverload::of(&QSpinBox::valueChanged), this, [=](const int value) { updateModelFromCookedWidget(value, Qt::UserRole+2); } ); - invokeLocalObjectLayout->addWidget(new QLabel(tr("Triplet"))); + m_invokeLocalObjectTripletNumberLabel = new QLabel(tr("Triplet")); + invokeLocalObjectLayout->addWidget(m_invokeLocalObjectTripletNumberLabel); m_invokeLocalObjectTripletNumberSpinBox = new QSpinBox; m_invokeLocalObjectTripletNumberSpinBox->setMaximum(12); invokeLocalObjectLayout->addWidget(m_invokeLocalObjectTripletNumberSpinBox); @@ -799,14 +801,22 @@ void X26DockWidget::updateCookedTripletParameters(const QModelIndex &index) // BUG we're only dealing with Local Object Definitions at the moment! if (index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toInt() == 0 || (index.model()->data(index.model()->index(index.row(), 1), Qt::UserRole).toInt() & 0x04)) { // if (triplet.objectSource() == X26Triplet::LocalObjectSource) { + const bool tripletLocationWidgetsVisible = (modeExt & 0x04) != 0x04; + + m_invokeLocalObjectDesignationCodeLabel->setVisible(tripletLocationWidgetsVisible); + m_invokeLocalObjectDesignationCodeSpinBox->setVisible(tripletLocationWidgetsVisible); + m_invokeLocalObjectTripletNumberLabel->setVisible(tripletLocationWidgetsVisible); + m_invokeLocalObjectTripletNumberSpinBox->setVisible(tripletLocationWidgetsVisible); m_objectSourceComboBox->setCurrentIndex(0); m_invokeObjectSourceStackedLayout->setCurrentIndex(0); - m_invokeLocalObjectDesignationCodeSpinBox->blockSignals(true); - m_invokeLocalObjectTripletNumberSpinBox->blockSignals(true); - m_invokeLocalObjectDesignationCodeSpinBox->setValue(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+2).toInt()); - m_invokeLocalObjectTripletNumberSpinBox->setValue(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+3).toInt()); - m_invokeLocalObjectDesignationCodeSpinBox->blockSignals(false); - m_invokeLocalObjectTripletNumberSpinBox->blockSignals(false); + if (tripletLocationWidgetsVisible) { + m_invokeLocalObjectDesignationCodeSpinBox->blockSignals(true); + m_invokeLocalObjectTripletNumberSpinBox->blockSignals(true); + m_invokeLocalObjectDesignationCodeSpinBox->setValue(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+2).toInt()); + m_invokeLocalObjectTripletNumberSpinBox->setValue(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+3).toInt()); + m_invokeLocalObjectDesignationCodeSpinBox->blockSignals(false); + m_invokeLocalObjectTripletNumberSpinBox->blockSignals(false); + } } else { // if (triplet.objectSource() != X26Triplet::IllegalObjectSource) { m_objectSourceComboBox->setCurrentIndex(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole+1).toInt()); m_invokeObjectSourceStackedLayout->setCurrentIndex(1); diff --git a/x26dockwidget.h b/x26dockwidget.h index 3453ab0..2cf2731 100644 --- a/x26dockwidget.h +++ b/x26dockwidget.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -98,6 +99,7 @@ private: QComboBox *m_textSizeComboBox; QCheckBox *m_displayAttributeBoxingCheckBox, *m_displayAttributeConcealCheckBox, *m_displayAttributeInvertCheckBox, *m_displayAttributeUnderlineCheckBox; QComboBox *m_objectSourceComboBox, *m_objectRequiredAtLevelsComboBox; + QLabel *m_invokeLocalObjectDesignationCodeLabel, *m_invokeLocalObjectTripletNumberLabel; QSpinBox *m_invokeLocalObjectDesignationCodeSpinBox, *m_invokeLocalObjectTripletNumberSpinBox; QSpinBox *m_invokePOPSubPageSpinBox, *m_invokePOPPacketNumberSpinBox; QComboBox *m_invokePOPTripletNumberComboBox, *m_invokePOPPointerBitsComboBox; diff --git a/x26model.cpp b/x26model.cpp index 26c0b48..b1240c7 100644 --- a/x26model.cpp +++ b/x26model.cpp @@ -145,20 +145,19 @@ QVariant X26Model::data(const QModelIndex &index, int role) const result.append("1-9"); return result; case 0x15 ... 0x17: // Define object - result = (QString("Local: d%1 t%2, ").arg((triplet.data() >> 4) | ((triplet.address() & 1) << 3)).arg(triplet.data() & 0x0f)); switch (triplet.address() & 0x18) { case 0x08: - result.append("L2.5 only"); + return "Local: L2.5 only"; break; case 0x10: - result.append("L3.5 only"); + return "Local: L3.5 only"; break; case 0x18: - result.append("L2.5 and 3.5"); + return "Local: L2.5 and 3.5"; break; // case 0x00: shouldn't happen since that would make a column triplet, not a row triplet } - return result; + break; case 0x18: // DRCS mode result = (triplet.data() & 0x40) == 0x40 ? "Normal" : "Global"; result.append(QString(": subpage %1, ").arg(triplet.data() & 0x0f)); diff --git a/x26triplets.cpp b/x26triplets.cpp index 286277a..ad4a821 100644 --- a/x26triplets.cpp +++ b/x26triplets.cpp @@ -92,6 +92,13 @@ void X26TripletList::updateInternalData(int r) break; case 0x15 ... 0x17: // Define Object activePosition.reset(); + // Make sure data field holds correct place of triplet + // otherwise the object won't appear + triplet->m_address &= 0x3c; + if (i >= 104) // Triplet 8 + triplet->m_address |= 0x01; + triplet->m_data = (((i / 13) & 0x07) << 4) | (i % 13); + break; }; // Column triplet: make sure that PDC and reserved triplets don't affect the Active Position } else if (triplet->modeExt() != 0x24 && triplet->modeExt() != 0x25 && triplet->modeExt() != 0x26 && triplet->modeExt() != 0x2a)