From 2ce1e94f9081e12aafce2b17acb9ce1324f9ba23 Mon Sep 17 00:00:00 2001
From: Raphael Grimm <raphael.grimm@student.kit.edu>
Date: Tue, 15 Aug 2017 13:19:27 +0200
Subject: [PATCH] Make WidgetDescription::Widget a framed widget and add a
 parameter whether the frame should be shown

---
 .../ArmarXGui/interface/WidgetDescription.ice |  1 +
 .../DefaultWidgetDescriptions.cpp             |  2 +-
 .../WidgetDescription/WidgetDescription.cpp   | 61 ++++++++++++-------
 .../WidgetDescription/WidgetDescription.h     | 11 ++--
 4 files changed, 47 insertions(+), 28 deletions(-)

diff --git a/source/ArmarXGui/interface/WidgetDescription.ice b/source/ArmarXGui/interface/WidgetDescription.ice
index 2fa8b0d2..471b6f0b 100644
--- a/source/ArmarXGui/interface/WidgetDescription.ice
+++ b/source/ArmarXGui/interface/WidgetDescription.ice
@@ -31,6 +31,7 @@ module armarx
     {
         class Widget
         {
+            bool framed = false;
         };
         sequence<Widget> WidgetSeq;
         dictionary<string,Widget> StringWidgetDictionary;
diff --git a/source/ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.cpp b/source/ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.cpp
index f948e99c..92863f93 100644
--- a/source/ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.cpp
+++ b/source/ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.cpp
@@ -119,7 +119,7 @@ namespace armarx
 
         LabelPtr makeLabel(std::string text)
         {
-            return new Label {std::move(text)};
+            return new Label {false, std::move(text)};
         }
 
         CheckBoxPtr makeCheckBox(std::string name, bool defaultValue, std::string label)
diff --git a/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.cpp b/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.cpp
index 8e0f09c5..c6ac9565 100644
--- a/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.cpp
+++ b/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.cpp
@@ -51,7 +51,7 @@ namespace armarx
         class DescribedWidget : public DescribedWidgetBase
         {
         public:
-            DescribedWidget(const WidgetPtr&, ValueChangedListenerInterface*) {}
+            DescribedWidget(const WidgetPtr& ptr, ValueChangedListenerInterface*): DescribedWidgetBase(ptr) {}
             virtual std::map<std::string, VariantBasePtr> getVariants() override
             {
                 return {};
@@ -63,7 +63,7 @@ namespace armarx
         {
         public:
             DescribedVBoxLayout(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 VBoxLayoutPtr ptr = VBoxLayoutPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -82,7 +82,7 @@ namespace armarx
         {
         public:
             DescribedHBoxLayout(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 HBoxLayoutPtr ptr = HBoxLayoutPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -100,7 +100,7 @@ namespace armarx
         {
         public:
             DescribedFormLayout(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 FormLayoutPtr ptr = FormLayoutPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -129,7 +129,7 @@ namespace armarx
         {
         public:
             DescribedFormLayoutElement(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 FormLayoutElementPtr ptr = FormLayoutElementPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -153,14 +153,13 @@ namespace armarx
         {
         public:
             DescribedGroupBox(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 GroupBoxPtr ptr = GroupBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
                 auto ltop = new QHBoxLayout;
                 setLayout(ltop);
                 layout()->setContentsMargins(0, 0, 0, 0);
-
                 QGroupBox* grp = new QGroupBox;
                 ltop->addWidget(grp);
                 grp->setTitle(QString::fromStdString(ptr->label));
@@ -176,7 +175,7 @@ namespace armarx
         class DescribedHSpacer : public DescribedWidgetBase
         {
         public:
-            DescribedHSpacer(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedHSpacer(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 setLayout(new QVBoxLayout);
                 layout()->setContentsMargins(0, 0, 0, 0);
@@ -192,7 +191,7 @@ namespace armarx
         class DescribedVSpacer : public DescribedWidgetBase
         {
         public:
-            DescribedVSpacer(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedVSpacer(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 setLayout(new QVBoxLayout);
                 layout()->setContentsMargins(0, 0, 0, 0);
@@ -208,7 +207,7 @@ namespace armarx
         class DescribedLabel : public DescribedWidgetBase
         {
         public:
-            DescribedLabel(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedLabel(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 auto ptr = LabelPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -227,7 +226,7 @@ namespace armarx
         class DescribedVariantWidget : public DescribedWidgetBase
         {
         public:
-            DescribedVariantWidget(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedVariantWidget(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 auto ptr = VariantWidgetPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -269,7 +268,7 @@ namespace armarx
         class DescribedCheckBox : public DescribedWidgetBase
         {
         public:
-            DescribedCheckBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedCheckBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 CheckBoxPtr ptr = CheckBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -298,7 +297,7 @@ namespace armarx
         class DescribedIntSpinBox : public DescribedWidgetBase
         {
         public:
-            DescribedIntSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedIntSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 IntSpinBoxPtr ptr = IntSpinBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -329,7 +328,7 @@ namespace armarx
         class DescribedDoubleSpinBox : public DescribedWidgetBase
         {
         public:
-            DescribedDoubleSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedDoubleSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 DoubleSpinBoxPtr ptr = DoubleSpinBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -362,7 +361,7 @@ namespace armarx
         class DescribedFloatSpinBox : public DescribedWidgetBase
         {
         public:
-            DescribedFloatSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedFloatSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 FloatSpinBoxPtr ptr = FloatSpinBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -395,7 +394,7 @@ namespace armarx
         class DescribedStringComboBox : public DescribedWidgetBase
         {
         public:
-            DescribedStringComboBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedStringComboBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 StringComboBoxPtr ptr = StringComboBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -428,7 +427,7 @@ namespace armarx
         class DescribedLineEdit : public DescribedWidgetBase
         {
         public:
-            DescribedLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 LineEditPtr ptr = LineEditPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -457,7 +456,7 @@ namespace armarx
         class DescribedDoubleLineEdit : public DescribedWidgetBase
         {
         public:
-            DescribedDoubleLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedDoubleLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 DoubleLineEditPtr ptr = DoubleLineEditPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -487,7 +486,7 @@ namespace armarx
         class DescribedFloatLineEdit : public DescribedWidgetBase
         {
         public:
-            DescribedFloatLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedFloatLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 FloatLineEditPtr ptr = FloatLineEditPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -518,7 +517,7 @@ namespace armarx
         class DescribedIntSlider : public DescribedWidgetBase
         {
         public:
-            DescribedIntSlider(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedIntSlider(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 IntSliderPtr ptr = IntSliderPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -549,7 +548,7 @@ namespace armarx
         class DescribedDoubleSlider : public DescribedWidgetBase
         {
         public:
-            DescribedDoubleSlider(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedDoubleSlider(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 DoubleSliderPtr ptr = DoubleSliderPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -582,7 +581,7 @@ namespace armarx
         class DescribedFloatSlider : public DescribedWidgetBase
         {
         public:
-            DescribedFloatSlider(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedFloatSlider(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 FloatSliderPtr ptr = FloatSliderPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -614,6 +613,8 @@ namespace armarx
         DescribedWidgetFactoryRegistration<DescribedFloatSlider> registerDescribedFloatSlider {FloatSlider::ice_staticId()};
 
         //functions from base classes
+        DescribedWidgetLayoutBase::DescribedWidgetLayoutBase(WidgetPtr ptr, ValueChangedListenerInterface* listener): DescribedWidgetBase(ptr), listener {listener ? listener : this} {}
+
         std::map<std::string, VariantBasePtr> DescribedWidgetLayoutBase::getVariants()
         {
             std::map<std::string, VariantBasePtr> result;
@@ -641,7 +642,7 @@ namespace armarx
             class ErrorMessageWidget : public DescribedWidgetBase
             {
             public:
-                ErrorMessageWidget(const std::string& errorMessage)
+                ErrorMessageWidget(const std::string& errorMessage): DescribedWidgetBase(nullptr)
                 {
                     setLayout(new QVBoxLayout);
                     setName(".ErrorMessageWidget");
@@ -684,5 +685,19 @@ namespace armarx
             return new ErrorMessageWidget {"makeDescribedWidget: Unknown error"};
         }
 
+        DescribedWidgetBase::DescribedWidgetBase(WidgetPtr ptr)
+        {
+            if (ptr && ptr->framed)
+            {
+                setFrameShape(QFrame::StyledPanel);
+            }
+        }
+
+        ValueChangedListenerInterface::ValueChangedListenerInterface()
+        {
+            setFrameShape(QFrame::NoFrame);
+            setFrameShadow(QFrame::Raised);
+        }
+
     }
 }
diff --git a/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.h b/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.h
index 4f2abe86..baacde93 100644
--- a/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.h
+++ b/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.h
@@ -25,7 +25,7 @@
 
 #include <functional>
 
-#include <QWidget>
+#include <QFrame>
 
 #include <ArmarXCore/core/util/Registrar.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
@@ -36,18 +36,21 @@ namespace armarx
 {
     namespace WidgetDescription
     {
-        class ValueChangedListenerInterface: public QWidget
+        class ValueChangedListenerInterface: public QFrame
         {
             Q_OBJECT
+        public:
+            ValueChangedListenerInterface();
         public slots:
             virtual void valueChangedSlot(std::string name, VariantBasePtr value) {}
         };
 
-
         class DescribedWidgetBase: public ValueChangedListenerInterface
         {
             Q_OBJECT
         public:
+            DescribedWidgetBase(WidgetPtr ptr);
+
             virtual std::map<std::string, VariantBasePtr> getVariants()
             {
                 return {};
@@ -74,7 +77,7 @@ namespace armarx
         {
             Q_OBJECT
         public:
-            DescribedWidgetLayoutBase(ValueChangedListenerInterface* listener): listener {listener ? listener : this} {}
+            DescribedWidgetLayoutBase(WidgetPtr ptr, ValueChangedListenerInterface* listener);
             virtual std::map<std::string, VariantBasePtr> getVariants() override;
             virtual void valueChangedSlot(std::string name, VariantBasePtr value) override
             {
-- 
GitLab