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:
+8
-14
@@ -602,7 +602,8 @@ pub fn render_calendar_panel(
|
||||
area: Rect,
|
||||
events: &[CalendarEvent],
|
||||
focused: bool,
|
||||
_scroll: u16,
|
||||
scrolls: &[u16; 4],
|
||||
active_week: usize,
|
||||
) {
|
||||
if area.width < 20 || area.height < 3 {
|
||||
return;
|
||||
@@ -629,7 +630,7 @@ pub fn render_calendar_panel(
|
||||
let week_title = format!(" W/C {} ", week_start.format("%d/%m"));
|
||||
let col_area = cols[week_idx];
|
||||
|
||||
let border = if focused { FOCUS_COLOR } else { Color::DarkGray };
|
||||
let border = if focused && week_idx == active_week { FOCUS_COLOR } else { Color::DarkGray };
|
||||
let block = Block::default()
|
||||
.borders(Borders::ALL)
|
||||
.border_style(Style::default().fg(border))
|
||||
@@ -651,9 +652,6 @@ pub fn render_calendar_panel(
|
||||
continue;
|
||||
}
|
||||
|
||||
let inner = block.inner(col_area);
|
||||
let inner_h = inner.height as usize;
|
||||
|
||||
let mut lines: Vec<Line> = Vec::new();
|
||||
|
||||
for day_offset in 0..7 {
|
||||
@@ -661,6 +659,8 @@ pub fn render_calendar_panel(
|
||||
|
||||
let day_style = if day == today {
|
||||
Style::default().fg(Color::Yellow).add_modifier(Modifier::BOLD)
|
||||
} else if matches!(day.weekday(), chrono::Weekday::Sat | chrono::Weekday::Sun) {
|
||||
Style::default().fg(Color::Magenta).add_modifier(Modifier::BOLD)
|
||||
} else {
|
||||
Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)
|
||||
};
|
||||
@@ -679,10 +679,6 @@ pub fn render_calendar_panel(
|
||||
);
|
||||
lines.push(Line::from(Span::styled(day_label, day_style)));
|
||||
|
||||
if lines.len() >= inner_h {
|
||||
break;
|
||||
}
|
||||
|
||||
for event in events.iter().filter(|e| e.start.map_or(false, |s| s.date() == day)) {
|
||||
let time_str = event.start.map(|s| s.format("%H:%M").to_string()).unwrap_or_default();
|
||||
let line_text = format!(" {} {}", time_str, event.summary);
|
||||
@@ -690,14 +686,12 @@ pub fn render_calendar_panel(
|
||||
line_text,
|
||||
Style::default().fg(DETAIL_COLOR),
|
||||
)));
|
||||
|
||||
if lines.len() >= inner_h {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let paragraph = Paragraph::new(Text::from(lines)).block(block);
|
||||
let paragraph = Paragraph::new(Text::from(lines))
|
||||
.block(block)
|
||||
.scroll((scrolls[week_idx], 0));
|
||||
frame.render_widget(paragraph, col_area);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user