300 lines
5.1 KiB
C++
300 lines
5.1 KiB
C++
/*++
|
|
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 <shlobj.h>
|
|
#include <dsclient.h>
|
|
#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;
|
|
}
|