tori 0.2.6

The frictionless music player for the terminal
use super::App;
use crate::{error::Result, events};
use std::io;
use tui::{backend::CrosstermBackend, layout::Rect, Frame};

pub(crate) type MyBackend = CrosstermBackend<io::Stdout>;

#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
#[repr(i8)]
pub enum Mode {
    #[default]
    Normal,
    Insert,
}

pub trait Component {
    type RenderState;

    fn mode(&self) -> Mode;
    fn render(
        &mut self,
        frame: &mut Frame,
        chunk: Rect,
        render_state: Self::RenderState,
    );
    fn handle_event(&mut self, app: &mut App, event: events::Event) -> Result<()>;
}

pub trait MouseHandler {
    fn handle_mouse(
        &mut self,
        app: &mut App,
        chunk: Rect,
        event: crossterm::event::MouseEvent,
    ) -> Result<()>;
}