Doxygen Samurai Engine 0.0.1
Doxygen Samurai Engine Documentation
Loading...
Searching...
No Matches
containersWindow.cpp
Go to the documentation of this file.
1
2#include "containersWindow.h"
3#include <windowGraphic/gui.h>
4#include "imguiComboSearch.h"
5#include <imgui_spinner.h>
6
11
12void samurai::ContainersWindow::update(samurai::LogManager &logManager, bool &open, samurai::LoadedDll &loadedDll,
13 samurai::ContainerManager &containerManager, samurai::samuraiImgui::ImGuiIdsManager &imguiIdsManager)
14{
15 ImGui::PushID(imguiIds);
16
17
18 if (!ImGui::Begin(ICON_NAME, &open))
19 {
20 ImGui::End();
21 ImGui::PopID();
22 return;
23 }
24
25
26 static int selected = 0;
27
28 std::string selectedContainerToLaunch = "";
29
30 {
31 ImGui::BeginGroup();
32 if (ImGui::BeginChild("item view", ImVec2(0, -ImGui::GetFrameHeightWithSpacing())))
33 {
34 if (ImGui::BeginTabBar("##Tabs", ImGuiTabBarFlags_Reorderable))
35 {
36 if (ImGui::BeginTabItem(ICON_FK_PLUS_SQUARE_O " Create container"))
37 {
38 ImGui::Text("Available containers");
39 ImGui::Separator();
40
41 //left
42 ImGui::PushID(imguiIds + 1);
43 ImGui::BeginGroup();
44 {
45
46 static char filter[256] = {};
47
48 std::vector<std::string> containerNames;
49 containerNames.reserve(loadedDll.containerInfo.size());
50
51 for (auto& i : loadedDll.containerInfo)
52 {
53 containerNames.push_back(i.containerName);
54 }
55
56 auto contentSize = ImGui::GetItemRectSize();
57 contentSize.y -= ImGui::GetFrameHeightWithSpacing();
58 contentSize.x /= 2;
59
60 ImGui::ListWithFilter("##list box container info", &itemCurrentAvailableCOntainers, filter, sizeof(filter),
61 containerNames, contentSize);
62
63
64 }
65 ImGui::EndGroup();
66 ImGui::PopID();
67
68 ImGui::SameLine();
69
70 //right
71 ImGui::PushID(imguiIds + 2);
72 ImGui::BeginGroup();
73 {
74 if (itemCurrentAvailableCOntainers < loadedDll.containerInfo.size())
75 {
76 auto& c = loadedDll.containerInfo[itemCurrentAvailableCOntainers];
77
78 ImGui::Text("Container info: %s", c.containerName.c_str());
79 ImGui::Separator();
80
81 selectedContainerToLaunch = c.containerName;
82
83 ImGui::Text(ICON_FK_PIE_CHART " Memory");
84 ImGui::Separator();
85
86 ImGui::NewLine();
87
88#pragma region total memory requirement
89 size_t totalHeapMemory = c.containerStaticInfo.defaultHeapMemorySize;
90 for (auto i : c.containerStaticInfo.bonusAllocators)
91 {
92 totalHeapMemory += i;
93 }
94
95 size_t totalMemory = totalHeapMemory + c.containerStructBaseSize;
96
97 ImGui::Text("Total Memory requirement: ");
98 ImGui::SameLine();
100
101 ImGui::Text("Total Heap requirement: ");
102 ImGui::SameLine();
104#pragma endregion
105
106 ImGui::NewLine();
107
108 ImGui::Text("Static Memory requirement: ");
109 ImGui::SameLine();
110 samurai::samuraiImgui::displayMemorySizeValue(c.containerStructBaseSize);
111
112 ImGui::Text("Default Heap Memory requirement: ");
113 ImGui::SameLine();
114 samurai::samuraiImgui::displayMemorySizeValue(c.containerStaticInfo.defaultHeapMemorySize);
115
116 ImGui::Text("Other Heap Memory Allocators count: ");
117 ImGui::SameLine();
118 samurai::samuraiImgui::displayMemorySizeValue(c.containerStaticInfo.bonusAllocators.size());
119
120
121 if (!c.containerStaticInfo.bonusAllocators.empty())
122 {
123 if (ImGui::BeginChild("##heap allocators",
124 { 0, 100 }, true, ImGuiWindowFlags_AlwaysVerticalScrollbar))
125 {
126
127 for (auto i : c.containerStaticInfo.bonusAllocators)
128 {
130 }
131
132
133 }
134 ImGui::EndChild();
135 }
136
137
138
139 ImGui::NewLine();
140 ImGui::Text(ICON_FK_PLUS_SQUARE_O " Launch");
141 ImGui::Separator();
142
143 ImGui::NewLine();
144
145 if (!selectedContainerToLaunch.empty()
146 && ImGui::Button(ICON_FK_PLAY " Launch a default configuration"))
147 {
148 if (createAtSpecificMemoryRegion)
149 {
150 containerManager.createContainer(selectedContainerToLaunch, loadedDll,
151 logManager, imguiIdsManager, std::string(), samurai::TB(1));
152 }
153 else
154 {
155 containerManager.createContainer(selectedContainerToLaunch, loadedDll, logManager,
156 imguiIdsManager, std::string());
157 }
158 }
159
160 ImGui::Checkbox("allocate at specific memory region", &createAtSpecificMemoryRegion);
161
162
163 }
164 else
165 {
166 ImGui::Text("Container info:");
167 ImGui::Separator();
168 }
169
170 }
171 ImGui::EndGroup();
172 ImGui::PopID();
173
174
175
176 ImGui::EndTabItem();
177 }
178
179 if (ImGui::BeginTabItem(ICON_FK_MICROCHIP " Running containers"))
180 {
181
182
183 ImGui::Text("Running containers");
184
185 ImGui::SameLine();
186
187 ImGui::Separator();
188
189 //left
190 std::vector<samurai::containerId_t> containerIds;
191 std::vector<std::string> containerNames;
192
193 ImGui::PushID(imguiIds + 3);
194 ImGui::BeginGroup();
195 {
196
197 containerIds.reserve(containerManager.runningContainers.size());
198 containerNames.reserve(containerManager.runningContainers.size());
199
200 for (auto& i : containerManager.runningContainers)
201 {
202 containerIds.push_back(i.first);
203 containerNames.push_back(
204 std::string(i.second.baseContainerName) + ": " + std::to_string(i.first));
205 }
206
207 auto contentSize = ImGui::GetItemRectSize();
208 contentSize.y -= ImGui::GetFrameHeightWithSpacing();
209 contentSize.x /= 2;
210
211 ImGui::ListWithFilter("##list box container info", &itemCurrentCreatedContainers,
212 filterContainerInfo, sizeof(filterContainerInfo),
213 containerNames, contentSize);
214
215
216 }
217 ImGui::EndGroup();
218 ImGui::PopID();
219
220 ImGui::SameLine();
221
222 //right
223 ImGui::PushID(imguiIds + 4);
224 ImGui::BeginGroup();
225 {
226 if (itemCurrentCreatedContainers < containerIds.size())
227 {
228 auto& c = containerManager.runningContainers[containerIds[itemCurrentCreatedContainers]];
229
230
231 ImGui::Text("Running container: %s #%u", c.baseContainerName, containerIds[itemCurrentCreatedContainers]);
232 ImGui::Separator();
233
234#pragma region buttons
235
236 //calculate cursor pos for 3 buttons
237 {
238 ImGuiStyle& style = ImGui::GetStyle();
239 float width = 0.0f;
240 width += ImGui::CalcTextSize(ICON_FK_PAUSE).x;
241 width += style.ItemSpacing.x;
242 width += ImGui::CalcTextSize(ICON_FK_PAUSE).x;
243 width += style.ItemSpacing.x;
244 width += ImGui::CalcTextSize(ICON_FK_PAUSE).x;
245
247 }
248
249
250
251 ImGui::SameLine();
252
253 bool stopped = false;
254
255 if (ImGui::Button(ICON_FK_STOP))
256 {
257 //todo mabe defer here when api is made
258 containerManager.destroyContainer(containerIds[itemCurrentCreatedContainers], loadedDll, logManager);
259 stopped = true;
260 }
261 if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
262 {
263 ImGui::SetTooltip("Stop container.");
264 }
265
266 ImGui::SameLine();
267
268 if (ImGui::Button(ICON_FK_EJECT))
269 {
270 containerManager.forceTerminateContainer(containerIds[itemCurrentCreatedContainers], loadedDll, logManager);
271 stopped = true;
272 }
273
274 if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
275 {
276 ImGui::SetTooltip("Force stop container (not recomended).\nThis won't call any destructors.");
277 }
278 }
279 }
280 ImGui::EndGroup();
281 ImGui::PopID();
282
283 ImGui::EndTabItem();
284 }
285 ImGui::EndTabBar();
286 }
287
288 ImGui::EndChild();
289 }
290
291
292 ImGui::EndGroup();
293 }
294 ImGui::End();
295 ImGui::PopID();
296 }
void displayMemorySizeValue(size_t value)
Definition gui.cpp:173
void alignForWidth(float width, float alignment=0.5f)
Definition gui.cpp:162
size_t constexpr TB(size_t x)
Definition Sizes.h:8
bool destroyContainer(containerId_t id, samurai::LoadedDll &loadedDll, samurai::LogManager &logManager)
bool forceTerminateContainer(containerId_t id, samurai::LoadedDll &loadedDll, samurai::LogManager &logManager)
containerId_t createContainer(samurai::ContainerInformation containerInformation, samurai::LoadedDll &loadedDll, samurai::LogManager &logManager, samurai::samuraiImgui::ImGuiIdsManager &imguiIDsManager, std::string &cmd, size_t memoryPos=0)
std::unordered_map< containerId_t, samurai::RuntimeContainer > runningContainers
void update(samurai::LogManager &logManager, bool &open, samurai::LoadedDll &loadedDll, samurai::ContainerManager &containerManager, samurai::samuraiImgui::ImGuiIdsManager &imguiIdsManager)
void init(samurai::samuraiImgui::ImGuiIdsManager &imguiIdsManager)
int getImguiIds(unsigned int count=1)
Definition gui.h:60