458 lines
10 KiB
C++
458 lines
10 KiB
C++
// colldlg.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "viewex.h"
|
||
#include "colldlg.h"
|
||
#include "delgrpit.h"
|
||
#include "grpcrtit.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CCollectionDialog dialog
|
||
|
||
|
||
CCollectionDialog::CCollectionDialog(CWnd* pParent /*=NULL*/)
|
||
: CDialog(CCollectionDialog::IDD, pParent)
|
||
{
|
||
//{{AFX_DATA_INIT(CCollectionDialog)
|
||
//}}AFX_DATA_INIT
|
||
|
||
m_pCollection = NULL;
|
||
m_pMembers = NULL;
|
||
m_pGroup = NULL;
|
||
m_nSelectedItem = -1;
|
||
}
|
||
|
||
CCollectionDialog::~CCollectionDialog( )
|
||
{
|
||
m_Paths.RemoveAll( );
|
||
m_Types.RemoveAll( );
|
||
m_Names.RemoveAll( );
|
||
if( NULL != m_pGroup && NULL != m_pMembers )
|
||
{
|
||
m_pMembers->Release( );
|
||
}
|
||
}
|
||
|
||
|
||
void CCollectionDialog::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialog::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(CCollectionDialog)
|
||
DDX_Control(pDX, IDC_ITEMTYPE, m_strItemType);
|
||
DDX_Control(pDX, IDC_ITEMOLEDSPATH, m_strItemOleDsPath);
|
||
DDX_Control(pDX, IDC_COLLECTONITEMSLIST, m_ItemsList);
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(CCollectionDialog, CDialog)
|
||
//{{AFX_MSG_MAP(CCollectionDialog)
|
||
ON_LBN_SELCHANGE(IDC_COLLECTONITEMSLIST, OnSelchangeItemCollection)
|
||
ON_BN_CLICKED(IDC_ADD, OnAdd)
|
||
ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
|
||
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CCollectionDialog message handlers
|
||
|
||
|
||
/***********************************************************
|
||
Function:
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::SetCollectionInterface( IADsCollection* pICollection )
|
||
{
|
||
m_pCollection = pICollection;
|
||
|
||
BuildStrings( );
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function: CCollectionDialog::SetGroup
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::SetGroup( IADsGroup* pGroup )
|
||
{
|
||
HRESULT hResult;
|
||
|
||
ASSERT( NULL == m_pMembers );
|
||
|
||
hResult = pGroup->Members( &m_pMembers );
|
||
BuildStrings( );
|
||
|
||
m_pGroup = pGroup;
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function:
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::SetMembersInterface( IADsMembers* pIMembers )
|
||
{
|
||
m_pMembers = pIMembers;
|
||
|
||
BuildStrings( );
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function:
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::DisplayActiveItemData( )
|
||
{
|
||
if( m_Types.GetSize( ) )
|
||
{
|
||
m_strItemType.SetWindowText( m_Types[ m_nSelectedItem ] );
|
||
m_strItemOleDsPath.SetWindowText( m_Paths[ m_nSelectedItem ] );
|
||
}
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function:
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::BuildStrings( )
|
||
{
|
||
IUnknown* pIEnum = NULL;
|
||
IEnumVARIANT* pIEnumVar = NULL;
|
||
HRESULT hResult;
|
||
VARIANT var;
|
||
IADs* pIOleDs = NULL;
|
||
BSTR bstrPath;
|
||
BSTR bstrName;
|
||
BSTR bstrClass;
|
||
ULONG ulFetch;
|
||
TCHAR szTemp[ 1024 ];
|
||
|
||
m_Paths.RemoveAll( );
|
||
m_Names.RemoveAll( );
|
||
m_Types.RemoveAll( );
|
||
|
||
while( TRUE )
|
||
{
|
||
if( NULL != m_pCollection )
|
||
{
|
||
hResult = m_pCollection->get__NewEnum( &pIEnum );
|
||
ASSERT( SUCCEEDED( hResult ) );
|
||
if( FAILED( hResult ) )
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
hResult = m_pMembers->get__NewEnum( &pIEnum );
|
||
ASSERT( SUCCEEDED( hResult ) );
|
||
if( FAILED( hResult ) )
|
||
break;
|
||
}
|
||
|
||
hResult = pIEnum->QueryInterface( IID_IEnumVARIANT,
|
||
(void**)&pIEnumVar );
|
||
|
||
ASSERT( SUCCEEDED( hResult ) );
|
||
if( FAILED( hResult ) )
|
||
break;
|
||
|
||
VariantInit( &var );
|
||
|
||
hResult = pIEnumVar->Next( 1, &var, &ulFetch );
|
||
while( ulFetch )
|
||
{
|
||
hResult = V_DISPATCH( &var )->QueryInterface( IID_IADs,
|
||
(void**)&pIOleDs );
|
||
VariantClear( &var );
|
||
|
||
ASSERT( SUCCEEDED( hResult ) );
|
||
|
||
|
||
bstrPath = NULL;
|
||
bstrName = NULL;
|
||
bstrClass = NULL;
|
||
|
||
hResult = pIOleDs->get_ADsPath( &bstrPath );
|
||
ASSERT( SUCCEEDED( hResult ) );
|
||
|
||
hResult = pIOleDs->get_Name( &bstrName );
|
||
ASSERT( SUCCEEDED( hResult ) );
|
||
|
||
hResult = pIOleDs->get_Class( &bstrClass );
|
||
ASSERT( SUCCEEDED( hResult ) );
|
||
|
||
_tcscpy( szTemp, _T("NA") );
|
||
if( bstrName )
|
||
{
|
||
_tcscpy( szTemp, _T("") );
|
||
StringCat( szTemp, bstrName );
|
||
}
|
||
m_Names.Add( szTemp );
|
||
|
||
_tcscpy( szTemp, _T("NA") );
|
||
if( bstrClass )
|
||
{
|
||
_tcscpy( szTemp, _T("") );
|
||
StringCat( szTemp, bstrClass );
|
||
}
|
||
m_Types.Add( szTemp );
|
||
|
||
_tcscpy( szTemp, _T("NA") );
|
||
if( bstrPath )
|
||
{
|
||
_tcscpy( szTemp, _T("") );
|
||
StringCat( szTemp, bstrPath );
|
||
}
|
||
m_Paths.Add( szTemp );
|
||
|
||
pIOleDs->Release( );
|
||
SysFreeString( bstrPath );
|
||
bstrPath = NULL;
|
||
|
||
SysFreeString( bstrName );
|
||
bstrName = NULL;
|
||
|
||
SysFreeString( bstrClass );
|
||
bstrClass = NULL;
|
||
|
||
|
||
hResult = pIEnumVar->Next( 1, &var, &ulFetch );
|
||
}
|
||
pIEnumVar->Release( );
|
||
pIEnum->Release( );
|
||
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function:
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
BOOL CCollectionDialog::OnInitDialog()
|
||
{
|
||
CDialog::OnInitDialog();
|
||
|
||
// TODO: Add extra initialization here
|
||
|
||
if( NULL == m_pGroup && NULL == m_pCollection )
|
||
{
|
||
GetDlgItem( IDC_ADD )->EnableWindow( FALSE );
|
||
GetDlgItem( IDC_REMOVE )->EnableWindow( FALSE );
|
||
}
|
||
|
||
if( m_pCollection != NULL || m_pMembers != NULL )
|
||
{
|
||
int nItems, nIdx;
|
||
|
||
nItems = (int)m_Paths.GetSize( );
|
||
for( nIdx = 0; nIdx < nItems ; nIdx++ )
|
||
{
|
||
m_ItemsList.AddString( m_Names[ nIdx ] );
|
||
}
|
||
m_nSelectedItem = 0;
|
||
m_ItemsList.SetCurSel( 0 );
|
||
DisplayActiveItemData( );
|
||
}
|
||
|
||
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function:
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::OnSelchangeItemCollection()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
int nSelected;
|
||
|
||
nSelected = m_ItemsList.GetCurSel( );
|
||
if( nSelected != m_nSelectedItem )
|
||
{
|
||
m_nSelectedItem = nSelected;
|
||
DisplayActiveItemData( );
|
||
}
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function:
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::OnAdd()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
CGroupCreateItem* m_pAddItem;
|
||
|
||
if( NULL == m_pGroup )
|
||
return;
|
||
|
||
|
||
m_pAddItem = new CGroupCreateItem;
|
||
|
||
if( IDOK == m_pAddItem->DoModal( ) )
|
||
{
|
||
BSTR bstrName;
|
||
HRESULT hResult;
|
||
|
||
bstrName = AllocBSTR( m_pAddItem->m_strNewItemName.GetBuffer( 512 ) );
|
||
hResult = m_pGroup->Add( bstrName );
|
||
SysFreeString( bstrName );
|
||
|
||
MessageBox( (LPCTSTR)OleDsGetErrorText( hResult ), _T("Add") );
|
||
|
||
OnRefresh( );
|
||
|
||
if( SUCCEEDED( hResult ) )
|
||
{
|
||
m_ItemsList.SelectString( 0, m_pAddItem->m_strNewItemName );
|
||
}
|
||
}
|
||
|
||
delete m_pAddItem;
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function:
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::OnRefresh()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
int nItems, nIdx;
|
||
|
||
|
||
if( NULL == m_pGroup )
|
||
return;
|
||
|
||
if( NULL != m_pMembers )
|
||
{
|
||
m_pMembers->Release( );
|
||
m_pMembers = NULL;
|
||
}
|
||
|
||
m_pGroup->GetInfo( );
|
||
|
||
SetGroup( m_pGroup );
|
||
|
||
nItems = (int)m_Paths.GetSize( );
|
||
|
||
m_ItemsList.ResetContent( );
|
||
|
||
for( nIdx = 0; nIdx < nItems ; nIdx++ )
|
||
{
|
||
m_ItemsList.AddString( m_Names[ nIdx ] );
|
||
}
|
||
|
||
m_nSelectedItem = 0;
|
||
m_ItemsList.SetCurSel( 0 );
|
||
DisplayActiveItemData( );
|
||
}
|
||
|
||
|
||
/***********************************************************
|
||
Function: CCollectionDialog::OnRemove
|
||
Arguments:
|
||
Return:
|
||
Purpose:
|
||
Author(s):
|
||
Revision:
|
||
Date:
|
||
***********************************************************/
|
||
void CCollectionDialog::OnRemove()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
int nSelect;
|
||
CDeleteGroupItem* m_pDeleteItem;
|
||
|
||
if( NULL == m_pGroup )
|
||
return;
|
||
|
||
nSelect = m_ItemsList.GetCurSel( );
|
||
|
||
if( LB_ERR == nSelect )
|
||
return;
|
||
|
||
m_pDeleteItem = new CDeleteGroupItem;
|
||
|
||
m_pDeleteItem->m_strItemName = m_Paths[ nSelect ];
|
||
//CString m_strParent;
|
||
m_pDeleteItem->m_strItemType = m_Types[ nSelect ];
|
||
|
||
if( IDOK == m_pDeleteItem->DoModal( ) )
|
||
{
|
||
BSTR bstrName;
|
||
HRESULT hResult;
|
||
|
||
bstrName = AllocBSTR( m_pDeleteItem->m_strItemName.GetBuffer( 512 ) );
|
||
hResult = m_pGroup->Remove( bstrName );
|
||
SysFreeString( bstrName );
|
||
|
||
MessageBox( (LPCTSTR)OleDsGetErrorText( hResult ), _T("Remove") );
|
||
|
||
OnRefresh( );
|
||
}
|
||
|
||
delete m_pDeleteItem;
|
||
}
|
||
|