|
|
// svcprop1.cpp : implementation file
//
#include "stdafx.h"
#include "compdata.h"
#include "resource.h"
#include "shrprop.h"
#include "filesvc.h"
#include "dataobj.h" // CFileMgmtDataObject::m_CFMachineName
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CSharePage property page
IMPLEMENT_DYNCREATE(CSharePage, CPropertyPage)
CSharePage::CSharePage(UINT nIDTemplate) : CPropertyPage(nIDTemplate ? nIDTemplate : CSharePageGeneral::IDD), m_pFileMgmtData( NULL ), m_transport( FILEMGMT_OTHER ), m_refcount( 1 ), // number of pages
m_handle (0), m_pDataObject (0), m_bChanged (FALSE) { }
CSharePage::~CSharePage() { if (NULL != m_pFileMgmtData) { ((IComponentData*)m_pFileMgmtData)->Release(); m_pFileMgmtData = NULL; }
if ( m_pDataObject ) m_pDataObject->Release ();
if ( m_handle ) { ::MMCFreeNotifyHandle (m_handle); m_handle = NULL; } }
BOOL CSharePage::Load( CFileMgmtComponentData* pFileMgmtData, LPDATAOBJECT piDataObject ) { ASSERT( NULL == m_pFileMgmtData && NULL != pFileMgmtData && NULL != piDataObject ); if ( !pFileMgmtData || !piDataObject ) return FALSE;
m_pDataObject = piDataObject; m_pDataObject->AddRef (); m_pFileMgmtData = pFileMgmtData; ((IComponentData*)m_pFileMgmtData)->AddRef(); HRESULT hr = ExtractString( piDataObject, CFileMgmtDataObject::m_CFMachineName, &m_strMachineName, MAX_PATH ); if ( FAILED(hr) ) { ASSERT( FALSE ); return FALSE; } if (m_strMachineName.IsEmpty()) { // local computer
TCHAR achComputerName[ MAX_COMPUTERNAME_LENGTH+1 ]; DWORD dwSize = sizeof(achComputerName)/sizeof(TCHAR); GetComputerName( achComputerName, &dwSize ); m_strMachineName = achComputerName; }
hr = ExtractString( piDataObject, CFileMgmtDataObject::m_CFShareName, &m_strShareName, MAX_PATH ); if ( FAILED(hr) ) { ASSERT( FALSE ); return FALSE; }
hr = ExtractData( piDataObject, CFileMgmtDataObject::m_CFTransport, &m_transport, sizeof(DWORD) ); if ( FAILED(hr) ) { ASSERT( FALSE ); return FALSE; }
return TRUE; }
void CSharePage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSharePage)
//}}AFX_DATA_MAP
} // CSharePage::DoDataExchange()
BEGIN_MESSAGE_MAP(CSharePage, CPropertyPage) //{{AFX_MSG_MAP(CSharePage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSharePage message handlers
BOOL CSharePage::OnApply() { if ( IsModified () ) { m_pDataObject->AddRef (); HRESULT hr = MMCPropertyChangeNotify (m_handle, reinterpret_cast <LONG_PTR>(m_pDataObject)); ASSERT (SUCCEEDED (hr)); if ( !SUCCEEDED (hr) ) m_pDataObject->Release (); // released in OnPropertyChange () if successful
}
BOOL bResult = CPropertyPage::OnApply(); if ( bResult ) m_bChanged = FALSE; return bResult; }
// This mechanism deletes the CFileMgmtGeneral when the property sheet is finished
UINT CALLBACK CSharePage::PropSheetPageProc( HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp ) { CSharePage* pThis = reinterpret_cast<CSharePage*>(ppsp->lParam); switch (uMsg) { case PSPCB_RELEASE: if (--(pThis->m_refcount) <= 0) { // Remember callback on stack since "this" will be deleted
LPFNPSPCALLBACK pfnOrig = pThis->m_pfnOriginalPropSheetPageProc; delete pThis; return (pfnOrig)(hwnd,uMsg,ppsp); } break; case PSPCB_CREATE: // do not increase refcount, PSPCB_CREATE may or may not be called
// depending on whether the page was created. PSPCB_RELEASE can be
// depended upon to be called exactly once per page however.
// fall through
default: break; } return (pThis->m_pfnOriginalPropSheetPageProc)(hwnd,uMsg,ppsp); }
void CSharePage::SetModified(BOOL bChanged) { m_bChanged = bChanged; CPropertyPage::SetModified (bChanged); }
BOOL CSharePage::IsModified() const { return m_bChanged; }
/////////////////////////////////////////////////////////////////////////////
// CSharePageGeneral property page
IMPLEMENT_DYNCREATE(CSharePageGeneral, CSharePage)
CSharePageGeneral::CSharePageGeneral(UINT nIDTemplate) : CSharePage(nIDTemplate ? nIDTemplate : CSharePageGeneral::IDD), m_pvPropertyBlock( NULL ), m_fEnableDescription( TRUE ), m_fEnablePath( TRUE ), m_dwShareType(0) { //{{AFX_DATA_INIT(CSharePageGeneral)
m_strShareName = _T(""); m_strPath = _T(""); m_strDescription = _T(""); m_iMaxUsersAllowed = -1; m_dwMaxUsers = 0;
//}}AFX_DATA_INIT
}
CSharePageGeneral::~CSharePageGeneral() { if (NULL != m_pvPropertyBlock) { ASSERT( NULL != m_pFileMgmtData && FILEMGMT_OTHER != m_transport ); m_pFileMgmtData->GetFileServiceProvider(m_transport)->FreeData(m_pvPropertyBlock); } }
BOOL CSharePageGeneral::Load( CFileMgmtComponentData* pFileMgmtData, LPDATAOBJECT piDataObject ) { if (FALSE == CSharePage::Load(pFileMgmtData, piDataObject)) return FALSE;
BOOL fEditDescription = TRUE; BOOL fEditPath = TRUE; NET_API_STATUS retval = m_pFileMgmtData->GetFileServiceProvider(m_transport)->ReadShareProperties( m_strMachineName, m_strShareName, &m_pvPropertyBlock, m_strDescription, m_strPath, &m_fEnableDescription, &m_fEnablePath, &m_dwShareType); if (0L != retval) { (void) DoErrMsgBox(m_hWnd, MB_OK | MB_ICONSTOP, retval, IDS_POPUP_QUERY_SHARE, m_strShareName ); return FALSE; }
m_dwMaxUsers = m_pFileMgmtData->GetFileServiceProvider( m_transport)->QueryMaxUsers(m_pvPropertyBlock);
if ((DWORD)-1 == m_dwMaxUsers) { m_iMaxUsersAllowed = 0; m_dwMaxUsers = 1; } else { m_iMaxUsersAllowed = 1; }
return TRUE; }
#define SHARE_DESCRIPTION_LIMIT MAXCOMMENTSZ
#define MYUD_MAXVAL32 0x7FFFFFFF
void CSharePageGeneral::DoDataExchange(CDataExchange* pDX) { CSharePage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSharePageGeneral)
DDX_Control(pDX, IDC_SHRPROP_SPIN_USERS, m_spinMaxUsers); DDX_Control(pDX, IDC_EDIT_SHARE_NAME, m_editShareName); DDX_Control(pDX, IDC_EDIT_PATH_NAME, m_editPath); DDX_Control(pDX, IDC_EDIT_DESCRIPTION, m_editDescription); DDX_Control(pDX, IDC_SHRPROP_ALLOW_SPECIFIC, m_checkboxAllowSpecific); DDX_Control(pDX, IDC_SHRPROP_MAX_ALLOWED, m_checkBoxMaxAllowed);
DDX_Text(pDX, IDC_EDIT_SHARE_NAME, m_strShareName); DDX_Text(pDX, IDC_EDIT_PATH_NAME, m_strPath); DDX_Text(pDX, IDC_EDIT_DESCRIPTION, m_strDescription); DDV_MaxChars(pDX, m_strDescription, SHARE_DESCRIPTION_LIMIT);
DDX_Radio(pDX, IDC_SHRPROP_MAX_ALLOWED, m_iMaxUsersAllowed); DDX_Text(pDX, IDC_SHRPROP_EDIT_USERS, m_dwMaxUsers); DDV_MinMaxDWord(pDX, m_dwMaxUsers, 1, MYUD_MAXVAL32); //}}AFX_DATA_MAP
if ( !pDX->m_bSaveAndValidate ) { m_spinMaxUsers.SendMessage(UDM_SETRANGE32, 1, MYUD_MAXVAL32);
if (0 == m_iMaxUsersAllowed) { GetDlgItem(IDC_SHRPROP_EDIT_USERS)->EnableWindow(FALSE); GetDlgItem(IDC_SHRPROP_SPIN_USERS)->EnableWindow(FALSE); }
if ( !m_fEnableDescription ) { // m_staticDescription.SetWindowText(m_strDescription);
// m_staticDescription.EnableWindow();
// m_staticDescription.ShowWindow(SW_SHOW);
m_editDescription.EnableWindow(FALSE); m_editDescription.ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_COMMENT_STATIC)->EnableWindow(FALSE); GetDlgItem(IDC_STATIC_COMMENT_STATIC)->ShowWindow(SW_HIDE);
// make read-only
// m_editDescription.SetReadOnly(TRUE);
} if ( m_fEnablePath ) { // m_staticPath.EnableWindow(FALSE);
// m_staticPath.ShowWindow(SW_HIDE);
// m_editPath.EnableWindow();
// m_editPath.ShowWindow(SW_SHOW);
// make read-write
m_editPath.SetReadOnly(FALSE); } else { // m_staticPath.SetWindowText(m_strPath);
// leave read-only
} } } // CSharePageGeneral::DoDataExchange()
BEGIN_MESSAGE_MAP(CSharePageGeneral, CSharePage) //{{AFX_MSG_MAP(CSharePageGeneral)
ON_MESSAGE(WM_HELP, OnHelp) ON_MESSAGE(WM_CONTEXTMENU, OnContextHelp) ON_EN_CHANGE(IDC_EDIT_PATH_NAME, OnChangeEditPathName) ON_EN_CHANGE(IDC_EDIT_DESCRIPTION, OnChangeEditDescription) ON_EN_CHANGE(IDC_EDIT_SHARE_NAME, OnChangeEditShareName) ON_BN_CLICKED(IDC_SHRPROP_ALLOW_SPECIFIC, OnShrpropAllowSpecific) ON_BN_CLICKED(IDC_SHRPROP_MAX_ALLOWED, OnShrpropMaxAllowed) ON_EN_CHANGE(IDC_SHRPROP_EDIT_USERS, OnChangeShrpropEditUsers) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSharePageGeneral message handlers
/////////////////////////////////////////////////////////////////////
// Help
BOOL CSharePageGeneral::OnHelp(WPARAM /*wParam*/, LPARAM lParam) { return DoHelp(lParam, HELP_DIALOG_TOPIC(IDD_SHAREPROP_GENERAL)); }
BOOL CSharePageGeneral::OnContextHelp(WPARAM wParam, LPARAM /*lParam*/) { return DoContextHelp(wParam, HELP_DIALOG_TOPIC(IDD_SHAREPROP_GENERAL)); }
BOOL CSharePageGeneral::OnApply() { if ( IsModified () ) { ASSERT(NULL != m_pFileMgmtData); // UpdateData (TRUE) has already been called by OnKillActive () just before OnApply ()
DWORD dwMaxUsers = (0 == m_iMaxUsersAllowed) ? (DWORD)-1 : m_dwMaxUsers; m_pFileMgmtData->GetFileServiceProvider( m_transport)->SetMaxUsers(m_pvPropertyBlock,dwMaxUsers);
NET_API_STATUS retval = m_pFileMgmtData->GetFileServiceProvider(m_transport)->WriteShareProperties( m_strMachineName, m_strShareName, m_pvPropertyBlock, m_strDescription, m_strPath); if (0L != retval) { DoErrMsgBox(m_hWnd, MB_OK | MB_ICONEXCLAMATION, retval, IDS_POPUP_WRITE_SHARE, m_strShareName); return FALSE; } }
return CSharePage::OnApply(); }
void CSharePageGeneral::OnChangeEditPathName() { SetModified (TRUE); }
void CSharePageGeneral::OnChangeEditDescription() { SetModified (TRUE); }
void CSharePageGeneral::OnChangeEditShareName() { SetModified (TRUE); }
void CSharePageGeneral::OnShrpropAllowSpecific() { GetDlgItem(IDC_SHRPROP_EDIT_USERS)->EnableWindow(TRUE); GetDlgItem(IDC_SHRPROP_SPIN_USERS)->EnableWindow(TRUE);
SetModified (TRUE); }
void CSharePageGeneral::OnShrpropMaxAllowed() { SetDlgItemText(IDC_SHRPROP_EDIT_USERS, _T("1"));
GetDlgItem(IDC_SHRPROP_EDIT_USERS)->EnableWindow(FALSE); GetDlgItem(IDC_SHRPROP_SPIN_USERS)->EnableWindow(FALSE); SetModified (TRUE); }
void CSharePageGeneral::OnChangeShrpropEditUsers() { SetModified (TRUE); }
|