Skip to content
Snippets Groups Projects
Commit 1c03f97a authored by Stefan Reither's avatar Stefan Reither
Browse files

VariantWidget: add LongVariantDataWidget

parent 67611520
No related branches found
No related tags found
No related merge requests found
......@@ -22,21 +22,21 @@
#include "VariantWidget.h"
#include <QLabel>
#include <QVBoxLayout>
#include <QFormLayout>
#include <QLabel>
#include <QTableWidget>
#include <QVBoxLayout>
#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
#include <ArmarXCore/core/util/StringHelpers.h>
#include <ArmarXCore/interface/observers/Timestamp.h>
#include <ArmarXCore/interface/observers/Complex.h>
#include <ArmarXCore/interface/observers/VariantContainers.h>
#include <ArmarXCore/interface/observers/Matrix.h>
#include <ArmarXCore/interface/observers/Timestamp.h>
#include <ArmarXCore/interface/observers/VariantContainers.h>
namespace armarx::VariantDataWidgets
{
class BoolVariantDataWidget: public VariantDataWidgetBase
class BoolVariantDataWidget : public VariantDataWidgetBase
{
public:
enum class DisplayOption
......@@ -49,8 +49,7 @@ namespace armarx::VariantDataWidgets
X
};
BoolVariantDataWidget(const VariantDataPtr& v):
disp {DisplayOption::Boolalpha}
BoolVariantDataWidget(const VariantDataPtr& v) : disp{DisplayOption::Boolalpha}
{
auto l = new QVBoxLayout;
l->setContentsMargins(0, 0, 0, 0);
......@@ -59,7 +58,8 @@ namespace armarx::VariantDataWidgets
l->addWidget(label);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
BoolVariantDataPtr v = BoolVariantDataPtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
......@@ -85,16 +85,17 @@ namespace armarx::VariantDataWidgets
break;
}
}
private:
QLabel* label;
DisplayOption disp;
};
VariantDataWidgetFactoryRegistration<BoolVariantDataWidget> registerBoolVariantDataWidget {BoolVariantData::ice_staticId()};
VariantDataWidgetFactoryRegistration<BoolVariantDataWidget> registerBoolVariantDataWidget{
BoolVariantData::ice_staticId()};
class DoubleVariantDataWidget: public VariantDataWidgetBase
class DoubleVariantDataWidget : public VariantDataWidgetBase
{
public:
DoubleVariantDataWidget(const VariantDataPtr& v)
{
auto l = new QVBoxLayout;
......@@ -104,21 +105,23 @@ namespace armarx::VariantDataWidgets
l->addWidget(label);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
DoubleVariantDataPtr v = DoubleVariantDataPtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
label->setText(QString::number(v->d));
}
private:
QLabel* label;
};
VariantDataWidgetFactoryRegistration<DoubleVariantDataWidget> registerDoubleVariantDataWidget {DoubleVariantData::ice_staticId()};
VariantDataWidgetFactoryRegistration<DoubleVariantDataWidget> registerDoubleVariantDataWidget{
DoubleVariantData::ice_staticId()};
class FloatVariantDataWidget: public VariantDataWidgetBase
class FloatVariantDataWidget : public VariantDataWidgetBase
{
public:
FloatVariantDataWidget(const VariantDataPtr& v)
{
auto l = new QVBoxLayout;
......@@ -128,21 +131,23 @@ namespace armarx::VariantDataWidgets
l->addWidget(label);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
FloatVariantDataPtr v = FloatVariantDataPtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
label->setText(QString::number(v->f));
}
private:
QLabel* label;
};
VariantDataWidgetFactoryRegistration<FloatVariantDataWidget> registerFloatVariantDataWidget {FloatVariantData::ice_staticId()};
VariantDataWidgetFactoryRegistration<FloatVariantDataWidget> registerFloatVariantDataWidget{
FloatVariantData::ice_staticId()};
class IntVariantDataWidget: public VariantDataWidgetBase
class IntVariantDataWidget : public VariantDataWidgetBase
{
public:
IntVariantDataWidget(const VariantDataPtr& v)
{
auto l = new QVBoxLayout;
......@@ -152,21 +157,50 @@ namespace armarx::VariantDataWidgets
l->addWidget(label);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
IntVariantDataPtr v = IntVariantDataPtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
label->setText(QString::number(v->n));
}
private:
QLabel* label;
};
VariantDataWidgetFactoryRegistration<IntVariantDataWidget> registerIntVariantDataWidget {IntVariantData::ice_staticId()};
VariantDataWidgetFactoryRegistration<IntVariantDataWidget> registerIntVariantDataWidget{
IntVariantData::ice_staticId()};
class StringVariantDataWidget: public VariantDataWidgetBase
class LongVariantDataWidget : public VariantDataWidgetBase
{
public:
LongVariantDataWidget(const VariantDataPtr& v)
{
auto l = new QVBoxLayout;
l->setContentsMargins(0, 0, 0, 0);
setLayout(l);
label = new QLabel;
l->addWidget(label);
update(v);
}
void
update(const VariantDataPtr& p) override
{
LongVariantDataPtr v = LongVariantDataPtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
label->setText(QString::number(v->n));
}
private:
QLabel* label;
};
VariantDataWidgetFactoryRegistration<LongVariantDataWidget> registerLongVariantDataWidget{
LongVariantData::ice_staticId()};
class StringVariantDataWidget : public VariantDataWidgetBase
{
public:
StringVariantDataWidget(const VariantDataPtr& v)
{
auto l = new QVBoxLayout;
......@@ -176,23 +210,24 @@ namespace armarx::VariantDataWidgets
l->addWidget(label);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
StringVariantDataPtr v = StringVariantDataPtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
label->setText(QString::fromStdString(v->s));
}
private:
QLabel* label;
};
VariantDataWidgetFactoryRegistration<StringVariantDataWidget> registerStringVariantDataWidget {StringVariantData::ice_staticId()};
VariantDataWidgetFactoryRegistration<StringVariantDataWidget> registerStringVariantDataWidget{
StringVariantData::ice_staticId()};
class TimestampBaseWidget: public VariantDataWidgetBase
class TimestampBaseWidget : public VariantDataWidgetBase
{
public:
TimestampBaseWidget(const VariantDataPtr& v):
suffix {"us"}
TimestampBaseWidget(const VariantDataPtr& v) : suffix{"us"}
{
auto l = new QVBoxLayout;
l->setContentsMargins(0, 0, 0, 0);
......@@ -201,19 +236,22 @@ namespace armarx::VariantDataWidgets
l->addWidget(label);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
TimestampBasePtr v = TimestampBasePtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
label->setText(QString::number(v->timestamp) + suffix);
}
private:
QLabel* label;
QString suffix;
};
VariantDataWidgetFactoryRegistration<TimestampBaseWidget> registerTimestampBaseWidget {TimestampBase::ice_staticId()};
VariantDataWidgetFactoryRegistration<TimestampBaseWidget> registerTimestampBaseWidget{
TimestampBase::ice_staticId()};
class ComplexFloatBaseWidget: public VariantDataWidgetBase
class ComplexFloatBaseWidget : public VariantDataWidgetBase
{
public:
ComplexFloatBaseWidget(const VariantDataPtr& v)
......@@ -227,20 +265,23 @@ namespace armarx::VariantDataWidgets
l->addRow("Imag", labelI);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
ComplexFloatBasePtr v = ComplexFloatBasePtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
labelR->setText(QString::number(v->real));
labelI->setText(QString::number(v->imag));
}
private:
QLabel* labelR;
QLabel* labelI;
};
VariantDataWidgetFactoryRegistration<ComplexFloatBaseWidget> registerComplexFloatBaseWidget {ComplexFloatBase::ice_staticId()};
VariantDataWidgetFactoryRegistration<ComplexFloatBaseWidget> registerComplexFloatBaseWidget{
ComplexFloatBase::ice_staticId()};
class ComplexDoubleBaseWidget: public VariantDataWidgetBase
class ComplexDoubleBaseWidget : public VariantDataWidgetBase
{
public:
ComplexDoubleBaseWidget(const VariantDataPtr& v)
......@@ -254,20 +295,23 @@ namespace armarx::VariantDataWidgets
l->addRow("Imag", labelI);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
ComplexDoubleBasePtr v = ComplexDoubleBasePtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
labelR->setText(QString::number(v->real));
labelI->setText(QString::number(v->imag));
}
private:
QLabel* labelR;
QLabel* labelI;
};
VariantDataWidgetFactoryRegistration<ComplexDoubleBaseWidget> registerComplexDoubleBaseWidget {ComplexDoubleBase::ice_staticId()};
VariantDataWidgetFactoryRegistration<ComplexDoubleBaseWidget> registerComplexDoubleBaseWidget{
ComplexDoubleBase::ice_staticId()};
class MatrixDoubleBaseWidget: public VariantDataWidgetBase
class MatrixDoubleBaseWidget : public VariantDataWidgetBase
{
public:
MatrixDoubleBaseWidget(const VariantDataPtr& v)
......@@ -279,7 +323,8 @@ namespace armarx::VariantDataWidgets
l->addWidget(table);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
MatrixDoubleBasePtr v = MatrixDoubleBasePtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
......@@ -290,16 +335,18 @@ namespace armarx::VariantDataWidgets
for (int col = 0; col < v->cols; ++col)
{
int i = row + col * v->rows;
table->setItem(row, col, new QTableWidgetItem {QString::number(v->data.at(i))});
table->setItem(row, col, new QTableWidgetItem{QString::number(v->data.at(i))});
}
}
}
private:
QTableWidget* table;
};
VariantDataWidgetFactoryRegistration<MatrixDoubleBaseWidget> registerMatrixDoubleBaseWidget {MatrixDoubleBase::ice_staticId()};
VariantDataWidgetFactoryRegistration<MatrixDoubleBaseWidget> registerMatrixDoubleBaseWidget{
MatrixDoubleBase::ice_staticId()};
class MatrixFloatBaseWidget: public VariantDataWidgetBase
class MatrixFloatBaseWidget : public VariantDataWidgetBase
{
public:
MatrixFloatBaseWidget(const VariantDataPtr& v)
......@@ -311,7 +358,8 @@ namespace armarx::VariantDataWidgets
l->addWidget(table);
update(v);
}
void update(const VariantDataPtr& p) override
void
update(const VariantDataPtr& p) override
{
MatrixFloatBasePtr v = MatrixFloatBasePtr::dynamicCast(p);
ARMARX_CHECK_EXPRESSION(v);
......@@ -322,27 +370,29 @@ namespace armarx::VariantDataWidgets
for (int col = 0; col < v->cols; ++col)
{
int i = row + col * v->rows;
table->setItem(row, col, new QTableWidgetItem {QString::number(v->data.at(i))});
table->setItem(row, col, new QTableWidgetItem{QString::number(v->data.at(i))});
}
}
}
private:
QTableWidget* table;
};
VariantDataWidgetFactoryRegistration<MatrixFloatBaseWidget> registerMatrixFloatBaseWidget {MatrixFloatBase::ice_staticId()};
}
VariantDataWidgetFactoryRegistration<MatrixFloatBaseWidget> registerMatrixFloatBaseWidget{
MatrixFloatBase::ice_staticId()};
} // namespace armarx::VariantDataWidgets
namespace armarx
{
VariantWidget::VariantWidget(QWidget* parent):
QWidget {parent}
VariantWidget::VariantWidget(QWidget* parent) : QWidget{parent}
{
l = new QFormLayout;
setLayout(l);
reset();
}
void VariantWidget::reset(Mode newMode)
void
VariantWidget::reset(Mode newMode)
{
if (mode != Mode::Empty)
{
......@@ -369,7 +419,8 @@ namespace armarx
}
}
void VariantWidget::update(const VariantBasePtr& v)
void
VariantWidget::update(const VariantBasePtr& v)
{
if (mode != Mode::SingleEntry)
{
......@@ -378,7 +429,8 @@ namespace armarx
updateEntry("SingleEntry", v);
}
void VariantWidget::update(const std::vector<VariantBasePtr>& vec)
void
VariantWidget::update(const std::vector<VariantBasePtr>& vec)
{
if (mode != Mode::Vector)
{
......@@ -390,7 +442,8 @@ namespace armarx
}
}
void VariantWidget::update(const std::map<std::string, VariantBasePtr>& map)
void
VariantWidget::update(const std::map<std::string, VariantBasePtr>& map)
{
if (mode != Mode::Map)
{
......@@ -402,7 +455,8 @@ namespace armarx
}
}
void VariantWidget::updateEntry(const std::string& name, const VariantBasePtr& v)
void
VariantWidget::updateEntry(const std::string& name, const VariantBasePtr& v)
{
ARMARX_CHECK_EXPRESSION(layout());
if (entries.count(name))
......@@ -461,11 +515,12 @@ namespace armarx
}
}
int VariantWidget::getEntryRow(VariantWidget::VariantDataWidgetBase* entry) const
int
VariantWidget::getEntryRow(VariantWidget::VariantDataWidgetBase* entry) const
{
//i need to find the correct row.
//there is no other way than iterating over the rows and check them
for (int row = 0; row < l->rowCount(); ++ row)
for (int row = 0; row < l->rowCount(); ++row)
{
QLayoutItem* it = l->itemAt(row, QFormLayout::FieldRole);
if (it && it->widget() == entry)
......@@ -476,7 +531,8 @@ namespace armarx
return -1;
}
VariantDataWidgets::VariantDataWidgetBase* VariantDataWidgets::makeVariantDataWidget(const VariantBasePtr& p)
VariantDataWidgets::VariantDataWidgetBase*
VariantDataWidgets::makeVariantDataWidget(const VariantBasePtr& p)
{
class ErrorMessageWidget : public VariantDataWidgetBase
{
......@@ -486,7 +542,7 @@ namespace armarx
setLayout(new QVBoxLayout);
setTypeName(".ErrorMessageWidget");
layout()->setContentsMargins(0, 0, 0, 0);
QLabel* label = new QLabel {QString::fromStdString(errorMessage)};
QLabel* label = new QLabel{QString::fromStdString(errorMessage)};
layout()->addWidget(label);
label->setStyleSheet("QLabel { background-color : yellow; color : red; }");
}
......@@ -494,11 +550,11 @@ namespace armarx
if (!p)
{
return new ErrorMessageWidget {"Null VariantBasePtr"};
return new ErrorMessageWidget{"Null VariantBasePtr"};
}
if (!p->data)
{
return new ErrorMessageWidget {"Null VariantBasePtr::data"};
return new ErrorMessageWidget{"Null VariantBasePtr::data"};
}
auto type = p->data->ice_id();
if (VariantDataWidgetFactory::has(type))
......@@ -511,17 +567,19 @@ namespace armarx
}
catch (std::exception& e)
{
return new ErrorMessageWidget {"VariantDataWidgetFactory for " + type + " threw exception\n" + e.what()};
return new ErrorMessageWidget{"VariantDataWidgetFactory for " + type +
" threw exception\n" + e.what()};
}
catch (...)
{
return new ErrorMessageWidget {"VariantDataWidgetFactory for " + type + " threw exception"};
return new ErrorMessageWidget{"VariantDataWidgetFactory for " + type +
" threw exception"};
}
}
else
{
return new ErrorMessageWidget {"No VariantDataWidgetFactory for " + type};
return new ErrorMessageWidget{"No VariantDataWidgetFactory for " + type};
}
return new ErrorMessageWidget {"makeVariantDataWidget: Unknown error"};
return new ErrorMessageWidget{"makeVariantDataWidget: Unknown error"};
}
}
} // namespace armarx
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment