show msg when running a command

This commit is contained in:
Matthew Ryan Dillon 2024-08-25 16:26:03 -04:00
parent 04f951776d
commit 3c88e2ab25

View file

@ -1,7 +1,7 @@
#![windows_subsystem = "windows"] #![windows_subsystem = "windows"]
use bevy::{prelude::*, winit::WinitSettings}; use bevy::{prelude::*, utils::Duration, winit::WinitSettings};
use bevy_egui::{ use bevy_egui::{
egui::{self}, egui::{self, Color32},
EguiContexts, EguiPlugin, EguiContexts, EguiPlugin,
}; };
@ -25,14 +25,29 @@ struct NeedsStrip {
value: bool, value: bool,
} }
#[derive(Resource, Debug)]
struct UITimer(Timer);
#[derive(Resource, Debug)]
struct Msg {
value: String,
}
fn main() { fn main() {
App::new() App::new()
.insert_resource(WinitSettings::desktop_app()) .insert_resource(WinitSettings {
focused_mode: bevy::winit::UpdateMode::Continuous,
unfocused_mode: bevy::winit::UpdateMode::reactive_low_power(Duration::from_millis(10)),
})
.insert_resource(InputText { .insert_resource(InputText {
value: "".to_string(), value: "".to_string(),
}) })
.insert_resource(Msg {
value: "".to_string(),
})
.insert_resource(NeedsSort { value: false }) .insert_resource(NeedsSort { value: false })
.insert_resource(NeedsStrip { value: false }) .insert_resource(NeedsStrip { value: false })
.insert_resource(UITimer(Timer::from_seconds(3., TimerMode::Once)))
.add_plugins(DefaultPlugins.set(WindowPlugin { .add_plugins(DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window { primary_window: Some(Window {
title: "dsort".to_string(), title: "dsort".to_string(),
@ -41,6 +56,7 @@ fn main() {
..Default::default() ..Default::default()
})) }))
.add_plugins(EguiPlugin) .add_plugins(EguiPlugin)
.add_systems(Startup, ui_startup)
.add_systems(Update, ui_system) .add_systems(Update, ui_system)
.add_systems(Update, process_text) .add_systems(Update, process_text)
.run(); .run();
@ -78,13 +94,26 @@ fn button_clicked(button: egui::Response) -> bool {
button.clicked() || button.drag_stopped() button.clicked() || button.drag_stopped()
} }
fn ui_startup(mut contexts: EguiContexts, mut timer: ResMut<UITimer>) {
contexts.ctx_mut().set_visuals(egui::Visuals::light());
let duration = timer.0.duration();
timer.0.set_elapsed(duration);
}
fn ui_system( fn ui_system(
mut contexts: EguiContexts, mut contexts: EguiContexts,
mut input_text: ResMut<InputText>, mut input_text: ResMut<InputText>,
mut needs_sort: ResMut<NeedsSort>, mut needs_sort: ResMut<NeedsSort>,
mut needs_strip: ResMut<NeedsStrip>, mut needs_strip: ResMut<NeedsStrip>,
time: Res<Time>,
mut timer: ResMut<UITimer>,
mut msg: ResMut<Msg>,
) { ) {
contexts.ctx_mut().set_visuals(egui::Visuals::light()); timer.0.tick(time.delta());
if timer.0.finished() {
msg.value = "".to_string();
}
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();
@ -92,25 +121,42 @@ fn ui_system(
ui.with_layout(egui::Layout::top_down(egui::Align::Center), |ui| { ui.with_layout(egui::Layout::top_down(egui::Align::Center), |ui| {
ui.with_layout(egui::Layout::left_to_right(egui::Align::LEFT), |ui| { ui.with_layout(egui::Layout::left_to_right(egui::Align::LEFT), |ui| {
let sort_button = ui.add(button("Sort")); let sort_button = ui.add(button("sort"));
if button_clicked(sort_button) { if button_clicked(sort_button) {
needs_sort.value = true; needs_sort.value = true;
msg.value = "sorted!".to_string();
timer.0.reset();
} }
let strip_button = ui.add(button("Remove Blanks")); let strip_button = ui.add(button("remove blanks"));
if button_clicked(strip_button) { if button_clicked(strip_button) {
needs_strip.value = true; needs_strip.value = true;
msg.value = "blanks removed!".to_string();
timer.0.reset();
} }
let copy_button = ui.add(button("Copy")); let copy_button = ui.add(button("copy"));
if button_clicked(copy_button) { if button_clicked(copy_button) {
ui.output_mut(|o| o.copied_text = input_text.value.clone()); ui.output_mut(|o| o.copied_text = input_text.value.clone());
msg.value = "copied!".to_string();
timer.0.reset();
} }
let clear_button = ui.add(button("Clear")); let clear_button = ui.add(button("clear"));
if button_clicked(clear_button) { if button_clicked(clear_button) {
input_text.value = "".to_string(); input_text.value = "".to_string();
msg.value = "cleared!".to_string();
timer.0.reset();
} }
ui.with_layout(
egui::Layout::default().with_cross_align(egui::Align::RIGHT),
|ui| {
ui.label(
egui::RichText::new(&msg.value)
.background_color(Color32::from_gray(200)),
)
},
);
}); });
ui.add_space(5.); ui.add_space(5.);