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