diff options
Diffstat (limited to 'karlgui/src/main.rs')
-rw-r--r-- | karlgui/src/main.rs | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/karlgui/src/main.rs b/karlgui/src/main.rs index a85459e..d683a78 100644 --- a/karlgui/src/main.rs +++ b/karlgui/src/main.rs @@ -1,14 +1,14 @@ pub mod client; -pub mod edit; pub mod helper; +pub mod views; use crate::client::Client; -use edit::ShowOrEdit; use eframe::CreationContext; use egui::CentralPanel; use karlcommon::{socket_path, ClientboundPacket, ServerboundPacket, Task}; use log::{error, info}; use std::{os::unix::net::UnixStream, process::exit}; +use views::{calendar::Calendar, edit::ShowAndEdit}; fn main() { env_logger::init(); @@ -19,9 +19,24 @@ fn main() { ) } -struct App { +pub struct Globals { client: Client, - tasks: Vec<ShowOrEdit<Task>>, + tasks: Vec<Task>, +} + +struct App { + g: Globals, + + current_tab: Tab, + + show_and_edit: ShowAndEdit, + calendar: Calendar, +} + +#[derive(PartialEq)] +enum Tab { + ShowAndEdit, + CalendarWeek, } impl App { @@ -41,19 +56,22 @@ impl App { client.send(ServerboundPacket::ListTasks); App { - client, - tasks: vec![], + current_tab: Tab::ShowAndEdit, + g: Globals { + client, + tasks: vec![], + }, + show_and_edit: Default::default(), + calendar: Default::default(), } } pub fn update_network(&mut self) { - for p in self.client.receiver.try_iter() { + for p in self.g.client.receiver.try_iter() { match p { - ClientboundPacket::TaskList(t) => { - self.tasks = t.into_iter().map(|t| ShowOrEdit::new(t, false)).collect() - } + ClientboundPacket::TaskList(t) => self.g.tasks = t, ClientboundPacket::Sync => { - self.client.busy = false; + self.g.client.busy = false; } _ => {} } @@ -65,13 +83,15 @@ impl eframe::App for App { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { self.update_network(); CentralPanel::default().show(ctx, |ui| { - ui.add_enabled_ui(!self.client.busy, |ui| { - for t in &mut self.tasks { - if t.changed(ui) { - self.client - .send_sync(ServerboundPacket::UpdateTask(t.inner.clone())) - } - ui.separator(); + ui.add_enabled_ui(!self.g.client.busy, |ui| { + ui.horizontal(|ui| { + ui.selectable_value(&mut self.current_tab, Tab::ShowAndEdit, "Tasks"); + ui.selectable_value(&mut self.current_tab, Tab::CalendarWeek, "Calendar: Week"); + }); + ui.separator(); + match self.current_tab { + Tab::ShowAndEdit => self.show_and_edit.ui(ui, &mut self.g), + Tab::CalendarWeek => self.calendar.ui(ui, &mut self.g), } }); }); |