PeriDyno 1.0.0
Loading...
Searching...
No Matches
WParameterDataNode.cpp
Go to the documentation of this file.
2#include <SceneGraph.h>
3
4std::map<std::string, WParameterDataNode::FieldWidgetMeta> WParameterDataNode::sFieldWidgetMeta{};
5
7{
8 FieldWidgetMeta WRealWidgetMeta
9 {
10 &typeid(float),
12 };
13
14 FieldWidgetMeta WVector3FieldWidgetMeta
15 {
16 &typeid(dyno::Vec3f),
18 };
19
20 FieldWidgetMeta WVector3dFieldWidgetMeta
21 {
22 &typeid(dyno::Vec3d),
24 };
25
26 FieldWidgetMeta WVector3iFieldWidgetMeta
27 {
28 &typeid(dyno::Vec3i),
30 };
31
32 FieldWidgetMeta WVector3uFieldWidgetMeta
33 {
34 &typeid(dyno::Vec3u),
36 };
37
38 FieldWidgetMeta WBoolFieldWidgetMeta
39 {
40 &typeid(bool),
42 };
43
44 FieldWidgetMeta WIntegerFieldWidgetMeta
45 {
46 &typeid(int),
48 };
49
50 FieldWidgetMeta WUIntegerFieldWidgetMeta
51 {
52 &typeid(dyno::uint),
54 };
55
56 FieldWidgetMeta WEnumFieldWidgetMeta
57 {
58 &typeid(dyno::PEnum),
60 };
61
62 FieldWidgetMeta WColorWidgetMeta
63 {
64 &typeid(dyno::Color),
66 };
67
68 FieldWidgetMeta WFileWidgetMeta
69 {
70 &typeid(dyno::FilePath),
72 };
73
74 registerWidget(WRealWidgetMeta);
75 registerWidget(WVector3FieldWidgetMeta);
76 registerWidget(WVector3dFieldWidgetMeta);
77 registerWidget(WVector3iFieldWidgetMeta);
78 registerWidget(WVector3uFieldWidgetMeta);
79 registerWidget(WBoolFieldWidgetMeta);
80 registerWidget(WIntegerFieldWidgetMeta);
81 registerWidget(WUIntegerFieldWidgetMeta);
82 registerWidget(WEnumFieldWidgetMeta);
83 registerWidget(WColorWidgetMeta);
84 registerWidget(WFileWidgetMeta);
85}
86
90
91void WParameterDataNode::setNode(std::shared_ptr<dyno::Node> node)
92{
93 mNode = node;
94 layoutAboutToBeChanged().emit();
95 layoutChanged().emit();
96}
97
98void WParameterDataNode::setModule(std::shared_ptr<dyno::Module> module)
99{
100 mModule = module;
101 layoutAboutToBeChanged().emit();
102 layoutChanged().emit();
103}
104
105int WParameterDataNode::columnCount(const Wt::WModelIndex& parent) const
106{
107 return 2;
108}
109
110int WParameterDataNode::rowCount(const Wt::WModelIndex& parent) const
111{
112 if (mNode != 0)
113 {
114 return mNode->getModuleList().size();
115 }
116 return 0;
117}
118
119Wt::cpp17::any WParameterDataNode::data(const Wt::WModelIndex& index, Wt::ItemDataRole role) const
120{
121 if (mNode != 0 && index.isValid())
122 {
123 auto mod = mNode->getModuleList();
124 auto iter = mod.begin();
125 std::advance(iter, index.row());
126
127 if (role == Wt::ItemDataRole::Display || role == Wt::ItemDataRole::ToolTip)
128 {
129 if (index.column() == 0)
130 {
131 return (*iter)->getName();
132 }
133 if (index.column() == 1)
134 {
135 return (*iter)->getModuleType();
136 }
137 }
138 else if (role == Wt::ItemDataRole::Decoration)
139 {
140 if (index.column() == 0)
141 {
142 return std::string("icons/module.png");
143 }
144 }
145 }
146 return Wt::cpp17::any();
147}
148
149Wt::cpp17::any WParameterDataNode::headerData(int section, Wt::Orientation orientation, Wt::ItemDataRole role) const
150{
151 if (orientation == Wt::Orientation::Horizontal && role == Wt::ItemDataRole::Display) {
152 switch (section) {
153 case 0:
154 return std::string("Module");
155 case 1:
156 return std::string("Type");
157 default:
158 return Wt::cpp17::any();
159 }
160 }
161 else
162 return Wt::cpp17::any();
163}
164
166{
167 table = panel->setCentralWidget(std::make_unique<Wt::WTable>());
168 std::vector<dyno::FBase*>& fields = mNode->getAllFields();
169 int a = 0;
170 for (dyno::FBase* var : fields)
171 {
172 if (var != nullptr)
173 {
174 if (var->getFieldType() == dyno::FieldTypeEnum::Param)
175 {
176 if (var->getClassName() == std::string("FVar"))
177 {
178 std::string template_name = var->getTemplateName();
179 addScalarFieldWidget(table, var->getObjectName(), var);
180 Wt::log("info") << var->getTemplateName();
181 }
182 }
183 else if (var->getFieldType() == dyno::FieldTypeEnum::State)
184 {
185 //Wt::log("info") << var->getDescription();
186 }
187 }
188 }
189 table->setMargin(10);
190}
191
193{
194 table = panel->setCentralWidget(std::make_unique<Wt::WTable>());
195 std::vector<dyno::FBase*>& fields = mModule->getAllFields();
196 int a = 0;
197 for (dyno::FBase* var : fields)
198 {
199 if (var != nullptr)
200 {
201 if (var->getFieldType() == dyno::FieldTypeEnum::Param)
202 {
203 if (var->getClassName() == std::string("FVar"))
204 {
205 std::string template_name = var->getTemplateName();
206 addScalarFieldWidget(table, var->getObjectName(), var);
207 Wt::log("info") << var->getTemplateName();
208 }
209 }
210 else if (var->getFieldType() == dyno::FieldTypeEnum::State)
211 {
212 //Wt::log("info") << var->getDescription();
213 }
214 }
215 }
216 table->setMargin(10);
217}
218
220 sFieldWidgetMeta[meta.type->name()] = meta;
221 return 0;
222}
223
225{
226 if (sFieldWidgetMeta.count(name))
227 return &sFieldWidgetMeta.at(name);
228 return nullptr;
229}
230
232{
233 Wt::WContainerWidget* fw = nullptr;
234 std::string template_name = field->getTemplateName();
235 auto reg = getRegistedWidget(template_name);
236
237 if (reg) {
238 fw = reg->constructor(field);
239 }
240
241 return fw;
242}
243
245{
246 changeValue_.emit(1);
247}
248
249void WParameterDataNode::castToDerived(Wt::WContainerWidget* fw)
250{
251
252 if (WRealFieldWidget* realWidget = dynamic_cast<WRealFieldWidget*>(fw))
253 {
254 realWidget->changeValue().connect(this, &WParameterDataNode::emit);
255 }
256 else if (WVector3FieldWidget* vec3fWidget = dynamic_cast<WVector3FieldWidget*>(fw))
257 {
258 vec3fWidget->changeValue().connect(this, &WParameterDataNode::emit);
259 }
260 else if (WVector3iFieldWidget* vec3iWidget = dynamic_cast<WVector3iFieldWidget*>(fw))
261 {
262 vec3iWidget->changeValue().connect(this, &WParameterDataNode::emit);
263 }
264 else if (WBoolFieldWidget* boolWidget = dynamic_cast<WBoolFieldWidget*>(fw))
265 {
266 boolWidget->changeValue().connect(this, &WParameterDataNode::emit);
267 }
268 else if (WIntegerFieldWidget* intWidget = dynamic_cast<WIntegerFieldWidget*>(fw))
269 {
270 intWidget->changeValue().connect(this, &WParameterDataNode::emit);
271 }
272 else if (WUIntegerFieldWidget* intuWidget = dynamic_cast<WUIntegerFieldWidget*>(fw))
273 {
274 intuWidget->changeValue().connect(this, &WParameterDataNode::emit);
275 }
276 else if (WEnumFieldWidget* enumWidget = dynamic_cast<WEnumFieldWidget*>(fw))
277 {
278 enumWidget->changeValue().connect(this, &WParameterDataNode::emit);
279 }
280 else if (WColorWidget* colorWidget = dynamic_cast<WColorWidget*>(fw))
281 {
282 colorWidget->changeValue().connect(this, &WParameterDataNode::emit);
283 }
284 else if (WFileWidget* fileWidget = dynamic_cast<WFileWidget*>(fw))
285 {
286 fileWidget->changeValue().connect(this, &WParameterDataNode::emit);
287 }
288 else
289 {
290 Wt::log("info") << "Error with dynamic_cast!";
291 }
292
293}
294
295void WParameterDataNode::addScalarFieldWidget(Wt::WTable* table, std::string label, dyno::FBase* field, int labelWidth, int widgetWidth)
296{
297 Wt::WContainerWidget* fw = createFieldWidget(field);
298 castToDerived(fw);
299 if (fw)
300 {
301 std::unique_ptr<Wt::WContainerWidget> mWidget(fw);
302 if (fw != nullptr) {
303 int row = table->rowCount();
304 auto cell0 = table->elementAt(row, 0);
305 auto cell1 = table->elementAt(row, 1);
306
307 cell0->addNew<Wt::WText>(label);
308 cell0->setContentAlignment(Wt::AlignmentFlag::Middle);
309 cell0->setWidth(labelWidth);
310
311 cell1->setContentAlignment(Wt::AlignmentFlag::Middle);
312 cell1->setWidth(widgetWidth);
313
314 cell1->addWidget(std::unique_ptr<Wt::WContainerWidget>(std::move(mWidget)));
315 }
316 }
317}
static Wt::WContainerWidget * WBoolFieldWidgetConstructor(dyno::FBase *field)
static Wt::WContainerWidget * WColorWidgetConstructor(dyno::FBase *field)
static Wt::WContainerWidget * WEnumFieldWidgetConstructor(dyno::FBase *field)
static Wt::WContainerWidget * WFileWidgetConstructor(dyno::FBase *field)
Definition WFileWidget.h:21
static Wt::WContainerWidget * WIntegerFieldWidgetConstructor(dyno::FBase *field)
std::shared_ptr< dyno::Node > mNode
static FieldWidgetMeta * getRegistedWidget(const std::string &)
static std::map< std::string, FieldWidgetMeta > sFieldWidgetMeta
void addScalarFieldWidget(Wt::WTable *table, std::string label, dyno::FBase *field, int labelWidth=150, int widgetWidth=300)
static int registerWidget(const FieldWidgetMeta &meta)
virtual int rowCount(const Wt::WModelIndex &parent=Wt::WModelIndex()) const
void createParameterPanel(Wt::WPanel *panel)
std::shared_ptr< dyno::Module > mModule
void setModule(std::shared_ptr< dyno::Module > module)
void setNode(std::shared_ptr< dyno::Node > node)
Wt::Signal< int > changeValue_
void createParameterPanelModule(Wt::WPanel *panel)
void castToDerived(Wt::WContainerWidget *fw)
virtual Wt::cpp17::any data(const Wt::WModelIndex &index, Wt::ItemDataRole role=Wt::ItemDataRole::Display) const
virtual Wt::cpp17::any headerData(int section, Wt::Orientation orientation=Wt::Orientation::Horizontal, Wt::ItemDataRole role=Wt::ItemDataRole::Display) const
virtual int columnCount(const Wt::WModelIndex &parent=Wt::WModelIndex()) const
Wt::WContainerWidget * createFieldWidget(dyno::FBase *field)
static Wt::WContainerWidget * WRealFieldWidgetConstructor(dyno::FBase *field)
static Wt::WContainerWidget * WUIntegerFieldWidgetConstructor(dyno::FBase *field)
static Wt::WContainerWidget * WVector3FieldWidgetConstructor(dyno::FBase *field)
static Wt::WContainerWidget * WVector3iFieldWidgetConstructor(dyno::FBase *field)
virtual const std::string getTemplateName()
Definition FBase.h:51
Vector< uint, 3 > Vec3u
Definition Vector3D.h:96
Vector< int, 3 > Vec3i
Definition Vector3D.h:95
Vector< double, 3 > Vec3d
Definition Vector3D.h:94
Vector< float, 3 > Vec3f
Definition Vector3D.h:93
@ Param
Definition FBase.h:34
@ State
Definition FBase.h:35
unsigned int uint
Definition VkProgram.h:14