52 lines
1.3 KiB
Rust
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();
|
|
}
|
|
});
|
|
}
|
|
}
|