123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- #include "StdAfx.h"
- #include "UIOption.h"
- namespace DuiLib
- {
- IMPLEMENT_DUICONTROL(COptionUI)
- COptionUI::COptionUI() : m_bSelected(false) ,m_iSelectedFont(-1), m_dwSelectedTextColor(0), m_dwSelectedBkColor(0), m_nSelectedStateCount(0)
- {
- }
- COptionUI::~COptionUI()
- {
- if( !m_sGroupName.IsEmpty() && m_pManager ) m_pManager->RemoveOptionGroup(m_sGroupName, this);
- }
- LPCTSTR COptionUI::GetClass() const
- {
- return _T("OptionUI");
- }
- LPVOID COptionUI::GetInterface(LPCTSTR pstrName)
- {
- if( _tcsicmp(pstrName, DUI_CTR_OPTION) == 0 ) return static_cast<COptionUI*>(this);
- return CButtonUI::GetInterface(pstrName);
- }
- void COptionUI::SetManager(CPaintManagerUI* pManager, CControlUI* pParent, bool bInit)
- {
- CControlUI::SetManager(pManager, pParent, bInit);
- if( bInit && !m_sGroupName.IsEmpty() ) {
- if (m_pManager) m_pManager->AddOptionGroup(m_sGroupName, this);
- }
- }
- LPCTSTR COptionUI::GetGroup() const
- {
- return m_sGroupName;
- }
- void COptionUI::SetGroup(LPCTSTR pStrGroupName)
- {
- if( pStrGroupName == NULL ) {
- if( m_sGroupName.IsEmpty() ) return;
- m_sGroupName.Empty();
- }
- else {
- if( m_sGroupName == pStrGroupName ) return;
- if (!m_sGroupName.IsEmpty() && m_pManager) m_pManager->RemoveOptionGroup(m_sGroupName, this);
- m_sGroupName = pStrGroupName;
- }
- if( !m_sGroupName.IsEmpty() ) {
- if (m_pManager) m_pManager->AddOptionGroup(m_sGroupName, this);
- }
- else {
- if (m_pManager) m_pManager->RemoveOptionGroup(m_sGroupName, this);
- }
- Selected(m_bSelected);
- }
- LPCTSTR COptionUI::GetGroupType() const
- {
- return m_sGroupType;
- }
- void COptionUI::SetGroupType(LPCTSTR pStrGroupType)
- {
- if( pStrGroupType == NULL ) {
- if( m_sGroupType.IsEmpty() ) return;
- m_sGroupType.Empty();
- }
- else {
- m_sGroupType = pStrGroupType;
- }
- }
- bool COptionUI::IsSelected() const
- {
- return m_bSelected;
- }
- void COptionUI::Selected(bool bSelected, bool bMsg/* = true*/)
- {
- if(m_bSelected == bSelected) return;
- m_bSelected = bSelected;
- if( m_bSelected ) m_uButtonState |= UISTATE_SELECTED;
- else m_uButtonState &= ~UISTATE_SELECTED;
- if( m_pManager != NULL ) {
- if( !m_sGroupName.IsEmpty() ) {
- if( m_bSelected ) {
- CStdPtrArray* aOptionGroup = m_pManager->GetOptionGroup(m_sGroupName);
- for( int i = 0; i < aOptionGroup->GetSize(); i++ ) {
- COptionUI* pControl = static_cast<COptionUI*>(aOptionGroup->GetAt(i));
- if( pControl != this && (m_sGroupType.IsEmpty() || m_sGroupType.CompareNoCase(pControl->GetGroupType()) != 0)) {
- pControl->Selected(false, bMsg);
- }
- }
- if(bMsg) {
- m_pManager->SendNotify(this, DUI_MSGTYPE_SELECTCHANGED);
- }
- }
- else {
- if(bMsg) {
- m_pManager->SendNotify(this, DUI_MSGTYPE_SELECTCHANGED);
- }
- }
- }
- else {
- if(bMsg) {
- m_pManager->SendNotify(this, DUI_MSGTYPE_SELECTCHANGED);
- }
- }
- }
- Invalidate();
- }
- bool COptionUI::Activate()
- {
- if( !CButtonUI::Activate() ) return false;
- if( !m_sGroupName.IsEmpty() ) {
- Selected(true);
- }
- else Selected(!m_bSelected);
-
- Invalidate();
- return true;
- }
- LPCTSTR COptionUI::GetSelectedImage()
- {
- return m_sSelectedImage;
- }
- void COptionUI::SetSelectedImage(LPCTSTR pStrImage)
- {
- m_sSelectedImage = pStrImage;
- Invalidate();
- }
- LPCTSTR COptionUI::GetSelectedHotImage()
- {
- return m_sSelectedHotImage;
- }
- void COptionUI::SetSelectedHotImage( LPCTSTR pStrImage )
- {
- m_sSelectedHotImage = pStrImage;
- Invalidate();
- }
- LPCTSTR COptionUI::GetSelectedPushedImage()
- {
- return m_sSelectedPushedImage;
- }
- void COptionUI::SetSelectedPushedImage(LPCTSTR pStrImage)
- {
- m_sSelectedPushedImage = pStrImage;
- Invalidate();
- }
- void COptionUI::SetSelectedTextColor(DWORD dwTextColor)
- {
- m_dwSelectedTextColor = dwTextColor;
- }
- DWORD COptionUI::GetSelectedTextColor()
- {
- if (m_dwSelectedTextColor == 0) m_dwSelectedTextColor = m_pManager->GetDefaultFontColor();
- return m_dwSelectedTextColor;
- }
- void COptionUI::SetSelectedBkColor( DWORD dwBkColor )
- {
- m_dwSelectedBkColor = dwBkColor;
- }
- DWORD COptionUI::GetSelectBkColor()
- {
- return m_dwSelectedBkColor;
- }
- LPCTSTR COptionUI::GetSelectedForedImage()
- {
- return m_sSelectedForeImage;
- }
- void COptionUI::SetSelectedForedImage(LPCTSTR pStrImage)
- {
- m_sSelectedForeImage = pStrImage;
- Invalidate();
- }
- void COptionUI::SetSelectedStateCount(int nCount)
- {
- m_nSelectedStateCount = nCount;
- Invalidate();
- }
- int COptionUI::GetSelectedStateCount() const
- {
- return m_nSelectedStateCount;
- }
- LPCTSTR COptionUI::GetSelectedStateImage()
- {
- return m_sSelectedStateImage;
- }
- void COptionUI::SetSelectedStateImage( LPCTSTR pStrImage )
- {
- m_sSelectedStateImage = pStrImage;
- Invalidate();
- }
- void COptionUI::SetSelectedFont(int index)
- {
- m_iSelectedFont = index;
- Invalidate();
- }
- int COptionUI::GetSelectedFont() const
- {
- return m_iSelectedFont;
- }
- void COptionUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue)
- {
- if( _tcsicmp(pstrName, _T("group")) == 0 ) SetGroup(pstrValue);
- else if( _tcsicmp(pstrName, _T("grouptype")) == 0 ) SetGroupType(pstrValue);
- else if( _tcsicmp(pstrName, _T("selected")) == 0 ) Selected(_tcsicmp(pstrValue, _T("true")) == 0);
- else if( _tcsicmp(pstrName, _T("selectedimage")) == 0 ) SetSelectedImage(pstrValue);
- else if( _tcsicmp(pstrName, _T("selectedhotimage")) == 0 ) SetSelectedHotImage(pstrValue);
- else if( _tcsicmp(pstrName, _T("selectedpushedimage")) == 0 ) SetSelectedPushedImage(pstrValue);
- else if( _tcsicmp(pstrName, _T("selectedforeimage")) == 0 ) SetSelectedForedImage(pstrValue);
- else if( _tcsicmp(pstrName, _T("selectedstateimage")) == 0 ) SetSelectedStateImage(pstrValue);
- else if( _tcsicmp(pstrName, _T("selectedstatecount")) == 0 ) SetSelectedStateCount(_ttoi(pstrValue));
- else if( _tcsicmp(pstrName, _T("selectedbkcolor")) == 0 ) {
- if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
- LPTSTR pstr = NULL;
- DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
- SetSelectedBkColor(clrColor);
- }
- else if( _tcsicmp(pstrName, _T("selectedtextcolor")) == 0 ) {
- if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue);
- LPTSTR pstr = NULL;
- DWORD clrColor = _tcstoul(pstrValue, &pstr, 16);
- SetSelectedTextColor(clrColor);
- }
- else if( _tcsicmp(pstrName, _T("selectedfont")) == 0 ) SetSelectedFont(_ttoi(pstrValue));
- else CButtonUI::SetAttribute(pstrName, pstrValue);
- }
- void COptionUI::PaintBkColor(HDC hDC)
- {
- if(IsSelected()) {
- if(m_dwSelectedBkColor != 0) {
- CRenderEngine::DrawColor(hDC, m_rcPaint, GetAdjustColor(m_dwSelectedBkColor));
- }
- }
- else {
- return CButtonUI::PaintBkColor(hDC);
- }
- }
- void COptionUI::PaintStatusImage(HDC hDC)
- {
- if(IsSelected()) {
- if(!m_sSelectedStateImage.IsEmpty() && m_nSelectedStateCount > 0)
- {
- TDrawInfo info;
- info.Parse(m_sSelectedStateImage, _T(""), m_pManager);
- const TImageInfo* pImage = m_pManager->GetImageEx(info.sImageName, info.sResType, info.dwMask, info.bHSL, info.bGdiplus);
- if(m_sSelectedImage.IsEmpty() && pImage != NULL)
- {
- SIZE szImage = {pImage->nX, pImage->nY};
- SIZE szStatus = {pImage->nX / m_nSelectedStateCount, pImage->nY};
- if( szImage.cx > 0 && szImage.cy > 0 )
- {
- RECT rcSrc = {0, 0, szImage.cx, szImage.cy};
- if(m_nSelectedStateCount > 0) {
- int iLeft = rcSrc.left + 0 * szStatus.cx;
- int iRight = iLeft + szStatus.cx;
- int iTop = rcSrc.top;
- int iBottom = iTop + szStatus.cy;
- m_sSelectedImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d' corner='%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, info.rcCorner.left, info.rcCorner.top, info.rcCorner.right, info.rcCorner.bottom);
- }
- if(m_nSelectedStateCount > 1) {
- int iLeft = rcSrc.left + 1 * szStatus.cx;
- int iRight = iLeft + szStatus.cx;
- int iTop = rcSrc.top;
- int iBottom = iTop + szStatus.cy;
- m_sSelectedHotImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d' corner='%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, info.rcCorner.left, info.rcCorner.top, info.rcCorner.right, info.rcCorner.bottom);
- m_sSelectedPushedImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d' corner='%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, info.rcCorner.left, info.rcCorner.top, info.rcCorner.right, info.rcCorner.bottom);
- }
- if(m_nSelectedStateCount > 2) {
- int iLeft = rcSrc.left + 2 * szStatus.cx;
- int iRight = iLeft + szStatus.cx;
- int iTop = rcSrc.top;
- int iBottom = iTop + szStatus.cy;
- m_sSelectedPushedImage.Format(_T("res='%s' restype='%s' dest='%d,%d,%d,%d' source='%d,%d,%d,%d' corner='%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, info.rcCorner.left, info.rcCorner.top, info.rcCorner.right, info.rcCorner.bottom);
- }
- }
- }
- }
- if( (m_uButtonState & UISTATE_PUSHED) != 0 && !m_sSelectedPushedImage.IsEmpty()) {
- if( !DrawImage(hDC, (LPCTSTR)m_sSelectedPushedImage) ) {}
- else return;
- }
- else if( (m_uButtonState & UISTATE_HOT) != 0 && !m_sSelectedHotImage.IsEmpty()) {
- if( !DrawImage(hDC, (LPCTSTR)m_sSelectedHotImage) ) {}
- else return;
- }
- if( !m_sSelectedImage.IsEmpty() ) {
- if( !DrawImage(hDC, (LPCTSTR)m_sSelectedImage) ) {}
- }
- }
- else {
- CButtonUI::PaintStatusImage(hDC);
- }
- }
- void COptionUI::PaintForeImage(HDC hDC)
- {
- if(IsSelected()) {
- if( !m_sSelectedForeImage.IsEmpty() ) {
- if( !DrawImage(hDC, (LPCTSTR)m_sSelectedForeImage) ) {}
- else return;
- }
- }
- return CButtonUI::PaintForeImage(hDC);
- }
- void COptionUI::PaintText(HDC hDC)
- {
- if( (m_uButtonState & UISTATE_SELECTED) != 0 )
- {
- DWORD oldTextColor = m_dwTextColor;
- if( m_dwSelectedTextColor != 0 ) m_dwTextColor = m_dwSelectedTextColor;
- if( m_dwTextColor == 0 ) m_dwTextColor = m_pManager->GetDefaultFontColor();
- if( m_dwDisabledTextColor == 0 ) m_dwDisabledTextColor = m_pManager->GetDefaultDisabledColor();
- int iFont = GetFont();
- if(GetSelectedFont() != -1) {
- iFont = GetSelectedFont();
- }
- CDuiString sText = GetText();
- if( sText.IsEmpty() ) return;
- int nLinks = 0;
- RECT rc = m_rcItem;
- RECT rcTextPadding = GetTextPadding();
- rc.left += rcTextPadding.left;
- rc.right -= rcTextPadding.right;
- rc.top += rcTextPadding.top;
- rc.bottom -= rcTextPadding.bottom;
-
- if( m_bShowHtml )
- CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, sText, IsEnabled()?m_dwTextColor:m_dwDisabledTextColor, \
- NULL, NULL, nLinks, iFont, m_uTextStyle);
- else
- CRenderEngine::DrawText(hDC, m_pManager, rc, sText, IsEnabled()?m_dwTextColor:m_dwDisabledTextColor, \
- iFont, m_uTextStyle);
- m_dwTextColor = oldTextColor;
- }
- else
- CButtonUI::PaintText(hDC);
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////
- //
- IMPLEMENT_DUICONTROL(CCheckBoxUI)
- CCheckBoxUI::CCheckBoxUI() : m_bAutoCheck(false)
- {
- }
- LPCTSTR CCheckBoxUI::GetClass() const
- {
- return _T("CheckBoxUI");
- }
- LPVOID CCheckBoxUI::GetInterface(LPCTSTR pstrName)
- {
- if( _tcsicmp(pstrName, DUI_CTR_CHECKBOX) == 0 ) return static_cast<CCheckBoxUI*>(this);
- return COptionUI::GetInterface(pstrName);
- }
- void CCheckBoxUI::SetCheck(bool bCheck)
- {
- Selected(bCheck);
- }
- bool CCheckBoxUI::GetCheck() const
- {
- return IsSelected();
- }
- void CCheckBoxUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue)
- {
- if( _tcsicmp(pstrName, _T("EnableAutoCheck")) == 0 ) SetAutoCheck(_tcsicmp(pstrValue, _T("true")) == 0);
-
- COptionUI::SetAttribute(pstrName, pstrValue);
- }
- void CCheckBoxUI::SetAutoCheck(bool bEnable)
- {
- m_bAutoCheck = bEnable;
- }
- void CCheckBoxUI::DoEvent(TEventUI& event)
- {
- if( !IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND ) {
- if( m_pParent != NULL ) m_pParent->DoEvent(event);
- else COptionUI::DoEvent(event);
- return;
- }
- if( m_bAutoCheck && (event.Type == UIEVENT_BUTTONDOWN || event.Type == UIEVENT_DBLCLICK)) {
- if( ::PtInRect(&m_rcItem, event.ptMouse) && IsEnabled() ) {
- SetCheck(!GetCheck());
- m_pManager->SendNotify(this, DUI_MSGTYPE_CHECKCLICK, 0, 0);
- Invalidate();
- }
- return;
- }
- COptionUI::DoEvent(event);
- }
- void CCheckBoxUI::Selected(bool bSelected, bool bMsg/* = true*/)
- {
- if( m_bSelected == bSelected ) return;
- m_bSelected = bSelected;
- if( m_bSelected ) m_uButtonState |= UISTATE_SELECTED;
- else m_uButtonState &= ~UISTATE_SELECTED;
- if( m_pManager != NULL ) {
- if( !m_sGroupName.IsEmpty() ) {
- if( m_bSelected ) {
- CStdPtrArray* aOptionGroup = m_pManager->GetOptionGroup(m_sGroupName);
- for( int i = 0; i < aOptionGroup->GetSize(); i++ ) {
- COptionUI* pControl = static_cast<COptionUI*>(aOptionGroup->GetAt(i));
- if( pControl != this ) {
- pControl->Selected(false, bMsg);
- }
- }
- if(bMsg) {
- m_pManager->SendNotify(this, DUI_MSGTYPE_SELECTCHANGED, m_bSelected, 0);
- }
- }
- }
- else {
- if(bMsg) {
- m_pManager->SendNotify(this, DUI_MSGTYPE_SELECTCHANGED, m_bSelected, 0);
- }
- }
- }
- Invalidate();
- }
- }
|