Moving out of state and into the respective impl. Fix bugs
This commit is contained in:
parent
7889c2358c
commit
001652a63a
136
src/app.rs
136
src/app.rs
@ -14,6 +14,14 @@ pub struct Column {
|
||||
}
|
||||
|
||||
impl Column {
|
||||
pub fn new(name: &str) -> Self {
|
||||
Column {
|
||||
name: name.to_owned(),
|
||||
tasks: vec![],
|
||||
selected_task_idx: 0,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_selected_task(&self) -> Option<&Task> {
|
||||
self.tasks.get(self.selected_task_idx)
|
||||
}
|
||||
@ -21,6 +29,17 @@ impl Column {
|
||||
pub fn get_selected_task_mut(&mut self) -> Option<&mut Task> {
|
||||
self.tasks.get_mut(self.selected_task_idx)
|
||||
}
|
||||
|
||||
pub fn select_previous_task(&mut self) {
|
||||
let task_idx = &mut self.selected_task_idx;
|
||||
*task_idx = task_idx.saturating_sub(1)
|
||||
}
|
||||
|
||||
pub fn select_next_task(&mut self) {
|
||||
let task_idx = &mut self.selected_task_idx;
|
||||
*task_idx = min(*task_idx + 1, self.tasks.len() - 1)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// #[derive(Deserialize, Serialize, Debug, Clone, Copy)]
|
||||
@ -90,6 +109,61 @@ impl Project {
|
||||
&mut self.columns[self.selected_column_idx]
|
||||
}
|
||||
|
||||
pub fn select_previous_column(&mut self) -> &Column {
|
||||
self.selected_column_idx = self.selected_column_idx.saturating_sub(1);
|
||||
&self.columns[self.selected_column_idx]
|
||||
}
|
||||
|
||||
pub fn select_next_column(&mut self) -> &Column {
|
||||
self.selected_column_idx = min(
|
||||
self.selected_column_idx + 1,
|
||||
self.columns.len() - 1,
|
||||
);
|
||||
&self.columns[self.selected_column_idx]
|
||||
}
|
||||
|
||||
pub fn move_task_previous_column(&mut self) {
|
||||
let col_idx = self.selected_column_idx;
|
||||
let column = self.get_selected_column_mut();
|
||||
if col_idx > 0 && column.tasks.len() > 0 {
|
||||
let t = column.tasks.remove(column.selected_task_idx);
|
||||
column.select_previous_task();
|
||||
self.select_previous_column();
|
||||
self.get_selected_column_mut().tasks.push(t);
|
||||
self.save();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn move_task_next_column(&mut self) {
|
||||
let col_idx = self.selected_column_idx;
|
||||
let cols_len = self.columns.len();
|
||||
let column = self.get_selected_column_mut();
|
||||
if col_idx < cols_len - 1 && column.tasks.len() > 0 {
|
||||
let t = column.tasks.remove(column.selected_task_idx);
|
||||
column.select_previous_task();
|
||||
self.select_next_column();
|
||||
self.get_selected_column_mut().tasks.push(t);
|
||||
self.save();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn move_task_up(&mut self) {
|
||||
let column = self.get_selected_column_mut();
|
||||
if column.selected_task_idx > 0 {
|
||||
column.tasks.swap(column.selected_task_idx, column.selected_task_idx - 1);
|
||||
column.selected_task_idx = column.selected_task_idx - 1;
|
||||
self.save();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn move_task_down(&mut self) {
|
||||
let column = self.get_selected_column_mut();
|
||||
if column.selected_task_idx < column.tasks.len() - 1 {
|
||||
column.tasks.swap(column.selected_task_idx, column.selected_task_idx + 1);
|
||||
column.selected_task_idx = column.selected_task_idx + 1;
|
||||
self.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Project {
|
||||
@ -119,66 +193,4 @@ impl AppState {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn select_previous_task(&mut self) {
|
||||
let task_idx = &mut self.project.get_selected_column_mut().selected_task_idx;
|
||||
*task_idx = task_idx.saturating_sub(1)
|
||||
}
|
||||
|
||||
pub fn select_next_task(&mut self) {
|
||||
let column = &mut self.project.get_selected_column_mut();
|
||||
let task_idx = &mut column.selected_task_idx;
|
||||
*task_idx = min(*task_idx, column.tasks.len() - 1)
|
||||
}
|
||||
|
||||
pub fn select_previous_column(&mut self) -> &Column {
|
||||
self.project.selected_column_idx = self.project.selected_column_idx.saturating_sub(1);
|
||||
&self.project.columns[self.project.selected_column_idx]
|
||||
}
|
||||
|
||||
pub fn select_next_column(&mut self) -> &Column {
|
||||
self.project.selected_column_idx = min(
|
||||
self.project.selected_column_idx + 1,
|
||||
self.project.columns.len() - 1,
|
||||
);
|
||||
&self.project.columns[self.project.selected_column_idx]
|
||||
}
|
||||
|
||||
pub fn move_task_previous_column(&mut self) {
|
||||
let col_idx = self.project.selected_column_idx;
|
||||
let column = self.project.get_selected_column_mut();
|
||||
if col_idx > 0 && column.tasks.len() > 0 {
|
||||
let t = column.tasks.remove(column.selected_task_idx);
|
||||
column.tasks.push(t);
|
||||
self.project.save();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn move_task_next_column(&mut self) {
|
||||
let col_idx = self.project.selected_column_idx;
|
||||
let cols_len = self.project.columns.len();
|
||||
let column = self.project.get_selected_column_mut();
|
||||
if col_idx < cols_len - 1 && column.tasks.len() > 0 {
|
||||
let t = column.tasks.remove(column.selected_task_idx);
|
||||
column.tasks.push(t);
|
||||
self.project.save();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn move_task_up(&mut self) {
|
||||
let column = self.project.get_selected_column_mut();
|
||||
if column.selected_task_idx > 0 {
|
||||
column.tasks.swap(column.selected_task_idx, column.selected_task_idx - 1);
|
||||
column.selected_task_idx = column.selected_task_idx - 1;
|
||||
self.project.save();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn move_task_down(&mut self) {
|
||||
let column = self.project.get_selected_column_mut();
|
||||
if column.selected_task_idx < column.tasks.len() - 1 {
|
||||
column.tasks.swap(column.selected_task_idx, column.selected_task_idx + 1);
|
||||
column.selected_task_idx = column.selected_task_idx + 1;
|
||||
self.project.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
18
src/input.rs
18
src/input.rs
@ -3,25 +3,27 @@ use crossterm::event::{Event, KeyCode};
|
||||
use crate::app::{AppState};
|
||||
|
||||
pub fn handle_input(state: &mut AppState) -> Result<(), std::io::Error> {
|
||||
let project = &mut state.project;
|
||||
let column = project.get_selected_column_mut();
|
||||
if let Event::Key(key) = event::read()? {
|
||||
match key.code {
|
||||
KeyCode::Char('q') => state.quit = true,
|
||||
KeyCode::Char('h') |
|
||||
KeyCode::Left => { state.select_previous_column(); },
|
||||
KeyCode::Left => { project.select_previous_column(); },
|
||||
KeyCode::Char('j') |
|
||||
KeyCode::Down => state.select_next_task(),
|
||||
KeyCode::Down => column.select_next_task(),
|
||||
KeyCode::Char('k') |
|
||||
KeyCode::Up => state.select_previous_task(),
|
||||
KeyCode::Up => column.select_previous_task(),
|
||||
KeyCode::Char('l') |
|
||||
KeyCode::Right => { state.select_next_column(); },
|
||||
KeyCode::Right => { project.select_next_column(); },
|
||||
KeyCode::Char('<') |
|
||||
KeyCode::Char('H') => state.move_task_previous_column(),
|
||||
KeyCode::Char('H') => project.move_task_previous_column(),
|
||||
KeyCode::Char('>') |
|
||||
KeyCode::Char('L') => state.move_task_next_column(),
|
||||
KeyCode::Char('L') => project.move_task_next_column(),
|
||||
KeyCode::Char('=') |
|
||||
KeyCode::Char('J') => state.move_task_down(),
|
||||
KeyCode::Char('J') => project.move_task_down(),
|
||||
KeyCode::Char('-') |
|
||||
KeyCode::Char('K') => state.move_task_up(),
|
||||
KeyCode::Char('K') => project.move_task_up(),
|
||||
KeyCode::Char('p') => {
|
||||
match state.popup_text {
|
||||
None => state.popup_text = Some("".to_string()),
|
||||
|
@ -1,5 +1,5 @@
|
||||
#![allow(dead_code)]
|
||||
use kanban_tui::{AppState, Project};
|
||||
use kanban_tui::*;
|
||||
|
||||
use std::{io};
|
||||
use crossterm::{event::*, terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}};
|
||||
|
Loading…
x
Reference in New Issue
Block a user