123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #include "StdAfx.h"
- #include "UITabLayout.h"
- namespace DuiLib
- {
- IMPLEMENT_DUICONTROL(CTabLayoutUI)
- CTabLayoutUI::CTabLayoutUI() : m_iCurSel(-1)
- {
- }
- LPCTSTR CTabLayoutUI::GetClass() const
- {
- return _T("TabLayoutUI");
- }
- LPVOID CTabLayoutUI::GetInterface(LPCTSTR pstrName)
- {
- if( _tcsicmp(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);
- }
- else
- m_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;
- else
- return SelectItem(iIndex);
- }
- void CTabLayoutUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue)
- {
- if( _tcsicmp(pstrName, _T("selectedid")) == 0 ) SelectItem(_ttoi(pstrValue));
- return CContainerUI::SetAttribute(pstrName, pstrValue);
- }
- void CTabLayoutUI::SetPos(RECT rc, bool bNeedInvalidate)
- {
- CControlUI::SetPos(rc, bNeedInvalidate);
- rc = m_rcItem;
- RECT rcInset = GetInset();
- // Adjust for inset
- rc.left += rcInset.left;
- rc.top += rcInset.top;
- rc.right -= rcInset.right;
- rc.bottom -= 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);
- }
- }
- }
|