use std::sync::mpsc::Sender; use egui::{Align, Layout, RichText}; use crate::{frontend::DisplayPage, messages::backend::BackendMessage}; #[derive(Default)] #[derive(serde::Serialize, serde::Deserialize)] pub struct TransactionPage { from_to_amount: [String; 3], focused: usize, } #[derive(Debug)] pub struct TransactionRequest { } const TX_FIELDS: &[&str] = &[ "From:", "To:", "Amount:", ]; impl DisplayPage for TransactionPage { fn show(&mut self, tx: &Sender, ctx: &egui::Context) { ctx.input(|input| { if input.key_pressed(egui::Key::Tab) { self.focused = (self.focused + 1) % TX_FIELDS.len() } }); egui::CentralPanel::default().show(ctx, |ui| { ui.heading("Transaction Page"); ui.separator(); ui.with_layout(Layout::top_down_justified(Align::LEFT), |ui| { for (i, f) in TX_FIELDS.iter().enumerate() { ui.add_space(8.0); ui.label(RichText::new(*f).size(14.0)); if i == self.focused { ui.text_edit_singleline(&mut self.from_to_amount[i]).request_focus(); } else { ui.text_edit_singleline(&mut self.from_to_amount[i]); } } }); if ui.button("GetState").clicked() { tx.send(BackendMessage::StateRequest).unwrap(); } }); } }