slight re-structure

This commit is contained in:
2025-06-26 07:13:41 +02:00
parent 8274afff04
commit f363bbdae1
6 changed files with 97 additions and 70 deletions
+7 -8
View File
@@ -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);
+39
View File
@@ -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));
}
}