// 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
|