DuiLib 之 UITabLayout

来源:互联网 发布:les交友软件 编辑:程序博客网 时间:2024/06/06 09:09
#ifndef __UITABLAYOUT_H__#define __UITABLAYOUT_H__#pragma oncenamespace DuiLib{class UILIB_API CTabLayoutUI : public CContainerUI{public:CTabLayoutUI();LPCTSTR GetClass() const;LPVOID GetInterface(LPCTSTR pstrName);bool Add(CControlUI* pControl);bool AddAt(CControlUI* pControl, int iIndex);bool Remove(CControlUI* pControl);void RemoveAll();int GetCurSel() const;bool SelectItem(int iIndex);bool SelectItem(CControlUI* pControl);void SetPos(RECT rc);void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);protected:int m_iCurSel;};}#endif // __UITABLAYOUT_H__



#include "stdafx.h"#include "UITabLayout.h"namespace DuiLib{CTabLayoutUI::CTabLayoutUI() : m_iCurSel(-1){}LPCTSTR CTabLayoutUI::GetClass() const{return _T("TabLayoutUI");}LPVOID CTabLayoutUI::GetInterface(LPCTSTR pstrName){if( _tcscmp(pstrName, DUI_CTR_TABLAYOUT) == 0 ) return static_cast<CTabLayoutUI*>(this);return CContainerUI::GetInterface(pstrName);}bool CTabLayoutUI::Add(CControlUI* pControl){bool ret = CContainerUI::Add(pControl);if( !ret ) return ret;if(m_iCurSel == -1 && pControl->IsVisible()){m_iCurSel = GetItemIndex(pControl);}else{pControl->SetVisible(false);}return ret;}bool CTabLayoutUI::AddAt(CControlUI* pControl, int iIndex){bool ret = CContainerUI::AddAt(pControl, iIndex);if( !ret ) return ret;if(m_iCurSel == -1 && pControl->IsVisible()){m_iCurSel = GetItemIndex(pControl);}else if( m_iCurSel != -1 && iIndex <= m_iCurSel ){m_iCurSel += 1;}else{pControl->SetVisible(false);}return ret;}bool CTabLayoutUI::Remove(CControlUI* pControl){if( pControl == NULL) return false;int index = GetItemIndex(pControl);bool ret = CContainerUI::Remove(pControl);if( !ret ) return false;if( m_iCurSel == index){if( GetCount() > 0 ){m_iCurSel=0;GetItemAt(m_iCurSel)->SetVisible(true);}elsem_iCurSel=-1;NeedParentUpdate();}else if( m_iCurSel > index ){m_iCurSel -= 1;}return ret;}void CTabLayoutUI::RemoveAll(){m_iCurSel = -1;CContainerUI::RemoveAll();NeedParentUpdate();}int CTabLayoutUI::GetCurSel() const{return m_iCurSel;}bool CTabLayoutUI::SelectItem(int iIndex){if( iIndex < 0 || iIndex >= m_items.GetSize() ) return false;if( iIndex == m_iCurSel ) return true;int iOldSel = m_iCurSel;m_iCurSel = iIndex;for( int it = 0; it < m_items.GetSize(); it++ ){if( it == iIndex ) {GetItemAt(it)->SetVisible(true);GetItemAt(it)->SetFocus();SetPos(m_rcItem);}else GetItemAt(it)->SetVisible(false);}NeedParentUpdate();if( m_pManager != NULL ) {m_pManager->SetNextTabControl();m_pManager->SendNotify(this, DUI_MSGTYPE_TABSELECT, m_iCurSel, iOldSel);}return true;}bool CTabLayoutUI::SelectItem( CControlUI* pControl ){int iIndex=GetItemIndex(pControl);if (iIndex==-1)return false;elsereturn SelectItem(iIndex);}void CTabLayoutUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue){if( _tcscmp(pstrName, _T("selectedid")) == 0 ) SelectItem(_ttoi(pstrValue));return CContainerUI::SetAttribute(pstrName, pstrValue);}void CTabLayoutUI::SetPos(RECT rc){CControlUI::SetPos(rc);rc = m_rcItem;// Adjust for insetrc.left += m_rcInset.left;rc.top += m_rcInset.top;rc.right -= m_rcInset.right;rc.bottom -= m_rcInset.bottom;for( int it = 0; it < m_items.GetSize(); it++ ) {CControlUI* pControl = static_cast<CControlUI*>(m_items[it]);if( !pControl->IsVisible() ) continue;if( pControl->IsFloat() ) {SetFloatPos(it);continue;}if( it != m_iCurSel ) continue;RECT rcPadding = pControl->GetPadding();rc.left += rcPadding.left;rc.top += rcPadding.top;rc.right -= rcPadding.right;rc.bottom -= rcPadding.bottom;SIZE szAvailable = { rc.right - rc.left, rc.bottom - rc.top };SIZE sz = pControl->EstimateSize(szAvailable);if( sz.cx == 0 ) {sz.cx = MAX(0, szAvailable.cx);}if( sz.cx < pControl->GetMinWidth() ) sz.cx = pControl->GetMinWidth();if( sz.cx > pControl->GetMaxWidth() ) sz.cx = pControl->GetMaxWidth();if(sz.cy == 0) {sz.cy = MAX(0, szAvailable.cy);}if( sz.cy < pControl->GetMinHeight() ) sz.cy = pControl->GetMinHeight();if( sz.cy > pControl->GetMaxHeight() ) sz.cy = pControl->GetMaxHeight();RECT rcCtrl = { rc.left, rc.top, rc.left + sz.cx, rc.top + sz.cy};pControl->SetPos(rcCtrl);}}}


原创粉丝点击