working
This commit is contained in:
@@ -4,8 +4,9 @@ use client_network::{
|
||||
};
|
||||
use crossbeam_channel::{Receiver, Sender};
|
||||
use egui::{
|
||||
Align, Align2, Button, CentralPanel, CollapsingHeader, Context, Id, LayerId, Layout, Order,
|
||||
Popup, ScrollArea, SidePanel, TextStyle, TopBottomPanel, Ui, ViewportCommand,
|
||||
Align, Align2, Button, CentralPanel, CollapsingHeader, Color32, Context, CornerRadius, Frame,
|
||||
Id, LayerId, Layout, Order, Popup, Response, ScrollArea, SidePanel, Stroke, TextStyle,
|
||||
TopBottomPanel, Ui, ViewportCommand,
|
||||
};
|
||||
use std::{collections::HashMap, fmt::format};
|
||||
|
||||
@@ -43,6 +44,7 @@ pub struct P2PClientApp {
|
||||
show_network_popup: bool, // gérer selon besoin
|
||||
|
||||
error_message: Option<String>, // Some(message) -> afficher, None -> rien
|
||||
success_message: Option<String>, // Some(message) -> afficher, None -> rien
|
||||
//
|
||||
active_server: String,
|
||||
}
|
||||
@@ -62,7 +64,7 @@ impl P2PClientApp {
|
||||
network_cmd_tx: cmd_tx,
|
||||
network_event_rx: event_rx,
|
||||
status_message: "Client Initialized. Awaiting network status...".to_string(),
|
||||
known_peers: vec![("bob".to_string(), true)],
|
||||
known_peers: Vec::new(),
|
||||
connect_address_input: "https://jch.irif.fr:8443".to_string(),
|
||||
connected_address: "".to_string(),
|
||||
loaded_fs,
|
||||
@@ -70,6 +72,7 @@ impl P2PClientApp {
|
||||
server_status: ServerStatus::NotConnected,
|
||||
show_network_popup: false,
|
||||
error_message: None,
|
||||
success_message: None,
|
||||
connect_name_input: "bob".to_string(),
|
||||
active_server: "".to_string(),
|
||||
}
|
||||
@@ -77,9 +80,15 @@ impl P2PClientApp {
|
||||
pub fn show_error(&mut self, msg: impl Into<String>) {
|
||||
self.error_message = Some(msg.into());
|
||||
}
|
||||
pub fn show_success(&mut self, msg: impl Into<String>) {
|
||||
self.success_message = Some(msg.into());
|
||||
}
|
||||
pub fn clear_error(&mut self) {
|
||||
self.error_message = None;
|
||||
}
|
||||
pub fn clear_success(&mut self) {
|
||||
self.success_message = None;
|
||||
}
|
||||
}
|
||||
|
||||
// --- eframe::App Trait Implementation ---
|
||||
@@ -175,6 +184,9 @@ impl eframe::App for P2PClientApp {
|
||||
NetworkEvent::Error(err) => {
|
||||
self.show_error(err);
|
||||
}
|
||||
NetworkEvent::Success(msg) => {
|
||||
self.show_success(msg);
|
||||
}
|
||||
NetworkEvent::DataReceived(_, merkle_node) => todo!(),
|
||||
NetworkEvent::HandshakeFailed() => {}
|
||||
NetworkEvent::ServerHandshakeFailed(err) => {
|
||||
@@ -360,13 +372,24 @@ impl eframe::App for P2PClientApp {
|
||||
let is_active =
|
||||
self.active_peer.as_ref().map_or(false, |id| id == &peer.0); // if peer.id == self.active_peer_id
|
||||
|
||||
let selectable;
|
||||
let selectable: Response;
|
||||
if &self.active_server == &peer.0 {
|
||||
selectable =
|
||||
ui.selectable_label(is_active, format!("{} 📡 🌀", peer.0))
|
||||
// Create a frame with green background and render the selectable inside it.
|
||||
// Adjust rounding, padding and stroke as desired.
|
||||
let frame = Frame {
|
||||
fill: Color32::DARK_BLUE,
|
||||
stroke: Stroke::default(),
|
||||
corner_radius: CornerRadius::from(0.5),
|
||||
..Default::default()
|
||||
};
|
||||
let internal = frame.show(ui, |ui| {
|
||||
ui.selectable_label(is_active, format!("{}", peer.0))
|
||||
});
|
||||
selectable = internal.response;
|
||||
} else {
|
||||
selectable = ui.selectable_label(is_active, format!("{}", peer.0));
|
||||
}
|
||||
|
||||
if selectable.clicked() {
|
||||
// switch to displaying this peer's tree
|
||||
self.active_peer = Some(peer.0.clone());
|
||||
@@ -476,6 +499,20 @@ impl eframe::App for P2PClientApp {
|
||||
});
|
||||
ctx.request_repaint();
|
||||
}
|
||||
if let Some(msg) = &self.success_message {
|
||||
let msg = msg.clone();
|
||||
egui::Window::new("Success")
|
||||
.collapsible(false)
|
||||
.resizable(false)
|
||||
.anchor(egui::Align2::CENTER_CENTER, [0.0, 0.0])
|
||||
.show(ctx, |ui| {
|
||||
ui.label(&msg);
|
||||
if ui.button("OK").clicked() {
|
||||
self.clear_success();
|
||||
}
|
||||
});
|
||||
ctx.request_repaint();
|
||||
}
|
||||
|
||||
ctx.request_repaint_after(std::time::Duration::from_millis(10));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user