2025-09-17 23:25:31 +02:00

52 lines
1.3 KiB
Rust

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<BackendMessage>, 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();
}
});
}
}