Fix colors and style, condense some logic. Fix task_idx when moving task

This commit is contained in:
Joseph Ferano 2023-06-14 17:38:23 +07:00
parent d85bb5a77b
commit 4accf41c45
2 changed files with 45 additions and 54 deletions

View File

@ -44,11 +44,7 @@ pub fn handle_task_edit(
} else { } else {
let task = db::insert_new_task(db_conn, title, description, column); let task = db::insert_new_task(db_conn, title, description, column);
column.add_task(task); column.add_task(task);
db::set_selected_task_for_column( db::set_selected_task_for_column(db_conn, column.selected_task_idx, column.id);
db_conn,
column.selected_task_idx,
column.id,
);
} }
*task_opt = None; *task_opt = None;
} }
@ -76,19 +72,15 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) {
} }
KeyCode::Char('j') | KeyCode::Down => { KeyCode::Char('j') | KeyCode::Down => {
column.select_next_task(); column.select_next_task();
db::set_selected_task_for_column( let task_idx = column.selected_task_idx;
&state.db_conn, let col_id = project.get_selected_column().id;
column.selected_task_idx, db::set_selected_task_for_column(&state.db_conn, task_idx, col_id);
project.get_selected_column().id,
);
} }
KeyCode::Char('k') | KeyCode::Up => { KeyCode::Char('k') | KeyCode::Up => {
column.select_previous_task(); column.select_previous_task();
db::set_selected_task_for_column( let task_idx = column.selected_task_idx;
&state.db_conn, let col_id = project.get_selected_column().id;
column.selected_task_idx, db::set_selected_task_for_column(&state.db_conn, task_idx, col_id);
project.get_selected_column().id,
);
} }
KeyCode::Char('l') | KeyCode::Right => { KeyCode::Char('l') | KeyCode::Right => {
project.select_next_column(); project.select_next_column();
@ -96,22 +88,21 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) {
} }
KeyCode::Char('g') => { KeyCode::Char('g') => {
column.select_first_task(); column.select_first_task();
db::set_selected_task_for_column( let task_idx = column.selected_task_idx;
&state.db_conn, let col_id = project.get_selected_column().id;
column.selected_task_idx, db::set_selected_task_for_column(&state.db_conn, task_idx, col_id);
project.get_selected_column().id,
);
} }
KeyCode::Char('G') => { KeyCode::Char('G') => {
column.select_last_task(); column.select_last_task();
db::set_selected_task_for_column( let task_idx = column.selected_task_idx;
&state.db_conn, let col_id = project.get_selected_column().id;
column.selected_task_idx, db::set_selected_task_for_column(&state.db_conn, task_idx, col_id);
project.get_selected_column().id,
);
} }
KeyCode::Char('H') => { KeyCode::Char('H') => {
if !column.tasks.is_empty() { 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(); project.move_task_previous_column();
let col = project.get_selected_column(); let col = project.get_selected_column();
let t = col.get_selected_task().unwrap(); let t = col.get_selected_task().unwrap();
@ -121,6 +112,9 @@ pub fn handle_main(state: &mut State<'_>, key: event::KeyEvent) {
} }
KeyCode::Char('L') => { KeyCode::Char('L') => {
if !column.tasks.is_empty() { 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(); project.move_task_next_column();
let col = project.get_selected_column(); let col = project.get_selected_column();
let t = col.get_selected_task().unwrap(); 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 task1 = column.get_selected_task().unwrap();
let task2 = column.get_previous_task().unwrap(); let task2 = column.get_previous_task().unwrap();
db::swap_task_order(&mut state.db_conn, task1, task2); db::swap_task_order(&mut state.db_conn, task1, task2);
db::set_selected_task_for_column( let task_idx = column.selected_task_idx;
&state.db_conn, let col_id = project.get_selected_column().id;
column.selected_task_idx, db::set_selected_task_for_column(&state.db_conn, task_idx, col_id);
project.get_selected_column().id,
);
} }
} }
KeyCode::Char('K') => { 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 task1 = column.get_selected_task().unwrap();
let task2 = column.get_next_task().unwrap(); let task2 = column.get_next_task().unwrap();
db::swap_task_order(&mut state.db_conn, task1, task2); db::swap_task_order(&mut state.db_conn, task1, task2);
db::set_selected_task_for_column( let task_idx = column.selected_task_idx;
&state.db_conn, let col_id = project.get_selected_column().id;
column.selected_task_idx, db::set_selected_task_for_column(&state.db_conn, task_idx, col_id);
project.get_selected_column().id,
);
} }
} }
KeyCode::Char('n') => state.task_edit_state = Some(TaskState::default()), 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() { if !column.tasks.is_empty() {
db::delete_task(&state.db_conn, column.get_selected_task().unwrap()); db::delete_task(&state.db_conn, column.get_selected_task().unwrap());
column.remove_task(); column.remove_task();
db::set_selected_task_for_column( let task_idx = column.selected_task_idx;
&state.db_conn, let col_id = project.get_selected_column().id;
column.selected_task_idx, db::set_selected_task_for_column(&state.db_conn, task_idx, col_id);
project.get_selected_column().id,
);
} }
} }
_ => {} _ => {}

View File

@ -1,7 +1,7 @@
use crate::app::{State, TaskEditFocus}; use crate::app::{State, TaskEditFocus};
use tui::backend::Backend; use tui::backend::Backend;
use tui::layout::{Alignment, Constraint, Direction, Layout, Rect}; 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::text::{Span, Spans};
use tui::widgets::{Block, Borders, Clear, List, ListItem, ListState, Paragraph, Wrap}; use tui::widgets::{Block, Borders, Clear, List, ListItem, ListState, Paragraph, Wrap};
use tui::Frame; use tui::Frame;
@ -29,10 +29,9 @@ fn draw_tasks<B: Backend>(f: &mut Frame<'_, B>, area: Rect, state: &State<'_>) {
let task_idx = state.project.get_selected_column().selected_task_idx; let task_idx = state.project.get_selected_column().selected_task_idx;
let item_txt; let item_txt;
if i == col_idx && j == task_idx { 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); item_txt = format!("{} 👈", task.title);
} else { } else {
style = style.fg(Color::White);
item_txt = task.title.clone(); item_txt = task.title.clone();
} }
let mut s = Span::raw(item_txt); let mut s = Span::raw(item_txt);
@ -42,17 +41,20 @@ fn draw_tasks<B: Backend>(f: &mut Frame<'_, B>, area: Rect, state: &State<'_>) {
.collect(); .collect();
let mut style = Style::default(); let mut style = Style::default();
if i == state.project.selected_column_idx { 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()); let mut s = Span::raw(column.name.as_str());
s.style = Style::default() s.style =
.add_modifier(Modifier::BOLD | Modifier::ITALIC | Modifier::UNDERLINED) Style::default().add_modifier(Modifier::BOLD | Modifier::ITALIC | Modifier::UNDERLINED);
.fg(Color::White); // .fg(Color::White);
let block = Block::default().style(style).title(s).borders(Borders::ALL); let block = Block::default().title(s).borders(Borders::ALL);
let list = List::new(items).block(block); 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(); let mut list_state = ListState::default();
list_state.select(Some(column.selected_task_idx + 1)); 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<B: Backend>(f: &mut Frame<'_, B>, state: &mut State<'_>,
let cancel_txt; let cancel_txt;
match task.focus { match task.focus {
TaskEditFocus::ConfirmBtn => { TaskEditFocus::ConfirmBtn => {
create_style = Style::default().fg(Color::Yellow); create_style = Style::default().add_modifier(Modifier::BOLD);
cancel_style = Style::default(); cancel_style = Style::default();
create_txt = "[Confirm]"; create_txt = "[Confirm]";
cancel_txt = " Cancel "; cancel_txt = " Cancel ";
} }
TaskEditFocus::CancelBtn => { TaskEditFocus::CancelBtn => {
create_style = Style::default(); create_style = Style::default();
cancel_style = Style::default().fg(Color::Yellow); cancel_style = Style::default().add_modifier(Modifier::BOLD);
create_txt = " Confirm "; create_txt = " Confirm ";
cancel_txt = "[Cancel]"; cancel_txt = "[Cancel]";
} }
@ -167,7 +169,8 @@ pub fn draw_task_popup<B: Backend>(f: &mut Frame<'_, B>, state: &mut State<'_>,
task.title.set_block(b1); task.title.set_block(b1);
if let TaskEditFocus::Title = task.focus { 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 task.title
.set_cursor_style(Style::default().add_modifier(Modifier::REVERSED)); .set_cursor_style(Style::default().add_modifier(Modifier::REVERSED));
} else { } else {
@ -179,7 +182,7 @@ pub fn draw_task_popup<B: Backend>(f: &mut Frame<'_, B>, state: &mut State<'_>,
task.description.set_block(b2); task.description.set_block(b2);
if let TaskEditFocus::Description = task.focus { if let TaskEditFocus::Description = task.focus {
task.description task.description
.set_style(Style::default().fg(Color::Yellow)); .set_style(Style::default().add_modifier(Modifier::BOLD));
task.description task.description
.set_cursor_style(Style::default().add_modifier(Modifier::REVERSED)); .set_cursor_style(Style::default().add_modifier(Modifier::REVERSED));
} else { } else {