/*
* 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 ui_label_button.h
*
* @brief Declares a label button.
*
* @since 1.0
* @version 1.0
*/
#ifndef GRAPHIC_LITE_UI_LABEL_BUTTON_H
#define GRAPHIC_LITE_UI_LABEL_BUTTON_H
#include "common/text.h"
#include "components/ui_button.h"
#include "gfx_utils/graphic_log.h"
namespace OHOS {
/**
* @brief Provides the functions related to a label button.
*
* @since 1.0
* @version 1.0
*/
class UILabelButton : public UIButton {
public:
/**
* @brief A constructor used to create a UILabelButton instance.
*
* @since 1.0
* @version 1.0
*/
UILabelButton();
/**
* @brief A destructor used to delete the UILabelButton instance.
*
* @since 1.0
* @version 1.0
*/
virtual ~UILabelButton();
/**
* @brief Draws a label button.
*
* @since 1.0
* @version 1.0
*/
void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override;
/**
* @brief Obtains the view type.
*
* @return Returns UI_LABEL_BUTTON, as defined in {@link UIViewType}.
* @since 1.0
* @version 1.0
*/
UIViewType GetViewType() const override
{
return UI_LABEL_BUTTON;
}
/**
* @brief Sets the text for this label button.
*
* @param text Indicates the pointer to the text.
* @since 1.0
* @version 1.0
*/
void SetText(const char* text)
{
InitLabelButtonText();
labelButtonText_->SetText(text);
}
/**
* @brief Obtains the text of this label button.
*
* @return Returns the text.
* @since 1.0
* @version 1.0
*/
const char* GetText() const
{
return (labelButtonText_ == nullptr) ? nullptr : labelButtonText_->GetText();
}
/**
* @brief Sets the position for this label relative to the button holding it.
*
* @param x Indicates the offset distance by which this label is moved on the x-axis.
* @param y Indicates the offset distance by which this label is moved on the y-axis.
* @since 1.0
* @version 1.0
*/
void SetLablePosition(int16_t x, int16_t y)
{
offset_.x = x;
offset_.y = y;
}
/**
* @brief Obtains the position of this label relative to the button holding it.
*
* @return Returns the position of this label.
* @since 1.0
* @version 1.0
*/
Point GetLabelPosition() const
{
return offset_;
}
/**
* @brief Sets the alignment mode for this text.
*
* @param align Indicates the text alignment mode to set, as defined in {@link UITextLanguageAlignment}.
* @since 1.0
* @version 1.0
*/
void SetAlign(UITextLanguageAlignment align)
{
InitLabelButtonText();
labelButtonText_->SetAlign(align, TEXT_ALIGNMENT_CENTER);
}
/**
* @brief Obtains the alignment mode of this text.
*
* @return Returns the text alignment mode, as defined in {@link UITextLanguageAlignment}.
* @since 1.0
* @version 1.0
*/
UITextLanguageAlignment GetAlign()
{
InitLabelButtonText();
return labelButtonText_->GetHorAlign();
}
/**
* @brief Sets the direction for this text.
*
* @param direct Indicates the text direction to set, as defined in {@link UITextLanguageDirect}.
* @since 1.0
* @version 1.0
*/
void SetDirect(UITextLanguageDirect direct)
{
InitLabelButtonText();
labelButtonText_->SetDirect(direct);
}
/**
* @brief Obtains the direction of this text.
*
* @return Returns the text direction, as defined in {@link UITextLanguageDirect}.
* @since 1.0
* @version 1.0
*/
UITextLanguageDirect GetDirect()
{
InitLabelButtonText();
return labelButtonText_->GetDirect();
}
/**
* @brief Sets the style for this label.
*
* @param labelStyle Indicates the label style to set.
* @since 1.0
* @version 1.0
*/
void SetLabelStyle(Style& labelStyle)
{
labelStyle_ = labelStyle;
}
/**
* @brief Sets a style for this label.
*
* @param key Indicates the key of the style to set.
* @param value Indicates the value matching the key.
* @since 1.0
* @version 1.0
*/
void SetLabelStyle(uint8_t key, int64_t value)
{
labelStyle_.SetStyle(key, value);
}
/**
* @brief Obtains the style of this label.
*
* @return Returns the label style.
* @since 1.0
* @version 1.0
*/
const Style& GetLabelStyle() const
{
return labelStyle_;
}
/**
* @brief Obtains the value of a style of this label.
*
* @param key Indicates the key of the style.
* @return Returns the value of the style.
* @since 1.0
* @version 1.0
*/
int64_t GetLabelStyle(uint8_t key) const
{
return labelStyle_.GetStyle(key);
}
/**
* @brief Sets the color for this text.
*
* @param color Indicates the text color to set.
* @since 1.0
* @version 1.0
*/
void SetTextColor(ColorType color)
{
labelStyle_.textColor_ = color;
}
/**
* @brief Sets the font for this text.
*
* @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)
{
InitLabelButtonText();
labelButtonText_->SetFont(name, size);
}
/**
* @brief Sets the font ID.
*
* @param fontId Indicates the font ID composed of the font name and size.
* @since 1.0
* @version 1.0
*/
void SetFontId(uint8_t fontId)
{
InitLabelButtonText();
labelButtonText_->SetFontId(fontId);
}
/**
* @brief Obtains the font ID.
*
* @return Returns the front ID composed of the font name and size.
* @since 1.0
* @version 1.0
*/
uint8_t GetFontId()
{
InitLabelButtonText();
return labelButtonText_->GetFontId();
}
protected:
virtual void InitLabelButtonText()
{
if (labelButtonText_ == nullptr) {
labelButtonText_ = new Text();
if (labelButtonText_ == nullptr) {
GRAPHIC_LOGE("new Text fail");
return;
}
labelButtonText_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
}
}
Text* labelButtonText_;
private:
Style labelStyle_;
Point offset_; /* Text draw position offset */
};
} // namespace OHOS
#endif // GRAPHIC_LITE_UI_LABEL_BUTTON_H