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);
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++)