MIRA
PropertyEditorDelegateUtils.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 by
3  * MetraLabs GmbH (MLAB), GERMANY
4  * and
5  * Neuroinformatics and Cognitive Robotics Labs (NICR) at TU Ilmenau, GERMANY
6  * All rights reserved.
7  *
8  * Contact: info@mira-project.org
9  *
10  * Commercial Usage:
11  * Licensees holding valid commercial licenses may use this file in
12  * accordance with the commercial license agreement provided with the
13  * software or, alternatively, in accordance with the terms contained in
14  * a written agreement between you and MLAB or NICR.
15  *
16  * GNU General Public License Usage:
17  * Alternatively, this file may be used under the terms of the GNU
18  * General Public License version 3.0 as published by the Free Software
19  * Foundation and appearing in the file LICENSE.GPL3 included in the
20  * packaging of this file. Please review the following information to
21  * ensure the GNU General Public License version 3.0 requirements will be
22  * met: http://www.gnu.org/copyleft/gpl.html.
23  * Alternatively you may (at your option) use any later version of the GNU
24  * General Public License if such license has been publicly approved by
25  * MLAB and NICR (or its successors, if any).
26  *
27  * IN NO EVENT SHALL "MLAB" OR "NICR" BE LIABLE TO ANY PARTY FOR DIRECT,
28  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
29  * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF "MLAB" OR
30  * "NICR" HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * "MLAB" AND "NICR" SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
33  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
34  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
35  * ON AN "AS IS" BASIS, AND "MLAB" AND "NICR" HAVE NO OBLIGATION TO
36  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS.
37  */
38 
47 #ifndef _MIRA_PROPERTYEDITORDELEGATEUTILS_H_
48 #define _MIRA_PROPERTYEDITORDELEGATEUTILS_H_
49 
50 #include <QStyle>
51 #include <QWidget>
52 
54 
55 #include <widgets/PropertyEditor.h>
56 
57 class QRadioButton;
58 class QPushButton;
59 
60 namespace mira {
61 
63 
64 // Return an icon containing a true/false indicator
65 QIcon drawBinaryIndicator(bool value, QStyle::PrimitiveElement element);
66 
67 // Compose 2 icons next to each other
68 QIcon composeIcon(const QIcon& left, const QIcon& right);
69 
71 
72 // Interface for editor widgets used by PropertyEditor delegates
74 {
75 public:
76  IPropertyDelegate_Edit(PropertyNode* p) : property(p) {}
77  virtual ~IPropertyDelegate_Edit() = default;
78 public:
79  // (re-)init widget from property value
80  // must be called after constructor, allowing use of virtual methods
81  virtual void initFromProperty() = 0;
82 
83  // in a derived widget, this shall be overridden by a signal and
84  // emitted when the widget changes the property value
85  virtual void propertyEdited() = 0;
86 
87 protected:
88  const PropertyNode* propertyNode() const { return property; }
89 
90  // encapsulate non-const access to the PropertyNode,
91  // to do the exception handling (and potentially also define
92  // specific timeout) in a single place
93 
94  void setPropertyFromString(const std::string& s);
95  void setPropertyFromJSON(const JSONValue& v);
96 
97  // note: avoid using this method, prefer setting through string/JSON (above)!
98  // e.g. to make a delegate for T applicable to a property of type boost::optional<T>
99  template <typename T>
101  {
102  try {
103  p->set(v);
104  }
105  catch(XIO& ex) {
106  MIRA_LOG(WARNING) << "Failed setting property: " << ex.message();
107  }
108  }
109 
110 private:
111  PropertyNode* property;
112 };
113 
115 
116 // Interface for PropertyEditor delegates wrapping around other delegates
118 {
119 public:
120  virtual ~IPropertyDelegateWrapper() = default;
121 public:
122  // create a copy, which can then be used to attach a specific other delegate
123  virtual PropertyEditor::DelegatePtr clone() const = 0;
124 
125  // attach another delegate
126  virtual void wrap(PropertyEditor::DelegatePtr d) = 0;
127 };
128 
130 
131 class PropertyNode;
132 
133 // An editor for properties of type boost::optional<...>
135 {
136  Q_OBJECT;
137 public:
138  PropertyDelegate_OptionalEditor(PropertyNode* p, QWidget* wrapped, QWidget* parent);
139 
140  void initFromProperty() override;
141 public slots:
142  void setNone();
143  void valueSet();
144 signals:
145  void propertyEdited() override;
146 protected:
147  QRadioButton* hasValueIndicator;
148  QPushButton* setNoneButton;
150  QWidget* wrappedWidget;
151 };
153 
154 }
155 
156 #endif
Abstract base class for all derived property node classes.
Definition: PropertyNode.h:212
QWidget * wrappedWidget
Definition: PropertyEditorDelegateUtils.h:150
boost::shared_ptr< Delegate > DelegatePtr
Definition: PropertyEditor.h:83
specialize cv::DataType for our ImgPixel and inherit from cv::DataType<Vec>
Definition: IOService.h:67
#define MIRA_LOG(level)
Use this macro to log data.
Definition: LoggingCore.h:529
QRadioButton * hasValueIndicator
Definition: PropertyEditorDelegateUtils.h:147
Definition: PropertyEditorDelegateUtils.h:73
QPushButton * setNoneButton
Definition: PropertyEditorDelegateUtils.h:148
QIcon composeIcon(const QIcon &left, const QIcon &right)
virtual PropertyEditor::DelegatePtr clone() const =0
Serializer that handles properties and creates PropertyNodes.
virtual ~IPropertyDelegate_Edit()=default
virtual void wrap(PropertyEditor::DelegatePtr d)=0
const PropertyNode * propertyNode() const
Definition: PropertyEditorDelegateUtils.h:88
Definition: PropertyEditorDelegateUtils.h:117
Definition: PropertyEditorDelegateUtils.h:134
IPropertyDelegate_Edit * edit
Definition: PropertyEditorDelegateUtils.h:149
Definition: LoggingCore.h:76
virtual void propertyEdited()=0
Declaration of PropertyEditor.
QIcon drawBinaryIndicator(bool value, QStyle::PrimitiveElement element)
PropertyDelegate_OptionalEditor(PropertyNode *p, QWidget *wrapped, QWidget *parent)
IPropertyDelegate_Edit(PropertyNode *p)
Definition: PropertyEditorDelegateUtils.h:76
void setPropertyFromString(const std::string &s)
virtual void set(const value_type &value, const Duration &timeout=Duration::milliseconds(100))=0
Sets the property to the specified value.
json::Value JSONValue
Imports the json::Value type into mira namespace.
Definition: JSON.h:361
virtual ~IPropertyDelegateWrapper()=default
Abstract base class for all typed property nodes.
Definition: PropertyNode.h:72
virtual void initFromProperty()=0
void setPropertyFromJSON(const JSONValue &v)
void setPropertyFromValue(TypedPropertyNode< T > *p, const T &v)
Definition: PropertyEditorDelegateUtils.h:100