From 9fb0a48f7daf342fecb8575cfc984696d13b5002 Mon Sep 17 00:00:00 2001 From: Naumann <uhxkb@student.kit.edu> Date: Thu, 19 Oct 2023 18:20:31 +0200 Subject: [PATCH] Make linked app instance properties non-editable --- .../ScenarioManager/gui/OptionalEdit.cpp | 20 ++++++++++++++++ .../ScenarioManager/gui/OptionalEdit.h | 12 ++++++---- .../gui/OptionalPropertyFactory.cpp | 23 ++++++++++++------- .../gui/OptionalPropertyManager.cpp | 6 ++--- .../gui/detailedapplicationview.cpp | 3 +++ 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/OptionalEdit.cpp index 4f7bc719..3e4a4cea 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 eec66bc1..2a4124f1 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 018ad9e7..c8430ee6 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 d51af51a..6cfbc040 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 8d7e3328..7fe2f365 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); } } -- GitLab