| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- // ViewResBase.cpp : 实现文件
- //
- #include "stdafx.h"
- #include "ViewResBase.h"
- #include "DisplayWnd.h"
- #include "ViewGroup.h"
- // CViewResBase
- IMPLEMENT_DYNAMIC(CViewResBase, VIEW_CONTROL_TYPE)
- CViewResBase::CViewResBase(void)
- {
- }
- CViewResBase::~CViewResBase(void)
- {
- RemoveAll();
- }
- /*****************************************************************
- **【函数名称】 _addRes
- **【函数功能】 添加资源处理函数
- **【参数】
- **【返回值】
- ****************************************************************/
- void CViewResBase::_addRes( DEV_RES_ID& ResId )
- {
- CString Name;
- // 查找或创建Dev
- PVIEW_ITEM_TYPE pDev = _getDev(ResId.NodeNo);
- if(pDev == NULL)
- {
- Name.Format(_T("%s%u"), UI_ITEM_NAME_DEV, ResId.NodeNo);
- pDev = new CMFCPropertyGridProperty(Name, ResId.NodeNo);
- ASSERT(pDev != NULL);
- AddProperty(pDev, FALSE, FALSE);
- }
- // 查找或创建Board
- CViewGroup* pBoard = _getResGroup(ResId);
- if(pBoard == NULL)
- {
- Name.Format(_T("%s%u"), UI_ITEM_NAME_BOARD, ResId.BoardNo);
- pBoard = new CViewGroup(Name, ResId.BoardNo);
- ASSERT(pBoard != NULL);
- pBoard->setResId(ResId);
- _addResGroup(pBoard);
- pDev->AddSubItem(pBoard);
- }
- // 创建资源
- Name.Format(_T("%u"), ResId.ChanNo);
- PVIEW_ITEM_TYPE pRes = new CMFCPropertyGridProperty(Name, ResId.ChanNo);
- ASSERT(pRes != NULL);
- pBoard->add(ResId.ChanNo, pRes);
- Name.Format(_T("%s"), UI_ITEM_NAME_STATE);
- PVIEW_ITEM_TYPE pState = new CMFCPropertyGridProperty(Name, _T("free"));
- ASSERT(pState != NULL);
- pState->AllowEdit(FALSE);
- pRes->AddSubItem(pState);
- }
- /*****************************************************************
- **【函数名称】 _delEmptyNode
- **【函数功能】 删除空节点
- **【参数】
- **【返回值】
- ****************************************************************/
- void CViewResBase::_delEmptyNode( PVIEW_ITEM_TYPE pItem )
- {
- ASSERT(pItem != NULL);
- if(pItem->GetSubItemsCount() == 0)
- {
- PVIEW_ITEM_TYPE pParent = pItem->GetParent();
- if(pParent != NULL)
- {
- pParent->RemoveSubItem(pItem);
- _delEmptyNode(pParent);
- }
- else
- DeleteProperty(pItem, FALSE, FALSE);
- }
- }
- /*****************************************************************
- **【函数名称】 _getDev
- **【函数功能】 查找dev节点
- **【参数】
- **【返回值】
- ****************************************************************/
- PVIEW_ITEM_TYPE CViewResBase::_getDev( UINT DevNo )
- {
- int Count = GetPropertyCount();
- PVIEW_ITEM_TYPE pDev = NULL;
- for(int i = 0; i < Count; ++i)
- {
- pDev = GetProperty(i);
- ASSERT(pDev != NULL);
- if(pDev->GetData() == DevNo)
- return pDev;
- }
- return NULL;
- }
- /*****************************************************************
- **【函数名称】 _getBoard
- **【函数功能】 查找board节点
- **【参数】
- **【返回值】
- ****************************************************************/
- PVIEW_ITEM_TYPE CViewResBase::_getBoard( PVIEW_ITEM_TYPE pDev, UINT BoardNo )
- {
- int Count = pDev->GetSubItemsCount();
- PVIEW_ITEM_TYPE pBoard = NULL;
- for(int i = 0; i < Count; ++i)
- {
- pBoard = pDev->GetSubItem(i);
- ASSERT(pBoard != NULL);
- if(pBoard->GetData() == BoardNo)
- return pBoard;
- }
- return NULL;
- }
- /*****************************************************************
- **【函数名称】 _getSpan
- **【函数功能】 查找span节点
- **【参数】
- **【返回值】
- ****************************************************************/
- PVIEW_ITEM_TYPE CViewResBase::_getSpan( PVIEW_ITEM_TYPE pBoard, UINT SpanNo )
- {
- int Count = pBoard->GetSubItemsCount();
- PVIEW_ITEM_TYPE pSpan = NULL;
- for(int i = 0; i < Count; ++i)
- {
- pBoard = pBoard->GetSubItem(i);
- ASSERT(pBoard != NULL);
- if(pSpan->GetData() == SpanNo)
- return pSpan;
- }
- return NULL;
- }
- /*****************************************************************
- **【函数名称】 _getResGroup
- **【函数功能】 查找资源组节点
- **【参数】
- **【返回值】
- ****************************************************************/
- CViewGroup* CViewResBase::_getResGroup( DEV_RES_ID& ResId )
- {
- POSITION Pos = m_ResGroupList.GetHeadPosition();
- while(Pos != NULL)
- {
- CViewGroup* pGroup = m_ResGroupList.GetNext(Pos);
- ASSERT(pGroup != NULL);
- if(pGroup->isThatU(ResId))
- return pGroup;
- }
- return NULL;
- }
- /*****************************************************************
- **【函数名称】 _addResGroup
- **【函数功能】 添加资源组节点
- **【参数】
- **【返回值】
- ****************************************************************/
- void CViewResBase::_addResGroup( CViewGroup* pGroup )
- {
- m_ResGroupList.AddTail(pGroup);
- }
- /*****************************************************************
- **【函数名称】 _delResGroup
- **【函数功能】 删除资源组节点
- **【参数】
- **【返回值】
- ****************************************************************/
- void CViewResBase::_delResGroup( CViewGroup* pGroup )
- {
- POSITION Pos = m_ResGroupList.Find(pGroup);
- ASSERT(Pos != NULL);
- if(Pos != NULL)
- m_ResGroupList.RemoveAt(Pos);
- }
- /*****************************************************************
- **【函数名称】 create
- **【函数功能】 控件初始化
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CViewResBase::create( CDisplayWnd* pWnd, UINT PanId )
- {
- ASSERT(pWnd != NULL);
- CString Name;
- Name.LoadString(PanId);
- // 创建pane
- if (!m_Pane.Create(Name, pWnd, CRect(0, 0, 200, 200), TRUE, PanId,
- WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
- {
- TRACE0("创建设备资源窗口失败");
- return false;
- }
- m_Pane.EnableDocking(CBRS_ALIGN_ANY);
- //创建控件
- if(!_createControl())
- return false;
- EnableHeaderCtrl(FALSE);
- pWnd->OnNewPane(&m_Pane);
- return true;
- }
- /*****************************************************************
- **【函数名称】 newSize
- **【函数功能】 调整控件大小
- **【参数】
- **【返回值】
- ****************************************************************/
- void CViewResBase::newSize( int cx, int cy )
- {
- if(IsWindow(GetSafeHwnd()))
- SetWindowPos (this, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_SHOWWINDOW);
- }
- /*****************************************************************
- **【函数名称】 showTogether
- **【函数功能】 Tab模式显示控件
- **【参数】
- **【返回值】
- ****************************************************************/
- void CViewResBase::showTogether( CViewResBase* pView )
- {
- ASSERT(pView != NULL);
- m_Pane.AttachToTabWnd(&pView->m_Pane, DM_SHOW, TRUE);
- }
- /*****************************************************************
- **【函数名称】 onResNew
- **【函数功能】 添加资源处理函数
- **【参数】
- **【返回值】
- ****************************************************************/
- void CViewResBase::onResNew( DEV_RES_ID& ResId )
- {
- CViewGroup* pGroup = _getResGroup(ResId);
- if(pGroup == NULL || !pGroup->isSubItemExisted(ResId.ChanNo))
- {
- _addRes(ResId);
- AdjustLayout();
- }
- }
- /*****************************************************************
- **【函数名称】 onResDel
- **【函数功能】 删除资源处理函数
- **【参数】
- **【返回值】
- ****************************************************************/
- void CViewResBase::onResDel( DEV_RES_ID& ResId )
- {
- CViewGroup* pGroup = _getResGroup(ResId);
- if (pGroup != NULL && pGroup->isSubItemExisted(ResId.ChanNo))
- {
- // 删除资源
- pGroup->remove(ResId.ChanNo);
- if(pGroup->GetSubItemsCount() == 0)
- {
- // 从List中删除该组
- _delResGroup(pGroup);
- _delEmptyNode(pGroup);
- }
- AdjustLayout();
- }
- }
- BEGIN_MESSAGE_MAP(CViewResBase, VIEW_CONTROL_TYPE)
- END_MESSAGE_MAP()
- // CViewResBase 消息处理程序
|