34 : WContainerWidget(),
bRunFlag(false)
39 auto layout = this->setLayout(std::make_unique<Wt::WBorderLayout>());
40 layout->setContentsMargins(0, 0, 0, 0);
43 auto naviBar = layout->addWidget(std::make_unique<Wt::WNavigationBar>(), Wt::LayoutPosition::North);
44 naviBar->addStyleClass(
"main-nav");
45 naviBar->setTitle(
"PeriDyno",
"https://github.com/peridyno/peridyno");
46 naviBar->setMargin(0);
49 mSceneCanvas = layout->addWidget(std::make_unique<WSimulationCanvas>(), Wt::LayoutPosition::Center);
52 auto widget0 = layout->addWidget(std::make_unique<Wt::WContainerWidget>(), Wt::LayoutPosition::West);
53 widget0->setWidth(400);
57 auto widget1 = layout->addWidget(std::make_unique<Wt::WStackedWidget>(), Wt::LayoutPosition::East);
58 auto menu = naviBar->addMenu(std::make_unique<Wt::WMenu>(widget1), Wt::AlignmentFlag::Right);
69 menu->setMargin(5, Wt::Side::Right);
81 menu->addItem(
"Samples", std::unique_ptr<WSampleWidget>(sampleWidget));
83 auto pythonItem = menu->addItem(
"Python", std::unique_ptr<WPythonWidget>(pythonWidget));
85 pythonWidget->
updateSceneGraph().connect([=](std::shared_ptr<dyno::SceneGraph> scene) {
89 sampleWidget->clicked().connect([=](
Sample* sample)
95 std::string path = sample->
source();
96 std::ifstream ifs(path);
99 std::string content((std::istreambuf_iterator<char>(ifs)),
100 (std::istreambuf_iterator<char>()));
101 pythonWidget->setText(content);
102 pythonWidget->execute(content);
107 std::string content =
"Error: Not Find The Python File";
108 pythonWidget->setText(content);
113 auto hide = menu->addItem(
">>", 0);
115 hide->clicked().connect([=]() {
116 menu->contentsStack()->setCurrentWidget(0);
131 auto layout = parent->setLayout(std::make_unique<Wt::WVBoxLayout>());
132 layout->setContentsMargins(0, 0, 0, 0);
133 parent->setMargin(0);
136 auto panel0 = layout->addWidget(std::make_unique<Wt::WPanel>(), 2);
137 panel0->setTitle(
"Node Tree");
138 panel0->setCollapsible(
true);
139 panel0->setMargin(0);
142 auto treeView = panel0->setCentralWidget(std::make_unique<Wt::WTreeView>());
143 treeView->setMargin(0);
144 treeView->setSortingEnabled(
false);
145 treeView->setSelectionMode(Wt::SelectionMode::Single);
146 treeView->setEditTriggers(Wt::EditTrigger::None);
147 treeView->setColumnResizeEnabled(
true);
149 treeView->setColumnWidth(0, 100);
150 treeView->setColumnWidth(1, 280);
153 auto panel1 = layout->addWidget(std::make_unique<Wt::WPanel>(), 2);
154 panel1->setTitle(
"Module List");
155 panel1->setCollapsible(
true);
156 panel1->setStyleClass(
"scrollable-content");
157 auto tableView = panel1->setCentralWidget(std::make_unique<Wt::WTableView>());
158 treeView->setSortingEnabled(
false);
159 tableView->setSortingEnabled(
false);
160 tableView->setSelectionMode(Wt::SelectionMode::Single);
161 tableView->setEditTriggers(Wt::EditTrigger::None);
165 auto panel2 = layout->addWidget(std::make_unique<Wt::WPanel>(), 6);
166 panel2->setTitle(
"Control Variable");
167 panel2->setCollapsible(
true);
168 panel2->setStyleClass(
"scrollable-content");
171 treeView->clicked().connect([=](
const Wt::WModelIndex& idx,
const Wt::WMouseEvent& evt)
179 tableView->clicked().connect([=](
const Wt::WModelIndex& idx,
const Wt::WMouseEvent& evt)
181 auto module = mModuleDataModel->getModule(idx);
186 tableView->doubleClicked().connect([=](
const Wt::WModelIndex& idx,
const Wt::WMouseEvent& evt)
189 if (mod->getModuleType() ==
"VisualModule")
191 Wt::log(
"info") << mod->getName();
196 auto panel3 = layout->addWidget(std::make_unique<Wt::WPanel>(), 1);
197 panel3->setTitle(
"Simulation Control");
198 panel3->setCollapsible(
false);
200 auto widget2 = panel3->setCentralWidget(std::make_unique<Wt::WContainerWidget>());
201 auto layout2 = widget2->setLayout(std::make_unique<Wt::WHBoxLayout>());
203 layout2->setContentsMargins(0, 0, 0, 0);
204 startButton = layout2->addWidget(std::make_unique<Wt::WPushButton>(
"Start"));
205 auto stopButton = layout2->addWidget(std::make_unique<Wt::WPushButton>(
"Stop"));
206 auto stepButton = layout2->addWidget(std::make_unique<Wt::WPushButton>(
"Step"));
207 auto resetButton = layout2->addWidget(std::make_unique<Wt::WPushButton>(
"Reset"));
210 stopButton->setId(
"stopButton");
211 stepButton->setId(
"stepButton");
212 resetButton->setId(
"resetButton");
225 stopButton->clicked().connect([=] {
226 stopButton->doJavaScript(
"var stopButton = document.getElementById('stopButton');"
227 "stopButton.blur();");
229 stepButton->clicked().connect([=] {
230 stepButton->doJavaScript(
"var stepButton = document.getElementById('stepButton');"
231 "stepButton.blur();");
233 resetButton->clicked().connect([=] {
234 resetButton->doJavaScript(
"var resetButton = document.getElementById('resetButton');"
235 "resetButton.blur();");
WSimulationCanvas * mSceneCanvas
std::shared_ptr< WNodeDataModel > mNodeDataModel
Wt::WPushButton * startButton
std::shared_ptr< dyno::SceneGraph > mScene
void initMenu(Wt::WMenu *)
void initLeftPanel(Wt::WContainerWidget *)
std::shared_ptr< WParameterDataNode > mParameterDataNode
void setScene(std::shared_ptr< dyno::SceneGraph > scene)
std::shared_ptr< WModuleDataModel > mModuleDataModel