Basic navigation system

This commit is contained in:
Maddox Werts 2024-06-22 19:06:34 -04:00
parent b2c1d5eaa4
commit a077fb1206
2 changed files with 116 additions and 10 deletions

112
src/interface.rs Normal file
View file

@ -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::<u32>().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")
}
}
}
}

View file

@ -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();
}