PeriDyno 1.0.0
Loading...
Searching...
No Matches
QRealFieldWidget.cpp
Go to the documentation of this file.
1#include "QRealFieldWidget.h"
2
3#include <QHBoxLayout>
4
5#include "Field.h"
7
8namespace dyno
9{
11
14 {
15 //this->setStyleSheet("border:none");
16 QHBoxLayout* layout = new QHBoxLayout;
17 layout->setContentsMargins(0, 0, 0, 0);
18 layout->setSpacing(0);
19
20 this->setLayout(layout);
21
22 QToggleLabel* name = new QToggleLabel();
23 name->setFixedHeight(24);
24 name->setText(FormatFieldWidgetName(field->getObjectName()));
25
27 slider->setRange(field->getMin(), field->getMax());
28 slider->setMinimumWidth(60);
29
31 spinner->setRange(field->getMin(), field->getMax());
32 spinner->setFixedWidth(100);
33
34 std::string template_name = field->getTemplateName();
35 if (template_name == std::string(typeid(float).name()))
36 {
38
39 spinner->setValue((double)f->getValue());
40 slider->setValue((double)f->getValue());
41 }
42 else if (template_name == std::string(typeid(double).name()))
43 {
45
46 spinner->setValue((double)f->getValue());
47 slider->setValue(f->getValue());
48 }
49
50 layout->addWidget(name, 0);
51 layout->addWidget(slider, 1);
52 layout->addStretch();
53 layout->addWidget(spinner, 2);
54 layout->setSpacing(3);
55
56 FormatFieldWidgetName(field->getObjectName());
57
58 QObject::connect(slider, SIGNAL(valueChanged(double)), spinner, SLOT(ModifyValueAndUpdate(double)));
59 QObject::connect(spinner, SIGNAL(valueChanged(double)), slider, SLOT(setValue(double)));
60 QObject::connect(spinner, SIGNAL(valueChanged(double)), this, SLOT(updateField(double)));
61
62 QObject::connect(name, SIGNAL(toggle(bool)), spinner, SLOT(toggleDecimals(bool)));
63
64 QObject::connect(this, SIGNAL(fieldChanged()), this, SLOT(updateWidget()));
65 }
66
70
72 {
73 std::string template_name = field()->getTemplateName();
74
75 double v = spinner->getRealValue();
76 if (template_name == std::string(typeid(float).name()))
77 {
79 f->setValue((float)v);
80 f->update();
81 }
82 else if (template_name == std::string(typeid(double).name()))
83 {
85 f->setValue(v);
86 f->update();
87 }
88
89 emit fieldChanged();
90 }
91
93 {
94 std::string template_name = field()->getTemplateName();
95 if (template_name == std::string(typeid(float).name()))
96 {
98
99 slider->blockSignals(true);
100 slider->setValue((double)f->getValue());
101 slider->blockSignals(false);
102 }
103 else if (template_name == std::string(typeid(double).name()))
104 {
106
107 slider->blockSignals(true);
108 slider->setValue(f->getValue());
109 slider->blockSignals(false);
110 }
111 }
112}
113
#define IMPL_FIELD_WIDGET(_data_type_, _type_)
virtual const std::string getTemplateName()
Definition FBase.h:51
virtual void update()
Definition FBase.cpp:201
T getValue()
Definition Field.h:130
void setValue(T val)
Definition Field.h:111
QFieldWidget(FBase *field)
QPiecewiseDoubleSpinBox * spinner
DECLARE_FIELD_WIDGET QRealFieldWidget(FBase *field)
TA * cast(TB *b)
Definition Typedef.inl:286
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
QString FormatFieldWidgetName(std::string name)
Definition Format.cpp:9