fret_runtime/menu/
model.rs1use std::sync::Arc;
2
3use crate::{CommandId, WhenExpr};
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
8#[serde(rename_all = "snake_case")]
9pub enum MenuRole {
10 App,
11 File,
12 Edit,
13 View,
14 Window,
15 Help,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
19#[serde(rename_all = "snake_case")]
20pub enum SystemMenuType {
21 Services,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
25pub enum MenuItemToggleKind {
26 Checkbox,
27 Radio,
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
35pub struct MenuItemToggle {
36 pub kind: MenuItemToggleKind,
37 pub checked: bool,
38}
39
40#[derive(Debug, Clone, PartialEq, Eq)]
48pub struct MenuBar {
49 pub menus: Vec<Menu>,
50}
51
52#[derive(Debug, Clone, PartialEq, Eq)]
53pub struct Menu {
54 pub title: Arc<str>,
55 pub role: Option<MenuRole>,
56 pub mnemonic: Option<char>,
61 pub items: Vec<MenuItem>,
62}
63
64#[derive(Debug, Clone, PartialEq, Eq)]
65pub enum MenuItem {
66 Command {
67 command: CommandId,
68 when: Option<WhenExpr>,
69 toggle: Option<MenuItemToggle>,
70 },
71 Label {
76 title: Arc<str>,
77 },
78 Separator,
79 Submenu {
80 title: Arc<str>,
81 when: Option<WhenExpr>,
82 items: Vec<MenuItem>,
83 },
84 SystemMenu {
88 title: Arc<str>,
89 menu_type: SystemMenuType,
90 },
91}
92
93impl MenuBar {
94 pub fn empty() -> Self {
95 Self { menus: Vec::new() }
96 }
97}