aegis_gui.offcanvas

 1import dash
 2import dash_bootstrap_components as dbc
 3from aegis_gui.guisettings.GuiSettings import gui_settings
 4
 5
 6def get_offcanvas_trigger():
 7    return dbc.Button(
 8        children=[dash.html.I(className="bi bi-gear-wide"), "Preferences"],
 9        id="open-offcanvas-backdrop",
10        n_clicks=0,
11        outline=True,
12        color="primary",
13        style={"marginTop": "2rem"},
14    )
15
16
17def get_theme_switch():
18    return dash.html.Div(
19        [
20            dbc.Label("Dark mode", html_for="color-mode-switch"),
21            dbc.Switch(id="color-mode-switch", value=False, className="d-inline-block ms-1", persistence=True),
22        ]
23    )
24
25
26def get_delete_switch():
27    return dash.html.Div(
28        [
29            dbc.Label("One-click deletion", html_for="one-click-deletion"),
30            dbc.Switch(
31                id="one-click-deletion",
32                value=False,
33                className="d-inline-block ms-1",
34                persistence=True,
35            ),
36        ]
37    )
38
39
40def get_gui_env_settings():
41    return dash.html.Div(
42        [
43            dash.html.Hr(),
44            # dash.html.P("GUI settings"),
45            dash.html.P(
46                f"environment: {gui_settings.ENVIRONMENT}",
47                className="text-secondary",
48            ),
49            dash.html.P(
50                f"simulation number limit: {gui_settings.SIMULATION_NUMBER_LIMIT}",
51                className="text-secondary",
52            ),
53        ],
54        style={"padding": "0 0.5rem 0.25rem 0.5rem"},
55    )
56
57
58def get_offcanvas():
59    children = [
60        get_theme_switch(),
61        get_delete_switch() if gui_settings.ENVIRONMENT == "local" else None,
62        get_gui_env_settings(),
63    ]
64    return dbc.Offcanvas(
65        children=children,
66        id="offcanvas-backdrop",
67        scrollable=True,
68        title="User preferences",
69    )
70
71
72@dash.callback(
73    dash.Output("offcanvas-backdrop", "is_open"),
74    dash.Input("open-offcanvas-backdrop", "n_clicks"),
75    dash.State("offcanvas-backdrop", "is_open"),
76)
77def toggle_offcanvas(n1, is_open):
78    if n1:
79        return not is_open
80    return is_open
81
82
83dash.clientside_callback(
84    """
85    (switchOn) => {
86       document.documentElement.setAttribute('data-bs-theme', switchOn ? 'dark' : 'false');  
87       return window.dash_clientside.no_update
88    }
89    """,
90    dash.Output("color-mode-switch", "id"),
91    dash.Input("color-mode-switch", "value"),
92)
def get_offcanvas_trigger():
 7def get_offcanvas_trigger():
 8    return dbc.Button(
 9        children=[dash.html.I(className="bi bi-gear-wide"), "Preferences"],
10        id="open-offcanvas-backdrop",
11        n_clicks=0,
12        outline=True,
13        color="primary",
14        style={"marginTop": "2rem"},
15    )
def get_theme_switch():
18def get_theme_switch():
19    return dash.html.Div(
20        [
21            dbc.Label("Dark mode", html_for="color-mode-switch"),
22            dbc.Switch(id="color-mode-switch", value=False, className="d-inline-block ms-1", persistence=True),
23        ]
24    )
def get_delete_switch():
27def get_delete_switch():
28    return dash.html.Div(
29        [
30            dbc.Label("One-click deletion", html_for="one-click-deletion"),
31            dbc.Switch(
32                id="one-click-deletion",
33                value=False,
34                className="d-inline-block ms-1",
35                persistence=True,
36            ),
37        ]
38    )
def get_gui_env_settings():
41def get_gui_env_settings():
42    return dash.html.Div(
43        [
44            dash.html.Hr(),
45            # dash.html.P("GUI settings"),
46            dash.html.P(
47                f"environment: {gui_settings.ENVIRONMENT}",
48                className="text-secondary",
49            ),
50            dash.html.P(
51                f"simulation number limit: {gui_settings.SIMULATION_NUMBER_LIMIT}",
52                className="text-secondary",
53            ),
54        ],
55        style={"padding": "0 0.5rem 0.25rem 0.5rem"},
56    )
def get_offcanvas():
59def get_offcanvas():
60    children = [
61        get_theme_switch(),
62        get_delete_switch() if gui_settings.ENVIRONMENT == "local" else None,
63        get_gui_env_settings(),
64    ]
65    return dbc.Offcanvas(
66        children=children,
67        id="offcanvas-backdrop",
68        scrollable=True,
69        title="User preferences",
70    )
@dash.callback(dash.Output('offcanvas-backdrop', 'is_open'), dash.Input('open-offcanvas-backdrop', 'n_clicks'), dash.State('offcanvas-backdrop', 'is_open'))
def toggle_offcanvas(n1, is_open):
73@dash.callback(
74    dash.Output("offcanvas-backdrop", "is_open"),
75    dash.Input("open-offcanvas-backdrop", "n_clicks"),
76    dash.State("offcanvas-backdrop", "is_open"),
77)
78def toggle_offcanvas(n1, is_open):
79    if n1:
80        return not is_open
81    return is_open