Skip to content
Snippets Groups Projects
Commit fc552175 authored by Stephen D's avatar Stephen D
Browse files

Add ability to edit qsos

parent c2c61b09
No related branches found
No related tags found
No related merge requests found
......@@ -18,8 +18,9 @@ impl App {
pub fn run(&mut self) {
loop {
self.render_main();
self.render_table();
println!("\t[A] Add QSO\t[E] Edit QSO\t[D] Del QSO\t[Q] Quit");
// Wish this had unicode support ):
let c = getch::Getch::new().getch().unwrap() as char;
match c {
......@@ -27,6 +28,9 @@ impl App {
'a' | 'A' => {
self.add_qso();
}
'e' | 'E' => {
self.edit_qso();
}
'd' | 'D' => {
self.del_qso();
}
......@@ -37,12 +41,6 @@ impl App {
}
}
fn render_main(&self) {
self.render_table();
println!("\t[A] Add QSO\t[D] Del QSO\t[Q] Quit");
}
fn render_table(&self) {
let mut rows = vec![Qso::table_header()];
rows.extend(self.qsos.iter().enumerate().map(|(i, qso)| qso.to_row(i)));
......@@ -66,7 +64,7 @@ impl App {
(qso.freq.clone(), qso.mode.clone(), qso.power)
});
let mut qso = Qso {
let qso = Qso {
time: Utc::now(),
freq,
mode,
......@@ -78,6 +76,41 @@ impl App {
comments: String::new(),
};
if let Some(qso) = self.modify_qso(qso, self.qsos.len()) {
self.qsos.push(qso);
}
}
fn edit_qso(&mut self) {
print!("Id [Blank to cancel]? ");
Self::flush();
let mut buffer = String::new();
stdin().read_line(&mut buffer).unwrap();
let buffer = buffer.trim();
if let Ok(id) = buffer.parse::<usize>() {
if id < self.qsos.len() {
let qso = self.qsos[id].clone();
if let Some(qso) = self.modify_qso(qso, id) {
self.qsos[id] = qso;
}
}
}
}
fn del_qso(&mut self) {
print!("Id [Blank to cancel]? ");
Self::flush();
let mut buffer = String::new();
stdin().read_line(&mut buffer).unwrap();
let buffer = buffer.trim();
if let Ok(id) = buffer.parse() {
if id < self.qsos.len() {
self.qsos.remove(id);
}
}
}
fn modify_qso(&mut self, mut qso: Qso, id: usize) -> Option<Qso> {
loop {
clearscreen::clear().unwrap();
......@@ -87,7 +120,7 @@ impl App {
Qso::table_header_with_suffixes(&[
"", "[T]", "[F]", "[M]", "[P]", "[C]", "[Q]", "[E]", "[R]", "[O]",
]),
qso.to_row(self.qsos.len()),
qso.to_row(id),
])
.build();
table.max_column_width = MAX_COLUMN_WIDTH;
......@@ -123,30 +156,16 @@ impl App {
qso.comments = Self::prompt("Comments", qso.comments);
}
's' | 'S' => {
self.qsos.push(qso);
break;
break Some(qso);
}
'x' | 'X' => {
break;
break None;
}
_ => {}
}
}
}
fn del_qso(&mut self) {
print!("Id [Blank to cancel]? ");
Self::flush();
let mut buffer = String::new();
stdin().read_line(&mut buffer).unwrap();
let buffer = buffer.trim();
if let Ok(id) = buffer.parse() {
if id < self.qsos.len() {
self.qsos.remove(id);
}
}
}
fn prompt<T: TuiValue>(label: &str, default: T) -> T {
println!();
......
......@@ -2,6 +2,7 @@ use chrono::{DateTime, Utc};
use term_table::row::Row;
use term_table::table_cell::TableCell;
#[derive(Clone)]
pub struct Qso {
pub time: DateTime<Utc>,
pub freq: String,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment