Virtualization: better presentation

This commit is contained in:
2023-09-30 03:00:50 +02:00
parent a345141a71
commit 138655191b

View File

@@ -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); 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 // Window with cpu n., load, ram
Rect r = grid->rect_at({4,1}, {2,3}); 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); 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); style_select(ctx, system_info.status);
gui_window_start(r, 0xabcdef01); gui_window_start(r, 0xabcdef01);
@@ -398,8 +412,8 @@ void network_gui(Gui_Layout_Grid *grid)
{ {
Gui_Context *ctx = &global_gui_state.default_context; Gui_Context *ctx = &global_gui_state.default_context;
Rect r = grid->rect_at({0,4}, {3,13}); 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, 3, 13, 0.2*engine.gui_scaling); 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); style_select(ctx, network_info.status);
gui_window_start(r, 0xabcdef02); gui_window_start(r, 0xabcdef02);
@@ -409,7 +423,7 @@ void network_gui(Gui_Layout_Grid *grid)
layout.row(); layout.row();
r = layout.rect_at({0,1}, layout.max_cells_count - v2s{0,1}); 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++) 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; Gui_Context *ctx = &global_gui_state.default_context;
Rect r = grid->rect_at({0,17}, {4,5}); 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, 4, 5, 0.2*engine.gui_scaling); 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); style_select(ctx, virt_info.status);
gui_window_start(r, 0xabcdef03); gui_window_start(r, 0xabcdef03);
style_select(ctx, SECTION_STATUS_NONE); 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++) for(s32 i = 0; i < virt_info.domain_count; i++)
{ {
Virt_Domain *domain = &virt_info.domains[i]; Virt_Domain *domain = &virt_info.domains[i];
// Name and state // Status
Section_Status status = SECTION_STATUS_NONE;
switch(domain->state) switch(domain->state)
{ {
case VIR_DOMAIN_NOSTATE: case VIR_DOMAIN_NOSTATE:
ctx->style.button_color = old_style.button_color; status = SECTION_STATUS_NONE;
break; break;
case VIR_DOMAIN_RUNNING: case VIR_DOMAIN_RUNNING:
ctx->style.button_color = v4{0,1,0,1}; status = SECTION_STATUS_OK;
break; break;
case VIR_DOMAIN_BLOCKED: case VIR_DOMAIN_BLOCKED:
case VIR_DOMAIN_SHUTOFF: case VIR_DOMAIN_SHUTOFF:
case VIR_DOMAIN_CRASHED: case VIR_DOMAIN_CRASHED:
ctx->style.button_color = v4{1,0,0,1}; status = SECTION_STATUS_ERROR;
break; break;
case VIR_DOMAIN_SHUTDOWN: case VIR_DOMAIN_SHUTDOWN:
ctx->style.button_color = v4{0,.6,0,1}; status = SECTION_STATUS_ERROR;
break; break;
case VIR_DOMAIN_PAUSED: case VIR_DOMAIN_PAUSED:
case VIR_DOMAIN_PMSUSPENDED: case VIR_DOMAIN_PMSUSPENDED:
ctx->style.button_color = v4{.7,.7,0,1}; status = SECTION_STATUS_WARNING;
break; break;
default: 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)); 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); 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(); layout.row();
} }
ctx->style = old_style;
gui_window_end(); gui_window_end();
} }
@@ -589,13 +611,19 @@ void fs_gui(Gui_Layout_Grid *grid)
{ {
Gui_Context *ctx = &global_gui_state.default_context; Gui_Context *ctx = &global_gui_state.default_context;
Rect r = grid->rect_at({4,4}, {2,18}); 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, 18, 0.2*engine.gui_scaling); 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); style_select(ctx, fs_info.status);
gui_window_start(r, 0xabcdef04); gui_window_start(r, 0xabcdef04);
style_select(ctx, SECTION_STATUS_NONE); 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++) for(s32 i = 0; i < fs_info.fs_count; i++)