/*
* 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_checkbox.h
*
* @brief Defines the attributes and common functions of a check box.
*
* @since 1.0
* @version 1.0
*/
#ifndef GRAPHIC_LITE_UI_CHECKBOX_H
#define GRAPHIC_LITE_UI_CHECKBOX_H
#include "animator/animator.h"
#include "animator/interpolation.h"
#include "common/image.h"
#include "components/ui_view.h"
namespace OHOS {
/**
* @brief Represents a check box.
*
* A check box permits users to make a binary choice.
*
* @since 1.0
* @version 1.0
*/
#if DEFAULT_ANIMATION
class UICheckBox : public UIView, public AnimatorCallback {
#else
class UICheckBox : public UIView {
#endif
public:
/**
* @brief Enumerates the states of a check box.
*
* @since 1.0
* @version 1.0
*/
enum UICheckBoxState : uint8_t {
/* An enum constant representing the state selected option */
SELECTED,
/* An enum constant representing the state unselected option */
UNSELECTED,
/* Max num of state */
MAX_STATUS_NUM,
};
/**
* @brief A constructor used to create a UICheckBox instance.
*
* @since 1.0
* @version 1.0
*/
UICheckBox();
/**
* @brief A destructor used to delete the UICheckBox instance.
*
* @since 1.0
* @version 1.0
*/
virtual ~UICheckBox();
/**
* @brief Represents a listener for changes of a check box.
*
* This is an inner class of UICheckBox. It contains a callback function to be invoked when the check box
* state changes.
*
* @see UICheckBox
* @since 1.0
* @version 1.0
*/
class OnChangeListener : public HeapBase {
public:
/**
* @brief Called when the state of this check box is switched. This is a virtual function, which needs your
* implementation.
*
* @param state Indicates the current state of this check box. For details, see {@link UICheckBoxState}.
* @since 1.0
* @version 1.0
*/
virtual bool OnChange(UICheckBoxState state) = 0;
/**
* @brief A destructor used to delete the OnChangeListener instance.
*
* @since 1.0
* @version 1.0
*/
virtual ~OnChangeListener() {}
};
/**
* @brief Obtains the component type.
*
* @return Returns the component type, as defined in {@link UIViewType}.
* @since 1.0
* @version 1.0
*/
UIViewType GetViewType() const override
{
return UI_CHECK_BOX;
}
/**
* @brief Sets the listener for this check box.
*
* The listener is triggered to invoke the callback function upon click events.
*
* @param listener Indicates the listener to set. For details, see {@link OnChangeListener}.
* @since 1.0
* @version 1.0
*/
void SetOnChangeListener(OnChangeListener* onStateChangeListener)
{
onStateChangeListener_ = onStateChangeListener;
}
/**
* @fn virtual bool UICheckBox::OnPreDraw(Rect& invalidatedArea) override
*
* @brief Do something before draw, this function will be invoked mainly to check if this view need
* to cover invalidate area so render manager can decide which layer to draw firstly.
* @param [in] invalidate area.
* @returns True if need cover.
*/
bool OnPreDraw(Rect& invalidatedArea) const override
{
return false;
}
/**
* @fn virtual void UICheckBox::OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override;
*
* @brief Executes the draw action
* Ondraw invokes the rendering function provided by the underlying layer to draw pictures
* based on the selected status of the checkbox.
*
* @param [in] invalidatedArea The invalidated area.
*/
void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override;
/**
* @fn virtual void UICheckBox::OnClickEvent(const ClickEvent& event) override;
*
* @brief Executes the click event action
* OnClickEvent will reverse the selected state of checkbox.
* Example: If the check box is selected, the checkbox status is changed to
* Unselected after the click action is taken.
*
* @param [in] event The event that passed when OnClickEvent is invoked.
* @return Returns true if the event is consumed; returns false otherwise.
*/
bool OnClickEvent(const ClickEvent& event) override;
/**
* @brief Sets the images for this check box.
*
* @param selectedImageSrc Indicates the image for this check box when selected.
* @param unselectedImageSrc Indicates the image for this check box when unselected.
* @since 1.0
* @version 1.0
*/
virtual void SetImages(const char* selectedImageSrc, const char* unselectedImageSrc);
/**
* @brief Sets the images for this check box.
*
* @param selectedImageSrc Indicates the image for this check box when selected.
* @param unselectedImageSrc Indicates the image for this check box when unselected.
* @since 1.0
* @version 1.0
*/
virtual void SetImages(const ImageInfo* selectedImageSrc, const ImageInfo* unselectedImageSrc);
/**
* @brief Obtains the state of this check box.
*
* @return Returns the state of this check box, as defined in {@link UICheckBoxState}.
* @since 1.0
* @version 1.0
*/
UICheckBoxState GetState() const
{
return state_;
};
/**
* @brief Sets the state for this check box.
*
* @param state Indicates the state of this check box. For details, see {@link UICheckBoxState}.
* @since 1.0
* @version 1.0
*/
void SetState(UICheckBoxState state);
protected:
virtual void ReverseState();
virtual void CalculateSize();
void SelectedStateSoftwareDrawing(BufferInfo& gfxDstBuffer,
Rect rect,
Rect trunc,
int16_t borderRadius,
int16_t rectLineWidth);
void UnSelectedStateSoftwareDrawing(BufferInfo& gfxDstBuffer,
Rect rect,
Rect trunc,
int16_t borderRadius,
int16_t rectLineWidth);
#if DEFAULT_ANIMATION
virtual void ResetCallback();
void Callback(UIView* view) override;
void OnStop(UIView& view) override;
#endif
static constexpr int16_t DEFAULT_HOT_WIDTH = 46;
static constexpr int16_t DEFAULT_HOT_HEIGHT = 46;
static constexpr int16_t DEFAULT_BORDER_WIDTH = 22;
static constexpr uint8_t DEFAULT_BG_RED = 31;
static constexpr uint8_t DEFAULT_BG_GREEN = 113;
static constexpr uint8_t DEFAULT_BG_BLUE = 255;
UICheckBoxState state_;
OnChangeListener* onStateChangeListener_;
int16_t width_;
int16_t height_;
int16_t borderWidth_;
Image image_[MAX_STATUS_NUM];
uint8_t backgroundOpacity_;
#if DEFAULT_ANIMATION
Animator checkBoxAnimator_;
uint32_t runTime_;
#endif
};
} // namespace OHOS
#endif // GRAPHIC_LITE_UI_CHECKBOX_H