#ifndef UI_CONTROL_PROGRESS_H_
#define UI_CONTROL_PROGRESS_H_

#pragma once

namespace ui
{

class UILIB_API Progress : public LabelTemplate<Control>
{
public:
	Progress();

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

	/**
	 * @brief 判断是否是水平进度条
	 * @return 返回 true 是水平进度条，false 为垂直滚动条
	 */
	bool IsHorizontal();

	/**
	 * @brief 设置水平或垂直滚动条
	 * @param[in] bHorizontal 为 true 时设置为水平滚动条，false 时设置为垂直滚动条，默认为 true
	 * @return 无
	 */
	void SetHorizontal(bool bHorizontal = true);

	/**
	 * @brief 获取进度条最小值
	 * @return 返回进度条最小值
	 */
	int GetMinValue() const;

	/**
	 * @brief 设置进度条最小值
	 * @param[in] nMin 最小值数值
	 * @return 无
	 */
	void SetMinValue(int nMin);

	/**
	 * @brief 获取进度条最大值
	 * @return 返回进度条最大值
	 */
	int GetMaxValue() const;

	/**
	 * @brief 设置进度条最大值
	 * @param[in] nMax 要设置的最大值
	 * @return 无
	 */
	void SetMaxValue(int nMax);

	/**
	 * @brief 获取当前进度百分比
	 * @return 返回当前进度百分比
	 */
	double GetValue() const;

	/**
	 * @brief 设置当前进度百分比
	 * @param[in] nValue 要设置的百分比数值
	 * @return 无
	 */
	void SetValue(double nValue);

	/**
	 * @brief 进度条前景图片是否缩放显示
	 * @return 返回 true 为缩放显示，false 为不缩放显示
	 */
	bool IsStretchForeImage();

	/**
	 * @brief 设置进度条前景图片是否缩放显示
	 * @param[in] bStretchForeImage true 为缩放显示，false 为不缩放显示
	 * @return 无
	 */
	void SetStretchForeImage(bool bStretchForeImage = true);

	/**
	 * @brief 获取滚动条背景图片
	 * @return 返回背景图片位置
	 */
	std::wstring GetProgressImage() const;

	/**
	 * @brief 设置进度条背景图片
	 * @param[in] strImage 图片地址
	 * @return 无
	 */
	void SetProgressImage(const std::wstring& strImage);

	/**
	 * @brief 获取进度条背景颜色
	 * @return 返回背景颜色的字符串值，对应 global.xml 中的指定色值
	 */
	std::wstring GetProgressColor() const;

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

	/**
	 * @brief 获取进度条位置
	 * @return 返回进度条当前位置
	 */
	virtual UiRect GetProgressPos();

protected:
	bool m_bHorizontal;
	bool m_bStretchForeImage;
	int m_nMax;
	int m_nMin;
	double m_nValue;
	Image m_progressImage;
	std::wstring m_sProgressColor;
	std::wstring m_sProgressImageModify;
};

} // namespace ui

#endif // UI_CONTROL_PROGRESS_H_
