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_label_button.h
28a3e0fd82Sopenharmony_ci *
29a3e0fd82Sopenharmony_ci * @brief Declares a label button.
30a3e0fd82Sopenharmony_ci *
31a3e0fd82Sopenharmony_ci * @since 1.0
32a3e0fd82Sopenharmony_ci * @version 1.0
33a3e0fd82Sopenharmony_ci */
34a3e0fd82Sopenharmony_ci
35a3e0fd82Sopenharmony_ci#ifndef GRAPHIC_LITE_UI_LABEL_BUTTON_H
36a3e0fd82Sopenharmony_ci#define GRAPHIC_LITE_UI_LABEL_BUTTON_H
37a3e0fd82Sopenharmony_ci
38a3e0fd82Sopenharmony_ci#include "common/text.h"
39a3e0fd82Sopenharmony_ci#include "components/ui_button.h"
40a3e0fd82Sopenharmony_ci#include "gfx_utils/graphic_log.h"
41a3e0fd82Sopenharmony_ci
42a3e0fd82Sopenharmony_cinamespace OHOS {
43a3e0fd82Sopenharmony_ci/**
44a3e0fd82Sopenharmony_ci * @brief Provides the functions related to a label button.
45a3e0fd82Sopenharmony_ci *
46a3e0fd82Sopenharmony_ci * @since 1.0
47a3e0fd82Sopenharmony_ci * @version 1.0
48a3e0fd82Sopenharmony_ci */
49a3e0fd82Sopenharmony_ciclass UILabelButton : public UIButton {
50a3e0fd82Sopenharmony_cipublic:
51a3e0fd82Sopenharmony_ci    /**
52a3e0fd82Sopenharmony_ci     * @brief A constructor used to create a <b>UILabelButton</b> instance.
53a3e0fd82Sopenharmony_ci     *
54a3e0fd82Sopenharmony_ci     * @since 1.0
55a3e0fd82Sopenharmony_ci     * @version 1.0
56a3e0fd82Sopenharmony_ci     */
57a3e0fd82Sopenharmony_ci    UILabelButton();
58a3e0fd82Sopenharmony_ci
59a3e0fd82Sopenharmony_ci    /**
60a3e0fd82Sopenharmony_ci     * @brief A destructor used to delete the <b>UILabelButton</b> instance.
61a3e0fd82Sopenharmony_ci     *
62a3e0fd82Sopenharmony_ci     * @since 1.0
63a3e0fd82Sopenharmony_ci     * @version 1.0
64a3e0fd82Sopenharmony_ci     */
65a3e0fd82Sopenharmony_ci    virtual ~UILabelButton();
66a3e0fd82Sopenharmony_ci
67a3e0fd82Sopenharmony_ci    /**
68a3e0fd82Sopenharmony_ci     * @brief Draws a label button.
69a3e0fd82Sopenharmony_ci     *
70a3e0fd82Sopenharmony_ci     * @since 1.0
71a3e0fd82Sopenharmony_ci     * @version 1.0
72a3e0fd82Sopenharmony_ci     */
73a3e0fd82Sopenharmony_ci    void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override;
74a3e0fd82Sopenharmony_ci
75a3e0fd82Sopenharmony_ci    /**
76a3e0fd82Sopenharmony_ci     * @brief Obtains the view type.
77a3e0fd82Sopenharmony_ci     *
78a3e0fd82Sopenharmony_ci     * @return Returns <b>UI_LABEL_BUTTON</b>, as defined in {@link UIViewType}.
79a3e0fd82Sopenharmony_ci     * @since 1.0
80a3e0fd82Sopenharmony_ci     * @version 1.0
81a3e0fd82Sopenharmony_ci     */
82a3e0fd82Sopenharmony_ci    UIViewType GetViewType() const override
83a3e0fd82Sopenharmony_ci    {
84a3e0fd82Sopenharmony_ci        return UI_LABEL_BUTTON;
85a3e0fd82Sopenharmony_ci    }
86a3e0fd82Sopenharmony_ci
87a3e0fd82Sopenharmony_ci    /**
88a3e0fd82Sopenharmony_ci     * @brief Sets the text for this label button.
89a3e0fd82Sopenharmony_ci     *
90a3e0fd82Sopenharmony_ci     * @param text Indicates the pointer to the text.
91a3e0fd82Sopenharmony_ci     * @since 1.0
92a3e0fd82Sopenharmony_ci     * @version 1.0
93a3e0fd82Sopenharmony_ci     */
94a3e0fd82Sopenharmony_ci    void SetText(const char* text)
95a3e0fd82Sopenharmony_ci    {
96a3e0fd82Sopenharmony_ci        InitLabelButtonText();
97a3e0fd82Sopenharmony_ci        labelButtonText_->SetText(text);
98a3e0fd82Sopenharmony_ci    }
99a3e0fd82Sopenharmony_ci
100a3e0fd82Sopenharmony_ci    /**
101a3e0fd82Sopenharmony_ci     * @brief Obtains the text of this label button.
102a3e0fd82Sopenharmony_ci     *
103a3e0fd82Sopenharmony_ci     * @return Returns the text.
104a3e0fd82Sopenharmony_ci     * @since 1.0
105a3e0fd82Sopenharmony_ci     * @version 1.0
106a3e0fd82Sopenharmony_ci     */
107a3e0fd82Sopenharmony_ci    const char* GetText() const
108a3e0fd82Sopenharmony_ci    {
109a3e0fd82Sopenharmony_ci        return (labelButtonText_ == nullptr) ? nullptr : labelButtonText_->GetText();
110a3e0fd82Sopenharmony_ci    }
111a3e0fd82Sopenharmony_ci
112a3e0fd82Sopenharmony_ci    /**
113a3e0fd82Sopenharmony_ci     * @brief Sets the position for this label relative to the button holding it.
114a3e0fd82Sopenharmony_ci     *
115a3e0fd82Sopenharmony_ci     * @param x Indicates the offset distance by which this label is moved on the x-axis.
116a3e0fd82Sopenharmony_ci     * @param y Indicates the offset distance by which this label is moved on the y-axis.
117a3e0fd82Sopenharmony_ci     * @since 1.0
118a3e0fd82Sopenharmony_ci     * @version 1.0
119a3e0fd82Sopenharmony_ci     */
120a3e0fd82Sopenharmony_ci    void SetLabelPosition(int16_t x, int16_t y)
121a3e0fd82Sopenharmony_ci    {
122a3e0fd82Sopenharmony_ci        offset_.x = x;
123a3e0fd82Sopenharmony_ci        offset_.y = y;
124a3e0fd82Sopenharmony_ci    }
125a3e0fd82Sopenharmony_ci
126a3e0fd82Sopenharmony_ci    /**
127a3e0fd82Sopenharmony_ci     * @brief Obtains the position of this label relative to the button holding it.
128a3e0fd82Sopenharmony_ci     *
129a3e0fd82Sopenharmony_ci     * @return Returns the position of this label.
130a3e0fd82Sopenharmony_ci     * @since 1.0
131a3e0fd82Sopenharmony_ci     * @version 1.0
132a3e0fd82Sopenharmony_ci     */
133a3e0fd82Sopenharmony_ci    Point GetLabelPosition() const
134a3e0fd82Sopenharmony_ci    {
135a3e0fd82Sopenharmony_ci        return offset_;
136a3e0fd82Sopenharmony_ci    }
137a3e0fd82Sopenharmony_ci
138a3e0fd82Sopenharmony_ci    /**
139a3e0fd82Sopenharmony_ci     * @brief Sets the alignment mode for this text.
140a3e0fd82Sopenharmony_ci     *
141a3e0fd82Sopenharmony_ci     * @param align Indicates the text alignment mode to set, as defined in {@link UITextLanguageAlignment}.
142a3e0fd82Sopenharmony_ci     * @since 1.0
143a3e0fd82Sopenharmony_ci     * @version 1.0
144a3e0fd82Sopenharmony_ci     */
145a3e0fd82Sopenharmony_ci    void SetAlign(UITextLanguageAlignment align)
146a3e0fd82Sopenharmony_ci    {
147a3e0fd82Sopenharmony_ci        InitLabelButtonText();
148a3e0fd82Sopenharmony_ci        labelButtonText_->SetAlign(align, TEXT_ALIGNMENT_CENTER);
149a3e0fd82Sopenharmony_ci    }
150a3e0fd82Sopenharmony_ci
151a3e0fd82Sopenharmony_ci    /**
152a3e0fd82Sopenharmony_ci     * @brief Obtains the alignment mode of this text.
153a3e0fd82Sopenharmony_ci     *
154a3e0fd82Sopenharmony_ci     * @return Returns the text alignment mode, as defined in {@link UITextLanguageAlignment}.
155a3e0fd82Sopenharmony_ci     * @since 1.0
156a3e0fd82Sopenharmony_ci     * @version 1.0
157a3e0fd82Sopenharmony_ci     */
158a3e0fd82Sopenharmony_ci    UITextLanguageAlignment GetAlign()
159a3e0fd82Sopenharmony_ci    {
160a3e0fd82Sopenharmony_ci        InitLabelButtonText();
161a3e0fd82Sopenharmony_ci        return labelButtonText_->GetHorAlign();
162a3e0fd82Sopenharmony_ci    }
163a3e0fd82Sopenharmony_ci
164a3e0fd82Sopenharmony_ci    /**
165a3e0fd82Sopenharmony_ci     * @brief Sets the direction for this text.
166a3e0fd82Sopenharmony_ci     *
167a3e0fd82Sopenharmony_ci     * @param direct Indicates the text direction to set, as defined in {@link UITextLanguageDirect}.
168a3e0fd82Sopenharmony_ci     * @since 1.0
169a3e0fd82Sopenharmony_ci     * @version 1.0
170a3e0fd82Sopenharmony_ci     */
171a3e0fd82Sopenharmony_ci    void SetDirect(UITextLanguageDirect direct)
172a3e0fd82Sopenharmony_ci    {
173a3e0fd82Sopenharmony_ci        InitLabelButtonText();
174a3e0fd82Sopenharmony_ci        labelButtonText_->SetDirect(direct);
175a3e0fd82Sopenharmony_ci    }
176a3e0fd82Sopenharmony_ci
177a3e0fd82Sopenharmony_ci    /**
178a3e0fd82Sopenharmony_ci     * @brief Obtains the direction of this text.
179a3e0fd82Sopenharmony_ci     *
180a3e0fd82Sopenharmony_ci     * @return Returns the text direction, as defined in {@link UITextLanguageDirect}.
181a3e0fd82Sopenharmony_ci     * @since 1.0
182a3e0fd82Sopenharmony_ci     * @version 1.0
183a3e0fd82Sopenharmony_ci     */
184a3e0fd82Sopenharmony_ci    UITextLanguageDirect GetDirect()
185a3e0fd82Sopenharmony_ci    {
186a3e0fd82Sopenharmony_ci        InitLabelButtonText();
187a3e0fd82Sopenharmony_ci        return labelButtonText_->GetDirect();
188a3e0fd82Sopenharmony_ci    }
189a3e0fd82Sopenharmony_ci
190a3e0fd82Sopenharmony_ci    /**
191a3e0fd82Sopenharmony_ci     * @brief Sets the style for this label.
192a3e0fd82Sopenharmony_ci     *
193a3e0fd82Sopenharmony_ci     * @param labelStyle Indicates the label style to set.
194a3e0fd82Sopenharmony_ci     * @since 1.0
195a3e0fd82Sopenharmony_ci     * @version 1.0
196a3e0fd82Sopenharmony_ci     */
197a3e0fd82Sopenharmony_ci    void SetLabelStyle(Style& labelStyle)
198a3e0fd82Sopenharmony_ci    {
199a3e0fd82Sopenharmony_ci        labelStyle_ = labelStyle;
200a3e0fd82Sopenharmony_ci    }
201a3e0fd82Sopenharmony_ci
202a3e0fd82Sopenharmony_ci    /**
203a3e0fd82Sopenharmony_ci     * @brief Sets a style for this label.
204a3e0fd82Sopenharmony_ci     *
205a3e0fd82Sopenharmony_ci     * @param key Indicates the key of the style to set.
206a3e0fd82Sopenharmony_ci     * @param value Indicates the value matching the key.
207a3e0fd82Sopenharmony_ci     * @since 1.0
208a3e0fd82Sopenharmony_ci     * @version 1.0
209a3e0fd82Sopenharmony_ci     */
210a3e0fd82Sopenharmony_ci    void SetLabelStyle(uint8_t key, int64_t value)
211a3e0fd82Sopenharmony_ci    {
212a3e0fd82Sopenharmony_ci        labelStyle_.SetStyle(key, value);
213a3e0fd82Sopenharmony_ci    }
214a3e0fd82Sopenharmony_ci
215a3e0fd82Sopenharmony_ci    /**
216a3e0fd82Sopenharmony_ci     * @brief Obtains the style of this label.
217a3e0fd82Sopenharmony_ci     *
218a3e0fd82Sopenharmony_ci     * @return Returns the label style.
219a3e0fd82Sopenharmony_ci     * @since 1.0
220a3e0fd82Sopenharmony_ci     * @version 1.0
221a3e0fd82Sopenharmony_ci     */
222a3e0fd82Sopenharmony_ci    const Style& GetLabelStyle() const
223a3e0fd82Sopenharmony_ci    {
224a3e0fd82Sopenharmony_ci        return labelStyle_;
225a3e0fd82Sopenharmony_ci    }
226a3e0fd82Sopenharmony_ci
227a3e0fd82Sopenharmony_ci    /**
228a3e0fd82Sopenharmony_ci     * @brief Obtains the value of a style of this label.
229a3e0fd82Sopenharmony_ci     *
230a3e0fd82Sopenharmony_ci     * @param key Indicates the key of the style.
231a3e0fd82Sopenharmony_ci     * @return Returns the value of the style.
232a3e0fd82Sopenharmony_ci     * @since 1.0
233a3e0fd82Sopenharmony_ci     * @version 1.0
234a3e0fd82Sopenharmony_ci     */
235a3e0fd82Sopenharmony_ci    int64_t GetLabelStyle(uint8_t key) const
236a3e0fd82Sopenharmony_ci    {
237a3e0fd82Sopenharmony_ci        return labelStyle_.GetStyle(key);
238a3e0fd82Sopenharmony_ci    }
239a3e0fd82Sopenharmony_ci
240a3e0fd82Sopenharmony_ci    /**
241a3e0fd82Sopenharmony_ci     * @brief Sets the color for this text.
242a3e0fd82Sopenharmony_ci     *
243a3e0fd82Sopenharmony_ci     * @param color Indicates the text color to set.
244a3e0fd82Sopenharmony_ci     * @since 1.0
245a3e0fd82Sopenharmony_ci     * @version 1.0
246a3e0fd82Sopenharmony_ci     */
247a3e0fd82Sopenharmony_ci    void SetTextColor(ColorType color)
248a3e0fd82Sopenharmony_ci    {
249a3e0fd82Sopenharmony_ci        labelStyle_.textColor_ = color;
250a3e0fd82Sopenharmony_ci    }
251a3e0fd82Sopenharmony_ci
252a3e0fd82Sopenharmony_ci    /**
253a3e0fd82Sopenharmony_ci     * @brief Sets the font for this text.
254a3e0fd82Sopenharmony_ci     *
255a3e0fd82Sopenharmony_ci     * @param name Indicates the pointer to the font name.
256a3e0fd82Sopenharmony_ci     * @param size Indicates the font size to set.
257a3e0fd82Sopenharmony_ci     * @since 1.0
258a3e0fd82Sopenharmony_ci     * @version 1.0
259a3e0fd82Sopenharmony_ci     */
260a3e0fd82Sopenharmony_ci    void SetFont(const char* name, uint8_t size)
261a3e0fd82Sopenharmony_ci    {
262a3e0fd82Sopenharmony_ci        InitLabelButtonText();
263a3e0fd82Sopenharmony_ci        labelButtonText_->SetFont(name, size);
264a3e0fd82Sopenharmony_ci    }
265a3e0fd82Sopenharmony_ci
266a3e0fd82Sopenharmony_ci    /**
267a3e0fd82Sopenharmony_ci     * @brief Sets the font ID.
268a3e0fd82Sopenharmony_ci     *
269a3e0fd82Sopenharmony_ci     * @param fontId Indicates the font ID composed of the font name and size.
270a3e0fd82Sopenharmony_ci     * @since 1.0
271a3e0fd82Sopenharmony_ci     * @version 1.0
272a3e0fd82Sopenharmony_ci     */
273a3e0fd82Sopenharmony_ci    void SetFontId(uint16_t fontId)
274a3e0fd82Sopenharmony_ci    {
275a3e0fd82Sopenharmony_ci        InitLabelButtonText();
276a3e0fd82Sopenharmony_ci        labelButtonText_->SetFontId(fontId);
277a3e0fd82Sopenharmony_ci    }
278a3e0fd82Sopenharmony_ci
279a3e0fd82Sopenharmony_ci    /**
280a3e0fd82Sopenharmony_ci     * @brief Obtains the font ID.
281a3e0fd82Sopenharmony_ci     *
282a3e0fd82Sopenharmony_ci     * @return Returns the front ID composed of the font name and size.
283a3e0fd82Sopenharmony_ci     * @since 1.0
284a3e0fd82Sopenharmony_ci     * @version 1.0
285a3e0fd82Sopenharmony_ci     */
286a3e0fd82Sopenharmony_ci    uint16_t GetFontId()
287a3e0fd82Sopenharmony_ci    {
288a3e0fd82Sopenharmony_ci        InitLabelButtonText();
289a3e0fd82Sopenharmony_ci        return labelButtonText_->GetFontId();
290a3e0fd82Sopenharmony_ci    }
291a3e0fd82Sopenharmony_ci
292a3e0fd82Sopenharmony_ciprotected:
293a3e0fd82Sopenharmony_ci    virtual void InitLabelButtonText()
294a3e0fd82Sopenharmony_ci    {
295a3e0fd82Sopenharmony_ci        if (labelButtonText_ == nullptr) {
296a3e0fd82Sopenharmony_ci            labelButtonText_ = new Text();
297a3e0fd82Sopenharmony_ci            if (labelButtonText_ == nullptr) {
298a3e0fd82Sopenharmony_ci                GRAPHIC_LOGE("new Text fail");
299a3e0fd82Sopenharmony_ci                return;
300a3e0fd82Sopenharmony_ci            }
301a3e0fd82Sopenharmony_ci            labelButtonText_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
302a3e0fd82Sopenharmony_ci        }
303a3e0fd82Sopenharmony_ci    }
304a3e0fd82Sopenharmony_ci
305a3e0fd82Sopenharmony_ci    Text* labelButtonText_;
306a3e0fd82Sopenharmony_ci
307a3e0fd82Sopenharmony_ciprivate:
308a3e0fd82Sopenharmony_ci    Style labelStyle_;
309a3e0fd82Sopenharmony_ci    Point offset_; /* Text draw position offset */
310a3e0fd82Sopenharmony_ci};
311a3e0fd82Sopenharmony_ci} // namespace OHOS
312a3e0fd82Sopenharmony_ci#endif // GRAPHIC_LITE_UI_LABEL_BUTTON_H
313