|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-1997 Microsoft Corporation
//
// Module Name:
// OpenClus.cpp
//
// Abstract:
// Implementation of the COpenClusterDialog class.
//
// Author:
// David Potter (davidp) May 1, 1996
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CluAdmin.h"
#include "OpenClus.h"
#include "ClusMru.h"
#include "DDxDDv.h"
#include "HelpData.h"
#include <lmcons.h>
#include <lmserver.h>
#include <lmapibuf.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// COpenClusterDialog dialog
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Message Maps
BEGIN_MESSAGE_MAP(COpenClusterDialog, CBaseDialog) //{{AFX_MSG_MAP(COpenClusterDialog)
ON_BN_CLICKED(IDC_OCD_BROWSE, OnBrowse) ON_CBN_SELCHANGE(IDC_OCD_ACTION, OnSelChangeAction) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//++
//
// COpenClusterDialog::COpenClusterDialog
//
// Routine Description:
// Constructor.
//
// Arguments:
// pParentWnd [IN OUT] Parent window for the dialog.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
COpenClusterDialog::COpenClusterDialog(CWnd * pParentWnd /*=NULL*/) : CBaseDialog(IDD, g_aHelpIDs_IDD_OPEN_CLUSTER, pParentWnd) { CClusterAdminApp * papp = GetClusterAdminApp(); CRecentClusterList * prcl = papp->PrclRecentClusterList();
//{{AFX_DATA_INIT(COpenClusterDialog)
m_strName = _T(""); //}}AFX_DATA_INIT
m_nAction = -1;
// If there are no items in the MRU list, set the default action
// to Create New Cluster. Otherwise, set the default action to
// Open Connection.
if ( prcl->GetSize() == 0 ) { m_nAction = OPEN_CLUSTER_DLG_CREATE_NEW_CLUSTER; } // if: nothing in the MRU list
else { m_nAction = OPEN_CLUSTER_DLG_OPEN_CONNECTION; } // else: something in the MRU list
} //*** COpenClusterDialog::COpenClusterDialog()
/////////////////////////////////////////////////////////////////////////////
//++
//
// COpenClusterDialog::DoDataExchange
//
// Routine Description:
// Do data exchange between the dialog and the class.
//
// Arguments:
// pDX [IN OUT] Data exchange object
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void COpenClusterDialog::DoDataExchange(CDataExchange * pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COpenClusterDialog)
DDX_Control(pDX, IDC_OCD_NAME_LABEL, m_staticName); DDX_Control(pDX, IDC_OCD_BROWSE, m_pbBrowse); DDX_Control(pDX, IDC_OCD_ACTION, m_cboxAction); DDX_Control(pDX, IDOK, m_pbOK); DDX_Control(pDX, IDC_OCD_NAME, m_cboxName); DDX_Text(pDX, IDC_OCD_NAME, m_strName); //}}AFX_DATA_MAP
if ( pDX->m_bSaveAndValidate ) { m_nAction = m_cboxAction.GetCurSel(); if ( m_nAction != OPEN_CLUSTER_DLG_CREATE_NEW_CLUSTER ) { DDV_RequiredText(pDX, IDC_OCD_NAME, IDC_OCD_NAME_LABEL, m_strName); DDV_MaxChars(pDX, m_strName, MAX_PATH - 1); } // if: not creating a new cluster
} // if: saving data
else { m_cboxAction.SetCurSel( m_nAction ); OnSelChangeAction(); } // else: setting data
} //*** COpenClusterDialog::DoDataExchange
/////////////////////////////////////////////////////////////////////////////
//++
//
// COpenClusterDialog::OnInitDialog
//
// Routine Description:
// Handler for the WM_INITDIALOG message.
//
// Arguments:
// None.
//
// Return Value:
// TRUE Focus not set yet.
// FALSE Focus already set.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL COpenClusterDialog::OnInitDialog(void) { CClusterAdminApp * papp = GetClusterAdminApp(); CRecentClusterList * prcl = papp->PrclRecentClusterList(); int iMRU; CString strName; CWaitCursor wc;
// Call the base class method to get our control mappings.
CBaseDialog::OnInitDialog();
// Add the items to the Action combobox.
strName.LoadString( IDS_OCD_CREATE_CLUSTER ); m_cboxAction.AddString( strName ); strName.LoadString( IDS_OCD_ADD_NODES ); m_cboxAction.AddString( strName ); strName.LoadString( IDS_OCD_OPEN_CONNECTION ); m_cboxAction.AddString( strName );
// Set the proper selection in the Action combobox.
m_cboxAction.SetCurSel( m_nAction ); OnSelChangeAction();
// Set limits on the combobox edit control.
m_cboxName.LimitText(MAX_PATH - 1);
// Loop through the MRU items and add each one to the list in order.
for (iMRU = 0 ; iMRU < prcl->GetSize() ; iMRU++) { if (!prcl->GetDisplayName(strName, iMRU, NULL, 0)) break; try { m_cboxName.InsertString(iMRU, strName); if ((iMRU == 0) && (m_strName.GetLength() == 0)) m_strName = strName; } // try
catch (CException * pe) { pe->Delete(); } // catch: CException
} // for: each MRU item
// Select an item in the list.
if (m_strName.GetLength() > 0) { int istr;
istr = m_cboxName.FindStringExact(-1, m_strName); if (istr == CB_ERR) m_cboxName.SetWindowText(m_strName); else m_cboxName.SetCurSel(istr); } // if: name already specified
else if (prcl->GetDisplayName(strName, 0, NULL, 0)) m_cboxName.SelectString(-1, strName);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
} //*** COpenClusterDialog::OnInitDialog()
/////////////////////////////////////////////////////////////////////////////
//++
//
// COpenClusterDialog::OnBrowse
//
// Routine Description:
// Handler for the BN_CLICKED message on the Browse button.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void COpenClusterDialog::OnBrowse(void) { ID id; int istr; CBrowseClusters dlg(this);
id = (ID)dlg.DoModal(); if (id == IDOK) { istr = m_cboxName.FindStringExact(-1, dlg.m_strCluster); if (istr == CB_ERR) m_cboxName.SetWindowText(dlg.m_strCluster); else m_cboxName.SetCurSel(istr); } // if: user selected a cluster name
} //*** COpenClusterDialog::OnBrowse()
/////////////////////////////////////////////////////////////////////////////
//++
//
// COpenClusterDialog::OnSelChangeAction
//
// Routine Description:
// Handler for the CBN_SELCHANGE message on the Action combobox.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void COpenClusterDialog::OnSelChangeAction( void ) { if ( m_cboxAction.GetCurSel() == OPEN_CLUSTER_DLG_CREATE_NEW_CLUSTER ) { m_staticName.EnableWindow( FALSE ); m_cboxName.EnableWindow( FALSE ); m_pbBrowse.EnableWindow( FALSE ); } // if: create cluster option selected
else { m_staticName.EnableWindow( TRUE ); m_cboxName.EnableWindow( TRUE ); m_pbBrowse.EnableWindow( TRUE ); } // else: create cluster option NOT selected
} //*** COpenClusterDialog::OnSelChangeAction()
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
// CBrowseClusters dialog
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Message Maps
BEGIN_MESSAGE_MAP(CBrowseClusters, CBaseDialog) //{{AFX_MSG_MAP(CBrowseClusters)
ON_EN_CHANGE(IDC_BC_CLUSTER, OnChangeCluster) ON_LBN_SELCHANGE(IDC_BC_LIST, OnSelChangeList) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBrowseClusters::CBrowseClusters
//
// Routine Description:
// Constructor.
//
// Arguments:
// pParentWnd [IN OUT] Parent window for the dialog.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
CBrowseClusters::CBrowseClusters(CWnd * pParent /*=NULL*/) : CBaseDialog(IDD, g_aHelpIDs_IDD_BROWSE_CLUSTERS, pParent) { //{{AFX_DATA_INIT(CBrowseClusters)
m_strCluster = _T(""); //}}AFX_DATA_INIT
} //*** CBrowseClusters::CBrowseClusters()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBrowseClusters::DoDataExchange
//
// Routine Description:
// Do data exchange between the dialog and the class.
//
// Arguments:
// pDX [IN OUT] Data exchange object
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CBrowseClusters::DoDataExchange(CDataExchange * pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBrowseClusters)
DDX_Control(pDX, IDOK, m_pbOK); DDX_Control(pDX, IDC_BC_LIST, m_lbList); DDX_Control(pDX, IDC_BC_CLUSTER, m_editCluster); DDX_Text(pDX, IDC_BC_CLUSTER, m_strCluster); //}}AFX_DATA_MAP
} //*** CBrowseClusters::DoDataExchange()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBrowseClusters::OnInitDialog
//
// Routine Description:
// Handler for the WM_INITDIALOG message.
//
// Arguments:
// None.
//
// Return Value:
// TRUE Focus not set yet.
// FALSE Focus already set.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL CBrowseClusters::OnInitDialog(void) { CWaitCursor wc;
// Call the base class method.
CBaseDialog::OnInitDialog();
// Collect list of clusters from the network.
{ DWORD dwStatus; DWORD nEntriesRead; DWORD nTotalEntries; DWORD iEntry; SERVER_INFO_100 * pServerInfo = NULL; SERVER_INFO_100 * pCurServerInfo;
dwStatus = NetServerEnum( NULL, // servername
100, // level
(LPBYTE *) &pServerInfo, 1000000, // prefmaxlen
&nEntriesRead, // entriesread
&nTotalEntries, // totalentries
SV_TYPE_CLUSTER_NT, // servertype
NULL, // domain
NULL // resume_handle
); if (dwStatus == ERROR_SUCCESS) { ASSERT(pServerInfo != NULL); pCurServerInfo = pServerInfo; for (iEntry = 0 ; iEntry < nTotalEntries ; iEntry++, pCurServerInfo++) { if (m_lbList.FindStringExact(-1, pCurServerInfo->sv100_name) == LB_ERR) { try { m_lbList.AddString(pCurServerInfo->sv100_name); } // try
catch (CException * pe) { pe->Delete(); } // catch: CException
} // if: cluster not in list yet
} // for: each entry in the array
} // if: successfully retrieved list of clusters
NetApiBufferFree(pServerInfo); } // Collect list of clusters from the network
// Enable/disable controls.
OnChangeCluster();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
} //*** CBrowseClusters::OnInitDialog()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBrowseClusters::OnChangeCluster
//
// Routine Description:
// Handler for the EN_CHANGE message on the Cluster edit control.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CBrowseClusters::OnChangeCluster(void) { BOOL bEnable;
bEnable = m_editCluster.GetWindowTextLength() != 0; m_pbOK.EnableWindow(bEnable);
} //*** CBrowseClusters::OnChangeCluster()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CBrowseClusters::OnSelChangeList
//
// Routine Description:
// Handler for the LBN_SELCHANGE message on the list box.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CBrowseClusters::OnSelChangeList(void) { int istr;
istr = m_lbList.GetCurSel(); if (istr != LB_ERR) { CString strText;
m_lbList.GetText(istr, strText); m_editCluster.SetWindowText(strText); } // if: there is a selection
} //*** CBrowseClusters::OnSelChangeList()
|