mirai/ui/MainView.slint

138 lines
3.9 KiB
Text
Raw Normal View History

2024-08-16 21:35:12 +02:00
import { Backend, TaskData } from "Backend.slint";
import { Button, VerticalBox, CheckBox, ScrollView, ComboBox } from "std-widgets.slint";
import { TaskLine } from "./components/TaskLine.slint";
import { EventGroup } from "./components/EventGroup.slint";
2024-10-29 15:02:46 +01:00
import { Calendar } from "./components/Calendar.slint";
2024-10-16 11:54:15 +02:00
import { VPopupIconMenu, VDatePicker, VTimePicker, VCheckBox, VButton, VTag, VText, VTextInput, Svg, Palette } from "@selenite";
import { NewTaskData, SaveTaskData } from "Backend.slint";
2024-10-11 16:26:13 +02:00
import { CreateTaskOrEvent } from "components/CreateTaskOrEvent.slint";
2024-08-16 21:35:12 +02:00
export component MainView inherits Rectangle {
background: Palette.background;
private property<string> icon-visible: Svg.visible;
private property<string> icon-not-visible: Svg.not-visible;
2024-08-16 21:35:12 +02:00
private property<bool> completed-tasks-visible: false;
2024-10-29 15:02:46 +01:00
HorizontalLayout {
2024-10-29 15:02:46 +01:00
VerticalLayout {
2024-08-16 21:35:12 +02:00
horizontal-stretch: 1;
2024-10-29 15:02:46 +01:00
padding: 16px;
spacing: 16px;
HorizontalLayout {
horizontal-stretch: 1;
2024-08-16 21:35:12 +02:00
alignment: start;
2024-10-29 15:02:46 +01:00
spacing: 8px;
VButton {
text: "Show/Hide completed tasks";
clicked => {
Backend.toggle-show-completed-tasks();
completed-tasks-visible = !completed-tasks-visible;
}
icon-svg: completed-tasks-visible ? icon-visible : icon-not-visible;
icon-colorize: Palette.control-foreground;
}
2024-10-29 15:02:46 +01:00
}
Rectangle {
horizontal-stretch: 1;
background: Palette.background.brighter(0.2);
height: 1px;
}
CreateTaskOrEvent {
}
Flickable {
horizontal-stretch: 1;
VerticalLayout {
alignment: start;
spacing: 16px;
if Backend.days.length == 0 && Backend.unscheduled-tasks.length == 0 : VText {
text: "There is no task to show";
horizontal-alignment: center;
vertical-alignment: center;
}
for day[dayIndex] in Backend.days: VerticalLayout {
Rectangle {
background: Palette.card-background;
border-radius: 8px;
VerticalLayout {
padding: 16px;
HorizontalLayout {
alignment: start;
2024-08-16 21:35:12 +02:00
VText {
2024-10-29 15:02:46 +01:00
text: Backend.format-date(day.date);
color: day.isLate ? Palette.orange : Palette.foreground;
font-size: 1.2rem;
}
VerticalLayout {
alignment: center;
VText {
text: day.relativeDaysDiff == 0 ? " - today" :
day.relativeDaysDiff == 1 ? " - tomorrow" :
day.relativeDaysDiff == -1 ? " - yesterday" :
day.relativeDaysDiff > 0 ? " - in \{day.relativeDaysDiff} days" :
" - \{-day.relativeDaysDiff} days ago";
color: Palette.foreground-hint;
font-size: 1rem;
}
2024-08-16 21:35:12 +02:00
}
}
2024-10-29 15:02:46 +01:00
for event[eventIndex] in day.events: VerticalLayout {
padding-top: 16px;
EventGroup {
event: event;
}
2024-08-16 21:35:12 +02:00
}
2024-10-29 15:02:46 +01:00
for task[taskIndex] in day.tasks: VerticalLayout {
padding-top: taskIndex == 0 ? 16px : 0px;
padding-bottom: 8px;
TaskLine {
task: task;
date: day.date;
source-index: task.sourceId;
task-index: task.id;
}
2024-08-16 21:35:12 +02:00
}
}
}
}
2024-10-29 15:02:46 +01:00
if Backend.unscheduled-tasks.length > 0 : VerticalLayout {
Rectangle {
background: Palette.card-background;
border-radius: 8px;
VerticalLayout {
padding: 16px;
HorizontalLayout {
alignment: start;
VText {
text: "Unscheduled";
color: Palette.foreground;
font-size: 1.2rem;
}
2024-10-08 16:36:01 +02:00
}
2024-10-29 15:02:46 +01:00
for task[taskIndex] in Backend.unscheduled-tasks: VerticalLayout {
padding-top: taskIndex == 0 ? 16px : 0px;
padding-bottom: 8px;
TaskLine {
task: task;
source-index: task.sourceId;
task-index: task.id;
}
2024-10-08 16:36:01 +02:00
}
}
}
}
}
2024-08-16 21:35:12 +02:00
}
}
2024-10-29 15:02:46 +01:00
Calendar {
init => { debug("cal len", Backend.calendar.length) }
days: Backend.calendar;
}
2024-08-16 21:35:12 +02:00
}
2024-10-29 15:02:46 +01:00
2024-08-16 21:35:12 +02:00
}