Added loading window and window group switching
This commit is contained in:
@@ -1,36 +1,136 @@
|
||||
# Copyright (C) 2026 Hector van der Aa <hector@h3cx.dev>
|
||||
# Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
from os import wait
|
||||
import dearpygui.dearpygui as dpg
|
||||
|
||||
import dpg_gauges as dpgg
|
||||
|
||||
from dynalab.tags import MENU_WINDOW_DATA_INPUT
|
||||
from dynalab.state import AppState
|
||||
from dynalab.tags import (
|
||||
MENU_FILE_QUIT,
|
||||
MENU_RECORD_CONFIGURATION,
|
||||
MENU_WINDOW_DATA_INPUT,
|
||||
MENU_WINDOW_RECORD,
|
||||
WINDOW_DATA_INPUT_GAUGE_GRID,
|
||||
WINDOW_GROUP_DATA_INPUT,
|
||||
WINDOW_GROUP_RECORD,
|
||||
)
|
||||
from dynalab.ui.routines import switch_window
|
||||
|
||||
|
||||
LOADING_WINDOW_WIDTH = 600
|
||||
LOADING_WINDOW_HEIGHT = 400
|
||||
|
||||
|
||||
def _loading_content_layout(
|
||||
viewport_size: tuple[int, int],
|
||||
logo_size: tuple[int, int],
|
||||
text_size: tuple[int, int],
|
||||
bottom_margin: int = 24,
|
||||
) -> tuple[list[float], list[float], float]:
|
||||
viewport_width, viewport_height = viewport_size
|
||||
logo_width, logo_height = logo_size
|
||||
text_width, text_height = text_size
|
||||
|
||||
logo_pos = [
|
||||
(viewport_width - logo_width) / 2,
|
||||
(viewport_height - logo_height) / 2,
|
||||
]
|
||||
text_row_pos = [
|
||||
0,
|
||||
max(viewport_height - text_height - bottom_margin, 0),
|
||||
]
|
||||
text_spacer_width = max((viewport_width - text_width) / 2, 0)
|
||||
|
||||
return logo_pos, text_row_pos, text_spacer_width
|
||||
|
||||
|
||||
def build_loading() -> None:
|
||||
with dpg.window(label="DynaLab", tag="loading_window", no_collapse=True):
|
||||
with dpg.window(
|
||||
label="DynaLab",
|
||||
tag="loading_window",
|
||||
width=LOADING_WINDOW_WIDTH,
|
||||
height=LOADING_WINDOW_HEIGHT,
|
||||
no_collapse=True,
|
||||
no_resize=True,
|
||||
no_move=True,
|
||||
no_title_bar=True,
|
||||
):
|
||||
dpg.set_global_font_scale(0.5)
|
||||
dpg.add_text(default_value="Loading DynaLab", tag="loading_text")
|
||||
|
||||
with dpg.group(horizontal=False, tag="loading_logo_group"):
|
||||
dpg.add_image(texture_tag="logo", tag="loading_logo")
|
||||
|
||||
with dpg.group(horizontal=True, tag="loading_text_row"):
|
||||
dpg.add_spacer(width=0, tag="loading_text_left_spacer")
|
||||
dpg.add_text(
|
||||
default_value="Loading DynaLab",
|
||||
tag="loading_text",
|
||||
color=(150, 150, 150, 255),
|
||||
)
|
||||
|
||||
|
||||
def build_windows() -> None:
|
||||
def center_loading_content() -> None:
|
||||
if not dpg.does_item_exist("loading_window"):
|
||||
return
|
||||
|
||||
dpg.set_item_pos("loading_window", [0, 0])
|
||||
dpg.set_item_width("loading_window", LOADING_WINDOW_WIDTH)
|
||||
dpg.set_item_height("loading_window", LOADING_WINDOW_HEIGHT)
|
||||
|
||||
# These may be unavailable before the first rendered frame
|
||||
logo_size = dpg.get_item_rect_size("loading_logo")
|
||||
text_size = dpg.get_item_rect_size("loading_text")
|
||||
|
||||
if logo_size is None or text_size is None:
|
||||
return
|
||||
|
||||
logo_pos, text_row_pos, text_spacer_width = _loading_content_layout(
|
||||
(LOADING_WINDOW_WIDTH, LOADING_WINDOW_HEIGHT), logo_size, text_size
|
||||
)
|
||||
|
||||
dpg.set_item_pos("loading_logo_group", logo_pos)
|
||||
dpg.set_item_pos("loading_text_row", text_row_pos)
|
||||
dpg.set_item_width("loading_text_left_spacer", text_spacer_width)
|
||||
|
||||
|
||||
def build_windows(state: AppState) -> None:
|
||||
with dpg.window(label="DynaLab", tag="main_window", no_collapse=True):
|
||||
with dpg.menu_bar():
|
||||
with dpg.menu(label="File"):
|
||||
dpg.add_menu_item(label="Quit", enabled=True)
|
||||
dpg.add_menu_item(tag=MENU_FILE_QUIT, label="Quit", enabled=True)
|
||||
with dpg.menu(label="Record"):
|
||||
dpg.add_menu_item(tag=MENU_RECORD_CONFIGURATION, label="Configuration")
|
||||
with dpg.menu(label="Window"):
|
||||
dpg.add_menu_item(label="Data Input")
|
||||
dpg.add_menu_item(
|
||||
tag=MENU_WINDOW_RECORD,
|
||||
label="Record",
|
||||
callback=switch_window,
|
||||
user_data=state,
|
||||
)
|
||||
dpg.add_menu_item(
|
||||
tag=MENU_WINDOW_DATA_INPUT,
|
||||
label="Data Input",
|
||||
callback=switch_window,
|
||||
user_data=state,
|
||||
)
|
||||
|
||||
with dpg.child_window(
|
||||
tag="content_area", autosize_x=True, height=0, border=False
|
||||
):
|
||||
# with dpg.group(tag=MENU_WINDOW_DATA_INPUT):
|
||||
with dpgg.gauge_panel(
|
||||
label="Autobreak narrow panel", autosize_x=True, autosize_y=True
|
||||
):
|
||||
with dpgg.gauge_grid(
|
||||
columns="auto", min_column_width=180, tag=MENU_WINDOW_DATA_INPUT
|
||||
with dpg.group(tag=WINDOW_GROUP_DATA_INPUT):
|
||||
state.window_map[MENU_WINDOW_DATA_INPUT] = WINDOW_GROUP_DATA_INPUT
|
||||
with dpgg.gauge_panel(
|
||||
label="Autobreak narrow panel", autosize_x=True, autosize_y=True
|
||||
):
|
||||
pass
|
||||
with dpgg.gauge_grid(
|
||||
columns="auto",
|
||||
min_column_width=180,
|
||||
tag=WINDOW_DATA_INPUT_GAUGE_GRID,
|
||||
):
|
||||
pass
|
||||
|
||||
with dpg.group(tag=WINDOW_GROUP_RECORD, show=False):
|
||||
state.window_map[MENU_WINDOW_RECORD] = WINDOW_GROUP_RECORD
|
||||
dpg.add_text("Some text")
|
||||
|
||||
Reference in New Issue
Block a user