Fix colors and style, condense some logic. Fix task_idx when moving task
This commit is contained in:
		
							parent
							
								
									d85bb5a77b
								
							
						
					
					
						commit
						4accf41c45
					
				
							
								
								
									
										68
									
								
								src/input.rs
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								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);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        _ => {}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								src/ui.rs
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								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<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 {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user