95 layoutAboutToBeChanged().emit();
96 layoutChanged().emit();
102 layoutAboutToBeChanged().emit();
103 layoutChanged().emit();
115 return mNode->getModuleList().size();
122 if (
mNode != 0 && index.isValid())
124 auto mod =
mNode->getModuleList();
125 auto iter = mod.begin();
126 std::advance(iter, index.row());
128 if (role == Wt::ItemDataRole::Display || role == Wt::ItemDataRole::ToolTip)
130 if (index.column() == 0)
132 return (*iter)->getName();
134 if (index.column() == 1)
136 return (*iter)->getModuleType();
139 else if (role == Wt::ItemDataRole::Decoration)
141 if (index.column() == 0)
143 return std::string(
"icons/module.png");
147 return Wt::cpp17::any();
152 if (orientation == Wt::Orientation::Horizontal && role == Wt::ItemDataRole::Display) {
155 return std::string(
"Module");
157 return std::string(
"Type");
159 return Wt::cpp17::any();
163 return Wt::cpp17::any();
168 parameterWidget->setMargin(0);
170 auto layout = parameterWidget->setLayout(std::make_unique<Wt::WVBoxLayout>());
171 layout->setContentsMargins(0, 0, 0, 0);
173 auto controlPanel = layout->addWidget(std::make_unique<Wt::WPanel>());
174 controlPanel->setTitle(
"Control Variables");
175 controlPanel->setCollapsible(
true);
176 controlPanel->setStyleClass(
"scrollable-content");
177 controlPanel->setMargin(0);
178 auto controlTable = controlPanel->setCentralWidget(std::make_unique<Wt::WTable>());
180 auto statePanel = layout->addWidget(std::make_unique<Wt::WPanel>());
181 statePanel->setTitle(
"State Variables");
182 statePanel->setCollapsible(
true);
183 statePanel->setStyleClass(
"scrollable-content");
185 statePanel->setMargin(0);
186 auto stateTable = statePanel->setCentralWidget(std::make_unique<Wt::WTable>());
188 std::vector<dyno::FBase*>& fields =
mNode->getAllFields();
196 if (var->getClassName() == std::string(
"FVar"))
198 std::string template_name = var->getTemplateName();
208 controlTable->setMargin(10);
213 auto table = panel->setCentralWidget(std::make_unique<Wt::WTable>());
214 std::vector<dyno::FBase*>& fields =
mModule->getAllFields();
222 if (var->getClassName() == std::string(
"FVar"))
224 std::string template_name = var->getTemplateName();
230 Wt::log(
"info") << var->getDescription();
234 table->setMargin(10);
251 Wt::WContainerWidget* fw =
nullptr;
256 fw = reg->constructor(field);
308 Wt::log(
"info") <<
"Error with dynamic_cast!";
319 std::unique_ptr<Wt::WContainerWidget> mWidget(fw);
321 int row = table->rowCount();
322 auto cell0 = table->elementAt(row, 0);
323 auto cell1 = table->elementAt(row, 1);
325 cell0->addNew<Wt::WText>(label);
326 cell0->setContentAlignment(Wt::AlignmentFlag::Middle);
327 cell0->setWidth(labelWidth);
329 cell1->setContentAlignment(Wt::AlignmentFlag::Middle);
330 cell1->setWidth(widgetWidth);
332 cell1->addWidget(std::unique_ptr<Wt::WContainerWidget>(std::move(mWidget)));
344 std::unique_ptr<Wt::WContainerWidget> mWidget(fw);
346 int row = table->rowCount();
347 auto cell0 = table->elementAt(row, 0);
348 auto cell1 = table->elementAt(row, 1);
351 cell0->setContentAlignment(Wt::AlignmentFlag::Middle);
352 cell0->setWidth(150);
354 cell1->setContentAlignment(Wt::AlignmentFlag::Middle);
355 cell1->setWidth(300);
357 cell1->addWidget(std::unique_ptr<Wt::WContainerWidget>(std::move(mWidget)));
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
std::shared_ptr< dyno::Module > mModule
void setModule(std::shared_ptr< dyno::Module > module)
void setNode(std::shared_ptr< dyno::Node > node)
void createParameterPanel(Wt::WContainerWidget *parameterWidget)
Wt::Signal< int > changeValue_
void createParameterPanelModule(Wt::WPanel *panel)
void addStateFieldWidget(Wt::WTable *table, dyno::FBase *field)
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)
std::string getObjectName()
virtual const std::string getTemplateName()
Vector< double, 3 > Vec3d