177 lines
4.0 KiB
C++
177 lines
4.0 KiB
C++
#include "stdafx.h"
|
|
#include "Progress.h"
|
|
|
|
namespace ui
|
|
{
|
|
|
|
Progress::Progress() :
|
|
m_bHorizontal(true),
|
|
m_bStretchForeImage(true),
|
|
m_nMax(100),
|
|
m_nMin(0),
|
|
m_nValue(0),
|
|
m_sProgressColor(),
|
|
m_progressImage(),
|
|
m_sProgressImageModify()
|
|
{
|
|
m_uTextStyle = DT_SINGLELINE | DT_CENTER;
|
|
SetFixedHeight(12);
|
|
}
|
|
|
|
void Progress::SetAttribute(const std::wstring& srName, const std::wstring& strValue)
|
|
{
|
|
if (srName == _T("hor")) SetHorizontal(strValue == _T("true"));
|
|
else if (srName == _T("min")) SetMinValue(_ttoi(strValue.c_str()));
|
|
else if (srName == _T("max")) SetMaxValue(_ttoi(strValue.c_str()));
|
|
else if (srName == _T("value")) SetValue(_ttoi(strValue.c_str()));
|
|
else if (srName == _T("progressimage")) SetProgressImage(strValue);
|
|
else if (srName == _T("isstretchfore")) SetStretchForeImage(strValue == _T("true"));
|
|
else if (srName == _T("progresscolor")) {
|
|
LPCTSTR pValue = strValue.c_str();
|
|
while (*pValue > _T('\0') && *pValue <= _T(' ')) pValue = ::CharNext(pValue);
|
|
SetProgressColor(pValue);
|
|
}
|
|
else Label::SetAttribute(srName, strValue);
|
|
}
|
|
|
|
void Progress::PaintStatusImage(IRenderContext* pRender)
|
|
{
|
|
if (m_nMax <= m_nMin) m_nMax = m_nMin + 1;
|
|
if (m_nValue > m_nMax) m_nValue = m_nMax;
|
|
if (m_nValue < m_nMin) m_nValue = m_nMin;
|
|
|
|
UiRect rc = GetProgressPos();
|
|
if (!m_sProgressColor.empty()) {
|
|
DWORD dwProgressColor = GlobalManager::GetTextColor(m_sProgressColor);
|
|
if (dwProgressColor != 0) {
|
|
UiRect rcProgressColor = m_rcItem;
|
|
if (m_bHorizontal) {
|
|
rcProgressColor.right = rcProgressColor.left + rc.right;
|
|
}
|
|
else {
|
|
rcProgressColor.top = rcProgressColor.top + rc.top;
|
|
}
|
|
pRender->DrawColor(rcProgressColor, dwProgressColor);
|
|
}
|
|
}
|
|
|
|
if (!m_progressImage.imageAttribute.simageString.empty()) {
|
|
m_sProgressImageModify.clear();
|
|
if (m_bStretchForeImage)
|
|
m_sProgressImageModify = StringHelper::Printf(_T("destscale='false' dest='%d,%d,%d,%d'"), rc.left, rc.top, rc.right, rc.bottom);
|
|
else
|
|
m_sProgressImageModify = StringHelper::Printf(_T("destscale='false' dest='%d,%d,%d,%d' source='%d,%d,%d,%d'")
|
|
, rc.left, rc.top, rc.right, rc.bottom
|
|
, rc.left, rc.top, rc.right, rc.bottom);
|
|
|
|
DrawImage(pRender, m_progressImage, m_sProgressImageModify);
|
|
}
|
|
}
|
|
|
|
void Progress::ClearImageCache()
|
|
{
|
|
__super::ClearImageCache();
|
|
m_progressImage.ClearCache();
|
|
}
|
|
|
|
bool Progress::IsHorizontal()
|
|
{
|
|
return m_bHorizontal;
|
|
}
|
|
|
|
void Progress::SetHorizontal(bool bHorizontal)
|
|
{
|
|
if( m_bHorizontal == bHorizontal ) return;
|
|
|
|
m_bHorizontal = bHorizontal;
|
|
Invalidate();
|
|
}
|
|
|
|
int Progress::GetMinValue() const
|
|
{
|
|
return m_nMin;
|
|
}
|
|
|
|
void Progress::SetMinValue(int nMin)
|
|
{
|
|
m_nMin = nMin;
|
|
Invalidate();
|
|
}
|
|
|
|
int Progress::GetMaxValue() const
|
|
{
|
|
return m_nMax;
|
|
}
|
|
|
|
void Progress::SetMaxValue(int nMax)
|
|
{
|
|
m_nMax = nMax;
|
|
Invalidate();
|
|
}
|
|
|
|
double Progress::GetValue() const
|
|
{
|
|
return m_nValue;
|
|
}
|
|
|
|
void Progress::SetValue(double nValue)
|
|
{
|
|
m_nValue = nValue;
|
|
Invalidate();
|
|
}
|
|
|
|
bool Progress::IsStretchForeImage()
|
|
{
|
|
return m_bStretchForeImage;
|
|
}
|
|
|
|
void Progress::SetStretchForeImage(bool bStretchForeImage /*= true*/)
|
|
{
|
|
if (m_bStretchForeImage == bStretchForeImage) return;
|
|
m_bStretchForeImage = bStretchForeImage;
|
|
Invalidate();
|
|
}
|
|
|
|
std::wstring Progress::GetProgressImage() const
|
|
{
|
|
return m_progressImage.imageAttribute.simageString;
|
|
}
|
|
|
|
void Progress::SetProgressImage(const std::wstring& strImage)
|
|
{
|
|
m_progressImage.SetImageString(strImage);
|
|
Invalidate();
|
|
}
|
|
|
|
std::wstring Progress::GetProgressColor() const
|
|
{
|
|
return m_sProgressColor;
|
|
}
|
|
|
|
void Progress::SetProgressColor(const std::wstring& strProgressColor)
|
|
{
|
|
ASSERT(GlobalManager::GetTextColor(strProgressColor) != 0);
|
|
if( m_sProgressColor == strProgressColor ) return;
|
|
|
|
m_sProgressColor = strProgressColor;
|
|
Invalidate();
|
|
}
|
|
|
|
UiRect Progress::GetProgressPos()
|
|
{
|
|
UiRect rc;
|
|
if (m_bHorizontal) {
|
|
rc.right = int((m_nValue - m_nMin) * (m_rcItem.right - m_rcItem.left) / (m_nMax - m_nMin));
|
|
rc.bottom = m_rcItem.bottom - m_rcItem.top;
|
|
}
|
|
else {
|
|
rc.top = int((m_nMax - m_nValue) * (m_rcItem.bottom - m_rcItem.top) / (m_nMax - m_nMin));
|
|
rc.right = m_rcItem.right - m_rcItem.left;
|
|
rc.bottom = m_rcItem.bottom - m_rcItem.top;
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
}
|