/** @file CircleProgress.h
* @brief 环型进度条控件，圆环中间可以有文本（如85%）
* @copyright (c) 2019-2022, NetEase Inc. All rights reserved
* @author Xuhuajie
* @date 2019/8/14
*/

#ifndef UI_CONTROL_CIRCLEPROGRESS_H_
#define UI_CONTROL_CIRCLEPROGRESS_H_

#pragma once

namespace ui
{

class UILIB_API CircleProgress : public Progress
{
public:
	CircleProgress();

	/// 重写父类方法，提供个性化功能，请参考父类声明
	virtual void SetAttribute(const std::wstring& strName, const std::wstring& strValue) override;
	virtual void PaintStatusImage(IRenderContext* pRender) override;
	virtual void ClearImageCache() override;

	/**
	* @brief 设置环型进度条，默认为普通进度条
	* @param[in] bCircular 为 true 时设置为环型进度条，false 时设置为父级进度条样式，默认为 true
	* @return 无
	*/
	void SetCircular(bool bCircular = true);

	/**
	* @brief 设置递增方向
	* @param[in] bClockwise 为 true 时设置为顺时针，false 时设置为逆时针，默认为 true
	* @return 无
	*/
	void SetClockwiseRotation(bool bClockwise = true);

	/**
	* @brief 设置圆环宽度
	* @param[in] nCircleWidth 宽度数值
	* @return 无
	*/
	void SetCircleWidth(int nCircleWidth);

	/**
	* @brief 设置进度条背景颜色
	* @param[in] strColor要设置的背景颜色字符串，该字符串必须在 global.xml 中存在
	* @return 无
	*/
	void SetBackgroudColor(const std::wstring& strColor);

	/**
	* @brief 设置进度条前景颜色
	* @param[in] strColor要设置的前景颜色字符串，该字符串必须在 global.xml 中存在
	* @return 无
	*/
	void SetForegroudColor(const std::wstring& strColor);

	/**
	* @brief 设置进度条前景渐变颜色，与 SetForegroudColor 同时使用，可以不设置,则无渐变效果
	* @param[in] strColor要设置的前景渐变颜色字符串，该字符串必须在 global.xml 中存在
	* @return 无
	*/
	void SetCircleGradientColor(const std::wstring& strColor);

	/**
	* @brief 设置进度指示移动图标
	* @param[in] sIndicatorImage 要设置的图片
	* @return 无
	*/
	void SetIndicator(const std::wstring& sIndicatorImage);

protected:
	bool			m_bCircular;
	bool			m_bClockwise;
	int				m_nCircleWidth;
	DWORD			m_dwBackgroundColor;
	DWORD			m_dwForegroundColor;
	DWORD			m_dwGradientColor;
	Gdiplus::Image*	m_pIndicator;   //此类目前维护资源管理
	std::wstring	m_sIndicatorImage;

};

} // namespace ui

#endif // UI_CONTROL_CIRCLEPROGRESS_H_
