/*++ Module Name: AddToDfs.cpp Abstract: This module contains the Implementation of CAddRep. This class displays the Add Replica Dialog,which is used to add new Replica. */ #include "stdafx.h" #include "AddRep.h" #include "utils.h" #include #include #include "dfshelp.h" ///////////////////////////////////////////////////////////////////////////// // CAddRep CAddRep::CAddRep() : m_RepType(REPLICATION_UNASSIGNED), m_DfsType(DFS_TYPE_UNASSIGNED) { } CAddRep::~CAddRep() { } HRESULT CAddRep::put_EntryPath ( BSTR i_bstrEntryPath ) { /*++ Routine Description: Sets the path of the Junction point of this replica This is used to display in the edit text. Arguments: i_bstrEntryPath - The junction point entry path. */ RETURN_INVALIDARG_IF_NULL(i_bstrEntryPath); m_bstrEntryPath = i_bstrEntryPath; RETURN_OUTOFMEMORY_IF_NULL((BSTR)m_bstrEntryPath); return S_OK; } HRESULT CAddRep::get_Server ( BSTR *o_pbstrServer ) { /*++ Routine Description: Returns the server component of the share path. Arguments: o_pbstrServer - The server name is returned here. */ GET_BSTR(m_bstrServer, o_pbstrServer); } HRESULT CAddRep::get_Share ( BSTR *o_pbstrShare ) { /*++ Routine Description: Returns the share component of the share path. Arguments: o_pbstrShare - The share name is returned here. */ GET_BSTR(m_bstrShare, o_pbstrShare); } HRESULT CAddRep::get_NetPath ( BSTR *o_pbstrNetPath ) { /*++ Routine Description: Returns the complete share path typed in by the user in the edit box. Arguments: o_pbstrNetPath - The share path is returned here. */ GET_BSTR(m_bstrNetPath, o_pbstrNetPath); } LRESULT CAddRep::OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ) { SetDlgItemText(IDC_EDIT_ADDREP_DFSLINK_PATH, m_bstrEntryPath); ::SendMessage(GetDlgItem(IDC_EDITNETPATH), EM_LIMITTEXT, MAX_PATH, 0); // Disable replication button for Std Dfs. if (DFS_TYPE_FTDFS != m_DfsType) { ::EnableWindow(GetDlgItem(IDC_ADDREP_REPLICATE), FALSE); } else { // Check "replication" as default CheckDlgButton(IDC_ADDREP_REPLICATE, BST_CHECKED); } return TRUE; // Let the system set the focus } /*++ This function is called when a user clicks the ? in the top right of a property sheet and then clciks a control, or when they hit F1 in a control. --*/ LRESULT CAddRep::OnCtxHelp( IN UINT i_uMsg, IN WPARAM i_wParam, IN LPARAM i_lParam, IN OUT BOOL& io_bHandled ) { LPHELPINFO lphi = (LPHELPINFO) i_lParam; if (!lphi || lphi->iContextType != HELPINFO_WINDOW || lphi->iCtrlId < 0) return FALSE; ::WinHelp((HWND)(lphi->hItemHandle), DFS_CTX_HELP_FILE, HELP_WM_HELP, (DWORD_PTR)(PVOID)g_aHelpIDs_IDD_ADDREP); return TRUE; } /*++ This function handles "What's This" help when a user right clicks the control --*/ LRESULT CAddRep::OnCtxMenuHelp( IN UINT i_uMsg, IN WPARAM i_wParam, IN LPARAM i_lParam, IN OUT BOOL& io_bHandled ) { ::WinHelp((HWND)i_wParam, DFS_CTX_HELP_FILE, HELP_CONTEXTMENU, (DWORD_PTR)(PVOID)g_aHelpIDs_IDD_ADDREP); return TRUE; } LRESULT CAddRep::OnNetBrowse ( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ) { CComBSTR bstrPath; HRESULT hr = BrowseNetworkPath(hWndCtl, &bstrPath); if (S_OK == hr) { SetDlgItemText(IDC_EDITNETPATH, bstrPath); ::SetFocus(GetDlgItem(IDC_ADDREP_REPLICATE)); } if (S_FALSE == hr) ::SetFocus(GetDlgItem(IDC_EDITNETPATH)); return (SUCCEEDED(hr)); } LRESULT CAddRep::OnOK ( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ) { BOOL bValidInput = FALSE; int idString = 0; HRESULT hr = S_OK; do { CWaitCursor wait; DWORD dwTextLength = 0; m_bstrNetPath.Empty(); hr = GetInputText(GetDlgItem(IDC_EDITNETPATH), &m_bstrNetPath, &dwTextLength); if (FAILED(hr)) break; if (0 == dwTextLength) { idString = IDS_MSG_EMPTY_FIELD; break; } m_bstrServer.Empty(); m_bstrShare.Empty(); if (!ValidateNetPath(m_bstrNetPath, &m_bstrServer, &m_bstrShare)) break; m_RepType = NO_REPLICATION; if (IsDlgButtonChecked(IDC_ADDREP_REPLICATE)) m_RepType = NORMAL_REPLICATION; bValidInput = TRUE; } while (0); if (FAILED(hr)) { DisplayMessageBoxForHR(hr); ::SetFocus(GetDlgItem(IDC_EDITNETPATH)); return FALSE; } else if (bValidInput) { EndDialog(S_OK); return TRUE; } else { if (idString) DisplayMessageBoxWithOK(idString); ::SetFocus(GetDlgItem(IDC_EDITNETPATH)); return FALSE; } } LRESULT CAddRep::OnCancel ( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ) { /*++ Routine Description: Called OnCancel. Ends the dialog with S_FALSE; */ EndDialog(S_FALSE); return(true); } CAddRep::REPLICATION_TYPE CAddRep::get_ReplicationType( VOID ) /*++ Routine Description: This method gets the type of replication requested. This value is based on the radio button selected when OK is pressed. */ { return m_RepType; }