mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-07 04:06:48 +01:00
63 lines
1.9 KiB
Rust
63 lines
1.9 KiB
Rust
use crate::*;
|
|
pub struct MenuBar<E: Engine, S, C: Command<S>> {
|
|
pub menus: Vec<Menu<E, S, C>>,
|
|
pub index: usize,
|
|
}
|
|
impl<E: Engine, S, C: Command<S>> MenuBar<E, S, C> {
|
|
pub fn new () -> Self { Self { menus: vec![], index: 0 } }
|
|
pub fn add (mut self, menu: Menu<E, S, C>) -> Self {
|
|
self.menus.push(menu);
|
|
self
|
|
}
|
|
}
|
|
pub struct Menu<E: Engine, S, C: Command<S>> {
|
|
pub title: Arc<str>,
|
|
pub items: Vec<MenuItem<E, S, C>>,
|
|
pub index: Option<usize>,
|
|
}
|
|
impl<E: Engine, S, C: Command<S>> Menu<E, S, C> {
|
|
pub fn new (title: impl AsRef<str>) -> Self {
|
|
Self {
|
|
title: title.as_ref().to_string(),
|
|
items: vec![],
|
|
index: None,
|
|
}
|
|
}
|
|
pub fn add (mut self, item: MenuItem<E, S, C>) -> Self {
|
|
self.items.push(item);
|
|
self
|
|
}
|
|
pub fn sep (mut self) -> Self {
|
|
self.items.push(MenuItem::sep());
|
|
self
|
|
}
|
|
pub fn cmd (mut self, hotkey: &'static str, text: &'static str, command: C) -> Self {
|
|
self.items.push(MenuItem::cmd(hotkey, text, command));
|
|
self
|
|
}
|
|
pub fn off (mut self, hotkey: &'static str, text: &'static str) -> Self {
|
|
self.items.push(MenuItem::off(hotkey, text));
|
|
self
|
|
}
|
|
}
|
|
pub enum MenuItem<E: Engine, S, C: Command<S>> {
|
|
/// Unused.
|
|
__(PhantomData<E>, PhantomData<S>),
|
|
/// A separator. Skip it.
|
|
Separator,
|
|
/// A menu item with command, description and hotkey.
|
|
Command(&'static str, &'static str, C),
|
|
/// A menu item that can't be activated but has description and hotkey
|
|
Disabled(&'static str, &'static str)
|
|
}
|
|
impl<E: Engine, S, C: Command<S>> MenuItem<E, S, C> {
|
|
pub fn sep () -> Self {
|
|
Self::Separator
|
|
}
|
|
pub fn cmd (hotkey: &'static str, text: &'static str, command: C) -> Self {
|
|
Self::Command(hotkey, text, command)
|
|
}
|
|
pub fn off (hotkey: &'static str, text: &'static str) -> Self {
|
|
Self::Disabled(hotkey, text)
|
|
}
|
|
}
|