From da0888b50f12852277f226b7603bf483e86e1a88 Mon Sep 17 00:00:00 2001 From: enx01 Date: Wed, 26 Nov 2025 17:59:48 +0100 Subject: [PATCH] yo --- src/gui/elements.rs | 0 src/gui/mod.rs | 69 +++++++++++++++++++++++++++++++++++++++++ src/network/mod.rs | 2 ++ src/network/peers.rs | 0 src/network/protocol.rs | 0 5 files changed, 71 insertions(+) create mode 100644 src/gui/elements.rs create mode 100644 src/gui/mod.rs create mode 100644 src/network/mod.rs create mode 100644 src/network/peers.rs create mode 100644 src/network/protocol.rs diff --git a/src/gui/elements.rs b/src/gui/elements.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/gui/mod.rs b/src/gui/mod.rs new file mode 100644 index 0000000..d5e0f2d --- /dev/null +++ b/src/gui/mod.rs @@ -0,0 +1,69 @@ +use fltk::{ + app, prelude::*, window::Window, frame::Frame, group::{Pack, Flex}, + menu::MenuBar, button::Button, tree::Tree, enums::{FrameType, Align} +}; + +pub struct P2PClientGUI { + app: app::App, + win: Window, +} + +impl P2PClientGUI { + pub fn new() -> Self { + let app = app::App::default(); + let mut win = Window::default() + .with_size(900, 600) + .with_label("P2P Merkle Client"); + + // 1. Main Layout: Flex (Vertical) + let mut main_flex = Flex::default_fill().column(); + + // 2. Menu Bar (Top) + let mut menu_bar = MenuBar::default().with_size(win.width(), 30); + menu_bar.add_emit("File/Connect", fltk::enums::Shortcut::None, fltk::menu::MenuFlag::Invisible, app::channel().0, ()); + menu_bar.add_emit("File/Exit", fltk::enums::Shortcut::None, fltk::menu::MenuFlag::Invisible, app::channel().0, ()); + menu_bar.end(); + + // 3. Content Area: Flex (Horizontal) + let mut content_flex = Flex::default().row(); + + // --- Central Area (Filesystem Tree) + let mut fs_tree = Tree::default().with_label("Filesystem View"); + fs_tree.set_frame(FrameType::FlatBox); + // Placeholder data for the tree + fs_tree.add("root/Folder A/File 1"); + fs_tree.add("root/Folder B/File 2"); + + content_flex.fixed(&fs_tree, win.width() - 200); // 700px width + + // --- Right-Sided Panel (Known Peers List) + let mut right_panel = Pack::default(); + right_panel.set_frame(FrameType::EngravedBox); + right_panel.set_spacing(5); + + Frame::default().with_label("Known Peers").set_align(Align::Top); + // List of Labels (placeholder) + Frame::default().with_label("Peer A (Online)").set_frame(FrameType::ThinUpBox); + Frame::default().with_label("Peer B (Offline)").set_frame(FrameType::ThinUpBox); + + right_panel.end(); + content_flex.fixed(&right_panel, 200); // 200px width + + content_flex.end(); + + main_flex.end(); // End of main layout + + win.end(); + win.show(); + + Self { app, win } + } + + pub fn run(&mut self) { + // Here you would connect signals from the GUI to the network thread. + // For now, it just runs the application loop. + while self.app.wait() { + // Handle GUI events + } + } +} \ No newline at end of file diff --git a/src/network/mod.rs b/src/network/mod.rs new file mode 100644 index 0000000..c3fb720 --- /dev/null +++ b/src/network/mod.rs @@ -0,0 +1,2 @@ +mod protocol; +mod peers; \ No newline at end of file diff --git a/src/network/peers.rs b/src/network/peers.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/network/protocol.rs b/src/network/protocol.rs new file mode 100644 index 0000000..e69de29