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 {
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);
}
}
_ => {}

View File

@ -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<B: Backend>(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<B: Backend>(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<B: Backend>(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<B: Backend>(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<B: Backend>(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 {