// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "CalendarListItem.hpp" #include "EventDateItem.hpp" #include #include #include namespace gui { namespace timeConstants { inline constexpr auto before_noon = "AM"; inline constexpr auto after_noon = "PM"; } // namespace timeConstants class EventTimeItem : public CalendarListItem { gui::VBox *vBox = nullptr; gui::HBox *hBox = nullptr; gui::Label *colonLabel = nullptr; gui::Label *descriptionLabel = nullptr; gui::Text *hourInput = nullptr; gui::Text *minuteInput = nullptr; gui::Label *mode12hInput = nullptr; bool mode24H = false; gui::EventTimeItem *secondItem = nullptr; gui::EventDateItem *dateItem = nullptr; std::function bottomBarTemporaryMode = nullptr; std::function bottomBarRestoreFromTemporaryMode = nullptr; void applyInputCallbacks(); void prepareForTimeMode(); bool isPm(const std::string &text); void validateHour(); void validateHourFor12hMode(std::chrono::hours start_hour, std::chrono::minutes end_hour, uint32_t start_minutes, uint32_t end_minutes); void validateHourFor24hMode(std::chrono::hours start_hour, std::chrono::minutes end_hour, uint32_t start_minutes, uint32_t end_minutes); TimePoint calculateEventTime(calendar::YearMonthDay date, std::chrono::hours hours, std::chrono::minutes minutes); public: EventTimeItem(const std::string &description, bool mode24H, std::function bottomBarTemporaryMode = nullptr, std::function bottomBarRestoreFromTemporaryMode = nullptr); virtual ~EventTimeItem() override = default; void setConnectionToSecondItem(gui::EventTimeItem *item); void setConnectionToDateItem(gui::EventDateItem *item); // virtual methods from Item bool onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) override; }; } /* namespace gui */