/* * Copyright (c) 2020-2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @addtogroup UI_Components * @{ * * @brief Defines UI components such as buttons, texts, images, lists, and progress bars. * * @since 1.0 * @version 1.0 */ /** * @file text_adapter.h * * @brief Defines a text adapter that is used to construct UILabel instances. * * @since 1.0 * @version 1.0 */ #ifndef GRAPHIC_LITE_TEXT_ADAPTER_H #define GRAPHIC_LITE_TEXT_ADAPTER_H #include "components/abstract_adapter.h" #include "components/ui_label.h" #include "gfx_utils/list.h" namespace OHOS { /** * @brief Defines a text formatter. You can inherit this class and implement the Format() function. * * @since 1.0 * @version 1.0 */ class TextFormatter : public HeapBase { public: /** * @brief Converts the input integer into a character string for output. * * @param value Indicates the input integer. * @param outText Indicates the pointer to the converted string. * @param textLen Indicates the length of the string. * @since 1.0 * @version 1.0 */ virtual bool Format(int16_t value, char* outText, uint16_t textLen); }; /** * @brief Defines a text adapter, which implements UILabel instance construction and supports text data and continuous * integer data. * * @since 1.0 * @version 1.0 */ class TextAdapter : public AbstractAdapter { public: /** * @brief A constructor used to create a UILabel instance. * @since 1.0 * @version 1.0 */ TextAdapter(); /** * @brief A destructor used to delete the UILabel instance. * @since 1.0 * @version 1.0 */ virtual ~TextAdapter(); /** * @brief Obtains a UILabel instance to convert adapter data into another UILabel instance. * * @param inView Indicates the pointer to the reusable instance. If this parameter is not NULL, a reusable * UILabel instance is available. In this case, this function does not need to create a new * UILabel instance, just resusing the instance specified by inView to update the inView * data. If this parameter is NULL, there is no resuable UIView instance. In this case, this * function needs to create a new UILabel instance. * * @param index Indicates the adapter data index. * * @return Returns the address of the UILabel instance constructed by the adapter. * @since 1.0 * @version 1.0 */ UIView* GetView(UIView* inView, int16_t index) override; /** * @brief Sets the UILabel adapter data, which is a string linked list. * * @param data Indicates the string linked list data. * @since 1.0 * @version 1.0 */ void SetData(List* data); /** * @brief Sets continuously increasing data. For example, if you need to set data 0, 1, 2, * 3, 4, use this function to set start to 0 and end to 4. * * @param start Indicates the start value of the integer data. * @param end Indicates the end value of the integer data. * @since 1.0 * @version 1.0 */ void SetData(int16_t start, int16_t end); /** * @brief Sets font ID. * * @param fontId Indicates the font ID. For details, see {@link UITextLanguageFontId}. * @since 1.0 * @version 1.0 */ void SetFontId(uint16_t fontId) { fontId_ = fontId; if (fontName_ != nullptr) { UIFree(fontName_); fontName_ = nullptr; } } /** * @brief Obtains font ID. * * @return Returns the font ID. For details, see {@link UITextLanguageFontId}. * @since 1.0 * @version 1.0 */ uint16_t GetFontId() const { return fontId_; } /** * @brief Sets the font. * * @param name Indicates the pointer to the font name. * @param size Indicates the font size to set. * @since 1.0 * @version 1.0 */ void SetFont(const char* name, uint8_t size); /** * @brief Obtains the UILabel adapter style. * * @return Returns the UILabel adapter style. * @since 1.0 * @version 1.0 */ Style& GetStyle() { return style_; } /** * @brief Obtains the data size of the UILabel adapter. * * @return Returns the data size of the UILabel adapter. * @since 1.0 * @version 1.0 */ uint16_t GetCount() override; /** * @brief Sets the width of UILabel constructed by the adapter. * * @return Returns the width of UILabel. * @since 1.0 * @version 1.0 */ void SetWidth(int16_t width) { width_ = width; } /** * @brief Sets the direction of the UILabel constructed by the adapter. * * @param direct Indicates the direction of the UILabel constructed by the adapter. * @since 1.0 * @version 1.0 */ void SetDirect(UITextLanguageDirect direct) { direct_ = direct; } /** * @brief Sets the height of the UILabel constructed by the adapter. * * @return Returns the height of the UILabel constructed by the adapter. * @since 1.0 * @version 1.0 */ void SetHeight(int16_t height) { height_ = height; } /** * @brief Sets the LineBreakMode attribute of UILabel constructed by the adapter. For details about the * values of LineBreakMode, see {@link LINE_BREAK_ADAPT}, {@link LINE_BREAK_WRAP}, * {@link LINE_BREAK_ELLIPSIS}, and {@link LINE_BREAK_MARQUEE}. * * @param lineBreakMode Indicates the LineBreakMode of UILabel. * @since 1.0 * @version 1.0 */ void SetLineBreakMode(const uint8_t lineBreakMode) { lineBreakMode_ = lineBreakMode; } /** * @brief Sets the callback function to be invoked upon a click event. * * @param clickListener Indicates the pointer to the callback function. * @since 1.0 * @version 1.0 */ void SetOnClickListener(UIView::OnClickListener* clickListener) { clickListener_ = clickListener; } /** * @brief Sets the text formatter. * * @param formatter Indicates the pointer to the text formatter. For details, see {@link TextFormatter}. * * @since 1.0 * @version 1.0 */ void SetTextFormatter(TextFormatter* formatter) { formatter_ = formatter; } protected: virtual UILabel* GetTextView(UIView* inView, int16_t index); virtual UILabel* CreateUILabel(UIView* inView); uint8_t dataMode_; private: static constexpr uint8_t DYNAMIC_TEXT_MODE = 0; static constexpr uint8_t CONTINUOUS_INTEGER_MODE = 3; static constexpr uint8_t BUF_LEN = 7; UILabel* GetDynamicText(UIView* inView, int16_t index); UILabel* GetIntegerText(UIView* inView, int16_t index); void ClearDynamicText(); uint16_t fontId_; char* fontName_; uint8_t fontSize_; int16_t width_; int16_t height_; UITextLanguageDirect direct_; uint8_t lineBreakMode_; int16_t integerTextStart_; int16_t integerTextEnd_; Style style_; List dynamicText_; UIView::OnClickListener* clickListener_; TextFormatter* formatter_; }; } // namespace OHOS #endif // GRAPHIC_LITE_TEXT_ADAPTER_H