lemna 0.4.0

A Reactive UI framework for Rust
use std::path::PathBuf;

#[derive(Debug, Clone, PartialEq)]
pub enum Data {
    String(String),
    Filepath(PathBuf),
    Custom(Vec<u8>),
}

impl From<&str> for Data {
    fn from(s: &str) -> Data {
        Data::String(s.to_string())
    }
}

#[derive(Copy, Clone, Debug, PartialEq)]
pub enum Motion {
    Mouse { x: f32, y: f32 },
    Scroll { x: f32, y: f32 },
}

#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum Key {
    Unknown,
    Backspace,
    Tab,
    Return,
    Escape,
    Space,
    Exclaim,
    Quotedbl,
    Hash,
    Dollar,
    Percent,
    Ampersand,
    Quote,
    LeftParen,
    RightParen,
    Asterisk,
    Plus,
    Comma,
    Minus,
    Period,
    Slash,
    D0,
    D1,
    D2,
    D3,
    D4,
    D5,
    D6,
    D7,
    D8,
    D9,
    Colon,
    Semicolon,
    Less,
    Equals,
    Greater,
    Question,
    At,
    LeftBracket,
    Backslash,
    RightBracket,
    Caret,
    Underscore,
    Backquote,
    A,
    B,
    C,
    D,
    E,
    F,
    G,
    H,
    I,
    J,
    K,
    L,
    M,
    N,
    O,
    P,
    Q,
    R,
    S,
    T,
    U,
    V,
    W,
    X,
    Y,
    Z,
    Delete,
    CapsLock,
    F1,
    F2,
    F3,
    F4,
    F5,
    F6,
    F7,
    F8,
    F9,
    F10,
    F11,
    F12,
    PrintScreen,
    ScrollLock,
    Pause,
    Insert,
    Home,
    PageUp,
    End,
    PageDown,
    Right,
    Left,
    Down,
    Up,
    NumLockClear,
    NumPadDivide,
    NumPadMultiply,
    NumPadMinus,
    NumPadPlus,
    NumPadEnter,
    NumPad1,
    NumPad2,
    NumPad3,
    NumPad4,
    NumPad5,
    NumPad6,
    NumPad7,
    NumPad8,
    NumPad9,
    NumPad0,
    NumPadPeriod,
    Application,
    Power,
    NumPadEquals,
    F13,
    F14,
    F15,
    F16,
    F17,
    F18,
    F19,
    F20,
    F21,
    F22,
    F23,
    F24,
    Execute,
    Help,
    Menu,
    Select,
    Stop,
    Again,
    Undo,
    Cut,
    Copy,
    Paste,
    Find,
    Mute,
    VolumeUp,
    VolumeDown,
    NumPadComma,
    NumPadEqualsAS400,
    AltErase,
    Sysreq,
    Cancel,
    Clear,
    Prior,
    Return2,
    Separator,
    Out,
    Oper,
    ClearAgain,
    CrSel,
    ExSel,
    NumPad00,
    NumPad000,
    ThousandsSeparator,
    DecimalSeparator,
    CurrencyUnit,
    CurrencySubUnit,
    NumPadLeftParen,
    NumPadRightParen,
    NumPadLeftBrace,
    NumPadRightBrace,
    NumPadTab,
    NumPadBackspace,
    NumPadA,
    NumPadB,
    NumPadC,
    NumPadD,
    NumPadE,
    NumPadF,
    NumPadXor,
    NumPadPower,
    NumPadPercent,
    NumPadLess,
    NumPadGreater,
    NumPadAmpersand,
    NumPadDblAmpersand,
    NumPadVerticalBar,
    NumPadDblVerticalBar,
    NumPadColon,
    NumPadHash,
    NumPadSpace,
    NumPadAt,
    NumPadExclam,
    NumPadMemStore,
    NumPadMemRecall,
    NumPadMemClear,
    NumPadMemAdd,
    NumPadMemSubtract,
    NumPadMemMultiply,
    NumPadMemDivide,
    NumPadPlusMinus,
    NumPadClear,
    NumPadClearEntry,
    NumPadBinary,
    NumPadOctal,
    NumPadDecimal,
    NumPadHexadecimal,
    LCtrl,
    LShift,
    LAlt,
    LMeta,
    RCtrl,
    RShift,
    RAlt,
    RMeta,
}

#[derive(Copy, Clone, Debug, PartialEq)]
pub enum MouseButton {
    Left,
    Right,
    Middle,
    Aux1,
    Aux2,
}

#[derive(Copy, Clone, PartialEq, Debug)]
pub enum Button {
    Keyboard(Key),
    Mouse(MouseButton),
}

#[derive(Clone, Debug, PartialEq)]
pub enum Drag {
    Start(Data),
    End,
    Dragging,
    Drop(Data),
}

#[derive(Clone, Debug, PartialEq)]
pub enum Input {
    Press(Button),
    Release(Button),
    Resize,
    Motion(Motion),
    Text(String),
    Focus(bool),
    Menu(i32),
    MouseLeaveWindow,
    MouseEnterWindow,
    Timer,
    Exit,
    Drag(Drag),
}