1a3e0fd82Sopenharmony_ci/*
2a3e0fd82Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3a3e0fd82Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4a3e0fd82Sopenharmony_ci * you may not use this file except in compliance with the License.
5a3e0fd82Sopenharmony_ci * You may obtain a copy of the License at
6a3e0fd82Sopenharmony_ci *
7a3e0fd82Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8a3e0fd82Sopenharmony_ci *
9a3e0fd82Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10a3e0fd82Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11a3e0fd82Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12a3e0fd82Sopenharmony_ci * See the License for the specific language governing permissions and
13a3e0fd82Sopenharmony_ci * limitations under the License.
14a3e0fd82Sopenharmony_ci */
15a3e0fd82Sopenharmony_ci
16a3e0fd82Sopenharmony_ci/**
17a3e0fd82Sopenharmony_ci * @addtogroup UI_Components
18a3e0fd82Sopenharmony_ci * @{
19a3e0fd82Sopenharmony_ci *
20a3e0fd82Sopenharmony_ci * @brief Defines UI components such as buttons, texts, images, lists, and progress bars.
21a3e0fd82Sopenharmony_ci *
22a3e0fd82Sopenharmony_ci * @since 1.0
23a3e0fd82Sopenharmony_ci * @version 1.0
24a3e0fd82Sopenharmony_ci */
25a3e0fd82Sopenharmony_ci
26a3e0fd82Sopenharmony_ci/**
27a3e0fd82Sopenharmony_ci * @file ui_abstract_clock.h
28a3e0fd82Sopenharmony_ci *
29a3e0fd82Sopenharmony_ci * @brief Declares the <b>UIAbstractClock</b> class that provides the functions related to clocks.
30a3e0fd82Sopenharmony_ci *
31a3e0fd82Sopenharmony_ci * @since 1.0
32a3e0fd82Sopenharmony_ci * @version 1.0
33a3e0fd82Sopenharmony_ci */
34a3e0fd82Sopenharmony_ci
35a3e0fd82Sopenharmony_ci#ifndef UI_ABSTRACT_CLOCK_H
36a3e0fd82Sopenharmony_ci#define UI_ABSTRACT_CLOCK_H
37a3e0fd82Sopenharmony_ci
38a3e0fd82Sopenharmony_ci#include "components/ui_view_group.h"
39a3e0fd82Sopenharmony_ci
40a3e0fd82Sopenharmony_cinamespace OHOS {
41a3e0fd82Sopenharmony_ci/**
42a3e0fd82Sopenharmony_ci * @brief An abstract class that contains functions for converting units of time (hour, minute, and second),
43a3e0fd82Sopenharmony_ci *        setting and obtaining the time.
44a3e0fd82Sopenharmony_ci *
45a3e0fd82Sopenharmony_ci * @since 1.0
46a3e0fd82Sopenharmony_ci * @version 1.0
47a3e0fd82Sopenharmony_ci */
48a3e0fd82Sopenharmony_ciclass UIAbstractClock : public UIViewGroup {
49a3e0fd82Sopenharmony_cipublic:
50a3e0fd82Sopenharmony_ci    /**
51a3e0fd82Sopenharmony_ci     * @brief Represents 60 seconds per minute.
52a3e0fd82Sopenharmony_ci     */
53a3e0fd82Sopenharmony_ci    static constexpr uint8_t ONE_MINUTE_IN_SECOND = 60;
54a3e0fd82Sopenharmony_ci
55a3e0fd82Sopenharmony_ci    /**
56a3e0fd82Sopenharmony_ci     * @brief Represents 60 minutes per hour.
57a3e0fd82Sopenharmony_ci     */
58a3e0fd82Sopenharmony_ci    static constexpr uint8_t ONE_HOUR_IN_MINUTE = 60;
59a3e0fd82Sopenharmony_ci
60a3e0fd82Sopenharmony_ci    /**
61a3e0fd82Sopenharmony_ci     * @brief Represents 24 hours per day.
62a3e0fd82Sopenharmony_ci     */
63a3e0fd82Sopenharmony_ci    static constexpr uint8_t ONE_DAY_IN_HOUR = 24;
64a3e0fd82Sopenharmony_ci
65a3e0fd82Sopenharmony_ci    /**
66a3e0fd82Sopenharmony_ci     * @brief Represents 12 hours every half day.
67a3e0fd82Sopenharmony_ci     */
68a3e0fd82Sopenharmony_ci    static constexpr uint8_t HALF_DAY_IN_HOUR = 12;
69a3e0fd82Sopenharmony_ci
70a3e0fd82Sopenharmony_ci    /**
71a3e0fd82Sopenharmony_ci     * @brief A default constructor used to create a <b>UIAbstractClock</b> instance.
72a3e0fd82Sopenharmony_ci     *
73a3e0fd82Sopenharmony_ci     * @since 1.0
74a3e0fd82Sopenharmony_ci     * @version 1.0
75a3e0fd82Sopenharmony_ci     */
76a3e0fd82Sopenharmony_ci    UIAbstractClock() : currentHour_(0), currentMinute_(0), currentSecond_(0), mode_(WorkMode::NORMAL) {}
77a3e0fd82Sopenharmony_ci
78a3e0fd82Sopenharmony_ci    /**
79a3e0fd82Sopenharmony_ci     * @brief A constructor used to create a <b>UIAbstractClock</b> instance with
80a3e0fd82Sopenharmony_ci     *        time elements (hour, minute and second).
81a3e0fd82Sopenharmony_ci     *
82a3e0fd82Sopenharmony_ci     * @param hour Indicates the hour.
83a3e0fd82Sopenharmony_ci     * @param minute Indicates the minute.
84a3e0fd82Sopenharmony_ci     * @param second Indicates the second.
85a3e0fd82Sopenharmony_ci     * @since 1.0
86a3e0fd82Sopenharmony_ci     * @version 1.0
87a3e0fd82Sopenharmony_ci     */
88a3e0fd82Sopenharmony_ci    UIAbstractClock(uint8_t hour, uint8_t minute, uint8_t second)
89a3e0fd82Sopenharmony_ci        : currentHour_(hour), currentMinute_(minute), currentSecond_(second)
90a3e0fd82Sopenharmony_ci    {
91a3e0fd82Sopenharmony_ci    }
92a3e0fd82Sopenharmony_ci
93a3e0fd82Sopenharmony_ci    /**
94a3e0fd82Sopenharmony_ci     * @brief A destructor used to delete the <b>UIAbstractClock</b> instance.
95a3e0fd82Sopenharmony_ci     *
96a3e0fd82Sopenharmony_ci     * @since 1.0
97a3e0fd82Sopenharmony_ci     * @version 1.0
98a3e0fd82Sopenharmony_ci     */
99a3e0fd82Sopenharmony_ci    virtual ~UIAbstractClock() {}
100a3e0fd82Sopenharmony_ci
101a3e0fd82Sopenharmony_ci    /**
102a3e0fd82Sopenharmony_ci     * @brief Obtains the view type.
103a3e0fd82Sopenharmony_ci     *
104a3e0fd82Sopenharmony_ci     * @return Returns <b>UI_ABSTRACT_CLOCK</b>, as defined in {@link UIViewType}.
105a3e0fd82Sopenharmony_ci     * @since 1.0
106a3e0fd82Sopenharmony_ci     * @version 1.0
107a3e0fd82Sopenharmony_ci     */
108a3e0fd82Sopenharmony_ci    UIViewType GetViewType() const override
109a3e0fd82Sopenharmony_ci    {
110a3e0fd82Sopenharmony_ci        return UI_ABSTRACT_CLOCK;
111a3e0fd82Sopenharmony_ci    }
112a3e0fd82Sopenharmony_ci
113a3e0fd82Sopenharmony_ci    /**
114a3e0fd82Sopenharmony_ci     * @brief Sets the time in 24-hour format.
115a3e0fd82Sopenharmony_ci     *
116a3e0fd82Sopenharmony_ci     * @param hour Indicates the hour to set, within [0, 23] after the modulo operation.
117a3e0fd82Sopenharmony_ci     * @param minute Indicates the minute to set, within [0, 59] after the modulo operation.
118a3e0fd82Sopenharmony_ci     * @param second Indicates the second to set, within [0, 59] after the modulo operation.
119a3e0fd82Sopenharmony_ci     * @since 1.0
120a3e0fd82Sopenharmony_ci     * @version 1.0
121a3e0fd82Sopenharmony_ci     */
122a3e0fd82Sopenharmony_ci    void SetTime24Hour(uint8_t hour, uint8_t minute, uint8_t second);
123a3e0fd82Sopenharmony_ci
124a3e0fd82Sopenharmony_ci    /**
125a3e0fd82Sopenharmony_ci     * @brief Sets the time in 12-hour format.
126a3e0fd82Sopenharmony_ci     *
127a3e0fd82Sopenharmony_ci     * @param hour Indicates the hour to set, within [0, 11] after the modulo operation.
128a3e0fd82Sopenharmony_ci     * @param minute Indicates the minute to set, within [0, 59] after the modulo operation.
129a3e0fd82Sopenharmony_ci     * @param second Indicates the second to set, within [0, 59] after the modulo operation.
130a3e0fd82Sopenharmony_ci     * @param am Specifies whether it is in the morning. <b>true</b> indicates that it is in the morning,
131a3e0fd82Sopenharmony_ci     *           and <b> false</b> indicates that it is in the afternoon.
132a3e0fd82Sopenharmony_ci     * @since 1.0
133a3e0fd82Sopenharmony_ci     * @version 1.0
134a3e0fd82Sopenharmony_ci     */
135a3e0fd82Sopenharmony_ci    void SetTime12Hour(uint8_t hour, uint8_t minute, uint8_t second, bool am);
136a3e0fd82Sopenharmony_ci
137a3e0fd82Sopenharmony_ci    /**
138a3e0fd82Sopenharmony_ci     * @brief Obtains the current number of hours.
139a3e0fd82Sopenharmony_ci     *
140a3e0fd82Sopenharmony_ci     * @return Returns the current number of hours.
141a3e0fd82Sopenharmony_ci     * @since 1.0
142a3e0fd82Sopenharmony_ci     * @version 1.0
143a3e0fd82Sopenharmony_ci     */
144a3e0fd82Sopenharmony_ci    uint8_t GetCurrentHour() const
145a3e0fd82Sopenharmony_ci    {
146a3e0fd82Sopenharmony_ci        return currentHour_;
147a3e0fd82Sopenharmony_ci    }
148a3e0fd82Sopenharmony_ci
149a3e0fd82Sopenharmony_ci    /**
150a3e0fd82Sopenharmony_ci     * @brief Obtains the current number of minutes.
151a3e0fd82Sopenharmony_ci     *
152a3e0fd82Sopenharmony_ci     * @return Returns the current number of minutes.
153a3e0fd82Sopenharmony_ci     * @since 1.0
154a3e0fd82Sopenharmony_ci     * @version 1.0
155a3e0fd82Sopenharmony_ci     */
156a3e0fd82Sopenharmony_ci    uint8_t GetCurrentMinute() const
157a3e0fd82Sopenharmony_ci    {
158a3e0fd82Sopenharmony_ci        return currentMinute_;
159a3e0fd82Sopenharmony_ci    }
160a3e0fd82Sopenharmony_ci
161a3e0fd82Sopenharmony_ci    /**
162a3e0fd82Sopenharmony_ci     * @brief Obtains the current number of seconds.
163a3e0fd82Sopenharmony_ci     *
164a3e0fd82Sopenharmony_ci     * @return Returns the current number of seconds.
165a3e0fd82Sopenharmony_ci     * @since 1.0
166a3e0fd82Sopenharmony_ci     * @version 1.0
167a3e0fd82Sopenharmony_ci     */
168a3e0fd82Sopenharmony_ci    uint8_t GetCurrentSecond() const
169a3e0fd82Sopenharmony_ci    {
170a3e0fd82Sopenharmony_ci        return currentSecond_;
171a3e0fd82Sopenharmony_ci    }
172a3e0fd82Sopenharmony_ci
173a3e0fd82Sopenharmony_ci    /**
174a3e0fd82Sopenharmony_ci     * @brief Increases the time by one second.
175a3e0fd82Sopenharmony_ci     *
176a3e0fd82Sopenharmony_ci     * @since 1.0
177a3e0fd82Sopenharmony_ci     * @version 1.0
178a3e0fd82Sopenharmony_ci     */
179a3e0fd82Sopenharmony_ci    void IncOneSecond();
180a3e0fd82Sopenharmony_ci
181a3e0fd82Sopenharmony_ci    /**
182a3e0fd82Sopenharmony_ci     * @brief Updates this clock.
183a3e0fd82Sopenharmony_ci     *
184a3e0fd82Sopenharmony_ci     * @param clockInit Specifies whether it is the first initialization. <b>true</b> indicates it is the first
185a3e0fd82Sopenharmony_ci     *                  initialization, and <b> false</b> indicates the opposite case.
186a3e0fd82Sopenharmony_ci     * @since 1.0
187a3e0fd82Sopenharmony_ci     * @version 1.0
188a3e0fd82Sopenharmony_ci     */
189a3e0fd82Sopenharmony_ci    virtual void UpdateClock(bool clockInit);
190a3e0fd82Sopenharmony_ci
191a3e0fd82Sopenharmony_ci    /**
192a3e0fd82Sopenharmony_ci     * @brief Enumerates the working modes of this clock.
193a3e0fd82Sopenharmony_ci     */
194a3e0fd82Sopenharmony_ci    enum WorkMode {
195a3e0fd82Sopenharmony_ci        /** Always on (drawing not updated) */
196a3e0fd82Sopenharmony_ci        ALWAYS_ON,
197a3e0fd82Sopenharmony_ci        /** Normal (drawing updated with the time change) */
198a3e0fd82Sopenharmony_ci        NORMAL,
199a3e0fd82Sopenharmony_ci    };
200a3e0fd82Sopenharmony_ci
201a3e0fd82Sopenharmony_ci    /**
202a3e0fd82Sopenharmony_ci     * @brief Sets the working mode for this clock.
203a3e0fd82Sopenharmony_ci     *
204a3e0fd82Sopenharmony_ci     * @param newMode Indicates the working mode to set. For details, see {@link WorkMode}.
205a3e0fd82Sopenharmony_ci     * @since 1.0
206a3e0fd82Sopenharmony_ci     * @version 1.0
207a3e0fd82Sopenharmony_ci     */
208a3e0fd82Sopenharmony_ci    virtual void SetWorkMode(WorkMode newMode);
209a3e0fd82Sopenharmony_ci
210a3e0fd82Sopenharmony_ci    /**
211a3e0fd82Sopenharmony_ci     * @brief Obtains the working mode of this clock.
212a3e0fd82Sopenharmony_ci     *
213a3e0fd82Sopenharmony_ci     * @return Returns the working mode, as defined in {@link WorkMode}.
214a3e0fd82Sopenharmony_ci     * @since 1.0
215a3e0fd82Sopenharmony_ci     * @version 1.0
216a3e0fd82Sopenharmony_ci     */
217a3e0fd82Sopenharmony_ci    virtual WorkMode GetWorkMode() const
218a3e0fd82Sopenharmony_ci    {
219a3e0fd82Sopenharmony_ci        return mode_;
220a3e0fd82Sopenharmony_ci    }
221a3e0fd82Sopenharmony_ci
222a3e0fd82Sopenharmony_ciprotected:
223a3e0fd82Sopenharmony_ci    /**
224a3e0fd82Sopenharmony_ci     * @brief Represents the current number of hours.
225a3e0fd82Sopenharmony_ci     */
226a3e0fd82Sopenharmony_ci    uint8_t currentHour_;
227a3e0fd82Sopenharmony_ci
228a3e0fd82Sopenharmony_ci    /**
229a3e0fd82Sopenharmony_ci     * @brief Represents the current number of minutes.
230a3e0fd82Sopenharmony_ci     */
231a3e0fd82Sopenharmony_ci    uint8_t currentMinute_;
232a3e0fd82Sopenharmony_ci
233a3e0fd82Sopenharmony_ci    /**
234a3e0fd82Sopenharmony_ci     * @brief Represents the current number of seconds.
235a3e0fd82Sopenharmony_ci     */
236a3e0fd82Sopenharmony_ci    uint8_t currentSecond_;
237a3e0fd82Sopenharmony_ci
238a3e0fd82Sopenharmony_ci    /**
239a3e0fd82Sopenharmony_ci     * @brief Represents the current working mode of this clock.
240a3e0fd82Sopenharmony_ci     */
241a3e0fd82Sopenharmony_ci    WorkMode mode_;
242a3e0fd82Sopenharmony_ci};
243a3e0fd82Sopenharmony_ci} // namespace OHOS
244a3e0fd82Sopenharmony_ci#endif // UI_ABSTRACT_CLOCK_H
245