// MBOrgGroup.cpp : implementation file // #include "stdafx.h" #include "mborg.h" #include "MBOrgGroup.h" #include "MBOrgUser.h" // CMBOrgGroup IMPLEMENT_DYNAMIC(CMBOrgGroup, CObject) CMBOrgGroup::CMBOrgGroup() { m_strName = _T(""); m_strSName = _T(""); m_strID = _T(""); m_bHasSub = FALSE; m_bIsLoaded = FALSE; m_nLevel = 10000; m_nMUserCount = -1; // m_nUserCount <=-1 ×é×ÜÊýÎÞЧ ;=0 ×é×ÜÊýÓÐЧ,ÎÞÓû§;>1 ×é×ÜÊýÓÐЧ m_nOnLineUser = 0; m_bIsSysGroup = FALSE; m_listMember.RemoveAll(); //m_listTreeInfo.RemoveAll(); m_arParentMember.RemoveAll(); m_nMemOrgs = 0; m_bIsLoadedUserSuccess = true; } CMBOrgGroup::~CMBOrgGroup() { /*POSITION pos; CUserTreeInfo *pTreeInfo = NULL; for ( pos = m_listTreeInfo.GetHeadPosition(); pos; ) { pTreeInfo = (CUserTreeInfo*)m_listTreeInfo.GetNext( pos ); if ( pTreeInfo ) delete pTreeInfo; } m_listTreeInfo.RemoveAll();*/ DetachList(); } void CMBOrgGroup::operator = ( const CMBOrgGroup &Item ) { POSITION pos; CMBOrgMember *pMember = NULL; CMBOrgMember *pNewMember = NULL; m_strID = Item.m_strID; m_strName = Item.m_strName; m_strSName = Item.m_strName; m_bHasSub = Item.m_bHasSub; m_bIsSysGroup = Item.m_bIsSysGroup; m_nLevel = Item.m_nLevel; m_bIsLoadedUserSuccess= Item.m_bIsLoadedUserSuccess; m_bIsLoaded = Item.m_bIsLoaded; m_nMemOrgs = Item.m_nMemOrgs; m_arParentMember.RemoveAll(); m_arParentMember.Copy(Item.m_arParentMember); // Copy Member List DetachList(); m_nMUserCount = Item.m_nMUserCount; m_nOnLineUser = Item.m_nOnLineUser; for ( pos = Item.m_listMember.GetHeadPosition(); pos; ) { pMember = (CMBOrgMember *)Item.m_listMember.GetNext( pos ); pNewMember = new CMBOrgMember; *pNewMember = *pMember; m_listMember.AddTail( pNewMember ); } /*CUserTreeInfo *pTreeInfo = NULL; CUserTreeInfo *pTmpTreeInfo = NULL; for ( pos = m_listTreeInfo.GetHeadPosition(); pos; ) { pTreeInfo = (CUserTreeInfo*)m_listTreeInfo.GetNext( pos ); if ( pTreeInfo ) delete pTreeInfo; } m_listTreeInfo.RemoveAll(); for ( pos = Item.m_listTreeInfo.GetHeadPosition(); pos; ) { pTreeInfo = (CUserTreeInfo*)Item.m_listTreeInfo.GetNext( pos ); if ( pTreeInfo ) { pTmpTreeInfo = new CUserTreeInfo; *pTmpTreeInfo = *pTreeInfo; m_listTreeInfo.AddTail(pTmpTreeInfo); } }*/ } ///////////////////////////////////////////////////////////////////////////// // CMBOrgGroup message handlers void CMBOrgGroup::DetachList() { POSITION pos; CMBOrgMember *pMember = NULL; for ( pos = m_listMember.GetHeadPosition(); pos; ) { pMember = (CMBOrgMember *)m_listMember.GetNext( pos ); if ( pMember ) delete pMember; } m_listMember.RemoveAll(); //m_nMUserCount = 0; // m_nUserCount <=-1 ×é×ÜÊýÎÞЧ ;=0 ×é×ÜÊýÓÐЧ,ÎÞÓû§;>1 ×é×ÜÊýÓÐЧ m_nOnLineUser = 0; } POSITION CMBOrgGroup::FindMember( AMVIEWITEMTYPE nType, CString strMemberID ) { POSITION pos = NULL; POSITION posOld = NULL; CMBOrgMember *pMember = NULL; for ( pos = m_listMember.GetHeadPosition(); pos; pos ) { posOld = pos; pMember = (CMBOrgMember *)m_listMember.GetNext( pos ); if ( pMember->m_nType == nType && pMember->m_strID.CompareNoCase(strMemberID) == 0 ) return posOld; } return NULL; } void CMBOrgGroup::RemoveMember( AMVIEWITEMTYPE nType, CString strMemberID ) { POSITION pos = NULL; CMBOrgMember *pMember = NULL; pos = FindMember(nType,strMemberID); if( !pos) return; pMember = (CMBOrgMember *)m_listMember.GetAt( pos ); m_listMember.RemoveAt(pos); if(pMember) { if(pMember->m_nType ==AM_VIEWITEMTYPE_USER ) { m_nMUserCount = GetUserMemberCount(); } delete pMember; } } CString CMBOrgGroup::GetItemMemberName( AMVIEWITEMTYPE nType ) { POSITION pos; CMBOrgMember *pMember = NULL; CString strNames = _T(""); for ( pos = m_listMember.GetHeadPosition(); pos; pos ) { pMember = (CMBOrgMember *)m_listMember.GetNext( pos ); if ( pMember->m_nType == nType ) { strNames += pMember->m_strName; strNames += _T(";"); } } if ( !strNames.IsEmpty() ) strNames.TrimRight( _T(";") ); return strNames; } int CMBOrgGroup::GetUserMemberCount() { int nCount = 0; POSITION pos; CMBOrgMember *pMember = NULL; for ( pos = m_listMember.GetHeadPosition(); pos; pos ) { pMember = (CMBOrgMember *)m_listMember.GetNext( pos ); if ( !pMember->m_bIsDelete ) { if ( pMember->m_nType == AM_VIEWITEMTYPE_USER ) { nCount++; } } } return nCount; } CString CMBOrgGroup::GetItemMemberID( AMVIEWITEMTYPE nType ) { POSITION pos; CMBOrgMember *pMember = NULL; CString strIDs = _T(""); for ( pos = m_listMember.GetHeadPosition(); pos; pos ) { pMember = (CMBOrgMember *)m_listMember.GetNext( pos ); if ( pMember->m_nType == nType ) { strIDs += pMember->m_strID; strIDs += _T(";"); } } if ( !strIDs.IsEmpty() ) strIDs.TrimRight( _T(";") ); return strIDs; } POSITION CMBOrgGroup::AddMember( AMVIEWITEMTYPE nMemberType, CString strMemberID, CString strName, int nLevel /*= 0*/ ) { POSITION pos; CMBOrgMember *pMember = NULL; if ( strMemberID.IsEmpty() || strName.IsEmpty() ) return NULL; pos = FindMember( nMemberType, strMemberID ); if ( pos ) { pMember = (CMBOrgMember *)m_listMember.GetAt( pos ); if(nMemberType ==AM_VIEWITEMTYPE_USER && pMember->m_bIsDelete) { pMember->m_bIsDelete = FALSE; if(m_listMember.GetCount() > m_nMUserCount) m_nMUserCount = GetUserMemberCount(); } else { pMember->m_bIsDelete = FALSE; } } else { pMember = new CMBOrgMember; pMember->m_nType = nMemberType; pMember->m_strID = strMemberID; pos = m_listMember.AddTail( pMember ); if(nMemberType ==AM_VIEWITEMTYPE_USER ) { if(m_listMember.GetCount() > m_nMUserCount) m_nMUserCount = GetUserMemberCount(); } } pMember->m_strName = strName; pMember->m_nSortLevel = nLevel; m_bHasSub = true; return pos; } /*void CMBOrgGroup::AddTreeItem(void *pTree, CObject *pTreeItem) { POSITION pos; CUserTreeInfo *pTreeInfo; BOOL bFlag = FALSE; if(pTree == NULL || pTreeItem == NULL ) return; for ( pos = m_listTreeInfo.GetHeadPosition(); pos; ) { pTreeInfo = (CUserTreeInfo*)m_listTreeInfo.GetNext( pos ); if ( pTreeInfo ) { if(pTreeInfo->m_pTree == pTree) { pTreeInfo->m_listTreeItem.AddTail(pTreeItem); bFlag = TRUE; break; } } } if(bFlag) return; pTreeInfo = new CUserTreeInfo; pTreeInfo->m_pTree = pTree; pTreeInfo->m_listTreeItem.AddTail(pTreeItem); m_listTreeInfo.AddTail(pTreeInfo); } void CMBOrgGroup::RemoveTreeItem(void *pTree, CObject *pTreeItem) { POSITION pos; POSITION pos2; POSITION posOld; CUserTreeInfo *pTreeInfo = NULL; BOOL bFlag = FALSE; CObject *pObj = NULL; if(pTree == NULL || pTreeItem == NULL ) return; for ( pos = m_listTreeInfo.GetHeadPosition(); pos; ) { pTreeInfo = (CUserTreeInfo*)m_listTreeInfo.GetNext( pos ); if ( pTreeInfo ) { if(pTreeInfo->m_pTree == pTree) { for ( pos2 = pTreeInfo->m_listTreeItem.GetHeadPosition(); pos2; ) { posOld = pos2; pObj = (CObject*)pTreeInfo->m_listTreeItem.GetNext( pos2 ); if ( pObj == pTreeItem) { pTreeInfo->m_listTreeItem.RemoveAt(posOld); break; } } } } } } */ // CMBOrgGroup member functions