use bevy::{
app::{Plugin, PluginGroup, PluginGroupBuilder, Startup},
prelude::{Commands, Result},
};
use crate::{RatatuiContext, context::DefaultContext};
use crate::context::TerminalContext;
pub struct RatatuiPlugins {
pub enable_kitty_protocol: bool,
pub enable_mouse_capture: bool,
pub enable_input_forwarding: bool,
}
impl Default for RatatuiPlugins {
fn default() -> Self {
Self {
enable_kitty_protocol: true,
enable_mouse_capture: false,
enable_input_forwarding: false,
}
}
}
impl PluginGroup for RatatuiPlugins {
fn build(self) -> PluginGroupBuilder {
let mut builder = PluginGroupBuilder::start::<Self>();
builder = builder.add(ContextPlugin);
builder = DefaultContext::configure_plugin_group(&self, builder);
builder
}
}
pub struct ContextPlugin;
impl Plugin for ContextPlugin {
fn build(&self, app: &mut bevy::prelude::App) {
app.add_systems(Startup, context_setup);
}
}
pub fn context_setup(mut commands: Commands) -> Result {
let terminal = RatatuiContext::init()?;
commands.insert_resource(terminal);
Ok(())
}