singular state object && label

This commit is contained in:
Matthew Ryan Dillon 2024-08-20 21:37:04 -04:00
parent 4df863db06
commit bdf0cb5caa

View file

@ -10,24 +10,20 @@ const LINE_ENDING: &str = "\r\n";
#[cfg(not(windows))] #[cfg(not(windows))]
const LINE_ENDING: &str = "\n"; const LINE_ENDING: &str = "\n";
#[derive(Resource)] #[derive(Resource, Debug)]
struct InputText { struct State {
value: String, input_value: String,
} output_value: String,
needs_update: bool,
#[derive(Resource)]
struct OutputText {
value: String,
} }
fn main() { fn main() {
App::new() App::new()
.insert_resource(WinitSettings::desktop_app()) .insert_resource(WinitSettings::desktop_app())
.insert_resource(InputText { .insert_resource(State {
value: "".to_string(), input_value: "".to_string(),
}) output_value: "".to_string(),
.insert_resource(OutputText { needs_update: false,
value: "".to_string(),
}) })
.add_plugins(DefaultPlugins) .add_plugins(DefaultPlugins)
.add_plugins(EguiPlugin) .add_plugins(EguiPlugin)
@ -37,46 +33,51 @@ fn main() {
.run(); .run();
} }
// TODO: move this into init
fn set_window_title(mut window_query: Query<&mut Window, With<PrimaryWindow>>) { fn set_window_title(mut window_query: Query<&mut Window, With<PrimaryWindow>>) {
if let Ok(mut window) = window_query.get_single_mut() { if let Ok(mut window) = window_query.get_single_mut() {
window.title = "dsort".to_string(); window.title = "dsort".to_string();
} }
} }
fn process_text(input_text: Res<InputText>, mut output_text: ResMut<OutputText>) { fn process_text(mut state: ResMut<State>) {
let mut arr = input_text.value.lines().collect::<Vec<_>>(); if state.needs_update {
println!("updating sort");
let mut arr = state.input_value.lines().collect::<Vec<_>>();
arr.sort_by(|&a, &b| vsort::compare(a, b)); arr.sort_by(|&a, &b| vsort::compare(a, b));
output_text.value = arr.join(LINE_ENDING); state.output_value = arr.join(LINE_ENDING);
state.needs_update = false;
}
} }
fn ui_system( fn ui_system(mut contexts: EguiContexts, mut state: ResMut<State>) {
mut contexts: EguiContexts,
mut input_text: ResMut<InputText>,
mut output_text: ResMut<OutputText>,
) {
contexts.ctx_mut().set_visuals(egui::Visuals::light()); contexts.ctx_mut().set_visuals(egui::Visuals::light());
egui::CentralPanel::default().show(contexts.ctx_mut(), |ui| { egui::CentralPanel::default().show(contexts.ctx_mut(), |ui| {
let window_size = ui.available_size(); let window_size = ui.available_size();
let height = window_size[1]; let height = window_size[1];
ui.with_layout( ui.with_layout(
egui::Layout::left_to_right(egui::Align::Center).with_cross_justify(true), egui::Layout::left_to_right(egui::Align::Center).with_cross_justify(true),
|ui| { |ui| {
egui::ScrollArea::vertical() egui::ScrollArea::vertical()
.id_source("left") .id_source("left")
.show(ui, |ui| { .show(ui, |ui| {
ui.add_sized( let response = ui.add_sized(
[ui.available_width() / 2., height], [ui.available_width() / 2., height],
egui::TextEdit::multiline(&mut input_text.value), egui::TextEdit::multiline(&mut state.input_value),
); );
if response.changed() {
state.needs_update = true;
}
}); });
egui::ScrollArea::vertical() egui::ScrollArea::vertical()
.id_source("right") .id_source("right")
.show(ui, |ui| { .show(ui, |ui| {
ui.add_sized( ui.with_layout(egui::Layout::top_down_justified(egui::Align::LEFT), |ui| {
[ui.available_width(), height], ui.add(egui::Label::new(&state.output_value).selectable(true));
egui::TextEdit::multiline(&mut output_text.value), })
);
}); });
}, },
); );