75 lines
2.2 KiB
Text
75 lines
2.2 KiB
Text
// Main Entry Point - Following Feature-Sliced Design
|
|
// This is the root file that main.rs imports
|
|
// Following the pattern from moonlogs: index -> app -> pages/widgets/entities/shared
|
|
|
|
import { App } from "app/index.slint";
|
|
import { Theme } from "shared/design-system/index.slint";
|
|
|
|
export component MainWindow inherits Window {
|
|
// Window properties
|
|
preferred-width: 1280px;
|
|
preferred-height: 1024px;
|
|
min-width: 1080px;
|
|
min-height: 800px;
|
|
no-frame: true;
|
|
background: Theme.background;
|
|
|
|
// Properties
|
|
in-out property <string> current-page: "Dashboard";
|
|
in-out property <string> user-initials: "JD";
|
|
|
|
// Callbacks that will be handled by main.rs
|
|
callback navigation-changed(string);
|
|
callback theme-toggle-clicked();
|
|
callback logout-clicked();
|
|
callback buy-clicked();
|
|
callback sell-clicked();
|
|
callback start-drag-window();
|
|
callback minimize-window();
|
|
callback maximize-window();
|
|
callback close-window();
|
|
|
|
// Public function that can be called from Rust to toggle theme
|
|
public function toggle_theme() {
|
|
Theme.is-dark-mode = !Theme.is-dark-mode;
|
|
debug("Theme toggled from Rust. New state: " + (Theme.is-dark-mode ? "dark" : "light"));
|
|
}
|
|
|
|
// App component handles all the UI following FSD layers
|
|
App {
|
|
width: 100%;
|
|
height: 100%;
|
|
current-page: root.current-page;
|
|
user-initials: root.user-initials;
|
|
|
|
// Forward all callbacks to main.rs
|
|
navigation-changed(page) => {
|
|
root.current-page = page;
|
|
root.navigation-changed(page);
|
|
}
|
|
theme-toggle-clicked => {
|
|
root.theme-toggle-clicked();
|
|
}
|
|
logout-clicked => {
|
|
root.logout-clicked();
|
|
}
|
|
buy-clicked => {
|
|
root.buy-clicked();
|
|
}
|
|
sell-clicked => {
|
|
root.sell-clicked();
|
|
}
|
|
start-drag-window => {
|
|
root.start-drag-window();
|
|
}
|
|
minimize-window => {
|
|
root.minimize-window();
|
|
}
|
|
maximize-window => {
|
|
root.maximize-window();
|
|
}
|
|
close-window => {
|
|
root.close-window();
|
|
}
|
|
}
|
|
}
|