use std::boxed::Box;
use std::vec::Vec;
use crate::framebuffer_types::Dimensions;
use crate::window_manager_types::{ WindowLike, KeyChar };
pub enum WindowManagerMessage {
KeyChar(KeyChar),
Touch(usize, usize),
}
pub type WindowBox = Box<dyn WindowLike>;
#[derive(Debug, PartialEq)]
pub enum WindowManagerRequest {
OpenWindow(String),
ClipboardCopy(String),
CloseStartMenu,
Unlock,
Lock,
DoKeyChar(KeyChar),
}
#[derive(PartialEq, Debug)]
pub enum WindowMessageResponse {
Request(WindowManagerRequest),
JustRedraw,
DoNothing,
}
impl WindowMessageResponse {
pub fn is_key_char_request(&self) -> bool {
matches!(self, WindowMessageResponse::Request(WindowManagerRequest::DoKeyChar(_)))
}
}
pub struct KeyPress {
pub key: char,
}
impl KeyPress {
pub fn is_enter(&self) -> bool {
self.key == '𐘂'
}
pub fn is_backspace(&self) -> bool {
self.key == '𐘁'
}
pub fn is_escape(&self) -> bool {
self.key == '𐘃'
}
pub fn is_up_arrow(&self) -> bool {
self.key == '𐙘'
}
pub fn is_down_arrow(&self) -> bool {
self.key == '𐘞'
}
pub fn is_left_arrow(&self) -> bool {
self.key == '𐙣'
}
pub fn is_right_arrow(&self) -> bool {
self.key == '𐙥'
}
pub fn is_arrow(&self) -> bool {
self.is_up_arrow() || self.is_down_arrow() || self.is_left_arrow() || self.is_right_arrow()
}
pub fn is_regular(&self) -> bool {
!self.is_enter() && !self.is_backspace() && !self.is_escape() && !self.is_arrow()
}
}
#[derive(Clone, Copy, PartialEq)]
pub enum Direction {
Left,
Down,
Up,
Right,
}
#[derive(PartialEq)]
pub enum ShortcutType {
StartMenu,
SwitchWorkspace(u8),
MoveWindowToWorkspace(u8),
FocusPrevWindow,
FocusNextWindow,
QuitWindow,
MoveWindow(Direction),
MoveWindowToEdge(Direction),
ChangeWindowSize(Direction),
CenterWindow,
FullscreenWindow,
HalfWidthWindow, ClipboardCopy,
ClipboardPaste(String),
}
pub type WindowsVec = Vec<(usize, String)>;
#[non_exhaustive]
pub enum InfoType {
WindowsInWorkspace(WindowsVec, usize), }
pub enum WindowMessage {
Init(Dimensions),
KeyPress(KeyPress),
CtrlKeyPress(KeyPress),
Shortcut(ShortcutType),
Info(InfoType),
Focus,
Unfocus,
FocusClick,
ChangeDimensions(Dimensions),
Touch(usize, usize),
}