Calendar: independent week scrolling and weekend colors
- calendar_scroll replaced by per-week calendar_scrolls[4] + active_week - Tab cycles through weeks within Calendar, Left/Right switch week - Up/Down scroll only the active week independently - Sat/Sun rendered in Magenta, weekdays in Cyan, today in Yellow
This commit is contained in:
+48
-18
@@ -39,7 +39,8 @@ pub struct App {
|
||||
pub task_list_scroll: u16,
|
||||
pub detail_scroll: u16,
|
||||
pub notes_scroll: u16,
|
||||
pub calendar_scroll: u16,
|
||||
pub calendar_scrolls: [u16; 4],
|
||||
pub calendar_active_week: usize,
|
||||
pub db: Arc<Db>,
|
||||
#[allow(dead_code)]
|
||||
pub api_client: Arc<ApiClient>,
|
||||
@@ -110,7 +111,8 @@ impl App {
|
||||
task_list_scroll: 0,
|
||||
detail_scroll: 0,
|
||||
notes_scroll: 0,
|
||||
calendar_scroll: 0,
|
||||
calendar_scrolls: [0; 4],
|
||||
calendar_active_week: 0,
|
||||
db,
|
||||
api_client,
|
||||
needs_auth: !has_token,
|
||||
@@ -312,12 +314,24 @@ impl App {
|
||||
|
||||
match key.code {
|
||||
KeyCode::Tab => {
|
||||
self.focus = match self.focus {
|
||||
Focus::Tabs => Focus::TaskList,
|
||||
Focus::TaskList => Focus::Detail,
|
||||
Focus::Detail => Focus::Calendar,
|
||||
Focus::Calendar => Focus::Tabs,
|
||||
};
|
||||
match self.focus {
|
||||
Focus::Calendar => {
|
||||
if self.calendar_active_week < 3 {
|
||||
self.calendar_active_week += 1;
|
||||
} else {
|
||||
self.calendar_active_week = 0;
|
||||
self.focus = Focus::Tabs;
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
self.focus = match self.focus {
|
||||
Focus::Tabs => Focus::TaskList,
|
||||
Focus::TaskList => Focus::Detail,
|
||||
Focus::Detail => Focus::Calendar,
|
||||
_ => Focus::Tabs,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
KeyCode::Up if key.modifiers.contains(KeyModifiers::ALT) => {
|
||||
if self.focus == Focus::TaskList && !self.tasks.is_empty() {
|
||||
@@ -340,7 +354,7 @@ impl App {
|
||||
self.detail_scroll = self.detail_scroll.saturating_sub(1);
|
||||
}
|
||||
Focus::Calendar => {
|
||||
self.calendar_scroll = self.calendar_scroll.saturating_sub(1);
|
||||
self.calendar_scrolls[self.calendar_active_week] = self.calendar_scrolls[self.calendar_active_week].saturating_sub(1);
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
@@ -355,24 +369,40 @@ impl App {
|
||||
self.detail_scroll += 1;
|
||||
}
|
||||
Focus::Calendar => {
|
||||
self.calendar_scroll += 1;
|
||||
self.calendar_scrolls[self.calendar_active_week] = self.calendar_scrolls[self.calendar_active_week].saturating_add(1);
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
KeyCode::Right => {
|
||||
if self.focus == Focus::Tabs && !self.lists.is_empty() {
|
||||
if self.selected_list + 1 < self.lists.len() {
|
||||
self.selected_list += 1;
|
||||
self.load_tasks();
|
||||
match self.focus {
|
||||
Focus::Tabs => {
|
||||
if !self.lists.is_empty() && self.selected_list + 1 < self.lists.len() {
|
||||
self.selected_list += 1;
|
||||
self.load_tasks();
|
||||
}
|
||||
}
|
||||
Focus::Calendar => {
|
||||
if self.calendar_active_week < 3 {
|
||||
self.calendar_active_week += 1;
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
KeyCode::Left => {
|
||||
if self.focus == Focus::Tabs && !self.lists.is_empty() {
|
||||
if self.selected_list > 0 {
|
||||
self.selected_list -= 1;
|
||||
self.load_tasks();
|
||||
match self.focus {
|
||||
Focus::Tabs => {
|
||||
if !self.lists.is_empty() && self.selected_list > 0 {
|
||||
self.selected_list -= 1;
|
||||
self.load_tasks();
|
||||
}
|
||||
}
|
||||
Focus::Calendar => {
|
||||
if self.calendar_active_week > 0 {
|
||||
self.calendar_active_week -= 1;
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
KeyCode::Char('n') | KeyCode::Char('N') => {
|
||||
|
||||
Reference in New Issue
Block a user