From 4accf41c4540a4b79f2ade8e19cb32702f6b0c91 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Wed, 14 Jun 2023 17:38:23 +0700 Subject: [PATCH] Fix colors and style, condense some logic. Fix task_idx when moving task --- src/input.rs | 68 ++++++++++++++++++++++------------------------------ src/ui.rs | 31 +++++++++++++----------- 2 files changed, 45 insertions(+), 54 deletions(-) diff --git a/src/input.rs b/src/input.rs index b545e24..fbc2288 100644 --- a/src/input.rs +++ b/src/input.rs @@ -44,11 +44,7 @@ pub fn handle_task_edit( } else { let task = db::insert_new_task(db_conn, title, description, column); column.add_task(task); - db::set_selected_task_for_column( - db_conn, - column.selected_task_idx, - column.id, - ); + db::set_selected_task_for_column(db_conn, column.selected_task_idx, column.id); } *task_opt = None; } @@ -76,19 +72,15 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) { } KeyCode::Char('j') | KeyCode::Down => { column.select_next_task(); - db::set_selected_task_for_column( - &state.db_conn, - column.selected_task_idx, - project.get_selected_column().id, - ); + let task_idx = column.selected_task_idx; + let col_id = project.get_selected_column().id; + db::set_selected_task_for_column(&state.db_conn, task_idx, col_id); } KeyCode::Char('k') | KeyCode::Up => { column.select_previous_task(); - db::set_selected_task_for_column( - &state.db_conn, - column.selected_task_idx, - project.get_selected_column().id, - ); + let task_idx = column.selected_task_idx; + let col_id = project.get_selected_column().id; + db::set_selected_task_for_column(&state.db_conn, task_idx, col_id); } KeyCode::Char('l') | KeyCode::Right => { project.select_next_column(); @@ -96,22 +88,21 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) { } KeyCode::Char('g') => { column.select_first_task(); - db::set_selected_task_for_column( - &state.db_conn, - column.selected_task_idx, - project.get_selected_column().id, - ); + let task_idx = column.selected_task_idx; + let col_id = project.get_selected_column().id; + db::set_selected_task_for_column(&state.db_conn, task_idx, col_id); } KeyCode::Char('G') => { column.select_last_task(); - db::set_selected_task_for_column( - &state.db_conn, - column.selected_task_idx, - project.get_selected_column().id, - ); + let task_idx = column.selected_task_idx; + let col_id = project.get_selected_column().id; + db::set_selected_task_for_column(&state.db_conn, task_idx, col_id); } KeyCode::Char('H') => { if !column.tasks.is_empty() { + let first_col = project.get_selected_column_mut(); + let task_idx = first_col.selected_task_idx.saturating_sub(1); + db::set_selected_task_for_column(&state.db_conn, task_idx, first_col.id); project.move_task_previous_column(); let col = project.get_selected_column(); let t = col.get_selected_task().unwrap(); @@ -121,6 +112,9 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) { } KeyCode::Char('L') => { if !column.tasks.is_empty() { + let first_col = project.get_selected_column_mut(); + let task_idx = first_col.selected_task_idx.saturating_sub(1); + db::set_selected_task_for_column(&state.db_conn, task_idx, first_col.id); project.move_task_next_column(); let col = project.get_selected_column(); let t = col.get_selected_task().unwrap(); @@ -133,11 +127,9 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) { let task1 = column.get_selected_task().unwrap(); let task2 = column.get_previous_task().unwrap(); db::swap_task_order(&mut state.db_conn, task1, task2); - db::set_selected_task_for_column( - &state.db_conn, - column.selected_task_idx, - project.get_selected_column().id, - ); + let task_idx = column.selected_task_idx; + let col_id = project.get_selected_column().id; + db::set_selected_task_for_column(&state.db_conn, task_idx, col_id); } } KeyCode::Char('K') => { @@ -145,11 +137,9 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) { let task1 = column.get_selected_task().unwrap(); let task2 = column.get_next_task().unwrap(); db::swap_task_order(&mut state.db_conn, task1, task2); - db::set_selected_task_for_column( - &state.db_conn, - column.selected_task_idx, - project.get_selected_column().id, - ); + let task_idx = column.selected_task_idx; + let col_id = project.get_selected_column().id; + db::set_selected_task_for_column(&state.db_conn, task_idx, col_id); } } KeyCode::Char('n') => state.task_edit_state = Some(TaskState::default()), @@ -158,11 +148,9 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) { if !column.tasks.is_empty() { db::delete_task(&state.db_conn, column.get_selected_task().unwrap()); column.remove_task(); - db::set_selected_task_for_column( - &state.db_conn, - column.selected_task_idx, - project.get_selected_column().id, - ); + let task_idx = column.selected_task_idx; + let col_id = project.get_selected_column().id; + db::set_selected_task_for_column(&state.db_conn, task_idx, col_id); } } _ => {} diff --git a/src/ui.rs b/src/ui.rs index 38893d8..f64d4a8 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,7 +1,7 @@ use crate::app::{State, TaskEditFocus}; use tui::backend::Backend; use tui::layout::{Alignment, Constraint, Direction, Layout, Rect}; -use tui::style::{Color, Modifier, Style}; +use tui::style::{Modifier, Style}; use tui::text::{Span, Spans}; use tui::widgets::{Block, Borders, Clear, List, ListItem, ListState, Paragraph, Wrap}; use tui::Frame; @@ -29,10 +29,9 @@ fn draw_tasks(f: &mut Frame<'_, B>, area: Rect, state: &State<'_>) { let task_idx = state.project.get_selected_column().selected_task_idx; let item_txt; if i == col_idx && j == task_idx { - style = style.fg(Color::White).add_modifier(Modifier::BOLD); + style = style.add_modifier(Modifier::BOLD | Modifier::UNDERLINED); item_txt = format!("{} 👈", task.title); } else { - style = style.fg(Color::White); item_txt = task.title.clone(); } let mut s = Span::raw(item_txt); @@ -42,17 +41,20 @@ fn draw_tasks(f: &mut Frame<'_, B>, area: Rect, state: &State<'_>) { .collect(); let mut style = Style::default(); if i == state.project.selected_column_idx { - style = style.fg(Color::Green); + style = style.add_modifier(Modifier::REVERSED); }; let mut s = Span::raw(column.name.as_str()); - s.style = Style::default() - .add_modifier(Modifier::BOLD | Modifier::ITALIC | Modifier::UNDERLINED) - .fg(Color::White); - let block = Block::default().style(style).title(s).borders(Borders::ALL); - let list = List::new(items).block(block); + s.style = + Style::default().add_modifier(Modifier::BOLD | Modifier::ITALIC | Modifier::UNDERLINED); + // .fg(Color::White); + let block = Block::default().title(s).borders(Borders::ALL); + let inner_area = block.inner(columns[i]); + let inner_block = Block::default().style(style); + let list = List::new(items).block(inner_block); let mut list_state = ListState::default(); list_state.select(Some(column.selected_task_idx + 1)); - f.render_stateful_widget(list, columns[i], &mut list_state); + f.render_widget(block, columns[i]); + f.render_stateful_widget(list, inner_area, &mut list_state); } } @@ -136,14 +138,14 @@ pub fn draw_task_popup(f: &mut Frame<'_, B>, state: &mut State<'_>, let cancel_txt; match task.focus { TaskEditFocus::ConfirmBtn => { - create_style = Style::default().fg(Color::Yellow); + create_style = Style::default().add_modifier(Modifier::BOLD); cancel_style = Style::default(); create_txt = "[Confirm]"; cancel_txt = " Cancel "; } TaskEditFocus::CancelBtn => { create_style = Style::default(); - cancel_style = Style::default().fg(Color::Yellow); + cancel_style = Style::default().add_modifier(Modifier::BOLD); create_txt = " Confirm "; cancel_txt = "[Cancel]"; } @@ -167,7 +169,8 @@ pub fn draw_task_popup(f: &mut Frame<'_, B>, state: &mut State<'_>, task.title.set_block(b1); if let TaskEditFocus::Title = task.focus { - task.title.set_style(Style::default().fg(Color::Yellow)); + task.title + .set_style(Style::default().add_modifier(Modifier::BOLD)); task.title .set_cursor_style(Style::default().add_modifier(Modifier::REVERSED)); } else { @@ -179,7 +182,7 @@ pub fn draw_task_popup(f: &mut Frame<'_, B>, state: &mut State<'_>, task.description.set_block(b2); if let TaskEditFocus::Description = task.focus { task.description - .set_style(Style::default().fg(Color::Yellow)); + .set_style(Style::default().add_modifier(Modifier::BOLD)); task.description .set_cursor_style(Style::default().add_modifier(Modifier::REVERSED)); } else {