diff --git a/code/main.cpp b/code/main.cpp index 524ab46..a2ffe10 100644 --- a/code/main.cpp +++ b/code/main.cpp @@ -370,10 +370,24 @@ void system_info_gui(Gui_Layout_Grid *grid) gui_text_aligned(grid->rect_at({4,0}, {2,1}), uptime, GUI_ALIGN_RIGHT); + Rect r; + Gui_Layout_Grid layout; + + + // Window reserved for future system info + r = grid->rect_at({0,1}, {2,3}); + layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 2, 3, 0.2*engine.gui_scaling); + + style_select(ctx, system_info.status); + gui_window_start(r, 0xabc23401); + style_select(ctx, SECTION_STATUS_NONE); + + gui_window_end(); + // Window with cpu n., load, ram - Rect r = grid->rect_at({4,1}, {2,3}); - Gui_Layout_Grid layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 2, 3, 0.2*engine.gui_scaling); + r = grid->rect_at({4,1}, {2,3}); + layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 2, 3, 0.2*engine.gui_scaling); style_select(ctx, system_info.status); gui_window_start(r, 0xabcdef01); @@ -398,8 +412,8 @@ void network_gui(Gui_Layout_Grid *grid) { Gui_Context *ctx = &global_gui_state.default_context; - Rect r = grid->rect_at({0,4}, {3,13}); - Gui_Layout_Grid layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 3, 13, 0.2*engine.gui_scaling); + Rect r = grid->rect_at({0,5}, {2,grid->max_cells_count.y - 5}); + Gui_Layout_Grid layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 2, grid->max_cells_count.y - 5, 0.2*engine.gui_scaling); style_select(ctx, network_info.status); gui_window_start(r, 0xabcdef02); @@ -409,7 +423,7 @@ void network_gui(Gui_Layout_Grid *grid) layout.row(); r = layout.rect_at({0,1}, layout.max_cells_count - v2s{0,1}); - layout = gui_layout_grid_create_by_divisions(r.position, r.size, 3, 3, 0.2*engine.gui_scaling); + layout = gui_layout_grid_create_by_divisions(r.position, r.size, layout.max_cells_count.x, layout.max_cells_count.y/3, 0.2*engine.gui_scaling); for(s32 i = 0; i < network_info.device_count; i++) { @@ -521,66 +535,74 @@ void vm_gui(Gui_Layout_Grid *grid) { Gui_Context *ctx = &global_gui_state.default_context; - Rect r = grid->rect_at({0,17}, {4,5}); - Gui_Layout_Grid layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 4, 5, 0.2*engine.gui_scaling); + Rect r = grid->rect_at({2,5}, {2,grid->max_cells_count.y - 5}); + Gui_Layout_Grid layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 2, grid->max_cells_count.y - 5, 0.2*engine.gui_scaling); style_select(ctx, virt_info.status); gui_window_start(r, 0xabcdef03); style_select(ctx, SECTION_STATUS_NONE); + gui_text_aligned(layout.cell(GUI_LAYOUT_MAX_CELLS), "Virtual machines", GUI_ALIGN_CENTER); + layout.row(); + + r = layout.rect_at({0,1}, layout.max_cells_count - v2s{0,1}); + layout = gui_layout_grid_create_by_divisions(r.position, r.size, layout.max_cells_count.x, layout.max_cells_count.y/4, 0.2*engine.gui_scaling); + - Gui_Style old_style = ctx->style; for(s32 i = 0; i < virt_info.domain_count; i++) { Virt_Domain *domain = &virt_info.domains[i]; - // Name and state + // Status + Section_Status status = SECTION_STATUS_NONE; switch(domain->state) { case VIR_DOMAIN_NOSTATE: - ctx->style.button_color = old_style.button_color; + status = SECTION_STATUS_NONE; break; case VIR_DOMAIN_RUNNING: - ctx->style.button_color = v4{0,1,0,1}; + status = SECTION_STATUS_OK; break; case VIR_DOMAIN_BLOCKED: case VIR_DOMAIN_SHUTOFF: case VIR_DOMAIN_CRASHED: - ctx->style.button_color = v4{1,0,0,1}; + status = SECTION_STATUS_ERROR; break; case VIR_DOMAIN_SHUTDOWN: - ctx->style.button_color = v4{0,.6,0,1}; + status = SECTION_STATUS_ERROR; break; case VIR_DOMAIN_PAUSED: case VIR_DOMAIN_PMSUSPENDED: - ctx->style.button_color = v4{.7,.7,0,1}; + status = SECTION_STATUS_WARNING; break; default: - ctx->style.button_color = old_style.button_color; + status = SECTION_STATUS_NONE; } - gui_button(layout.cell(), domain->name); - gui_id_stack_push(ctx, gui_id_from_pointer(ctx, domain->name)); + Rect r = layout.cell(); + style_select(ctx, status); + gui_panel(r); + style_select(ctx, SECTION_STATUS_NONE); - ctx->style = old_style; + Gui_Layout_Grid layout = gui_layout_grid_create_by_divisions(r.position, r.size, 2, 4, 0.1*engine.gui_scaling); + + gui_text(layout.cell(2), domain->name); - // CPU usage - char cpu[128]; snprintf(cpu, 128, "%.2f%%", domain->cpu_usage * 100); - gui_button(layout.cell(), cpu); char ram[128]; snprintf(ram, 128, "%.2f GB", domain->ram_total / (1024.0*1024.0*1024.0)); - gui_button(layout.cell(), ram); + gui_text(layout.cell(1), ram); char cpu_count[128]; snprintf(cpu_count, 128, "%hd vCPU", domain->vcpus); - gui_button(layout.cell(), cpu_count); + gui_text(layout.cell(1), cpu_count); + + layout.row(2); + char cpu[128]; snprintf(cpu, 128, "CPU: %.2f%%", domain->cpu_usage * 100); + gui_text(layout.cell(2), cpu); - gui_id_stack_pop(ctx); layout.row(); } - ctx->style = old_style; - gui_window_end(); } @@ -589,13 +611,19 @@ void fs_gui(Gui_Layout_Grid *grid) { Gui_Context *ctx = &global_gui_state.default_context; - Rect r = grid->rect_at({4,4}, {2,18}); - Gui_Layout_Grid layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 2, 18, 0.2*engine.gui_scaling); + Rect r = grid->rect_at({4,5}, {2,grid->max_cells_count.y - 5}); + Gui_Layout_Grid layout = gui_layout_grid_create_by_divisions(v2{0,0}, r.size, 2, grid->max_cells_count.y - 5, 0.2*engine.gui_scaling); style_select(ctx, fs_info.status); gui_window_start(r, 0xabcdef04); style_select(ctx, SECTION_STATUS_NONE); + gui_text_aligned(layout.cell(GUI_LAYOUT_MAX_CELLS), "Storage", GUI_ALIGN_CENTER); + layout.row(); + + r = layout.rect_at({0,1}, layout.max_cells_count - v2s{0,1}); + layout = gui_layout_grid_create_by_divisions(r.position, r.size, layout.max_cells_count.x, layout.max_cells_count.y/1, 0.2*engine.gui_scaling); + for(s32 i = 0; i < fs_info.fs_count; i++)