slight re-structure
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
use crossterm::event::{KeyCode, KeyModifiers};
|
||||
|
||||
use crate::{event_manager::EventManager, Close, Event, Extension, Screen};
|
||||
use crate::{
|
||||
event,
|
||||
events::{Close, EventManager},
|
||||
extensions::Extension,
|
||||
Screen,
|
||||
};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct KeyPress(pub crossterm::event::KeyEvent);
|
||||
impl Event for KeyPress {
|
||||
fn as_any(self: Box<Self>) -> Box<dyn std::any::Any> {
|
||||
self
|
||||
}
|
||||
}
|
||||
event!(KeyPress(pub crossterm::event::KeyEvent));
|
||||
|
||||
pub trait KeyPressEventHandler {
|
||||
fn on_keypress(&mut self, event: KeyPress);
|
||||
|
||||
@@ -1 +1,40 @@
|
||||
pub mod keypress;
|
||||
|
||||
use crate::{events::EventManager, Screen};
|
||||
|
||||
pub trait Extension {
|
||||
fn init(&mut self, screen: &mut Screen, events: &mut EventManager);
|
||||
fn tick_start(&mut self, screen: &mut Screen, events: &mut EventManager);
|
||||
fn tick_end(&mut self, screen: &mut Screen, events: &mut EventManager);
|
||||
}
|
||||
|
||||
pub struct ExtensionManager(Vec<Box<dyn Extension>>);
|
||||
|
||||
impl Extension for ExtensionManager {
|
||||
fn init(&mut self, screen: &mut Screen, events: &mut EventManager) {
|
||||
for ext in &mut self.0 {
|
||||
ext.init(screen, events);
|
||||
}
|
||||
}
|
||||
|
||||
fn tick_start(&mut self, screen: &mut Screen, events: &mut EventManager) {
|
||||
for ext in &mut self.0 {
|
||||
ext.tick_start(screen, events);
|
||||
}
|
||||
}
|
||||
|
||||
fn tick_end(&mut self, screen: &mut Screen, events: &mut EventManager) {
|
||||
for ext in &mut self.0 {
|
||||
ext.tick_end(screen, events);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ExtensionManager {
|
||||
pub fn new() -> ExtensionManager {
|
||||
ExtensionManager(Vec::new())
|
||||
}
|
||||
pub fn add<E: Extension + 'static>(&mut self, extension: E) {
|
||||
self.0.push(Box::new(extension));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user