|
@@ -0,0 +1,745 @@
|
|
|
+#include "StdAfx.h"
|
|
|
+#include "UIButton.h"
|
|
|
+
|
|
|
+namespace DuiLib
|
|
|
+{
|
|
|
+ IMPLEMENT_DUICONTROL(CButtonUI)
|
|
|
+
|
|
|
+ CButtonUI::CButtonUI()
|
|
|
+ : m_uButtonState(0)
|
|
|
+ , m_iHotFont(-1)
|
|
|
+ , m_iPushedFont(-1)
|
|
|
+ , m_iFocusedFont(-1)
|
|
|
+ , m_dwHotTextColor(0)
|
|
|
+ , m_dwPushedTextColor(0)
|
|
|
+ , m_dwFocusedTextColor(0)
|
|
|
+ , m_dwHotBkColor(0)
|
|
|
+ , m_dwPushedBkColor(0)
|
|
|
+ , m_dwDisabledBkColor(0)
|
|
|
+ , m_dwHotBorderColor(0)
|
|
|
+ , m_dwPushedBorderColor(0)
|
|
|
+ , m_dwDisabledBorderColor(0)
|
|
|
+ , m_iBindTabIndex(-1)
|
|
|
+ , m_nStateCount(0)
|
|
|
+ {
|
|
|
+ m_uTextStyle = DT_SINGLELINE | DT_VCENTER | DT_CENTER;
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetClass() const
|
|
|
+ {
|
|
|
+ return _T("ButtonUI");
|
|
|
+ }
|
|
|
+
|
|
|
+ LPVOID CButtonUI::GetInterface(LPCTSTR pstrName)
|
|
|
+ {
|
|
|
+ if( _tcsicmp(pstrName, DUI_CTR_BUTTON) == 0 ) return static_cast<CButtonUI*>(this);
|
|
|
+ return CLabelUI::GetInterface(pstrName);
|
|
|
+ }
|
|
|
+
|
|
|
+ UINT CButtonUI::GetControlFlags() const
|
|
|
+ {
|
|
|
+ return (IsKeyboardEnabled() ? UIFLAG_TABSTOP : 0) | (IsEnabled() ? UIFLAG_SETCURSOR : 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::DoEvent(TEventUI& event)
|
|
|
+ {
|
|
|
+ if( !IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND ) {
|
|
|
+ if( m_pParent != NULL ) m_pParent->DoEvent(event);
|
|
|
+ else CLabelUI::DoEvent(event);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if( event.Type == UIEVENT_SETFOCUS )
|
|
|
+ {
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+ if( event.Type == UIEVENT_KILLFOCUS )
|
|
|
+ {
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+ if( event.Type == UIEVENT_KEYDOWN )
|
|
|
+ {
|
|
|
+ if (IsKeyboardEnabled()) {
|
|
|
+ if( event.chKey == VK_SPACE || event.chKey == VK_RETURN ) {
|
|
|
+ Activate();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( event.Type == UIEVENT_BUTTONDOWN || event.Type == UIEVENT_DBLCLICK)
|
|
|
+ {
|
|
|
+ if( ::PtInRect(&m_rcItem, event.ptMouse) && IsEnabled() ) {
|
|
|
+ m_uButtonState |= UISTATE_PUSHED | UISTATE_CAPTURED;
|
|
|
+ Invalidate();
|
|
|
+ if(IsRichEvent()) m_pManager->SendNotify(this, DUI_MSGTYPE_BUTTONDOWN);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if( event.Type == UIEVENT_MOUSEMOVE )
|
|
|
+ {
|
|
|
+ if ((m_uButtonState & UISTATE_CAPTURED) != 0)
|
|
|
+ {
|
|
|
+ if (::PtInRect(&m_rcItem, event.ptMouse))
|
|
|
+ m_uButtonState |= UISTATE_PUSHED;
|
|
|
+ else m_uButtonState &= ~UISTATE_PUSHED;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if( event.Type == UIEVENT_BUTTONUP)
|
|
|
+ {
|
|
|
+ if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) {
|
|
|
+ m_uButtonState &= ~(UISTATE_PUSHED | UISTATE_CAPTURED);
|
|
|
+ Invalidate();
|
|
|
+ if( ::PtInRect(&m_rcItem, event.ptMouse) ) Activate();
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if( event.Type == UIEVENT_CONTEXTMENU )
|
|
|
+ {
|
|
|
+ if( IsContextMenuUsed() ) {
|
|
|
+ m_pManager->SendNotify(this, DUI_MSGTYPE_MENU, event.wParam, event.lParam);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if( event.Type == UIEVENT_MOUSEENTER )
|
|
|
+ {
|
|
|
+ if( IsEnabled() ) {
|
|
|
+ m_uButtonState |= UISTATE_HOT;
|
|
|
+ Invalidate();
|
|
|
+
|
|
|
+ if(IsRichEvent()) m_pManager->SendNotify(this, DUI_MSGTYPE_MOUSEENTER);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( event.Type == UIEVENT_MOUSELEAVE )
|
|
|
+ {
|
|
|
+ if( IsEnabled() ) {
|
|
|
+ m_uButtonState &= ~UISTATE_HOT;
|
|
|
+ Invalidate();
|
|
|
+
|
|
|
+ if(IsRichEvent()) m_pManager->SendNotify(this, DUI_MSGTYPE_MOUSELEAVE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ CLabelUI::DoEvent(event);
|
|
|
+ }
|
|
|
+
|
|
|
+ bool CButtonUI::Activate()
|
|
|
+ {
|
|
|
+ if( !CControlUI::Activate() ) return false;
|
|
|
+ if( m_pManager != NULL )
|
|
|
+ {
|
|
|
+ m_pManager->SendNotify(this, DUI_MSGTYPE_CLICK);
|
|
|
+ BindTriggerTabSel();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetEnabled(bool bEnable)
|
|
|
+ {
|
|
|
+ CControlUI::SetEnabled(bEnable);
|
|
|
+ if (!IsEnabled()) {
|
|
|
+ m_uButtonState |= UISTATE_DISABLED;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ m_uButtonState &= ~UISTATE_DISABLED;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ void CButtonUI::SetHotFont(int index)
|
|
|
+ {
|
|
|
+ m_iHotFont = index;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ int CButtonUI::GetHotFont() const
|
|
|
+ {
|
|
|
+ return m_iHotFont;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetPushedFont(int index)
|
|
|
+ {
|
|
|
+ m_iPushedFont = index;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ int CButtonUI::GetPushedFont() const
|
|
|
+ {
|
|
|
+ return m_iPushedFont;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetFocusedFont(int index)
|
|
|
+ {
|
|
|
+ m_iFocusedFont = index;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ int CButtonUI::GetFocusedFont() const
|
|
|
+ {
|
|
|
+ return m_iFocusedFont;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetHotBkColor( DWORD dwColor )
|
|
|
+ {
|
|
|
+ m_dwHotBkColor = dwColor;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetHotBkColor() const
|
|
|
+ {
|
|
|
+ return m_dwHotBkColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetPushedBkColor( DWORD dwColor )
|
|
|
+ {
|
|
|
+ m_dwPushedBkColor = dwColor;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetPushedBkColor() const
|
|
|
+ {
|
|
|
+ return m_dwPushedBkColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetDisabledBkColor( DWORD dwColor )
|
|
|
+ {
|
|
|
+ m_dwDisabledBkColor = dwColor;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetDisabledBkColor() const
|
|
|
+ {
|
|
|
+ return m_dwDisabledBkColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetHotTextColor(DWORD dwColor)
|
|
|
+ {
|
|
|
+ m_dwHotTextColor = dwColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetHotTextColor() const
|
|
|
+ {
|
|
|
+ return m_dwHotTextColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetPushedTextColor(DWORD dwColor)
|
|
|
+ {
|
|
|
+ m_dwPushedTextColor = dwColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetPushedTextColor() const
|
|
|
+ {
|
|
|
+ return m_dwPushedTextColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetFocusedTextColor(DWORD dwColor)
|
|
|
+ {
|
|
|
+ m_dwFocusedTextColor = dwColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetFocusedTextColor() const
|
|
|
+ {
|
|
|
+ return m_dwFocusedTextColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetHotBorderColor(DWORD dwColor)
|
|
|
+ {
|
|
|
+ if (m_dwHotBorderColor == dwColor) return;
|
|
|
+
|
|
|
+ m_dwHotBorderColor = dwColor;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetHotBorderColor() const
|
|
|
+ {
|
|
|
+ return m_dwHotBorderColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetPushedBorderColor(DWORD dwColor)
|
|
|
+ {
|
|
|
+ if (m_dwPushedBorderColor == dwColor) return;
|
|
|
+
|
|
|
+ m_dwPushedBorderColor = dwColor;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetPushedBorderColor() const
|
|
|
+ {
|
|
|
+ return m_dwPushedBorderColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetDisabledBorderColor(DWORD dwColor)
|
|
|
+ {
|
|
|
+ if (m_dwDisabledBorderColor == dwColor) return;
|
|
|
+
|
|
|
+ m_dwDisabledBorderColor = dwColor;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ DWORD CButtonUI::GetDisabledBorderColor() const
|
|
|
+ {
|
|
|
+ return m_dwDisabledBorderColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetNormalImage()
|
|
|
+ {
|
|
|
+ return m_sNormalImage;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetNormalImage(LPCTSTR pStrImage)
|
|
|
+ {
|
|
|
+ m_sNormalImage = pStrImage;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetHotImage()
|
|
|
+ {
|
|
|
+ return m_sHotImage;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetHotImage(LPCTSTR pStrImage)
|
|
|
+ {
|
|
|
+ m_sHotImage = pStrImage;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetPushedImage()
|
|
|
+ {
|
|
|
+ return m_sPushedImage;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetPushedImage(LPCTSTR pStrImage)
|
|
|
+ {
|
|
|
+ m_sPushedImage = pStrImage;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetFocusedImage()
|
|
|
+ {
|
|
|
+ return m_sFocusedImage;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetFocusedImage(LPCTSTR pStrImage)
|
|
|
+ {
|
|
|
+ m_sFocusedImage = pStrImage;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetDisabledImage()
|
|
|
+ {
|
|
|
+ return m_sDisabledImage;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetDisabledImage(LPCTSTR pStrImage)
|
|
|
+ {
|
|
|
+ m_sDisabledImage = pStrImage;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetHotForeImage()
|
|
|
+ {
|
|
|
+ return m_sHotForeImage;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetHotForeImage( LPCTSTR pStrImage )
|
|
|
+ {
|
|
|
+ m_sHotForeImage = pStrImage;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetPushedForeImage()
|
|
|
+ {
|
|
|
+ return m_sPushedForeImage;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetPushedForeImage(LPCTSTR pStrImage)
|
|
|
+ {
|
|
|
+ m_sPushedForeImage = pStrImage;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetStateCount(int nCount)
|
|
|
+ {
|
|
|
+ m_nStateCount = nCount;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ int CButtonUI::GetStateCount() const
|
|
|
+ {
|
|
|
+ return m_nStateCount;
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetStateImage()
|
|
|
+ {
|
|
|
+ return m_sStateImage;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetStateImage( LPCTSTR pStrImage )
|
|
|
+ {
|
|
|
+ m_sNormalImage.Empty();
|
|
|
+ m_sStateImage = pStrImage;
|
|
|
+ Invalidate();
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::BindTabIndex(int _BindTabIndex )
|
|
|
+ {
|
|
|
+ if( _BindTabIndex >= 0)
|
|
|
+ m_iBindTabIndex = _BindTabIndex;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::BindTabLayoutName( LPCTSTR _TabLayoutName )
|
|
|
+ {
|
|
|
+ if(_TabLayoutName)
|
|
|
+ m_sBindTabLayoutName = _TabLayoutName;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::BindTriggerTabSel( int _SetSelectIndex /*= -1*/ )
|
|
|
+ {
|
|
|
+ LPCTSTR pstrName = GetBindTabLayoutName();
|
|
|
+ if(pstrName == NULL || (GetBindTabLayoutIndex() < 0 && _SetSelectIndex < 0))
|
|
|
+ return;
|
|
|
+
|
|
|
+ CTabLayoutUI* pTabLayout = static_cast<CTabLayoutUI*>(GetManager()->FindControl(pstrName));
|
|
|
+ if(!pTabLayout) return;
|
|
|
+ pTabLayout->SelectItem(_SetSelectIndex >=0?_SetSelectIndex:GetBindTabLayoutIndex());
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::RemoveBindTabIndex()
|
|
|
+ {
|
|
|
+ m_iBindTabIndex = -1;
|
|
|
+ m_sBindTabLayoutName.Empty();
|
|
|
+ }
|
|
|
+
|
|
|
+ int CButtonUI::GetBindTabLayoutIndex()
|
|
|
+ {
|
|
|
+ return m_iBindTabIndex;
|
|
|
+ }
|
|
|
+
|
|
|
+ LPCTSTR CButtonUI::GetBindTabLayoutName()
|
|
|
+ {
|
|
|
+ return m_sBindTabLayoutName;
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue)
|
|
|
+ {
|
|
|
+ if( _tcsicmp(pstrName, _T("normalimage")) == 0 ) SetNormalImage(pstrValue);
|
|
|
+ else if( _tcsicmp(pstrName, _T("hotimage")) == 0 ) SetHotImage(pstrValue);
|
|
|
+ else if( _tcsicmp(pstrName, _T("pushedimage")) == 0 ) SetPushedImage(pstrValue);
|
|
|
+ else if( _tcsicmp(pstrName, _T("focusedimage")) == 0 ) SetFocusedImage(pstrValue);
|
|
|
+ else if( _tcsicmp(pstrName, _T("disabledimage")) == 0 ) SetDisabledImage(pstrValue);
|
|
|
+ else if (_tcsicmp(pstrName, _T("hotforeimage")) == 0) SetHotForeImage(pstrValue);
|
|
|
+ else if (_tcsicmp(pstrName, _T("pushedforeimage")) == 0) SetPushedForeImage(pstrValue);
|
|
|
+ else if( _tcsicmp(pstrName, _T("stateimage")) == 0 ) SetStateImage(pstrValue);
|
|
|
+ else if( _tcsicmp(pstrName, _T("statecount")) == 0 ) SetStateCount(_ttoi(pstrValue));
|
|
|
+ else if( _tcsicmp(pstrName, _T("bindtabindex")) == 0 ) BindTabIndex(_ttoi(pstrValue));
|
|
|
+ else if( _tcsicmp(pstrName, _T("bindtablayoutname")) == 0 ) BindTabLayoutName(pstrValue);
|
|
|
+ else if( _tcsicmp(pstrName, _T("hotbkcolor")) == 0 )
|
|
|
+ {
|
|
|
+ if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetHotBkColor(clrColor);
|
|
|
+ }
|
|
|
+ else if( _tcsicmp(pstrName, _T("pushedbkcolor")) == 0 )
|
|
|
+ {
|
|
|
+ if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetPushedBkColor(clrColor);
|
|
|
+ }
|
|
|
+ else if( _tcsicmp(pstrName, _T("disabledbkcolor")) == 0 )
|
|
|
+ {
|
|
|
+ if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetDisabledBkColor(clrColor);
|
|
|
+ }
|
|
|
+ else if( _tcsicmp(pstrName, _T("hottextcolor")) == 0 )
|
|
|
+ {
|
|
|
+ if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetHotTextColor(clrColor);
|
|
|
+ }
|
|
|
+ else if( _tcsicmp(pstrName, _T("pushedtextcolor")) == 0 )
|
|
|
+ {
|
|
|
+ if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetPushedTextColor(clrColor);
|
|
|
+ }
|
|
|
+ else if( _tcsicmp(pstrName, _T("focusedtextcolor")) == 0 )
|
|
|
+ {
|
|
|
+ if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetFocusedTextColor(clrColor);
|
|
|
+ }
|
|
|
+ else if (_tcscmp(pstrName, _T("hotbordercolor")) == 0)
|
|
|
+ {
|
|
|
+ if (*pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetHotBorderColor(clrColor);
|
|
|
+ }
|
|
|
+ else if (_tcscmp(pstrName, _T("pushedbordercolor")) == 0)
|
|
|
+ {
|
|
|
+ if (*pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetPushedBorderColor(clrColor);
|
|
|
+ }
|
|
|
+ else if (_tcscmp(pstrName, _T("disabledbordercolor")) == 0)
|
|
|
+ {
|
|
|
+ if (*pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
|
|
|
+ LPTSTR pstr = NULL;
|
|
|
+ DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
|
|
|
+ SetDisabledBorderColor(clrColor);
|
|
|
+ }
|
|
|
+ else if( _tcsicmp(pstrName, _T("hotfont")) == 0 ) SetHotFont(_ttoi(pstrValue));
|
|
|
+ else if( _tcsicmp(pstrName, _T("pushedfont")) == 0 ) SetPushedFont(_ttoi(pstrValue));
|
|
|
+ else if( _tcsicmp(pstrName, _T("focuedfont")) == 0 ) SetFocusedFont(_ttoi(pstrValue));
|
|
|
+
|
|
|
+ else CLabelUI::SetAttribute(pstrName, pstrValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::PaintText(HDC hDC)
|
|
|
+ {
|
|
|
+ if( IsFocused() ) m_uButtonState |= UISTATE_FOCUSED;
|
|
|
+ else m_uButtonState &= ~ UISTATE_FOCUSED;
|
|
|
+ if( !IsEnabled() ) m_uButtonState |= UISTATE_DISABLED;
|
|
|
+ else m_uButtonState &= ~ UISTATE_DISABLED;
|
|
|
+
|
|
|
+ if( m_dwTextColor == 0 ) m_dwTextColor = m_pManager->GetDefaultFontColor();
|
|
|
+ if( m_dwDisabledTextColor == 0 ) m_dwDisabledTextColor = m_pManager->GetDefaultDisabledColor();
|
|
|
+
|
|
|
+ CDuiString sText = GetText();
|
|
|
+ if( sText.IsEmpty() ) return;
|
|
|
+
|
|
|
+ RECT m_rcTextPadding = CButtonUI::m_rcTextPadding;
|
|
|
+ GetManager()->GetDPIObj()->Scale(&m_rcTextPadding);
|
|
|
+ int nLinks = 0;
|
|
|
+ RECT rc = m_rcItem;
|
|
|
+ rc.left += m_rcTextPadding.left;
|
|
|
+ rc.right -= m_rcTextPadding.right;
|
|
|
+ rc.top += m_rcTextPadding.top;
|
|
|
+ rc.bottom -= m_rcTextPadding.bottom;
|
|
|
+
|
|
|
+ DWORD clrColor = IsEnabled()?m_dwTextColor:m_dwDisabledTextColor;
|
|
|
+
|
|
|
+ if( ((m_uButtonState & UISTATE_PUSHED) != 0) && (GetPushedTextColor() != 0) )
|
|
|
+ clrColor = GetPushedTextColor();
|
|
|
+ else if( ((m_uButtonState & UISTATE_HOT) != 0) && (GetHotTextColor() != 0) )
|
|
|
+ clrColor = GetHotTextColor();
|
|
|
+ else if( ((m_uButtonState & UISTATE_FOCUSED) != 0) && (GetFocusedTextColor() != 0) )
|
|
|
+ clrColor = GetFocusedTextColor();
|
|
|
+
|
|
|
+ int iFont = GetFont();
|
|
|
+ if( ((m_uButtonState & UISTATE_PUSHED) != 0) && (GetPushedFont() != -1) )
|
|
|
+ iFont = GetPushedFont();
|
|
|
+ else if( ((m_uButtonState & UISTATE_HOT) != 0) && (GetHotFont() != -1) )
|
|
|
+ iFont = GetHotFont();
|
|
|
+ else if( ((m_uButtonState & UISTATE_FOCUSED) != 0) && (GetFocusedFont() != -1) )
|
|
|
+ iFont = GetFocusedFont();
|
|
|
+
|
|
|
+ if( m_bShowHtml )
|
|
|
+ CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, sText, clrColor, \
|
|
|
+ NULL, NULL, nLinks, iFont, m_uTextStyle);
|
|
|
+ else
|
|
|
+ CRenderEngine::DrawText(hDC, m_pManager, rc, sText, clrColor, \
|
|
|
+ iFont, m_uTextStyle);
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::PaintBkColor(HDC hDC)
|
|
|
+ {
|
|
|
+ if( (m_uButtonState & UISTATE_DISABLED) != 0 ) {
|
|
|
+ if(m_dwDisabledBkColor != 0) {
|
|
|
+ CRenderEngine::DrawColor(hDC, m_rcPaint, GetAdjustColor(m_dwDisabledBkColor));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if( (m_uButtonState & UISTATE_PUSHED) != 0 ) {
|
|
|
+ if(m_dwPushedBkColor != 0) {
|
|
|
+ CRenderEngine::DrawColor(hDC, m_rcPaint, GetAdjustColor(m_dwPushedBkColor));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if( (m_uButtonState & UISTATE_HOT) != 0 ) {
|
|
|
+ if(m_dwHotBkColor != 0) {
|
|
|
+ CRenderEngine::DrawColor(hDC, m_rcPaint, GetAdjustColor(m_dwHotBkColor));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return CControlUI::PaintBkColor(hDC);
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::PaintStatusImage(HDC hDC)
|
|
|
+ {
|
|
|
+ if(!m_sStateImage.IsEmpty() && m_nStateCount > 0)
|
|
|
+ {
|
|
|
+ TDrawInfo info;
|
|
|
+ info.Parse(m_sStateImage, _T(""), m_pManager);
|
|
|
+ const TImageInfo* pImage = m_pManager->GetImageEx(info.sImageName, info.sResType, info.dwMask, info.bHSL, info.bGdiplus);
|
|
|
+ if(m_sNormalImage.IsEmpty() && pImage != NULL)
|
|
|
+ {
|
|
|
+ SIZE szImage = {pImage->nX, pImage->nY};
|
|
|
+ SIZE szStatus = {pImage->nX / m_nStateCount, pImage->nY};
|
|
|
+ if( szImage.cx > 0 && szImage.cy > 0 )
|
|
|
+ {
|
|
|
+ RECT rcSrc = {0, 0, szImage.cx, szImage.cy};
|
|
|
+ if(m_nStateCount > 0) {
|
|
|
+ int iLeft = rcSrc.left + 0 * szStatus.cx;
|
|
|
+ int iRight = iLeft + szStatus.cx;
|
|
|
+ int iTop = rcSrc.top;
|
|
|
+ int iBottom = iTop + szStatus.cy;
|
|
|
+ m_sNormalImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d'"), info.sImageName.GetData(), info.sResType.GetData(), info.rcDest.left, info.rcDest.top, info.rcDest.right, info.rcDest.bottom, iLeft, iTop, iRight, iBottom);
|
|
|
+ }
|
|
|
+ if(m_nStateCount > 1) {
|
|
|
+ int iLeft = rcSrc.left + 1 * szStatus.cx;
|
|
|
+ int iRight = iLeft + szStatus.cx;
|
|
|
+ int iTop = rcSrc.top;
|
|
|
+ int iBottom = iTop + szStatus.cy;
|
|
|
+ m_sHotImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d'"), info.sImageName.GetData(), info.sResType.GetData(), info.rcDest.left, info.rcDest.top, info.rcDest.right, info.rcDest.bottom, iLeft, iTop, iRight, iBottom);
|
|
|
+ m_sPushedImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d'"), info.sImageName.GetData(), info.sResType.GetData(), info.rcDest.left, info.rcDest.top, info.rcDest.right, info.rcDest.bottom, iLeft, iTop, iRight, iBottom);
|
|
|
+ }
|
|
|
+ if(m_nStateCount > 2) {
|
|
|
+ int iLeft = rcSrc.left + 2 * szStatus.cx;
|
|
|
+ int iRight = iLeft + szStatus.cx;
|
|
|
+ int iTop = rcSrc.top;
|
|
|
+ int iBottom = iTop + szStatus.cy;
|
|
|
+ m_sPushedImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d'"), info.sImageName.GetData(), info.sResType.GetData(), info.rcDest.left, info.rcDest.top, info.rcDest.right, info.rcDest.bottom, iLeft, iTop, iRight, iBottom);
|
|
|
+ }
|
|
|
+ if(m_nStateCount > 3) {
|
|
|
+ int iLeft = rcSrc.left + 3 * szStatus.cx;
|
|
|
+ int iRight = iLeft + szStatus.cx;
|
|
|
+ int iTop = rcSrc.top;
|
|
|
+ int iBottom = iTop + szStatus.cy;
|
|
|
+ m_sDisabledImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d'"), info.sImageName.GetData(), info.sResType.GetData(), info.rcDest.left, info.rcDest.top, info.rcDest.right, info.rcDest.bottom, iLeft, iTop, iRight, iBottom);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if( IsFocused() ) m_uButtonState |= UISTATE_FOCUSED;
|
|
|
+ else m_uButtonState &= ~ UISTATE_FOCUSED;
|
|
|
+ if( !IsEnabled() ) m_uButtonState |= UISTATE_DISABLED;
|
|
|
+ else m_uButtonState &= ~ UISTATE_DISABLED;
|
|
|
+ if(!::IsWindowEnabled(m_pManager->GetPaintWindow())) {
|
|
|
+ m_uButtonState &= UISTATE_DISABLED;
|
|
|
+ }
|
|
|
+ if( (m_uButtonState & UISTATE_DISABLED) != 0 ) {
|
|
|
+ if( !m_sDisabledImage.IsEmpty() ) {
|
|
|
+ if( !DrawImage(hDC, (LPCTSTR)m_sDisabledImage) ) {}
|
|
|
+ else return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if( (m_uButtonState & UISTATE_PUSHED) != 0 ) {
|
|
|
+ if( !m_sPushedImage.IsEmpty() ) {
|
|
|
+ if( !DrawImage(hDC, (LPCTSTR)m_sPushedImage) ) {}
|
|
|
+ else return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if( (m_uButtonState & UISTATE_HOT) != 0 ) {
|
|
|
+ if( !m_sHotImage.IsEmpty() ) {
|
|
|
+ if( !DrawImage(hDC, (LPCTSTR)m_sHotImage) ) {}
|
|
|
+ else return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if( (m_uButtonState & UISTATE_FOCUSED) != 0 ) {
|
|
|
+ if( !m_sFocusedImage.IsEmpty() ) {
|
|
|
+ if( !DrawImage(hDC, (LPCTSTR)m_sFocusedImage) ) {}
|
|
|
+ else return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if( !m_sNormalImage.IsEmpty() ) {
|
|
|
+ if( !DrawImage(hDC, (LPCTSTR)m_sNormalImage) ) {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::PaintBorder(HDC hDC)
|
|
|
+ {
|
|
|
+ if ((m_uButtonState & UISTATE_DISABLED) != 0) {
|
|
|
+ if (m_dwDisabledBorderColor != 0) {
|
|
|
+ DrawBorder(hDC, m_rcItem, GetAdjustColor(m_dwDisabledBorderColor), m_nBorderSize, m_rcBorderSize, m_cxyBorderRound, m_nBorderStyle);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if ((m_uButtonState & UISTATE_PUSHED) != 0) {
|
|
|
+ if (m_dwPushedBorderColor != 0) {
|
|
|
+ DrawBorder(hDC, m_rcItem, GetAdjustColor(m_dwPushedBorderColor), m_nBorderSize, m_rcBorderSize, m_cxyBorderRound, m_nBorderStyle);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if ((m_uButtonState & UISTATE_HOT) != 0) {
|
|
|
+ if (m_dwHotBorderColor != 0) {
|
|
|
+ DrawBorder(hDC, m_rcItem, GetAdjustColor(m_dwHotBorderColor), m_nBorderSize, m_rcBorderSize, m_cxyBorderRound, m_nBorderStyle);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return CControlUI::PaintBorder(hDC);
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::PaintForeImage(HDC hDC)
|
|
|
+ {
|
|
|
+ if( (m_uButtonState & UISTATE_PUSHED) != 0 ) {
|
|
|
+ if( !m_sPushedForeImage.IsEmpty() ) {
|
|
|
+ if( !DrawImage(hDC, (LPCTSTR)m_sPushedForeImage) ) {}
|
|
|
+ else return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if( (m_uButtonState & UISTATE_HOT) != 0 ) {
|
|
|
+ if( !m_sHotForeImage.IsEmpty() ) {
|
|
|
+ if( !DrawImage(hDC, (LPCTSTR)m_sHotForeImage) ) {}
|
|
|
+ else return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!m_sForeImage.IsEmpty() ) {
|
|
|
+ if( !DrawImage(hDC, (LPCTSTR)m_sForeImage) ) {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void CButtonUI::DrawBorder(HDC hDC, const RECT& rcItem, const DWORD& dwBorderColor, const int& nBorderSize, const RECT& rcBorderSize, const SIZE& cxyBorderRound, const int& nBorderStyle)
|
|
|
+ {
|
|
|
+ if (dwBorderColor != 0) {
|
|
|
+ //ťÔ˛˝Çąßżň
|
|
|
+ if (nBorderSize > 0 && (cxyBorderRound.cx > 0 || cxyBorderRound.cy > 0)) {
|
|
|
+ CRenderEngine::DrawRoundRect(hDC, rcItem, nBorderSize, cxyBorderRound.cx, cxyBorderRound.cy, GetAdjustColor(dwBorderColor), nBorderStyle);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (rcBorderSize.left > 0 || rcBorderSize.top > 0 || rcBorderSize.right > 0 || rcBorderSize.bottom > 0) {
|
|
|
+ RECT rcBorder;
|
|
|
+
|
|
|
+ if (rcBorderSize.left > 0) {
|
|
|
+ rcBorder = rcItem;
|
|
|
+ rcBorder.right = rcBorder.left;
|
|
|
+ CRenderEngine::DrawLine(hDC, rcBorder, rcBorderSize.left, GetAdjustColor(dwBorderColor), nBorderStyle);
|
|
|
+ }
|
|
|
+ if (rcBorderSize.top > 0) {
|
|
|
+ rcBorder = rcItem;
|
|
|
+ rcBorder.bottom = rcBorder.top;
|
|
|
+ CRenderEngine::DrawLine(hDC, rcBorder, rcBorderSize.top, GetAdjustColor(dwBorderColor), nBorderStyle);
|
|
|
+ }
|
|
|
+ if (rcBorderSize.right > 0) {
|
|
|
+ rcBorder = rcItem;
|
|
|
+ rcBorder.right -= 1;
|
|
|
+ rcBorder.left = rcBorder.right;
|
|
|
+ CRenderEngine::DrawLine(hDC, rcBorder, rcBorderSize.right, GetAdjustColor(dwBorderColor), nBorderStyle);
|
|
|
+ }
|
|
|
+ if (rcBorderSize.bottom > 0) {
|
|
|
+ rcBorder = rcItem;
|
|
|
+ rcBorder.bottom -= 1;
|
|
|
+ rcBorder.top = rcBorder.bottom;
|
|
|
+ CRenderEngine::DrawLine(hDC, rcBorder, rcBorderSize.bottom, GetAdjustColor(dwBorderColor), nBorderStyle);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (nBorderSize > 0) {
|
|
|
+ CRenderEngine::DrawRect(hDC, rcItem, nBorderSize, GetAdjustColor(dwBorderColor), nBorderStyle);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|