acid/firmware/acid-firmware/ui/main.slint

107 lines
4.1 KiB
Plaintext
Raw Normal View History

import {
Button,
VerticalBox,
LineEdit,
GridBox,
StandardListView,
ListView,
ComboBox,
} from "std-widgets.slint";
2026-01-27 02:46:53 +01:00
// Implementations of standard widgets can be found at https://github.com/slint-ui/slint/tree/master/internal/compiler/widgets
// See https://github.com/slint-ui/slint/issues/4956 for issues with fonts.
import "../fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf";
import { UserSitesView } from "user-sites-view.slint";
import { Style } from "globals.slint";
import { UsersView } from "users-view.slint";
import { LoginView } from "login-view.slint";
2026-01-27 02:46:53 +01:00
import { UserEditView } from "user-edit-view.slint";
2026-01-20 02:55:17 +01:00
export enum AppState {
login,
users,
2026-01-27 02:46:53 +01:00
user-edit,
user-sites,
2026-01-20 02:55:17 +01:00
}
export component AppWindow inherits Window {
2026-01-27 02:46:53 +01:00
// Special characters to generate pre-render glyphs for.
in property <string> dummy: "ÄÖÜÁÉÍÓÚÝŔŚĹŹĆŃĚĽŽŠČŘĎŤŇŮÅäöüáéíóúýŕśĺźćńěľžščřďťňůåß„“”‘’—–@&$%+=¡¿¢£$¥€²³¼½¬¤¦§©®™°´ˇ¨●";
in property <string> dummy_identicon_symbols: "╔╚╰═█░▒▓☺☻╗╝╯═◈◎◐◑◒◓☀☁☂☃☄★☆☎☏⎈⌂☘☢☣☕⌚⌛⏰⚡⛄⛅☔♔♕♖♗♘♙♚♛♜♝♞♟♨♩♪♫⚐⚑⚔⚖⚙⚠⌘⏎✄✆✈✉✌";
default-font-family: "IBM Plex Mono";
2025-12-31 22:24:26 +01:00
default-font-size: 16pt;
height: 8px + 240px + 8px;
width: 960px;
2026-01-27 02:46:53 +01:00
forward-focus: focus-scope;
in property <AppState> app-state: AppState.login;
2026-01-27 02:46:53 +01:00
callback escape();
callback enter-view(view: AppState);
// Login View
in property <[string]> login_usernames <=> login_view.usernames;
callback login_pw_accepted <=> login_view.pw_accepted;
callback login_test_string_accepted <=> login_view.test_string_accepted;
2026-01-27 02:46:53 +01:00
// Users View
callback users_edit_user <=> users_view.edit_user;
// User Edit View
in property <string> user_edit_username <=> user_edit_view.username;
2026-02-04 03:14:21 +01:00
in property <string> user_edit_key_error <=> user_edit_view.key_error;
2026-01-27 02:46:53 +01:00
in-out property <string> user_edit_identicon <=> user_edit_view.identicon;
2026-02-04 03:14:21 +01:00
in-out property <string> user_edit_key_id <=> user_edit_view.key_id;
2026-01-27 02:46:53 +01:00
callback user_edit_compute_identicon <=> user_edit_view.compute_identicon;
2026-02-04 03:14:21 +01:00
callback user_edit_compute_key_id <=> user_edit_view.compute_key_id;
2026-01-27 02:46:53 +01:00
callback user_edit_confirm <=> user_edit_view.confirm;
// User Sites View
2026-02-08 21:04:28 +01:00
in property <[StandardListViewItem]> user_sites_sites <=> user_sites_view.model;
callback user_sites_site_name_edited <=> user_sites_view.site_name_edited;
callback user_sites_site_name_accepted <=> user_sites_view.site_name_accepted;
public function user_sites_site_name_clear() {
user_sites_view.site_name_clear();
}
2026-01-27 02:46:53 +01:00
focus-scope := FocusScope {
key-pressed(event) => {
if event.text == "\u{1b}" {
root.escape();
EventResult.accept
} else {
EventResult.reject
}
2026-01-27 02:46:53 +01:00
}
vertical-box := VerticalBox {
width: 960px;
height: 8px + 240px + 8px;
2026-01-27 02:46:53 +01:00
padding: 0px;
padding-top: 8px;
2026-01-27 02:46:53 +01:00
padding-bottom: 8px;
Rectangle {
height: 240px;
background: #00141d;
// For debugging bounds.
// border-color: #ffcf00;
// border-width: 1px;
login_view := LoginView {
visible: app-state == AppState.login;
users_clicked => {
enter-view(AppState.users);
}
}
2026-01-27 02:46:53 +01:00
users_view := UsersView {
visible: app-state == AppState.users;
}
user_edit_view := UserEditView {
visible: app-state == AppState.user-edit;
cancel => {
root.escape();
}
}
2025-12-31 22:24:26 +01:00
2026-01-27 02:46:53 +01:00
user_sites_view := UserSitesView {
visible: app-state == AppState.user-sites;
}
}
}
}
}