From a077fb1206fad00be74adf08268427a03e0f66a5 Mon Sep 17 00:00:00 2001 From: OBJNULL Date: Sat, 22 Jun 2024 19:06:34 -0400 Subject: [PATCH] Basic navigation system --- src/interface.rs | 112 +++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 14 ++---- 2 files changed, 116 insertions(+), 10 deletions(-) create mode 100644 src/interface.rs diff --git a/src/interface.rs b/src/interface.rs new file mode 100644 index 0000000..0ad3fde --- /dev/null +++ b/src/interface.rs @@ -0,0 +1,112 @@ +// Libraries +use crate::{board, manager}; +use std::{io, process::exit}; + +// Structures +pub struct Interface { + manager: manager::Manager, + + running: bool, + page: u32, + on: u32 +} + +// Implementations +impl Interface { + pub fn init(manager: manager::Manager) -> Interface{ + // Return result + return Interface {manager: manager, running: true, page: 0, on: 0}; + } + + fn p_0(&mut self) { + // Showing options + println!(" - Tasky - "); + println!("1) Open Boards"); + println!("2) Exit"); + println!("Select option [1-2]: "); + + // Listening for option + let mut user_input: String = String::new(); + io::stdin().read_line(&mut user_input).expect("Failed to read line"); + user_input = String::from(user_input.to_lowercase().trim()); + println!(""); + + // Deciding what to do + if user_input == "1" { + self.page = 1; + } else if user_input == "2" { + exit(0); + } + } + fn p_1(&mut self) { + // Showing options + println!(" - Open Board - "); + println!("Select one of the following:"); + for i in 0..self.manager.boards.len() { + println!("{}) {}", i+1, self.manager.boards[i].name); + } + println!("Select board [1-{}]: ", self.manager.boards.len()); + + + // Selecting option + let mut user_input: String = String::new(); + io::stdin().read_line(&mut user_input).expect("Failed to read line"); + user_input = String::from(user_input.to_lowercase().trim()); + println!(""); + + // Parsing option + self.on = user_input.parse::().unwrap() - 1; + self.page = 2; + } + fn p_2(&mut self) { + // Active board + let board: &board::TaskBoard = &self.manager.boards[self.on as usize]; + + // Title + println!(" - {} - ", board.name); + + // Going through cards + for card in &board.cards { + println!("{} ({})", card.name, card.desc); + } + + // Presenting options + println!("\n1) Edit Card"); + println!("2) Delete Card"); + println!("3) Delete Board"); + println!("4) Exit"); + + // Selection option + let mut user_input: String = String::new(); + io::stdin().read_line(&mut user_input).expect("Failed to read lines"); + user_input = String::from(user_input.to_lowercase().trim()); + + // What to do + if user_input == "1"{ + + } else if user_input == "2"{ + + } else if user_input == "3"{ + + } else if user_input == "4"{ + self.page = 0; + } + } + + fn error(msg: &str){ + println!("INTERFACE ERROR: {}", msg); + } + + pub fn run(&mut self) { + while self.running { + + match self.page { + 0 => self.p_0(), + 1 => self.p_1(), + 2 => self.p_2(), + _ => Interface::error("Invalid Page") + } + + } + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 53f3a3e..7196c6a 100755 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ // Libraries +mod interface; mod manager; mod data; mod card; @@ -12,14 +13,7 @@ fn main() { let mut managed: manager::Manager = manager::Manager::init(); managed.parse(String::from("data/user.json")); - // Printing out the boards - println!("-- PROJECT --"); - println!("You have {} boards.", managed.boards.len()); - - for board in managed.boards { - println!("\n-- {} --", board.name); - for card in board.cards { - println!("\t- {} ({})", card.name, card.desc); - } - } + // Passing this through to the interface + let mut int: interface::Interface = interface::Interface::init(managed); + int.run(); } \ No newline at end of file