VariantWidget.cpp
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::VariantWidget
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 #include "VariantWidget.h"
24 
25 #include <QFormLayout>
26 #include <QLabel>
27 #include <QTableWidget>
28 #include <QVBoxLayout>
29 
32 #include <ArmarXCore/interface/observers/Complex.h>
33 #include <ArmarXCore/interface/observers/Matrix.h>
34 #include <ArmarXCore/interface/observers/Timestamp.h>
35 #include <ArmarXCore/interface/observers/VariantContainers.h>
36 
38 {
40  {
41  public:
42  enum class DisplayOption
43  {
44  boolalpha,
45  Boolalpha,
46  BOOLALPHA,
47  number,
48  XO,
49  X
50  };
51 
52  BoolVariantDataWidget(const VariantDataPtr& v) : disp{DisplayOption::Boolalpha}
53  {
54  auto l = new QVBoxLayout;
55  l->setContentsMargins(0, 0, 0, 0);
56  setLayout(l);
57  label = new QLabel;
58  l->addWidget(label);
59  update(v);
60  }
61  void
62  update(const VariantDataPtr& p) override
63  {
64  BoolVariantDataPtr v = BoolVariantDataPtr::dynamicCast(p);
66  switch (disp)
67  {
69  label->setText(v->b ? "true" : "false");
70  break;
72  label->setText(v->b ? "True" : "False");
73  break;
75  label->setText(v->b ? "TRUE" : "FALSE");
76  break;
78  label->setText(v->b ? "1" : "0");
79  break;
80  case DisplayOption::XO:
81  label->setText(v->b ? "X" : "O");
82  break;
83  case DisplayOption::X:
84  label->setText(v->b ? "X" : " ");
85  break;
86  }
87  }
88 
89  private:
90  QLabel* label;
91  DisplayOption disp;
92  };
94  BoolVariantData::ice_staticId()};
95 
97  {
98  public:
99  DoubleVariantDataWidget(const VariantDataPtr& v)
100  {
101  auto l = new QVBoxLayout;
102  l->setContentsMargins(0, 0, 0, 0);
103  setLayout(l);
104  label = new QLabel;
105  l->addWidget(label);
106  update(v);
107  }
108  void
109  update(const VariantDataPtr& p) override
110  {
111  DoubleVariantDataPtr v = DoubleVariantDataPtr::dynamicCast(p);
113  label->setText(QString::number(v->d));
114  }
115 
116  private:
117  QLabel* label;
118  };
120  DoubleVariantData::ice_staticId()};
121 
123  {
124  public:
125  FloatVariantDataWidget(const VariantDataPtr& v)
126  {
127  auto l = new QVBoxLayout;
128  l->setContentsMargins(0, 0, 0, 0);
129  setLayout(l);
130  label = new QLabel;
131  l->addWidget(label);
132  update(v);
133  }
134  void
135  update(const VariantDataPtr& p) override
136  {
137  FloatVariantDataPtr v = FloatVariantDataPtr::dynamicCast(p);
139  label->setText(QString::number(v->f));
140  }
141 
142  private:
143  QLabel* label;
144  };
146  FloatVariantData::ice_staticId()};
147 
149  {
150  public:
151  IntVariantDataWidget(const VariantDataPtr& v)
152  {
153  auto l = new QVBoxLayout;
154  l->setContentsMargins(0, 0, 0, 0);
155  setLayout(l);
156  label = new QLabel;
157  l->addWidget(label);
158  update(v);
159  }
160  void
161  update(const VariantDataPtr& p) override
162  {
163  IntVariantDataPtr v = IntVariantDataPtr::dynamicCast(p);
165  label->setText(QString::number(v->n));
166  }
167 
168  private:
169  QLabel* label;
170  };
172  IntVariantData::ice_staticId()};
173 
175  {
176  public:
177  LongVariantDataWidget(const VariantDataPtr& v)
178  {
179  auto l = new QVBoxLayout;
180  l->setContentsMargins(0, 0, 0, 0);
181  setLayout(l);
182  label = new QLabel;
183  l->addWidget(label);
184  update(v);
185  }
186  void
187  update(const VariantDataPtr& p) override
188  {
189  LongVariantDataPtr v = LongVariantDataPtr::dynamicCast(p);
191  label->setText(QString::number(v->n));
192  }
193 
194  private:
195  QLabel* label;
196  };
198  LongVariantData::ice_staticId()};
199 
200 
202  {
203  public:
204  StringVariantDataWidget(const VariantDataPtr& v)
205  {
206  auto l = new QVBoxLayout;
207  l->setContentsMargins(0, 0, 0, 0);
208  setLayout(l);
209  label = new QLabel;
210  l->addWidget(label);
211  update(v);
212  }
213  void
214  update(const VariantDataPtr& p) override
215  {
216  StringVariantDataPtr v = StringVariantDataPtr::dynamicCast(p);
218  label->setText(QString::fromStdString(v->s));
219  }
220 
221  private:
222  QLabel* label;
223  };
225  StringVariantData::ice_staticId()};
226 
228  {
229  public:
230  TimestampBaseWidget(const VariantDataPtr& v) : suffix{"us"}
231  {
232  auto l = new QVBoxLayout;
233  l->setContentsMargins(0, 0, 0, 0);
234  setLayout(l);
235  label = new QLabel;
236  l->addWidget(label);
237  update(v);
238  }
239  void
240  update(const VariantDataPtr& p) override
241  {
242  TimestampBasePtr v = TimestampBasePtr::dynamicCast(p);
244  label->setText(QString::number(v->timestamp) + suffix);
245  }
246 
247  private:
248  QLabel* label;
249  QString suffix;
250  };
252  TimestampBase::ice_staticId()};
253 
255  {
256  public:
257  ComplexFloatBaseWidget(const VariantDataPtr& v)
258  {
259  auto l = new QFormLayout;
260  l->setContentsMargins(0, 0, 0, 0);
261  setLayout(l);
262  labelR = new QLabel;
263  labelI = new QLabel;
264  l->addRow("Real", labelR);
265  l->addRow("Imag", labelI);
266  update(v);
267  }
268  void
269  update(const VariantDataPtr& p) override
270  {
271  ComplexFloatBasePtr v = ComplexFloatBasePtr::dynamicCast(p);
273  labelR->setText(QString::number(v->real));
274  labelI->setText(QString::number(v->imag));
275  }
276 
277  private:
278  QLabel* labelR;
279  QLabel* labelI;
280  };
282  ComplexFloatBase::ice_staticId()};
283 
285  {
286  public:
287  ComplexDoubleBaseWidget(const VariantDataPtr& v)
288  {
289  auto l = new QFormLayout;
290  l->setContentsMargins(0, 0, 0, 0);
291  setLayout(l);
292  labelR = new QLabel;
293  labelI = new QLabel;
294  l->addRow("Real", labelR);
295  l->addRow("Imag", labelI);
296  update(v);
297  }
298  void
299  update(const VariantDataPtr& p) override
300  {
301  ComplexDoubleBasePtr v = ComplexDoubleBasePtr::dynamicCast(p);
303  labelR->setText(QString::number(v->real));
304  labelI->setText(QString::number(v->imag));
305  }
306 
307  private:
308  QLabel* labelR;
309  QLabel* labelI;
310  };
312  ComplexDoubleBase::ice_staticId()};
313 
315  {
316  public:
317  MatrixDoubleBaseWidget(const VariantDataPtr& v)
318  {
319  auto l = new QVBoxLayout;
320  l->setContentsMargins(0, 0, 0, 0);
321  setLayout(l);
322  table = new QTableWidget;
323  l->addWidget(table);
324  update(v);
325  }
326  void
327  update(const VariantDataPtr& p) override
328  {
329  MatrixDoubleBasePtr v = MatrixDoubleBasePtr::dynamicCast(p);
331  table->setRowCount(v->rows);
332  table->setColumnCount(v->cols);
333  for (int row = 0; row < v->rows; ++row)
334  {
335  for (int col = 0; col < v->cols; ++col)
336  {
337  int i = row + col * v->rows;
338  table->setItem(row, col, new QTableWidgetItem{QString::number(v->data.at(i))});
339  }
340  }
341  }
342 
343  private:
344  QTableWidget* table;
345  };
347  MatrixDoubleBase::ice_staticId()};
348 
350  {
351  public:
352  MatrixFloatBaseWidget(const VariantDataPtr& v)
353  {
354  auto l = new QVBoxLayout;
355  l->setContentsMargins(0, 0, 0, 0);
356  setLayout(l);
357  table = new QTableWidget;
358  l->addWidget(table);
359  update(v);
360  }
361  void
362  update(const VariantDataPtr& p) override
363  {
364  MatrixFloatBasePtr v = MatrixFloatBasePtr::dynamicCast(p);
366  table->setRowCount(v->rows);
367  table->setColumnCount(v->cols);
368  for (int row = 0; row < v->rows; ++row)
369  {
370  for (int col = 0; col < v->cols; ++col)
371  {
372  int i = row + col * v->rows;
373  table->setItem(row, col, new QTableWidgetItem{QString::number(v->data.at(i))});
374  }
375  }
376  }
377 
378  private:
379  QTableWidget* table;
380  };
382  MatrixFloatBase::ice_staticId()};
383 } // namespace armarx::VariantDataWidgets
384 
385 namespace armarx
386 {
387  VariantWidget::VariantWidget(QWidget* parent) : QWidget{parent}
388  {
389  l = new QFormLayout;
390  setLayout(l);
391  reset();
392  }
393 
394  void
395  VariantWidget::reset(Mode newMode)
396  {
397  if (mode != Mode::Empty)
398  {
399  //clear layout
400  while (QLayoutItem* item = l->takeAt(0))
401  {
402  QWidget* widget = item->widget();
403  if (widget)
404  {
405  widget->deleteLater();
406  }
407  delete item;
408  }
409  }
410  entries.clear();
411  mode = newMode;
412  if (mode == Mode::Map)
413  {
414  l->setHorizontalSpacing(6);
415  }
416  else
417  {
418  l->setHorizontalSpacing(0);
419  }
420  }
421 
422  void
424  {
425  if (mode != Mode::SingleEntry)
426  {
427  reset(Mode::SingleEntry);
428  }
429  updateEntry("SingleEntry", v);
430  }
431 
432  void
433  VariantWidget::update(const std::vector<VariantBasePtr>& vec)
434  {
435  if (mode != Mode::Vector)
436  {
437  reset(Mode::Vector);
438  }
439  for (std::size_t i = 0; i < vec.size(); ++i)
440  {
441  updateEntry(to_string(i), vec.at(i));
442  }
443  }
444 
445  void
446  VariantWidget::update(const std::map<std::string, VariantBasePtr>& map)
447  {
448  if (mode != Mode::Map)
449  {
450  reset(Mode::Map);
451  }
452  for (const auto& entry : map)
453  {
454  updateEntry(entry.first, entry.second);
455  }
456  }
457 
458  void
459  VariantWidget::updateEntry(const std::string& name, const VariantBasePtr& v)
460  {
461  ARMARX_CHECK_EXPRESSION(layout());
462  if (entries.count(name))
463  {
464  //there is an old entry
465  VariantDataWidgetBase* entryOld = entries.at(name);
466  if (!v || !v->data)
467  {
468  //there is no new entry -> delete old entry delete
469  if (mode == Mode::Map)
470  {
471  //remove the label
472  auto label = l->labelForField(entryOld);
473  l->removeWidget(label);
474  label->deleteLater();
475  }
476  l->removeWidget(entryOld);
477  entryOld->deleteLater();
478  entries.erase(name);
479  }
480  else
481  {
482  //update the entry
483  std::string type = v->data->ice_id();
484  if (entryOld->getTypeName() != type)
485  {
486  //other type -> exchange data widget
488  //new data widget
489  int row = getEntryRow(entryOld);
490  ARMARX_CHECK_EXPRESSION(row < l->rowCount());
491  ARMARX_CHECK_EXPRESSION(row >= 0);
492  l->removeWidget(entryOld);
493  entryOld->deleteLater();
494  l->setWidget(row, QFormLayout::FieldRole, entries[name]);
495  }
496  else
497  {
498  //same type -> update data widget
499  entryOld->update(v->data);
500  }
501  }
502  }
503  else
504  {
506  //add to layout
507  if (mode == Mode::Map)
508  {
509  l->addRow(QString::fromStdString(name), entries[name]);
510  }
511  else
512  {
513  l->addRow("", entries[name]);
514  }
515  }
516  }
517 
518  int
519  VariantWidget::getEntryRow(VariantWidget::VariantDataWidgetBase* entry) const
520  {
521  //i need to find the correct row.
522  //there is no other way than iterating over the rows and check them
523  for (int row = 0; row < l->rowCount(); ++row)
524  {
525  QLayoutItem* it = l->itemAt(row, QFormLayout::FieldRole);
526  if (it && it->widget() == entry)
527  {
528  return row;
529  }
530  }
531  return -1;
532  }
533 
534  VariantDataWidgets::VariantDataWidgetBase*
536  {
537  class ErrorMessageWidget : public VariantDataWidgetBase
538  {
539  public:
540  ErrorMessageWidget(const std::string& errorMessage)
541  {
542  setLayout(new QVBoxLayout);
543  setTypeName(".ErrorMessageWidget");
544  layout()->setContentsMargins(0, 0, 0, 0);
545  QLabel* label = new QLabel{QString::fromStdString(errorMessage)};
546  layout()->addWidget(label);
547  label->setStyleSheet("QLabel { background-color : yellow; color : red; }");
548  }
549  };
550 
551  if (!p)
552  {
553  return new ErrorMessageWidget{"Null VariantBasePtr"};
554  }
555  if (!p->data)
556  {
557  return new ErrorMessageWidget{"Null VariantBasePtr::data"};
558  }
559  auto type = p->data->ice_id();
560  if (VariantDataWidgetFactory::has(type))
561  {
562  try
563  {
564  VariantDataWidgetBase* w = VariantDataWidgetFactory::get(type)(p->data);
565  w->setTypeName(type);
566  return w;
567  }
568  catch (std::exception& e)
569  {
570  return new ErrorMessageWidget{"VariantDataWidgetFactory for " + type +
571  " threw exception\n" + e.what()};
572  }
573  catch (...)
574  {
575  return new ErrorMessageWidget{"VariantDataWidgetFactory for " + type +
576  " threw exception"};
577  }
578  }
579  else
580  {
581  return new ErrorMessageWidget{"No VariantDataWidgetFactory for " + type};
582  }
583  return new ErrorMessageWidget{"makeVariantDataWidget: Unknown error"};
584  }
585 } // namespace armarx
armarx::VariantDataWidgets::ComplexFloatBaseWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:269
armarx::VariantDataWidgets::ComplexDoubleBaseWidget
Definition: VariantWidget.cpp:284
armarx::VariantDataWidgets::StringVariantDataWidget::StringVariantDataWidget
StringVariantDataWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:204
armarx::VariantDataWidgets::MatrixFloatBaseWidget::MatrixFloatBaseWidget
MatrixFloatBaseWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:352
armarx::VariantWidget::update
void update(const VariantBasePtr &v)
Definition: VariantWidget.cpp:423
armarx::VariantDataWidgets::DoubleVariantDataWidget
Definition: VariantWidget.cpp:96
armarx::VariantDataWidgets::registerLongVariantDataWidget
VariantDataWidgetFactoryRegistration< LongVariantDataWidget > registerLongVariantDataWidget
Definition: VariantWidget.cpp:197
armarx::VariantDataWidgets::registerBoolVariantDataWidget
VariantDataWidgetFactoryRegistration< BoolVariantDataWidget > registerBoolVariantDataWidget
Definition: VariantWidget.cpp:93
armarx::VariantDataWidgets::registerComplexFloatBaseWidget
VariantDataWidgetFactoryRegistration< ComplexFloatBaseWidget > registerComplexFloatBaseWidget
Definition: VariantWidget.cpp:281
armarx::VariantDataWidgets::BoolVariantDataWidget::DisplayOption::BOOLALPHA
@ BOOLALPHA
armarx::VariantDataWidgets::registerIntVariantDataWidget
VariantDataWidgetFactoryRegistration< IntVariantDataWidget > registerIntVariantDataWidget
Definition: VariantWidget.cpp:171
armarx::VariantDataWidgets::ComplexDoubleBaseWidget::ComplexDoubleBaseWidget
ComplexDoubleBaseWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:287
armarx::VariantDataWidgets::LongVariantDataWidget
Definition: VariantWidget.cpp:174
armarx::VariantDataWidgets::StringVariantDataWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:214
VariantWidget.h
armarx::VariantDataWidgets::BoolVariantDataWidget::BoolVariantDataWidget
BoolVariantDataWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:52
armarx::VariantDataWidgets::IntVariantDataWidget
Definition: VariantWidget.cpp:148
armarx::VariantDataWidgets::TimestampBaseWidget::TimestampBaseWidget
TimestampBaseWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:230
armarx::VariantDataWidgets::BoolVariantDataWidget
Definition: VariantWidget.cpp:39
armarx::VariantDataWidgets::BoolVariantDataWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:62
armarx::VariantDataWidgets::MatrixDoubleBaseWidget
Definition: VariantWidget.cpp:314
armarx::VariantDataWidgets::StringVariantDataWidget
Definition: VariantWidget.cpp:201
armarx::VariantDataWidgets::ComplexFloatBaseWidget::ComplexFloatBaseWidget
ComplexFloatBaseWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:257
armarx::VariantDataWidgets::registerTimestampBaseWidget
VariantDataWidgetFactoryRegistration< TimestampBaseWidget > registerTimestampBaseWidget
Definition: VariantWidget.cpp:251
armarx::VariantDataWidgets::registerMatrixFloatBaseWidget
VariantDataWidgetFactoryRegistration< MatrixFloatBaseWidget > registerMatrixFloatBaseWidget
Definition: VariantWidget.cpp:381
armarx::viz::json::setTypeName
void setTypeName(nlohmann::json &j, const std::string &key, const std::string &typeName)
Store the type name in j.
Definition: ElementJsonSerializers.cpp:22
armarx::VariantDataWidgets::FloatVariantDataWidget::FloatVariantDataWidget
FloatVariantDataWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:125
armarx::VariantDataWidgets::VariantDataWidgetBase
Definition: VariantWidget.h:71
armarx::VariantDataWidgets::registerMatrixDoubleBaseWidget
VariantDataWidgetFactoryRegistration< MatrixDoubleBaseWidget > registerMatrixDoubleBaseWidget
Definition: VariantWidget.cpp:346
StringHelpers.h
armarx::VariantDataWidgets::TimestampBaseWidget
Definition: VariantWidget.cpp:227
IceInternal::Handle<::armarx::VariantBase >
armarx::VariantDataWidgets::registerStringVariantDataWidget
VariantDataWidgetFactoryRegistration< StringVariantDataWidget > registerStringVariantDataWidget
Definition: VariantWidget.cpp:224
armarx::VariantDataWidgets::BoolVariantDataWidget::DisplayOption::boolalpha
@ boolalpha
armarx::VariantDataWidgets::BoolVariantDataWidget::DisplayOption
DisplayOption
Definition: VariantWidget.cpp:42
armarx::VariantDataWidgets::registerComplexDoubleBaseWidget
VariantDataWidgetFactoryRegistration< ComplexDoubleBaseWidget > registerComplexDoubleBaseWidget
Definition: VariantWidget.cpp:311
armarx::VariantDataWidgets::FloatVariantDataWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:135
armarx::VariantDataWidgets::MatrixDoubleBaseWidget::MatrixDoubleBaseWidget
MatrixDoubleBaseWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:317
armarx::VariantDataWidgets::registerFloatVariantDataWidget
VariantDataWidgetFactoryRegistration< FloatVariantDataWidget > registerFloatVariantDataWidget
Definition: VariantWidget.cpp:145
armarx::VariantDataWidgets::FloatVariantDataWidget
Definition: VariantWidget.cpp:122
armarx::VariantDataWidgets::BoolVariantDataWidget::DisplayOption::X
@ X
armarx::VariantDataWidgets::BoolVariantDataWidget::DisplayOption::number
@ number
armarx::VariantDataWidgets::MatrixFloatBaseWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:362
armarx::VariantDataWidgets::BoolVariantDataWidget::DisplayOption::Boolalpha
@ Boolalpha
armarx::to_string
const std::string & to_string(const std::string &s)
Definition: StringHelpers.h:40
armarx::VariantDataWidgets::MatrixFloatBaseWidget
Definition: VariantWidget.cpp:349
armarx::VariantDataWidgets::LongVariantDataWidget::LongVariantDataWidget
LongVariantDataWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:177
ExpressionException.h
armarx::VariantDataWidgets::makeVariantDataWidget
VariantDataWidgetBase * makeVariantDataWidget(const VariantBasePtr &p)
Definition: VariantWidget.cpp:535
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
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::VariantDataWidgets::IntVariantDataWidget::IntVariantDataWidget
IntVariantDataWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:151
armarx::VariantDataWidgets::DoubleVariantDataWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:109
armarx::VariantDataWidgets::BoolVariantDataWidget::DisplayOption::XO
@ XO
armarx::VariantDataWidgets::IntVariantDataWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:161
armarx::VariantDataWidgets::registerDoubleVariantDataWidget
VariantDataWidgetFactoryRegistration< DoubleVariantDataWidget > registerDoubleVariantDataWidget
Definition: VariantWidget.cpp:119
armarx::VariantDataWidgets::ComplexDoubleBaseWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:299
armarx::VariantDataWidgets::MatrixDoubleBaseWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:327
armarx::VariantDataWidgets::DoubleVariantDataWidget::DoubleVariantDataWidget
DoubleVariantDataWidget(const VariantDataPtr &v)
Definition: VariantWidget.cpp:99
armarx::VariantDataWidgets::ComplexFloatBaseWidget
Definition: VariantWidget.cpp:254
armarx::VariantDataWidgets
Definition: VariantWidget.cpp:37
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::VariantDataWidgets::VariantDataWidgetBase::setTypeName
virtual void setTypeName(const std::string &name)
Definition: VariantWidget.h:80
armarx::VariantWidget::VariantWidget
VariantWidget(VariantPtr variant, QWidget *parent=0, Qt::WindowFlags f=0)
Definition: VariantWidget.cpp:31
armarx::VariantDataWidgets::LongVariantDataWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:187
armarx::VariantDataWidgets::TimestampBaseWidget::update
void update(const VariantDataPtr &p) override
Definition: VariantWidget.cpp:240
armarx::VariantDataWidgets::VariantDataWidgetFactoryRegistration
Definition: VariantWidget.h:90