diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.cpp index 4f7bc719b4d66bab83036ce5ea1979bc88992487..3e4a4cea68d5d0a79c04971e9aa60362b0fe3759 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.cpp +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.cpp @@ -57,6 +57,10 @@ OptionalEdit::OptionalEdit(const QString& elementName, const QString& propertyNa combo->setAutoCompletionCaseSensitivity(Qt::CaseInsensitive); combo->addItems(valueList); + readOnlyLineEdit = new QLineEdit(); + readOnlyLineEdit->setReadOnly(true); + readOnlyLineEdit->setVisible(false); + checkbox = new QCheckBox(nullptr); checkbox->setToolTip("If checked, this property will be written into the config file"); checkbox->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred)); @@ -74,7 +78,9 @@ OptionalEdit::OptionalEdit(const QString& elementName, const QString& propertyNa layout->addWidget(checkbox); layout->addWidget(combo); + layout->addWidget(readOnlyLineEdit); + this->isReadOnly = false; this->setLayout(layout); } @@ -103,6 +109,19 @@ void OptionalEdit::setPropertyEnabled(const bool& enabled) } } +void OptionalEdit::setReadOnly(bool readOnly) +{ + if (readOnly == this->isReadOnly) + { + return; + } + + checkbox->setDisabled(readOnly); + + combo->setVisible(not readOnly); + readOnlyLineEdit->setVisible(readOnly); +} + void OptionalEdit::setValue(const QString& value) { @@ -110,6 +129,7 @@ void OptionalEdit::setValue(const QString& value) bool enabledState = checkbox->isChecked(); // ARMARX_INFO << VAROUT(value.toStdString()) << VAROUT(enabledState); combo->setCurrentText(value); + readOnlyLineEdit->setText(value); if (checkbox->isChecked() != enabledState) { diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.h b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.h index eec66bc1605efc2c45c19b4a2be55c0ee9856993..2a4124f1580a4bf88733f5e0833c7a01b8b99cd5 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.h +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.h @@ -67,6 +67,7 @@ namespace armarx public slots: void setPropertyEnabled(const bool& enabled = true); + void setReadOnly(bool readOnly); void setValue(const QString& value); void updateHistory(const QString& value); @@ -81,10 +82,13 @@ namespace armarx private: bool fixComboboxValues = false; - QHBoxLayout* layout; - // QLineEdit* edit; - QComboBox* combo; - QCheckBox* checkbox; + QHBoxLayout* layout = nullptr; + + QComboBox* combo = nullptr; + QLineEdit* readOnlyLineEdit = nullptr; + bool isReadOnly; + + QCheckBox* checkbox = nullptr; QString elementName; QString propertyName; QStringList valueList; diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalPropertyFactory.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalPropertyFactory.cpp index 018ad9e7ec91de58210f99e5753a359c339bad83..c8430ee67c8f89255c60fca3483a2b5fd066b93c 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalPropertyFactory.cpp +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalPropertyFactory.cpp @@ -68,13 +68,12 @@ QWidget* OptionalVariantFactory::createEditor(QtVariantPropertyManager* manager, } editor->setValue(manager->value(property).toString()); editor->setPropertyEnabled(static_cast<OptionalVariantManager*>(manager)->attributeValue(property, QLatin1String("enabled")).toBool()); + editor->setReadOnly(static_cast<OptionalVariantManager*>(manager)->attributeValue(property, QLatin1String("readOnly")).toBool()); createdEditors[property].append(editor); editorToProperty[editor] = property; - - connect(editor, SIGNAL(valueChanged(QString)), this, SLOT(slotSetValue(const QString&))); connect(editor, SIGNAL(enabledChanged(bool)), @@ -119,16 +118,24 @@ void OptionalVariantFactory::slotPropertyAttributeChanged(QtProperty* property, return; } - if (attribute != QLatin1String("enabled")) + if (attribute == QLatin1String("enabled")) { - return; + QList<OptionalEdit*> editors = createdEditors[property]; + QListIterator<OptionalEdit*> itEditor(editors); + while (itEditor.hasNext()) + { + itEditor.next()->setPropertyEnabled(value.toBool()); + } } - QList<OptionalEdit*> editors = createdEditors[property]; - QListIterator<OptionalEdit*> itEditor(editors); - while (itEditor.hasNext()) + if (attribute == QLatin1String("readOnly")) { - itEditor.next()->setPropertyEnabled(value.toBool()); + QList<OptionalEdit*> editors = createdEditors[property]; + QListIterator<OptionalEdit*> itEditor(editors); + while (itEditor.hasNext()) + { + itEditor.next()->setReadOnly(value.toBool()); + } } } diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalPropertyManager.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalPropertyManager.cpp index d51af51abec3c7b0ec708477620d5fb53f4c98ca..6cfbc04093dc516e37904b688c90d91d6c572a94 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalPropertyManager.cpp +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalPropertyManager.cpp @@ -187,7 +187,6 @@ void OptionalVariantManager::setAttribute(QtProperty* property, { if (dataMap.contains(property)) { - // special legacy case if (attribute == QLatin1String("enabled")) { @@ -209,11 +208,12 @@ void OptionalVariantManager::setAttribute(QtProperty* property, { dataMap[property][attribute].variant = val; emit propertyChanged(property); - emit attributeChanged(property, attribute, true); + emit attributeChanged(property, attribute, val); } return; - } + + QtVariantPropertyManager::setAttribute(property, attribute, val); } diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp index 8d7e332851fb3ca611792d174f08600a2ba99512..7fe2f3655552aa10c1de414f4f0f03e18d75fda6 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp @@ -325,6 +325,9 @@ void DetailedApplicationView::showApplicationInstance(ApplicationInstancePtr app { //nothing to do } + + appPropertyItem->setAttribute(QLatin1String("readOnly"), QVariant(appInstance->isReadOnly())); + appPropertyTopItem->addSubProperty(appPropertyItem); } }