//! All VST plugin editor related functionality.
use num_enum::{IntoPrimitive, TryFromPrimitive};
use std::os::raw::c_void;
/// Implemented by plugin editors.
#[allow(unused_variables)]
pub trait Editor {
/// Get the size of the editor window.
fn size(&self) -> (i32, i32);
/// Get the coordinates of the editor window.
fn position(&self) -> (i32, i32);
/// Editor idle call. Called by host.
fn idle(&mut self) {}
/// Called when the editor window is closed.
fn close(&mut self) {}
/// Called when the editor window is opened.
///
/// `parent` is a window pointer that the new window should attach itself to.
/// **It is dependent upon the platform you are targeting.**
///
/// A few examples:
///
/// - On Windows, it should be interpreted as a `HWND`
/// - On Mac OS X (64 bit), it should be interpreted as a `NSView*`
/// - On X11 platforms, it should be interpreted as a `u32` (the ID number of the parent window)
///
/// Return `true` if the window opened successfully, `false` otherwise.
fn open(&mut self, parent: *mut c_void) -> bool;
/// Return whether the window is currently open.
fn is_open(&mut self) -> bool;
/// Set the knob mode for this editor (if supported by host).
///
/// Return `true` if the knob mode was set.
fn set_knob_mode(&mut self, mode: KnobMode) -> bool {
false
}
/// Receive key up event. Return `true` if the key was used.
fn key_up(&mut self, keycode: KeyCode) -> bool {
false
}
/// Receive key down event. Return `true` if the key was used.
fn key_down(&mut self, keycode: KeyCode) -> bool {
false
}
}
/// Rectangle used to specify dimensions of editor window.
#[doc(hidden)]
#[derive(Copy, Clone, Debug)]
pub struct Rect {
/// Y value in pixels of top side.
pub top: i16,
/// X value in pixels of left side.
pub left: i16,
/// Y value in pixels of bottom side.
pub bottom: i16,
/// X value in pixels of right side.
pub right: i16,
}
/// A platform independent key code. Includes modifier keys.
#[derive(Copy, Clone, Debug)]
pub struct KeyCode {
/// ASCII character for key pressed (if applicable).
pub character: char,
/// Key pressed. See `enums::Key`.
pub key: Key,
/// Modifier key bitflags. See `enums::flags::modifier_key`.
pub modifier: u8,
}
/// Allows host to set how a parameter knob works.
#[repr(isize)]
#[derive(Copy, Clone, Debug, TryFromPrimitive, IntoPrimitive)]
#[allow(missing_docs)]
pub enum KnobMode {
Circular,
CircularRelative,
Linear,
}
/// Platform independent key codes.
#[allow(missing_docs)]
#[repr(isize)]
#[derive(Debug, Copy, Clone, TryFromPrimitive, IntoPrimitive)]
pub enum Key {
None = 0,
Back,
Tab,
Clear,
Return,
Pause,
Escape,
Space,
Next,
End,
Home,
Left,
Up,
Right,
Down,
PageUp,
PageDown,
Select,
Print,
Enter,
Snapshot,
Insert,
Delete,
Help,
Numpad0,
Numpad1,
Numpad2,
Numpad3,
Numpad4,
Numpad5,
Numpad6,
Numpad7,
Numpad8,
Numpad9,
Multiply,
Add,
Separator,
Subtract,
Decimal,
Divide,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
Numlock,
Scroll,
Shift,
Control,
Alt,
Equals,
}