use bevy::prelude::*;
use noesis_runtime::classes::{ClassBuilder, Instance, PropertyChangeHandler, PropertyValue};
use noesis_runtime::ffi::{ClassBase, PropType};
use crate::classes::NoesisClassRegistry;
pub const WINDOW_CLASS: &str = "Window";
struct NoopChangeHandler;
impl PropertyChangeHandler for NoopChangeHandler {
fn on_changed(&self, _instance: Instance, _prop_index: u32, _value: PropertyValue<'_>) {}
}
fn register_window_type(registry: &mut NoesisClassRegistry) {
let mut builder = ClassBuilder::new(WINDOW_CLASS, ClassBase::UserControl, NoopChangeHandler);
builder.add_property("Title", PropType::String);
builder.add_property("WindowStyle", PropType::String);
builder.add_property("WindowState", PropType::String);
builder.add_property("WindowStartupLocation", PropType::String);
builder.add_property("ResizeMode", PropType::String);
builder.add_property("SizeToContent", PropType::String);
match builder.register() {
Some(registration) => {
registry.add(registration);
info!("NoesisWindowCompat: registered '{WINDOW_CLASS}' stand-in (UserControl)");
}
None => {
warn!("NoesisWindowCompat: '{WINDOW_CLASS}' already registered or registration failed",)
}
}
}
fn install_window_type(mut registry: NonSendMut<NoesisClassRegistry>) {
register_window_type(&mut registry);
}
pub struct NoesisWindowCompatPlugin;
impl Plugin for NoesisWindowCompatPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Startup, install_window_type.run_if(run_once));
}
}