|
|
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2002 Microsoft Corporation
//
// Module Name:
// SelNodePage.cpp
//
// Maintained By:
// David Potter (DavidP) 31-JAN-2001
// Geoffrey Pease (GPease) 12-MAY-2000
//
//////////////////////////////////////////////////////////////////////////////
#include "Pch.h"
#include "SelNodePage.h"
#include "WizardUtils.h"
#include "AdvancedDlg.h"
DEFINE_THISCLASS("CSelNodePage");
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::CSelNodePage
//
// Description:
// Constructor.
//
// Arguments:
// pccwIn - CClusCfgWizard
//
// Return Values:
// None.
//
//--
//////////////////////////////////////////////////////////////////////////////
CSelNodePage::CSelNodePage( CClusCfgWizard * pccwIn ) : m_hwnd( NULL ) , m_pccw( pccwIn ) { TraceFunc( "" ); Assert( m_pccw != NULL ); m_pccw->AddRef();
TraceFuncExit();
} //*** CSelNodePage::CSelNodePage
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::~CSelNodePage
//
// Description:
// Destructor.
//
// Arguments:
// None.
//
// Return Values:
// None.
//
//--
//////////////////////////////////////////////////////////////////////////////
CSelNodePage::~CSelNodePage( void ) { TraceFunc( "" );
if ( m_pccw != NULL ) { m_pccw->Release(); }
TraceFuncExit();
} //*** CSelNodePage::~CSelNodePage
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::OnInitDialog
//
// Description:
// Handle the WM_INITDIALOG window message.
//
// Arguments:
// hDlgIn
//
// Return Values:
// FALSE - Didn't set the focus.
//
//--
//////////////////////////////////////////////////////////////////////////////
LRESULT CSelNodePage::OnInitDialog( HWND hDlgIn ) { TraceFunc( "" );
LRESULT lr = FALSE; // Didn't set the focus.
//
// (jfranco, bug #462673) Limit node name length to ADJUSTED_DNS_MAX_NAME_LENGTH.
// According to MSDN, EM_(SET)LIMITTEXT does not return a value, so ignore what SendDlgItemMessage returns
//
SendDlgItemMessage( m_hwnd, IDC_SELNODE_E_COMPUTERNAME, EM_SETLIMITTEXT, ADJUSTED_DNS_MAX_NAME_LENGTH, 0 );
//
// Call the base class function.
// This must be called before any other base class methods are called.
//
CSelNodesPageCommon::OnInitDialog( hDlgIn, m_pccw );
RETURN( lr );
} //*** CSelNodePage::OnInitDialog
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::OnCommand
//
// Description:
//
// Arguments:
// idNotificationIn
// idControlIn
// hwndSenderIn
//
// Return Values:
// TRUE
// FALSE
//
//--
//////////////////////////////////////////////////////////////////////////////
LRESULT CSelNodePage::OnCommand( UINT idNotificationIn, UINT idControlIn, HWND hwndSenderIn ) { TraceFunc( "" );
LRESULT lr = FALSE;
switch ( idControlIn ) { case IDC_SELNODE_E_COMPUTERNAME: if ( idNotificationIn == EN_CHANGE ) { THR( HrUpdateWizardButtons() ); lr = TRUE; } break;
case IDC_SELNODE_PB_BROWSE: if ( idNotificationIn == BN_CLICKED ) { //
// TODO: 26-JUN-2000 GalenB
//
// Need to set lr properly.
//
THR( HrBrowse( false /* fMultipleNodesIn */ ) ); lr = TRUE; } break;
case IDC_SELNODE_PB_ADVANCED: if ( idNotificationIn == BN_CLICKED ) { HRESULT hr;
hr = STHR( CAdvancedDlg::S_HrDisplayModalDialog( m_hwnd, m_pccw ) ); if ( hr == S_OK ) { OnNotifySetActive(); } // if:
lr = TRUE; } // if:
break;
} // switch: idControlIn
RETURN( lr );
} //*** CSelNodePage::OnCommand
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::HrUpdateWizardButtons
//
// Description:
//
// Arguments:
// None.
//
// Return Values:
// S_OK
//
//--
//////////////////////////////////////////////////////////////////////////////
HRESULT CSelNodePage::HrUpdateWizardButtons( void ) {
TraceFunc( "" );
HRESULT hr = S_OK; BSTR bstrComputerName = NULL; DWORD mEnabledButtons = PSWIZB_BACK;
hr = STHR( HrGetTrimmedText( GetDlgItem( m_hwnd, IDC_SELNODE_E_COMPUTERNAME ), &bstrComputerName ) );
if ( hr == S_OK ) { mEnabledButtons |= PSWIZB_NEXT; }
PropSheet_SetWizButtons( GetParent( m_hwnd ), mEnabledButtons );
TraceSysFreeString( bstrComputerName );
HRETURN( hr ); } //*** CSelNodePage::HrUpdateWizardButtons
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::OnNotifySetActive
//
// Description:
//
// Arguments:
// None.
//
// Return Values:
// TRUE
//
//--
//////////////////////////////////////////////////////////////////////////////
LRESULT CSelNodePage::OnNotifySetActive( void ) { TraceFunc( "" );
LRESULT lr = TRUE;
STHR( HrUpdateWizardButtons() );
//
// TODO: gpease 23-MAY-2000
// Figure out: If the user clicks back and changes the computer
// name, how do we update the middle tier?
//
RETURN( lr );
} //*** CSelNodePage::OnNotifySetActive
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::OnNotifyQueryCancel
//
// Description:
//
// Arguments:
// None.
//
// Return Values:
// TRUE
//
//--
//////////////////////////////////////////////////////////////////////////////
LRESULT CSelNodePage::OnNotifyQueryCancel( void ) { TraceFunc( "" );
LRESULT lr = TRUE;
int iRet;
iRet = MessageBoxFromStrings( m_hwnd, IDS_QUERY_CANCEL_TITLE, IDS_QUERY_CANCEL_TEXT, MB_YESNO );
if ( iRet == IDNO ) { SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, -1 ); }
RETURN( lr );
} //*** CSelNodePage::OnNotifyQueryCancel
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::OnNotifyWizNext
//
// Description:
//
// Arguments:
// None.
//
// Return Values:
// TRUE
// Other LRESULT values.
//
//--
//////////////////////////////////////////////////////////////////////////////
LRESULT CSelNodePage::OnNotifyWizNext( void ) { TraceFunc( "" );
HRESULT hr = S_OK; int idcFocus = 0; BSTR bstrComputerName = NULL; LRESULT lr = TRUE;
// Get machine name from edit control.
hr = THR( HrGetTrimmedText( GetDlgItem( m_hwnd, IDC_SELNODE_E_COMPUTERNAME ), &bstrComputerName ) ); if ( hr != S_OK ) { goto Error; }
// Check the machine name.
hr = THR( HrValidateFQNPrefix( bstrComputerName ) ); if ( FAILED( hr ) ) { THR( HrShowInvalidLabelPrompt( m_hwnd, bstrComputerName, hr ) ); idcFocus = IDC_SELNODE_E_COMPUTERNAME; goto Error; }
//
// Free old list (if any)
//
hr = THR( m_pccw->ClearComputerList() ); if ( FAILED( hr ) ) { goto Error; }
// Make this machine the sole entry in the list.
hr = THR( m_pccw->HrAddNode( bstrComputerName, true ) ); if ( FAILED( hr ) ) { goto Error; }
goto Cleanup;
Cleanup:
TraceSysFreeString( bstrComputerName );
RETURN( lr );
Error: if ( idcFocus != 0 ) { SetFocus( GetDlgItem( m_hwnd, idcFocus ) ); } // Don't go to the next page.
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, -1 ); goto Cleanup;
} //*** CSelNodePage::OnNotifyWizNext()
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodePage::OnNotify
//
// Description:
//
// Arguments:
// idCtrlIn
// pnmhdrIn
//
// Return Values:
// TRUE
// Other LRESULT values
//
//--
//////////////////////////////////////////////////////////////////////////////
LRESULT CSelNodePage::OnNotify( WPARAM idCtrlIn, LPNMHDR pnmhdrIn ) { TraceFunc( "" );
LRESULT lr = TRUE;
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, 0 );
switch( pnmhdrIn->code ) { case PSN_SETACTIVE: lr = OnNotifySetActive(); break;
case PSN_WIZNEXT: lr = OnNotifyWizNext(); break;
case PSN_QUERYCANCEL: lr = OnNotifyQueryCancel(); break; } // switch: notify code
RETURN( lr );
} //*** CSelNodePage::OnNotify
//////////////////////////////////////////////////////////////////////////////
//++
//
// static
// CSelNodePage::S_DlgProc
//
// Description:
// Dialog proc for this page.
//
// Arguments:
// hDlgIn
// MsgIn
// wParam
// lParam
//
// Return Values:
// FALSE
// Other LRESULT values
//
//--
//////////////////////////////////////////////////////////////////////////////
INT_PTR CALLBACK CSelNodePage::S_DlgProc( HWND hDlgIn, UINT MsgIn, WPARAM wParam, LPARAM lParam ) { // Don't do TraceFunc because every mouse movement
// will cause this function to be called.
WndMsg( hDlgIn, MsgIn, wParam, lParam );
LRESULT lr = FALSE; CSelNodePage * pPage = reinterpret_cast< CSelNodePage * >( GetWindowLongPtr( hDlgIn, GWLP_USERDATA ) );
if ( MsgIn == WM_INITDIALOG ) { Assert( lParam != NULL );
PROPSHEETPAGE * ppage = reinterpret_cast< PROPSHEETPAGE * >( lParam ); SetWindowLongPtr( hDlgIn, GWLP_USERDATA, (LPARAM) ppage->lParam ); pPage = reinterpret_cast< CSelNodePage * >( ppage->lParam ); pPage->m_hwnd = hDlgIn; }
if ( pPage != NULL ) { Assert( hDlgIn == pPage->m_hwnd );
switch( MsgIn ) { case WM_INITDIALOG: lr = pPage->OnInitDialog( hDlgIn ); break;
case WM_NOTIFY: lr = pPage->OnNotify( wParam, reinterpret_cast< LPNMHDR >( lParam ) ); break;
case WM_COMMAND: lr= pPage->OnCommand( HIWORD( wParam ), LOWORD( wParam ), (HWND) lParam ); break;
// no default clause needed
} // switch: message
} // if: there is a page associated with the window
return lr;
} //*** CSelNodePage::S_DlgProc
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodesPage::OnProcessedNodeWithBadDomain
//
// Description:
//
// Arguments:
// pwcszNodeNameIn
//
// Return Values:
// None.
//
//--
//////////////////////////////////////////////////////////////////////////////
void CSelNodePage::OnProcessedNodeWithBadDomain( PCWSTR pwcszNodeNameIn ) { SetDlgItemText( m_hwnd, IDC_SELNODE_E_COMPUTERNAME, pwcszNodeNameIn ); } //*** CSelNodePage::OnProcessedNodeWithBadDomain
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodesPage::OnProcessedValidNode
//
// Description:
//
// Arguments:
// pwcszNodeNameIn
//
// Return Values:
// None.
//
//--
//////////////////////////////////////////////////////////////////////////////
void CSelNodePage::OnProcessedValidNode( PCWSTR pwcszNodeNameIn ) { SetDlgItemText( m_hwnd, IDC_SELNODE_E_COMPUTERNAME, pwcszNodeNameIn ); } //*** CSelNodePage::OnProcessedValidNode
//////////////////////////////////////////////////////////////////////////////
//++
//
// CSelNodesPage::HrSetDefaultNode
//
// Description:
//
// Arguments:
// pwcszNodeNameIn
//
// Return Values:
// S_OK.
//
//--
//////////////////////////////////////////////////////////////////////////////
HRESULT CSelNodePage::HrSetDefaultNode( PCWSTR pwcszNodeNameIn ) { SetDlgItemText( m_hwnd, IDC_SELNODE_E_COMPUTERNAME, pwcszNodeNameIn ); return S_OK; } //*** CSelNodePage::HrSetDefaultNode
|