mirai/ui/windows/EventWindow.slint

100 lines
2 KiB
Text

import { Date, Time, ComboBox } from "std-widgets.slint";
import { VTimePicker, VDatePicker, VButton, VTextInput, VText, Palette } from "@vynui";
import { Backend } from "../Backend.slint";
struct NewEventParams {
sourceId: int,
title: string,
date: Date,
startsAt: Time,
endsAt: Time
}
struct SaveEventParams {
sourceId: int,
id: int,
title: string,
date: Date,
startsAt: Time,
endsAt: Time
}
export component EventWindow inherits Window {
title: "Mirai - " + (eventId == -1 ? "New event" : "Edit event");
min-width: 100px;
max-width: 1920px;
preferred-width: 512px;
min-height: 100px;
max-height: 4000px;
default-font-size: 16px;
background: Palette.background;
in-out property<int> sourceId <=> sourceInput.current-index;
in-out property<int> eventId: -1;
in-out property<Date> taskDate <=> taskDateInput.date;
in-out property<string> taskTitle <=> taskTitleInput.text;
in-out property<Time> startsAt <=> eventStartTimeInput.time;
in-out property<Time> endsAt <=> eventEndTimeInput.time;
callback create(NewEventParams);
callback save(SaveEventParams);
VerticalLayout {
padding: 16px;
spacing: 8px;
VText {
text: eventId == -1 ? "New event" : "Edit event";
}
sourceInput := ComboBox {
model: Backend.sources;
enabled: eventId == -1;
}
taskDateInput := VDatePicker {
label: "Date";
}
taskTitleInput := VTextInput {
label: "Title";
wrap: word-wrap;
}
HorizontalLayout {
spacing: 4px;
eventStartTimeInput := VTimePicker {
label: "Starts at";
}
eventEndTimeInput := VTimePicker {
label: "Ends at";
}
}
VButton {
text: eventId == -1 ? "Create" : "Save";
clicked => {
if (eventId == -1) {
create({
sourceId: sourceId,
title: taskTitle,
date: taskDate,
startsAt: startsAt,
endsAt: endsAt,
});
} else {
save({
sourceId: sourceId,
id: eventId,
title: taskTitle,
date: taskDate,
startsAt: startsAt,
endsAt: endsAt,
});
}
}
}
}
}
export { Backend }