WidgetDescription.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package ArmarXGui::ArmarXObjects::WidgetDescription
17  * @author Raphael Grimm ( raphael dot grimm at kit dot edu )
18  * @date 2017
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #pragma once
24 
25 #include <functional>
26 
27 #include <QFrame>
28 
31 #include <ArmarXCore/interface/observers/VariantBase.h>
32 
33 #include <ArmarXGui/interface/WidgetDescription.h>
34 
36 {
37  class ValueChangedListenerInterface : public QFrame
38  {
39  Q_OBJECT
40  public:
42  public slots:
43 
44  virtual void
46  {
47  }
48  };
49 
51  {
52  Q_OBJECT
53  public:
55 
56  virtual std::map<std::string, VariantBasePtr>
58  {
59  return {};
60  }
61 
62  virtual std::string
63  getName() const
64  {
65  return objectName().toStdString();
66  }
67 
68  virtual void
69  setName(const std::string& name)
70  {
71  setObjectName(QString::fromStdString(name));
72  }
73 
74  signals:
75  void valueChangedSignal(std::string name, VariantBasePtr value);
76  void variantWidgetUpdatedSignal(std::string name,
77  VariantWidgetContent::VariantWidgetContentBasePtr data);
78  public slots:
79 
80  virtual void
81  variantWidgetUpdatedSlot(std::string name,
82  VariantWidgetContent::VariantWidgetContentBasePtr data)
83  {
84  }
85 
86  protected slots:
87 
88  virtual void
90  {
91  }
92  };
93 
94  //has to be here since it has the Q_OBJECT macro
96  {
97  Q_OBJECT
98  public:
100  std::map<std::string, VariantBasePtr> getVariants() override;
101 
102  void
103  valueChangedSlot(std::string name, VariantBasePtr value) override
104  {
105  emit valueChangedSignal(name, value);
106  }
107 
108  void
109  variantWidgetUpdatedSlot(std::string name,
110  VariantWidgetContent::VariantWidgetContentBasePtr data) override
111  {
112  emit variantWidgetUpdatedSignal(name, data);
113  }
114 
115  virtual DescribedWidgetBase* addChild(const WidgetPtr& childPtr);
116 
117  protected:
118  std::vector<DescribedWidgetBase*> children;
120  };
121 
124 
125  template <class T>
127  {
128  DescribedWidgetFactoryRegistration(const std::string& type)
129  {
131  type,
132  [type](const WidgetPtr& p, ValueChangedListenerInterface* listener)
133  {
134  ARMARX_CHECK_EXPRESSION(p) << "Passed WidgetPtr is null";
135  ARMARX_CHECK_EXPRESSION(p->ice_id() == type) << p->ice_id() << " == " << type;
136  // ARMARX_DEBUG << "Making DescribedWidget for type '" << type << "'";
137  return new T(p, listener);
138  });
139  }
140  };
141 
142  DescribedWidgetBase* makeDescribedWidget(const WidgetPtr& p,
143  ValueChangedListenerInterface* listener = nullptr);
144 } // namespace armarx::WidgetDescription
armarx::WidgetDescription::DescribedWidgetLayoutBase::addChild
virtual DescribedWidgetBase * addChild(const WidgetPtr &childPtr)
Definition: WidgetDescription.cpp:877
armarx::WidgetDescription::DescribedWidgetBase::setName
virtual void setName(const std::string &name)
Definition: WidgetDescription.h:69
armarx::WidgetDescription::DescribedWidgetLayoutBase::valueChangedSlot
void valueChangedSlot(std::string name, VariantBasePtr value) override
Definition: WidgetDescription.h:103
armarx::WidgetDescription::DescribedWidgetLayoutBase::listener
ValueChangedListenerInterface * listener
Definition: WidgetDescription.h:119
armarx::WidgetDescription::DescribedWidgetLayoutBase::children
std::vector< DescribedWidgetBase * > children
Definition: WidgetDescription.h:118
armarx::Registrar::registerElement
static void registerElement(const KeyType &key, RegisteredType element)
Registers an element.
Definition: Registrar.h:108
armarx::WidgetDescription::DescribedWidgetBase::variantWidgetUpdatedSignal
void variantWidgetUpdatedSignal(std::string name, VariantWidgetContent::VariantWidgetContentBasePtr data)
armarx::WidgetDescription::ValueChangedListenerInterface
Definition: WidgetDescription.h:37
IceInternal::Handle<::armarx::VariantBase >
armarx::WidgetDescription
Definition: DefaultWidgetDescriptions.cpp:27
armarx::WidgetDescription::DescribedWidgetLayoutBase::getVariants
std::map< std::string, VariantBasePtr > getVariants() override
Definition: WidgetDescription.cpp:866
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:855
armarx::WidgetDescription::DescribedWidgetBase::variantWidgetUpdatedSlot
virtual void variantWidgetUpdatedSlot(std::string name, VariantWidgetContent::VariantWidgetContentBasePtr data)
Definition: WidgetDescription.h:81
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::WidgetDescription::DescribedWidgetBase
Definition: WidgetDescription.h:50
armarx::WidgetDescription::DescribedWidgetBase::getName
virtual std::string getName() const
Definition: WidgetDescription.h:63
armarx::WidgetDescription::DescribedWidgetBase::DescribedWidgetBase
DescribedWidgetBase(WidgetPtr ptr)
Definition: WidgetDescription.cpp:945
armarx::WidgetDescription::DescribedWidgetBase::valueChangedSignal
void valueChangedSignal(std::string name, VariantBasePtr value)
armarx::WidgetDescription::DescribedWidgetLayoutBase::variantWidgetUpdatedSlot
void variantWidgetUpdatedSlot(std::string name, VariantWidgetContent::VariantWidgetContentBasePtr data) override
Definition: WidgetDescription.h:109
Registrar.h
armarx::WidgetDescription::DescribedWidgetFactoryRegistration::DescribedWidgetFactoryRegistration
DescribedWidgetFactoryRegistration(const std::string &type)
Definition: WidgetDescription.h:128
armarx::WidgetDescription::ValueChangedListenerInterface::valueChangedSlot
virtual void valueChangedSlot(std::string name, VariantBasePtr value)
Definition: WidgetDescription.h:45
armarx::WidgetDescription::makeDescribedWidget
DescribedWidgetBase * makeDescribedWidget(const WidgetPtr &p, ValueChangedListenerInterface *listener)
Definition: WidgetDescription.cpp:892
armarx::WidgetDescription::ValueChangedListenerInterface::ValueChangedListenerInterface
ValueChangedListenerInterface()
Definition: WidgetDescription.cpp:953
armarx::WidgetDescription::WidgetPtr
::IceInternal::Handle<::armarx::WidgetDescription::Widget > WidgetPtr
Definition: NJointControllerBase.h:67
ExpressionException.h
armarx::WidgetDescription::DescribedWidgetFactoryRegistration
Definition: WidgetDescription.h:126
ARMARX_CHECK_EXPRESSION
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
Definition: ExpressionException.h:73
armarx::Registrar
Stores key object pairs.
Definition: Registrar.h:62
armarx::WidgetDescription::DescribedWidgetLayoutBase::DescribedWidgetLayoutBase
DescribedWidgetLayoutBase(WidgetPtr ptr, ValueChangedListenerInterface *listener)
Definition: WidgetDescription.cpp:859
armarx::WidgetDescription::DescribedWidgetBase::getVariants
virtual std::map< std::string, VariantBasePtr > getVariants()
Definition: WidgetDescription.h:57
T
float T
Definition: UnscentedKalmanFilterTest.cpp:38
armarx::WidgetDescription::DescribedWidgetLayoutBase
Definition: WidgetDescription.h:95
armarx::WidgetDescription::DescribedWidgetBase::contentUpdated
virtual void contentUpdated()
Definition: WidgetDescription.h:89