#pragma once #include "windows/AppWindow.hpp" #include "Application.hpp" #include "application-calendar/ApplicationCalendar.hpp" #include "application-calendar/models/MonthModel.hpp" #include #include #include #include namespace gui { class CalendarMainWindow; class DayLabel : public Label { public: DayLabel(app::Application *app, gui::Item *parent, const uint32_t &cellIndex, const uint32_t &firstWeekOffset, const uint32_t &width, const uint32_t &height); ~DayLabel() override = default; }; class MonthBox : public GridLayout { public: MonthBox(app::Application *app, gui::Item *parent, const int &offsetTop, const uint32_t &width, const uint32_t &height, const uint32_t &dayWidth, const uint32_t &dayHeight, const std::unique_ptr &model); ~MonthBox() override = default; }; class CalendarMainWindow : public gui::AppWindow { uint32_t offsetFromTop = 0; uint32_t monthWidth = 0; uint32_t monthHeight = 0; uint32_t dayWidth = 0; uint32_t dayHeight = 0; protected: date::year_month_day actualDate; MonthBox *month = nullptr; Label *dateLabel = nullptr; std::unique_ptr monthModel; public: CalendarMainWindow(app::Application *app, std::string name); ~CalendarMainWindow() override = default; void switchToNoEventsWindow(); void rebuild() override; void refresh(); void buildMonth(std::unique_ptr &model); void buildDateLabel(std::string actualDateTime); void buildInterface() override; void destroyInterface() override; bool onInput(const gui::InputEvent &inputEvent) override; }; } // namespace gui