acid/firmware/acid-firmware/ui/main.slint
2026-02-22 17:19:02 +01:00

107 lines
4.1 KiB
Plaintext

import {
Button,
VerticalBox,
LineEdit,
GridBox,
StandardListView,
ListView,
ComboBox,
} from "std-widgets.slint";
// 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";
import { UserEditView } from "user-edit-view.slint";
export enum AppState {
login,
users,
user-edit,
user-sites,
}
export component AppWindow inherits Window {
// Special characters to generate pre-render glyphs for.
in property <string> dummy: "ÄÖÜÁÉÍÓÚÝŔŚĹŹĆŃĚĽŽŠČŘĎŤŇŮÅäöüáéíóúýŕśĺźćńěľžščřďťňůåß„“”‘’—–@&$%+=¡¿¢£$¥€²³¼½¬¤¦§©®™°´ˇ¨●";
in property <string> dummy_identicon_symbols: "╔╚╰═█░▒▓☺☻╗╝╯═◈◎◐◑◒◓☀☁☂☃☄★☆☎☏⎈⌂☘☢☣☕⌚⌛⏰⚡⛄⛅☔♔♕♖♗♘♙♚♛♜♝♞♟♨♩♪♫⚐⚑⚔⚖⚙⚠⌘⏎✄✆✈✉✌";
default-font-family: "IBM Plex Mono";
default-font-size: 16pt;
height: 8px + 240px + 8px;
width: 960px;
forward-focus: focus-scope;
in property <AppState> app-state: AppState.login;
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;
// Users View
callback users_edit_user <=> users_view.edit_user;
// User Edit View
in property <string> user_edit_username <=> user_edit_view.username;
in property <string> user_edit_key_error <=> user_edit_view.key_error;
in-out property <string> user_edit_identicon <=> user_edit_view.identicon;
in-out property <string> user_edit_key_id <=> user_edit_view.key_id;
callback user_edit_compute_identicon <=> user_edit_view.compute_identicon;
callback user_edit_compute_key_id <=> user_edit_view.compute_key_id;
callback user_edit_confirm <=> user_edit_view.confirm;
// User Sites View
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();
}
focus-scope := FocusScope {
key-pressed(event) => {
if event.text == "\u{1b}" {
root.escape();
EventResult.accept
} else {
EventResult.reject
}
}
vertical-box := VerticalBox {
width: 960px;
height: 8px + 240px + 8px;
padding: 0px;
padding-top: 8px;
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);
}
}
users_view := UsersView {
visible: app-state == AppState.users;
}
user_edit_view := UserEditView {
visible: app-state == AppState.user-edit;
cancel => {
root.escape();
}
}
user_sites_view := UserSitesView {
visible: app-state == AppState.user-sites;
}
}
}
}
}