singular state object && label
This commit is contained in:
parent
4df863db06
commit
bdf0cb5caa
1 changed files with 29 additions and 28 deletions
55
src/main.rs
55
src/main.rs
|
@ -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),
|
})
|
||||||
);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Reference in a new issue