ashiba

Latest Release Documentation Dependencies

tui framework, based on tui-rs (not ready for production)

Features

Components in ashiba shall not implement View and Controller traits. They merely provide a model to cover basic functionality. Components can then be used in widgets through composition to fulfil the usecase.

Quick Introduction

It's as easy as this: rust fn main() { ashiba::app::run(AshibaApp::default()).unwrap(); } where AshibaApp implements View and Controller. The AshibaApp struct acts as a model and could look something like this: ```rust

[derive(Default)]

pub struct AshibaApp { button: BasicButton, counter: u32, shouldquit: bool, } A `Controller` makes it possible to define actions for your App or Widget: rust impl Controller for AshibaApp { fn handlemouse(&mut self, ev: MouseEvent) { self.button.on_click(ev, || { self.counter += 1; }) }

fn handle_key(&mut self, ev: KeyEvent) {
    if let KeyCode::Char('q') = ev.code {
        self.should_quit = true;
    }
}

fn should_quit(&self) -> bool {
    self.should_quit
}

} A `View` gives freedom to style your App or Widget: rust impl View for AshibaApp { fn ui(&mut self, f: &mut Frame>, area: Rect) { let button = BasicPlacement::computearearelative(area, (50, 50), (20, 4)); let block = Block::default().borders(Borders::ALL); let okblock = Block::default().borders(Borders::ALL); let okbutton = Paragraph::new(Span::from(format!("Clicked {} times", self.counter))) .block(okblock) .alignment(Alignment::Center); self.button.setarea(button); f.renderwidget(block, area); f.renderwidget(ok_button, button); } } ``` In ashiba, you should make use of a hierachical pattern, creating widgets of your own to manage the growing complexity of your app.

Contributions

Feel free to open an issue/PR explaining possible improvements or changes.

Help

Also, please do not hesitate and open an issue when needed. I am happy to help!