LayoutWidgets.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Basic.h"
4 
6 {
7  template <typename Derived>
8  struct ChildrenMixin
9  {
10  Derived&
12  {
13  Derived& this_ = *static_cast<Derived*>(this);
14  this_.widget().children.push_back(child);
15  return this_;
16  }
17 
18  Derived&
20  {
21  Derived& this_ = *static_cast<Derived*>(this);
22  this_.widget().children.insert(this_.widget().children.begin(), child);
23  return this_;
24  }
25 
26  Derived&
28  {
29  return appendChild(child);
30  }
31 
32  Derived&
33  addChildren(std::vector<WidgetPtr> const& children)
34  {
35  Derived& this_ = *static_cast<Derived*>(this);
36  this_.widget().children.insert(
37  this_.widget().children.end(), children.begin(), children.end());
38  return this_;
39  }
40 
41  Derived&
42  children(std::vector<WidgetPtr> const& children)
43  {
44  Derived& this_ = *static_cast<Derived*>(this);
45  this_.widget().children = children;
46  return this_;
47  }
48 
49  Derived&
51  {
52  Derived& this_ = *static_cast<Derived*>(this);
53  this_.widget().children = {child};
54  return this_;
55  }
56 
57  const WidgetPtr&
58  child(std::size_t i)
59  {
60  Derived& this_ = *static_cast<Derived*>(this);
61  return this_.widget().children.at(i);
62  }
63 
64  Derived&
65  addTextLabel(std::string const& text)
66  {
67  return appendChild(new Label("", makeValue(text), {}, {}, {}));
68  }
69 
70  Derived&
72  {
73  return appendChild(new HSpacer);
74  }
75 
76  Derived&
78  {
79  return appendChild(new VSpacer);
80  }
81 
82  Derived&
84  {
85  return appendChild(new Widget);
86  }
87 
88  Derived&
90  {
91  return appendChild(new HLine);
92  }
93 
94  Derived&
96  {
97  return appendChild(new VLine);
98  }
99  };
100 
102  public NoValueMixin<HBoxLayout, HBoxLayoutBuilder>,
103  public ChildrenMixin<HBoxLayoutBuilder>
104  {
105  using NoValueMixin::NoValueMixin;
106  };
107 
109  public NoValueMixin<VBoxLayout, VBoxLayoutBuilder>,
110  public ChildrenMixin<VBoxLayoutBuilder>
111  {
112  using NoValueMixin::NoValueMixin;
113  };
114 
116  public NoValueMixin<SimpleGridLayout, SimpleGridLayoutBuilder>,
117  public ChildrenMixin<SimpleGridLayoutBuilder>
118  {
120  using NoValueMixin::NoValueMixin;
121 
123  cols(int n)
124  {
125  widget().columns = n;
126  return *this;
127  }
128 
130  columns(int n)
131  {
132  widget().columns = n;
133  return *this;
134  }
135 
136  using Base::addChild;
137 
139  addChild(WidgetPtr const& child, int colspan)
140  {
141  SimpleGridLayoutSpanningChildPtr c = new SimpleGridLayoutSpanningChild;
142  c->children.emplace_back(child);
143  c->columns = colspan;
144  return appendChild(c);
145  }
146 
147  using Base::addTextLabel;
148 
150  addTextLabel(std::string const& text, int colspan)
151  {
152  return addChild(new Label("", makeValue(text), {}, {}, {}), colspan);
153  }
154 
155  using Base::addHSpacer;
156 
158  addHSpacer(int colspan)
159  {
160  return addChild(new HSpacer, colspan);
161  }
162 
163  using Base::addVSpacer;
164 
166  addVSpacer(int colspan)
167  {
168  return addChild(new VSpacer, colspan);
169  }
170 
171  using Base::addEmptyWidget;
172 
174  addEmptyWidget(int colspan)
175  {
176  return addChild(new Widget, colspan);
177  }
178 
179  using Base::addHLine;
180 
182  addHLine(int colspan)
183  {
184  return addChild(new HLine, colspan);
185  }
186 
187  using Base::addVLine;
188 
190  addVLine(int colspan)
191  {
192  return addChild(new VLine, colspan);
193  }
194  };
195 
197  public NoValueMixin<GroupBox, GroupBoxBuilder>,
198  public ChildrenMixin<GroupBoxBuilder>,
199  public LabelMixin<GroupBoxBuilder>
200  {
201  GroupBoxBuilder(const std::string& name) : NoValueMixin(name)
202  {
203  label(name);
204  }
205 
207  collapsed(bool isCollapsed = true)
208  {
209  this->widget().collapsed = isCollapsed;
210  return *this;
211  }
212  };
213 
214  struct GridLayoutBuilder : public NoValueMixin<GridLayout, GridLayoutBuilder>
215  //can't use ChildrenMixin since it is missing the index information
216  {
217  using NoValueMixin::NoValueMixin;
218 
220  addChild(WidgetPtr const& child, int row, int col, int spanRow = 1, int spanCol = 1)
221  {
222  this->widget().children.emplace_back(child);
223  this->widget().childrenLayoutInfo.push_back({row, col, spanRow, spanCol});
224  return *this;
225  }
226 
228  addTextLabel(std::string const& text, int row, int col, int spanRow = 1, int spanCol = 1)
229  {
230  return addChild(new Label("", makeValue(text), {}, {}, {}), row, col, spanRow, spanCol);
231  }
232 
234  addHSpacer(int row, int col, int spanRow = 1, int spanCol = 1)
235  {
236  return addChild(new HSpacer, row, col, spanRow, spanCol);
237  }
238 
240  addVSpacer(int row, int col, int spanRow = 1, int spanCol = 1)
241  {
242  return addChild(new VSpacer, row, col, spanRow, spanCol);
243  }
244 
246  addEmptyWidget(int row, int col, int spanRow = 1, int spanCol = 1)
247  {
248  return addChild(new Widget, row, col, spanRow, spanCol);
249  }
250 
252  addHLine(int row, int col, int spanRow = 1, int spanCol = 1)
253  {
254  return addChild(new HLine, row, col, spanRow, spanCol);
255  }
256 
258  addVLine(int row, int col, int spanRow = 1, int spanCol = 1)
259  {
260  return addChild(new VLine, row, col, spanRow, spanCol);
261  }
262  };
263 } // namespace armarx::RemoteGui::detail
264 
265 namespace armarx::RemoteGui
266 {
267  inline detail::HBoxLayoutBuilder
268  makeHBoxLayout(std::string const& name = "")
269  {
270  return detail::HBoxLayoutBuilder(name);
271  }
272 
273  inline detail::SimpleGridLayoutBuilder
274  makeSimpleGridLayout(std::string const& name = "")
275  {
276  return detail::SimpleGridLayoutBuilder(name);
277  }
278 
279  inline detail::GridLayoutBuilder
280  makeGridLayout(std::string const& name = "")
281  {
282  return detail::GridLayoutBuilder(name);
283  }
284 
285  inline detail::VBoxLayoutBuilder
286  makeVBoxLayout(std::string const& name = "")
287  {
288  return detail::VBoxLayoutBuilder(name);
289  }
290 
291  inline detail::GroupBoxBuilder
292  makeGroupBox(std::string const& name = "")
293  {
294  return detail::GroupBoxBuilder(name);
295  }
296 } // namespace armarx::RemoteGui
armarx::RemoteGui::detail::GroupBoxBuilder
Definition: LayoutWidgets.h:196
armarx::RemoteGui::detail::ChildrenMixin::child
Derived & child(WidgetPtr const &child)
Definition: LayoutWidgets.h:50
armarx::RemoteGui::detail::GridLayoutBuilder::addTextLabel
GridLayoutBuilder & addTextLabel(std::string const &text, int row, int col, int spanRow=1, int spanCol=1)
Definition: LayoutWidgets.h:228
armarx::RemoteGui::makeVBoxLayout
detail::VBoxLayoutBuilder makeVBoxLayout(std::string const &name="")
Definition: LayoutWidgets.h:286
armarx::RemoteGui::detail::ChildrenMixin
Definition: LayoutWidgets.h:8
armarx::RemoteGui::makeHBoxLayout
detail::HBoxLayoutBuilder makeHBoxLayout(std::string const &name="")
Definition: LayoutWidgets.h:268
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::addEmptyWidget
SimpleGridLayoutBuilder & addEmptyWidget(int colspan)
Definition: LayoutWidgets.h:174
armarx::RemoteGui::detail::ChildrenMixin::child
const WidgetPtr & child(std::size_t i)
Definition: LayoutWidgets.h:58
Basic.h
armarx::RemoteGui::detail::HBoxLayoutBuilder
Definition: LayoutWidgets.h:101
armarx::RemoteGui::detail::VBoxLayoutBuilder
Definition: LayoutWidgets.h:108
armarx::RemoteGui
Definition: LightweightRemoteGuiComponentPlugin.h:30
armarx::RemoteGui::detail::GridLayoutBuilder::addHSpacer
GridLayoutBuilder & addHSpacer(int row, int col, int spanRow=1, int spanCol=1)
Definition: LayoutWidgets.h:234
armarx::RemoteGui::detail
Definition: Basic.h:10
armarx::RemoteGui::Client::HSpacer
Definition: Widgets.h:209
armarx::RemoteGui::detail::ChildrenMixin::appendChild
Derived & appendChild(WidgetPtr const &child)
Definition: LayoutWidgets.h:11
armarx::RemoteGui::detail::GridLayoutBuilder
Definition: LayoutWidgets.h:214
armarx::RemoteGui::detail::ChildrenMixin::addVLine
Derived & addVLine()
Definition: LayoutWidgets.h:95
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::addChild
SimpleGridLayoutBuilder & addChild(WidgetPtr const &child, int colspan)
Definition: LayoutWidgets.h:139
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::RemoteGui::detail::LabelMixin
Definition: Basic.h:213
magic_enum::detail::n
constexpr auto n() noexcept
Definition: magic_enum.hpp:418
armarx::RemoteGui::Client::VSpacer
Definition: Widgets.h:204
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::columns
SimpleGridLayoutBuilder & columns(int n)
Definition: LayoutWidgets.h:130
armarx::RemoteGui::makeSimpleGridLayout
detail::SimpleGridLayoutBuilder makeSimpleGridLayout(std::string const &name="")
Definition: LayoutWidgets.h:274
armarx::RemoteGui::detail::ChildrenMixin::addTextLabel
Derived & addTextLabel(std::string const &text)
Definition: LayoutWidgets.h:65
armarx::RemoteGui::detail::GridLayoutBuilder::addVSpacer
GridLayoutBuilder & addVSpacer(int row, int col, int spanRow=1, int spanCol=1)
Definition: LayoutWidgets.h:240
visionx::voxelgrid::Label
uint32_t Label
Type of an object label.
Definition: types.h:6
armarx::RemoteGui::detail::GroupBoxBuilder::collapsed
GroupBoxBuilder & collapsed(bool isCollapsed=true)
Definition: LayoutWidgets.h:207
armarx::RemoteGui::detail::WidgetMixin::widget
WidgetT & widget()
Definition: Basic.h:54
armarx::RemoteGui::detail::GridLayoutBuilder::addVLine
GridLayoutBuilder & addVLine(int row, int col, int spanRow=1, int spanCol=1)
Definition: LayoutWidgets.h:258
armarx::RemoteGui::Client::Widget
Definition: Widgets.h:21
armarx::RemoteGui::detail::ChildrenMixin::addChild
Derived & addChild(WidgetPtr const &child)
Definition: LayoutWidgets.h:27
armarx::RemoteGui::detail::GridLayoutBuilder::addHLine
GridLayoutBuilder & addHLine(int row, int col, int spanRow=1, int spanCol=1)
Definition: LayoutWidgets.h:252
armarx::RemoteGui::detail::ChildrenMixin::prependChild
Derived & prependChild(WidgetPtr const &child)
Definition: LayoutWidgets.h:19
armarx::RemoteGui::detail::NoValueMixin
Definition: Basic.h:61
armarx::RemoteGui::detail::ChildrenMixin::addHLine
Derived & addHLine()
Definition: LayoutWidgets.h:89
armarx::RemoteGui::detail::LabelMixin< GroupBoxBuilder >::label
GroupBoxBuilder & label(std::string const &label)
Definition: Basic.h:216
armarx::RemoteGui::makeGroupBox
detail::GroupBoxBuilder makeGroupBox(std::string const &name="")
Definition: LayoutWidgets.h:292
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::addVLine
SimpleGridLayoutBuilder & addVLine(int colspan)
Definition: LayoutWidgets.h:190
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::addHLine
SimpleGridLayoutBuilder & addHLine(int colspan)
Definition: LayoutWidgets.h:182
armarx::RemoteGui::detail::SimpleGridLayoutBuilder
Definition: LayoutWidgets.h:115
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::addTextLabel
SimpleGridLayoutBuilder & addTextLabel(std::string const &text, int colspan)
Definition: LayoutWidgets.h:150
armarx::RemoteGui::detail::ChildrenMixin::addHSpacer
Derived & addHSpacer()
Definition: LayoutWidgets.h:71
armarx::RemoteGui::makeValue
ValueVariant makeValue(bool value)
Definition: Storage.cpp:144
armarx::RemoteGui::detail::ChildrenMixin::children
Derived & children(std::vector< WidgetPtr > const &children)
Definition: LayoutWidgets.h:42
armarx::RemoteGui::detail::ChildrenMixin::addVSpacer
Derived & addVSpacer()
Definition: LayoutWidgets.h:77
armarx::WidgetDescription::WidgetPtr
::IceInternal::Handle<::armarx::WidgetDescription::Widget > WidgetPtr
Definition: NJointControllerBase.h:67
armarx::RemoteGui::detail::GridLayoutBuilder::addChild
GridLayoutBuilder & addChild(WidgetPtr const &child, int row, int col, int spanRow=1, int spanCol=1)
Definition: LayoutWidgets.h:220
armarx::RemoteGui::detail::ChildrenMixin::addChildren
Derived & addChildren(std::vector< WidgetPtr > const &children)
Definition: LayoutWidgets.h:33
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::cols
SimpleGridLayoutBuilder & cols(int n)
Definition: LayoutWidgets.h:123
armarx::RemoteGui::makeGridLayout
detail::GridLayoutBuilder makeGridLayout(std::string const &name="")
Definition: LayoutWidgets.h:280
armarx::RemoteGui::detail::GridLayoutBuilder::addEmptyWidget
GridLayoutBuilder & addEmptyWidget(int row, int col, int spanRow=1, int spanCol=1)
Definition: LayoutWidgets.h:246
armarx::RemoteGui::detail::ChildrenMixin::addEmptyWidget
Derived & addEmptyWidget()
Definition: LayoutWidgets.h:83
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::addHSpacer
SimpleGridLayoutBuilder & addHSpacer(int colspan)
Definition: LayoutWidgets.h:158
armarx::RemoteGui::detail::SimpleGridLayoutBuilder::addVSpacer
SimpleGridLayoutBuilder & addVSpacer(int colspan)
Definition: LayoutWidgets.h:166
armarx::RemoteGui::detail::GroupBoxBuilder::GroupBoxBuilder
GroupBoxBuilder(const std::string &name)
Definition: LayoutWidgets.h:201