PeriDyno 1.0.0
Loading...
Searching...
No Matches
QVector3iFieldWidget.cpp
Go to the documentation of this file.
2
3#include <QGridLayout>
4
5#include "Field.h"
6#include "QPiecewiseSpinBox.h"
7
8namespace dyno
9{
11
14 {
15 QGridLayout* layout = new QGridLayout;
16 layout->setContentsMargins(0, 0, 0, 0);
17 layout->setSpacing(0);
18
19 this->setLayout(layout);
20
21 //Label
22 QLabel* name = new QLabel();
23 QString str = FormatFieldWidgetName(field->getObjectName());
24 name->setFixedSize(100, 18);
25 QFontMetrics fontMetrics(name->font());
26 QString elide = fontMetrics.elidedText(str, Qt::ElideRight, 100);
27 name->setText(elide);
28 //Set label tips
29 name->setToolTip(str);
30
32 spinner1->setMinimumWidth(30);
33 spinner1->setRange(castMinimum<int>(field->getMin()), castMaximum<int>(field->getMax()));
34
36 spinner2->setMinimumWidth(30);
37 spinner2->setRange(castMinimum<int>(field->getMin()), castMaximum<int>(field->getMax()));
38
40 spinner3->setMinimumWidth(30);
41 spinner3->setRange(castMinimum<int>(field->getMin()), castMaximum<int>(field->getMax()));
42
43
44
45
46 layout->addWidget(name, 0, 0);
47 layout->addWidget(spinner1, 0, 1);
48 layout->addWidget(spinner2, 0, 2);
49 layout->addWidget(spinner3, 0, 3);
50 layout->setSpacing(3);
51
52 std::string template_name = field->getTemplateName();
53 int v1 = 0;
54 int v2 = 0;
55 int v3 = 0;
56
57 if (template_name == std::string(typeid(Vec3i).name()))
58 {
60 auto v = f->getValue();
61 v1 = v[0];
62 v2 = v[1];
63 v3 = v[2];
64 }
65 else if (template_name == std::string(typeid(Vec3u).name()))
66 {
68 auto v = f->getValue();
69 v1 = v[0];
70 v2 = v[1];
71 v3 = v[2];
72 }
73
74 spinner1->setValue(v1);
75 spinner2->setValue(v2);
76 spinner3->setValue(v3);
77
78 QObject::connect(spinner1, SIGNAL(valueChanged(int)), this, SLOT(updateField(int)));
79 QObject::connect(spinner2, SIGNAL(valueChanged(int)), this, SLOT(updateField(int)));
80 QObject::connect(spinner3, SIGNAL(valueChanged(int)), this, SLOT(updateField(int)));
81
82 QObject::connect(this, SIGNAL(fieldChanged()), this, SLOT(updateWidget()));
83 }
84
88
90 {
91 int v1 = spinner1->value();
92 int v2 = spinner2->value();
93 int v3 = spinner3->value();
94
95 std::string template_name = field()->getTemplateName();
96
97 if (template_name == std::string(typeid(Vec3i).name()))
98 {
100 f->setValue(Vec3i(v1, v2, v3));
101 }
102 else if (template_name == std::string(typeid(Vec3u).name()))
103 {
105 f->setValue(Vec3u(v1, v2, v3));
106 }
107 }
108
110 {
111 std::string template_name = field()->getTemplateName();
112
113 int v1 = 0;
114 int v2 = 0;
115 int v3 = 0;
116
117 if (template_name == std::string(typeid(Vec3i).name()))
118 {
120 auto v = f->getValue();
121 v1 = v[0];
122 v2 = v[1];
123 v3 = v[2];
124 }
125 else if (template_name == std::string(typeid(Vec3u).name()))
126 {
128 auto v = f->getValue();
129 v1 = v[0];
130 v2 = v[1];
131 v3 = v[2];
132 }
133
134 spinner1->blockSignals(true);
135 spinner2->blockSignals(true);
136 spinner3->blockSignals(true);
137
138 spinner1->setValue(v1);
139 spinner2->setValue(v2);
140 spinner3->setValue(v3);
141
142 spinner1->blockSignals(false);
143 spinner2->blockSignals(false);
144 spinner3->blockSignals(false);
145 }
146}
147
#define IMPL_FIELD_WIDGET(_data_type_, _type_)
virtual const std::string getTemplateName()
Definition FBase.h:51
T getValue()
Definition Field.h:130
void setValue(T val)
Definition Field.h:111
QFieldWidget(FBase *field)
DECLARE_FIELD_WIDGET QVector3iFieldWidget(FBase *field)
TA * cast(TB *b)
Definition Typedef.inl:286
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Vector< uint, 3 > Vec3u
Definition Vector3D.h:96
QString FormatFieldWidgetName(std::string name)
Definition Format.cpp:9
Vector< int, 3 > Vec3i
Definition Vector3D.h:95
T castMaximum(float v)
T castMinimum(float v)