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_repeate_button.h
28a3e0fd82Sopenharmony_ci *
29a3e0fd82Sopenharmony_ci * @brief Defines the attributes and common functions of a repeat button.
30a3e0fd82Sopenharmony_ci *
31a3e0fd82Sopenharmony_ci * If a repeat button is clicked and hold, the click event is triggered continuously.
32a3e0fd82Sopenharmony_ci *
33a3e0fd82Sopenharmony_ci * @since 1.0
34a3e0fd82Sopenharmony_ci * @version 1.0
35a3e0fd82Sopenharmony_ci */
36a3e0fd82Sopenharmony_ci
37a3e0fd82Sopenharmony_ci#ifndef GRAPHIC_LITE_UI_REPEAT_BUTTON_H
38a3e0fd82Sopenharmony_ci#define GRAPHIC_LITE_UI_REPEAT_BUTTON_H
39a3e0fd82Sopenharmony_ci
40a3e0fd82Sopenharmony_ci#include "components/ui_button.h"
41a3e0fd82Sopenharmony_ci
42a3e0fd82Sopenharmony_cinamespace OHOS {
43a3e0fd82Sopenharmony_ci/**
44a3e0fd82Sopenharmony_ci * @brief Represents a repeat button.
45a3e0fd82Sopenharmony_ci *
46a3e0fd82Sopenharmony_ci * If a repeat button is clicked and hold, the click event is triggered continuously.
47a3e0fd82Sopenharmony_ci *
48a3e0fd82Sopenharmony_ci * @see UIButton
49a3e0fd82Sopenharmony_ci * @since 1.0
50a3e0fd82Sopenharmony_ci * @version 1.0 */
51a3e0fd82Sopenharmony_ciclass UIRepeatButton : public UIButton {
52a3e0fd82Sopenharmony_cipublic:
53a3e0fd82Sopenharmony_ci    /**
54a3e0fd82Sopenharmony_ci     * @brief A constructor used to create a <b>UIRepeatButton</b> instance.
55a3e0fd82Sopenharmony_ci     *
56a3e0fd82Sopenharmony_ci     * @since 1.0
57a3e0fd82Sopenharmony_ci     * @version 1.0
58a3e0fd82Sopenharmony_ci     */
59a3e0fd82Sopenharmony_ci    UIRepeatButton();
60a3e0fd82Sopenharmony_ci
61a3e0fd82Sopenharmony_ci    /**
62a3e0fd82Sopenharmony_ci     * @brief A destructor used to delete the <b>UIRepeatButton</b> instance.
63a3e0fd82Sopenharmony_ci     *
64a3e0fd82Sopenharmony_ci     * @since 1.0
65a3e0fd82Sopenharmony_ci     * @version 1.0
66a3e0fd82Sopenharmony_ci     */
67a3e0fd82Sopenharmony_ci    virtual ~UIRepeatButton();
68a3e0fd82Sopenharmony_ci
69a3e0fd82Sopenharmony_ci    /**
70a3e0fd82Sopenharmony_ci     * @brief Obtains the component type.
71a3e0fd82Sopenharmony_ci     *
72a3e0fd82Sopenharmony_ci     * @return Returns the component type, as defined in {@link UIViewType}.
73a3e0fd82Sopenharmony_ci     * @since 1.0
74a3e0fd82Sopenharmony_ci     * @version 1.0
75a3e0fd82Sopenharmony_ci     */
76a3e0fd82Sopenharmony_ci    UIViewType GetViewType() const override
77a3e0fd82Sopenharmony_ci    {
78a3e0fd82Sopenharmony_ci        return UI_REPEAT_BUTTON;
79a3e0fd82Sopenharmony_ci    }
80a3e0fd82Sopenharmony_ci
81a3e0fd82Sopenharmony_ci    /**
82a3e0fd82Sopenharmony_ci     * @brief Sets the interval between two consecutive click events.
83a3e0fd82Sopenharmony_ci     *
84a3e0fd82Sopenharmony_ci     * @param interval Indicates the interval to set.
85a3e0fd82Sopenharmony_ci
86a3e0fd82Sopenharmony_ci     * @since 1.0
87a3e0fd82Sopenharmony_ci     * @version 1.0
88a3e0fd82Sopenharmony_ci     */
89a3e0fd82Sopenharmony_ci    virtual void SetInterval(uint16_t interval)
90a3e0fd82Sopenharmony_ci    {
91a3e0fd82Sopenharmony_ci        ticksInterval_ = interval;
92a3e0fd82Sopenharmony_ci    }
93a3e0fd82Sopenharmony_ci
94a3e0fd82Sopenharmony_ci    /**
95a3e0fd82Sopenharmony_ci     * @brief Obtains the interval between two consecutive click events.
96a3e0fd82Sopenharmony_ci     *
97a3e0fd82Sopenharmony_ci     * @return Returns the interval between two consecutive click events.
98a3e0fd82Sopenharmony_ci     * @since 1.0
99a3e0fd82Sopenharmony_ci     * @version 1.0
100a3e0fd82Sopenharmony_ci     */
101a3e0fd82Sopenharmony_ci    virtual uint16_t GetInterval() const
102a3e0fd82Sopenharmony_ci    {
103a3e0fd82Sopenharmony_ci        return ticksInterval_;
104a3e0fd82Sopenharmony_ci    }
105a3e0fd82Sopenharmony_ci
106a3e0fd82Sopenharmony_ci    /**
107a3e0fd82Sopenharmony_ci     * @fn  void UIRepeatButton::OnClickEvent(const ClickEvent& event)
108a3e0fd82Sopenharmony_ci     *
109a3e0fd82Sopenharmony_ci     * @brief   The action of click event.
110a3e0fd82Sopenharmony_ci     *
111a3e0fd82Sopenharmony_ci     * @param [in]  event   click event.
112a3e0fd82Sopenharmony_ci     * @return Returns <b>true</b> if the event is consumed; returns <b>false</b> otherwise.
113a3e0fd82Sopenharmony_ci     */
114a3e0fd82Sopenharmony_ci    bool OnClickEvent(const ClickEvent& event) override;
115a3e0fd82Sopenharmony_ci
116a3e0fd82Sopenharmony_ci    /**
117a3e0fd82Sopenharmony_ci     * @fn  void UIRepeatButton::OnReleaseEvent(const ReleaseEvent& event)
118a3e0fd82Sopenharmony_ci     *
119a3e0fd82Sopenharmony_ci     * @brief   The action of release event.
120a3e0fd82Sopenharmony_ci     *
121a3e0fd82Sopenharmony_ci     * @param [in]  event   release event.
122a3e0fd82Sopenharmony_ci     */
123a3e0fd82Sopenharmony_ci    bool OnReleaseEvent(const ReleaseEvent& event) override;
124a3e0fd82Sopenharmony_ci
125a3e0fd82Sopenharmony_ci    /**
126a3e0fd82Sopenharmony_ci     * @fn  void UIRepeatButton::OnLongPressEvent(const ReleaseEvent& event)
127a3e0fd82Sopenharmony_ci     *
128a3e0fd82Sopenharmony_ci     * @brief   The action of long press event.
129a3e0fd82Sopenharmony_ci     *
130a3e0fd82Sopenharmony_ci     * @param [in]  event   long press event.
131a3e0fd82Sopenharmony_ci     */
132a3e0fd82Sopenharmony_ci    bool OnLongPressEvent(const LongPressEvent& event) override;
133a3e0fd82Sopenharmony_ci
134a3e0fd82Sopenharmony_ci    /**
135a3e0fd82Sopenharmony_ci     * @fn  void UIRepeatButton::HandleTickEvent()
136a3e0fd82Sopenharmony_ci     *
137a3e0fd82Sopenharmony_ci     * @brief   handle the event of long pressing.
138a3e0fd82Sopenharmony_ci     */
139a3e0fd82Sopenharmony_ci    void HandleTickEvent();
140a3e0fd82Sopenharmony_ci
141a3e0fd82Sopenharmony_ciprivate:
142a3e0fd82Sopenharmony_ci    uint16_t ticksInterval_;
143a3e0fd82Sopenharmony_ci    ClickEvent event_;
144a3e0fd82Sopenharmony_ci    bool longPressed_;
145a3e0fd82Sopenharmony_ci    static UIRepeatButton* repeatButton_;
146a3e0fd82Sopenharmony_ci    uint32_t timerRepeatID_;
147a3e0fd82Sopenharmony_ci
148a3e0fd82Sopenharmony_ci    void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override;
149a3e0fd82Sopenharmony_ci    inline void SetEvent(const ClickEvent& event);
150a3e0fd82Sopenharmony_ci};
151a3e0fd82Sopenharmony_ci} // namespace OHOS
152a3e0fd82Sopenharmony_ci
153a3e0fd82Sopenharmony_ci#endif // GRAPHIC_LITE_UI_REPEAT_BUTTON_H
154