// MBOrgView.cpp : implementation file // #include "stdafx.h" #include "mborg.h" #include "MBOrgView.h" // CMBOrgView IMPLEMENT_DYNAMIC(CMBOrgView, CObject) CMBOrgView::CMBOrgView() { m_strName = _T(""); m_strSName = _T(""); m_strID = _T(""); m_bIsLoaded = FALSE; m_nLevel = 10000; m_strGener = _T(""); m_nMemOrgs = 0; m_nMemUsers = 0; m_bHasSub = FALSE; m_bIsLoadedUserSuccess = true; m_arParentMember.RemoveAll(); } CMBOrgView::~CMBOrgView() { DetachList( ); } // CMBOrgView message handlers void CMBOrgView::operator = ( const CMBOrgView &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_bIsLoadedUserSuccess= Item.m_bIsLoadedUserSuccess; m_bIsLoaded = Item.m_bIsLoaded; m_strGener = Item.m_strGener; m_nLevel = Item.m_nLevel; m_bHasSub = Item.m_bHasSub; m_nMemOrgs = Item.m_nMemOrgs; m_nMemUsers = Item.m_nMemUsers; m_arParentMember.RemoveAll(); m_arParentMember.Copy(Item.m_arParentMember); // Copy Member List DetachList( ); for ( pos = Item.m_listMember.GetHeadPosition(); pos; ) { pMember = (CMBOrgMember *)Item.m_listMember.GetNext( pos ); pNewMember = new CMBOrgMember; *pNewMember = *pMember; m_listMember.AddTail( pNewMember ); } } ///////////////////////////////////////////////////////////////////////////// // CMBOrgView message handlers void CMBOrgView::DetachList( ) { POSITION pos; CMBOrgMember *pMember = NULL; for ( pos = m_listMember.GetHeadPosition(); pos; ) { pMember = (CMBOrgMember *)m_listMember.GetNext( pos ); if ( pMember ) { delete pMember; pMember = NULL; } } m_listMember.RemoveAll(); } POSITION CMBOrgView::FindMember( AMVIEWITEMTYPE nType, CString strMemberID ) { POSITION pos; 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; } CString CMBOrgView::GetItemMember( AMVIEWITEMTYPE nType ) { POSITION pos; CMBOrgMember *pMember = NULL; CString strNames; 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; } void CMBOrgView::RemoveSubView( CString strViewID ) { POSITION pos, posOld; CMBOrgMember *pMember = NULL; CString strNames; for ( pos = m_listMember.GetHeadPosition(); pos; pos ) { posOld = pos; pMember = (CMBOrgMember *)m_listMember.GetNext( pos ); if ( pMember->m_nType == AM_VIEWITEMTYPE_VIEW && pMember->m_strID.CompareNoCase(strViewID) == 0 ) { m_listMember.RemoveAt( posOld ); delete pMember; break; } } } POSITION CMBOrgView::AddMember( AMVIEWITEMTYPE nMemberType, CString strMemerID, CString strName, CString strGener, int nLevel /*= 0*/ ) { POSITION pos; CMBOrgMember *pMember = NULL; if ( strMemerID.IsEmpty() || strName.IsEmpty() ) return NULL; pos = FindMember( nMemberType, strMemerID ); if ( pos ) pMember = (CMBOrgMember *)m_listMember.GetAt( pos ); else { pMember = new CMBOrgMember; pMember->m_nType = nMemberType; pMember->m_strID = strMemerID; pos = m_listMember.AddTail( pMember ); if(nMemberType ==AM_VIEWITEMTYPE_USER ) { if(m_listMember.GetCount() > m_nMemUsers) m_nMemUsers = GetUserMemberCount(); } } pMember->m_bIsDelete = FALSE; pMember->m_strName = strName; pMember->m_nSortLevel = nLevel; pMember->m_strGener = strGener; return pos; } POSITION CMBOrgView::FindUser( CString strName ) { POSITION pos, posOld; CMBOrgMember *pMember = NULL; for ( pos = m_listMember.GetHeadPosition( ); pos; ) { posOld = pos; pMember = (CMBOrgMember*)m_listMember.GetNext( pos ); if ( !pMember ) continue; if ( pMember->m_strName.CompareNoCase( strName ) == 0 ) return posOld; } return NULL; } POSITION CMBOrgView::AddUser( CString strUserName, CString strUser ) { POSITION pos; CMBOrgMember *pMember = NULL; if ( strUser.IsEmpty() ) return NULL; pos = FindUser( strUser ); if ( pos ) pMember = (CMBOrgMember *)m_listMember.GetAt( pos ); else { pMember = new CMBOrgMember; pMember->m_nType = AM_VIEWITEMTYPE_USER; pMember->m_strID = strUser; pos = m_listMember.AddTail( pMember ); if(m_listMember.GetCount() > m_nMemUsers) m_nMemUsers = GetUserMemberCount(); } pMember->m_bIsDelete = FALSE; pMember->m_strName = strUserName; pMember->m_nSortLevel = 0; return pos; } int CMBOrgView::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 CMBOrgView::GetMemberIDFromName( CString strName,AMVIEWITEMTYPE nMemberType ) { POSITION pos, posOld; CMBOrgMember *pMember = NULL; CString strID = _T(""); for ( pos = m_listMember.GetHeadPosition( ); pos; ) { posOld = pos; pMember = (CMBOrgMember*)m_listMember.GetNext( pos ); if ( !pMember ) continue; if ( pMember->m_bIsDelete ) continue; if ( pMember->m_strName.CompareNoCase( strName ) == 0 && pMember->m_nType == nMemberType) { strID = pMember->m_strID; break; } } return strID; }