You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1209 lines
32 KiB
1209 lines
32 KiB
/////////////////////////////////////////////////////////////////////////////
|
|
// FILE : ppFaxServerInbox.cpp //
|
|
// //
|
|
// DESCRIPTION : prop pages of Inbox archive //
|
|
// //
|
|
// AUTHOR : yossg //
|
|
// //
|
|
// HISTORY : //
|
|
// Oct 25 1999 yossg created //
|
|
// Nov 3 1999 yossg OnInitDialog, SetProps //
|
|
// Nov 15 1999 yossg Call RPC func //
|
|
// Nov 24 1999 yossg OnApply create call to all tabs from parent //
|
|
// Oct 17 2000 yossg //
|
|
// Dec 10 2000 yossg Update Windows XP //
|
|
// //
|
|
// Copyright (C) 1999 Microsoft Corporation All Rights Reserved //
|
|
// //
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "MSFxsSnp.h"
|
|
|
|
#include "ppFaxServerInbox.h"
|
|
#include "FaxMMCGlobals.h"
|
|
|
|
#include "FaxServer.h"
|
|
#include "FaxServerNode.h"
|
|
|
|
#include "FxsValid.h"
|
|
#include "dlgutils.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//
|
|
// Constructor
|
|
//
|
|
CppFaxServerInbox::CppFaxServerInbox(
|
|
LONG_PTR hNotificationHandle,
|
|
CSnapInItem *pNode,
|
|
BOOL fIsLocalServer,
|
|
HINSTANCE hInst)
|
|
: CPropertyPageExImpl<CppFaxServerInbox>(pNode, NULL)
|
|
|
|
{
|
|
m_pParentNode = static_cast <CFaxServerNode *> (pNode);
|
|
m_pFaxArchiveConfig = NULL;
|
|
|
|
m_fAllReadyToApply = FALSE;
|
|
m_fIsDialogInitiated = FALSE;
|
|
|
|
m_fIsDirty = FALSE;
|
|
|
|
m_fIsLocalServer = fIsLocalServer;
|
|
}
|
|
|
|
//
|
|
// Destructor
|
|
//
|
|
CppFaxServerInbox::~CppFaxServerInbox()
|
|
{
|
|
if (NULL != m_pFaxArchiveConfig)
|
|
{
|
|
FaxFreeBuffer( m_pFaxArchiveConfig );
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CppFaxServerInbox message handlers
|
|
|
|
/*
|
|
- CppFaxServerInbox::InitRPC
|
|
-
|
|
* Purpose:
|
|
* Initiates the configuration structure from RPC get Call.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* OLE error code
|
|
*/
|
|
HRESULT CppFaxServerInbox::InitRPC( )
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxServerInbox::InitRPC"));
|
|
|
|
HRESULT hRc = S_OK;
|
|
DWORD ec = ERROR_SUCCESS;
|
|
|
|
//
|
|
// get RPC Handle
|
|
//
|
|
|
|
if (!m_pFaxServer->GetFaxServerHandle())
|
|
{
|
|
ec= GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Failed to GetFaxServerHandle. (ec: %ld)"),
|
|
ec);
|
|
|
|
goto Error;
|
|
}
|
|
|
|
//
|
|
// Retrieve the fax Archive configuration
|
|
//
|
|
if (!FaxGetArchiveConfiguration(m_pFaxServer->GetFaxServerHandle(),
|
|
FAX_MESSAGE_FOLDER_INBOX,
|
|
&m_pFaxArchiveConfig))
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Fail to get inbox configuration. (ec: %ld)"),
|
|
ec);
|
|
|
|
if (IsNetworkError(ec))
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Network Error was found. (ec: %ld)"),
|
|
ec);
|
|
|
|
m_pFaxServer->Disconnect();
|
|
}
|
|
|
|
goto Error;
|
|
}
|
|
//For max verification
|
|
ATLASSERT(m_pFaxArchiveConfig);
|
|
|
|
//
|
|
// Init specific members for set proprties follow-up
|
|
//
|
|
m_dwLastGoodSizeQuotaHighWatermark = m_pFaxArchiveConfig->dwSizeQuotaHighWatermark;
|
|
m_dwLastGoodSizeQuotaLowWatermark = m_pFaxArchiveConfig->dwSizeQuotaLowWatermark;
|
|
m_bstrLastGoodFolder = m_pFaxArchiveConfig->lpcstrFolder;
|
|
if (!m_bstrLastGoodFolder)
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Failed to allocate string (m_bstrLastGoodFolder)."));
|
|
ec = ERROR_OUTOFMEMORY;
|
|
|
|
goto Error;
|
|
}
|
|
|
|
ATLASSERT(ERROR_SUCCESS == ec);
|
|
DebugPrintEx( DEBUG_MSG,
|
|
_T("Succeed to get inbox configuration."));
|
|
|
|
goto Exit;
|
|
|
|
Error:
|
|
ATLASSERT(ERROR_SUCCESS != ec);
|
|
hRc = HRESULT_FROM_WIN32(ec);
|
|
|
|
ATLASSERT(NULL != m_pParentNode);
|
|
m_pParentNode->NodeMsgBox(GetFaxServerErrorMsg(ec));
|
|
|
|
Exit:
|
|
return (hRc);
|
|
|
|
}
|
|
|
|
/*
|
|
- CppFaxServerInbox::OnInitDialog
|
|
-
|
|
* Purpose:
|
|
* Initiates all controls when dialog is called.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
*
|
|
*/
|
|
LRESULT CppFaxServerInbox::OnInitDialog( UINT uiMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled )
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxServerInbox::PageInitDialog"));
|
|
|
|
DWORD ec = ERROR_SUCCESS;
|
|
|
|
UNREFERENCED_PARAMETER( uiMsg );
|
|
UNREFERENCED_PARAMETER( wParam );
|
|
UNREFERENCED_PARAMETER( lParam );
|
|
UNREFERENCED_PARAMETER( fHandled );
|
|
|
|
int iLow,
|
|
iHigh,
|
|
iAgeLimit;
|
|
|
|
ATLASSERT(m_pFaxArchiveConfig);
|
|
|
|
//
|
|
// init controls
|
|
//
|
|
m_FolderBox.Attach(GetDlgItem(IDC_INBOX_FOLDER_EDIT));
|
|
m_FolderBox.SetLimitText(MAX_ARCHIVE_FOLDER_PATH);
|
|
SHAutoComplete (GetDlgItem(IDC_INBOX_FOLDER_EDIT), SHACF_FILESYSTEM);
|
|
|
|
m_HighWatermarkBox.Attach(GetDlgItem(IDC_HIGH_EDIT));
|
|
m_LowWatermarkBox.Attach(GetDlgItem(IDC_LOW_EDIT));
|
|
m_AutoDelBox.Attach(GetDlgItem(IDC_AUTODEL_EDIT));
|
|
|
|
m_HighWatermarkBox.SetLimitText(FXS_QUOTA_LENGTH);
|
|
m_LowWatermarkBox.SetLimitText(FXS_QUOTA_LENGTH);
|
|
m_AutoDelBox.SetLimitText(FXS_DIRTYDAYS_LENGTH);
|
|
|
|
m_HighWatermarkSpin.Attach(GetDlgItem(IDC_HIGH_SPIN));
|
|
m_LowWatermarkSpin.Attach(GetDlgItem(IDC_LOW_SPIN));
|
|
m_AutoDelSpin.Attach(GetDlgItem(IDC_AUTODEL_SPIN));
|
|
|
|
//
|
|
// FOLDER_EDIT
|
|
//
|
|
m_FolderBox.SetWindowText(m_pFaxArchiveConfig->lpcstrFolder);
|
|
|
|
//
|
|
// Disable Browse button for remote admin
|
|
//
|
|
if (!m_fIsLocalServer)
|
|
{
|
|
::EnableWindow(GetDlgItem(IDC_INBOX_BROWSE_BUTTON), FALSE);
|
|
}
|
|
|
|
//
|
|
// TO_ARCHIVE_CHECK
|
|
//
|
|
if (m_pFaxArchiveConfig->bUseArchive)
|
|
{
|
|
CheckDlgButton(IDC_TO_ARCHIVE_CHECK, BST_CHECKED) ;
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(IDC_TO_ARCHIVE_CHECK, BST_UNCHECKED) ;
|
|
::EnableWindow(GetDlgItem(IDC_INBOX_FOLDER_EDIT), FALSE);
|
|
::EnableWindow(GetDlgItem(IDC_INBOX_BROWSE_BUTTON), FALSE);
|
|
}
|
|
|
|
//
|
|
// Quota size - Low
|
|
//
|
|
iLow = (int)m_pFaxArchiveConfig->dwSizeQuotaLowWatermark;
|
|
|
|
m_LowWatermarkSpin.SetRange(FXS_QUOTA_LOW_LOWER, FXS_QUOTA_LOW_UPPER);
|
|
m_LowWatermarkSpin.SetPos(iLow);
|
|
//
|
|
// Quota size - High
|
|
//
|
|
iHigh = (int)m_pFaxArchiveConfig->dwSizeQuotaHighWatermark;
|
|
m_HighWatermarkSpin.SetRange(FXS_QUOTA_HIGH_LOWER, FXS_QUOTA_HIGH_UPPER);
|
|
m_HighWatermarkSpin.SetPos(iHigh);// Set Position
|
|
|
|
//
|
|
//Generate event log warning
|
|
//
|
|
if (m_pFaxArchiveConfig->bSizeQuotaWarning)
|
|
{
|
|
CheckDlgButton(IDC_GENERATE_WARNING_CHECK, BST_CHECKED) ;
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(IDC_GENERATE_WARNING_CHECK, BST_UNCHECKED) ;
|
|
::EnableWindow(GetDlgItem(IDC_HIGH_EDIT), FALSE);
|
|
::EnableWindow(GetDlgItem(IDC_HIGH_SPIN), FALSE);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_LOW_EDIT), FALSE);
|
|
::EnableWindow(GetDlgItem(IDC_LOW_SPIN), FALSE);
|
|
}
|
|
|
|
|
|
//
|
|
// message life-time (dirty days)
|
|
//
|
|
iAgeLimit = (int)m_pFaxArchiveConfig->dwAgeLimit;
|
|
|
|
m_AutoDelSpin.SetRange(FXS_DIRTYDAYS_LOWER, FXS_DIRTYDAYS_UPPER);
|
|
m_AutoDelSpin.SetPos(iAgeLimit);
|
|
|
|
//
|
|
// Auto Delete
|
|
//
|
|
if (FXS_DIRTYDAYS_ZERO == iAgeLimit)
|
|
{
|
|
CheckDlgButton(IDC_AUTODEL_CHECK, BST_UNCHECKED);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_AUTODEL_EDIT), FALSE);
|
|
::EnableWindow(GetDlgItem(IDC_AUTODEL_SPIN), FALSE);
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(IDC_AUTODEL_CHECK, BST_CHECKED);
|
|
}
|
|
|
|
m_fIsDialogInitiated = TRUE;
|
|
|
|
return (1);
|
|
}
|
|
|
|
/*
|
|
- CppFaxServerInbox::SetProps
|
|
-
|
|
* Purpose:
|
|
* Sets properties on apply.
|
|
*
|
|
* Arguments:
|
|
* pCtrlFocus - focus pointer (int)
|
|
*
|
|
* Return:
|
|
* OLE error code
|
|
*/
|
|
HRESULT CppFaxServerInbox::SetProps(int *pCtrlFocus, UINT * puIds)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxServerInbox::SetProps"));
|
|
|
|
HRESULT hRc = S_OK;
|
|
DWORD ec = ERROR_SUCCESS;
|
|
HINSTANCE hInst = _Module.GetResourceInstance();
|
|
|
|
|
|
CComBSTR bstrFolder = L"";
|
|
|
|
BOOL fSkipMessage = FALSE;
|
|
|
|
FAX_ARCHIVE_CONFIG FaxArchiveConfig;
|
|
|
|
ATLASSERT(TRUE == m_fAllReadyToApply);
|
|
m_fAllReadyToApply = FALSE;
|
|
|
|
//
|
|
// Collect all data and init the structure's fields
|
|
// uses Copy() to copy and also allocate before
|
|
//
|
|
ZeroMemory (&FaxArchiveConfig, sizeof(FAX_ARCHIVE_CONFIG));
|
|
|
|
//
|
|
// Size of struct.
|
|
//
|
|
FaxArchiveConfig.dwSizeOfStruct = sizeof(FAX_ARCHIVE_CONFIG);
|
|
|
|
//
|
|
// IDC_TO_ARCHIVE_CHECK
|
|
//
|
|
if (IsDlgButtonChecked(IDC_TO_ARCHIVE_CHECK) == BST_CHECKED)
|
|
{
|
|
FaxArchiveConfig.bUseArchive = TRUE;
|
|
|
|
//IDC_INBOX_FOLDER_EDIT
|
|
if ( !m_FolderBox.GetWindowText(&bstrFolder))
|
|
{
|
|
*pCtrlFocus = IDC_INBOX_FOLDER_EDIT;
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Failed to GetWindowText(&bstrFolder)"));
|
|
ec = ERROR_OUTOFMEMORY;
|
|
goto Error;
|
|
}
|
|
if (!IsNotEmptyString(bstrFolder))
|
|
{
|
|
*pCtrlFocus = IDC_INBOX_FOLDER_EDIT;
|
|
*puIds = IDS_INBOX_ARCHIVE_PATH_EMPTY;
|
|
|
|
DebugPrintEx( DEBUG_ERR,
|
|
_T("Archive path string is empty or includes spaces only."));
|
|
|
|
fSkipMessage = TRUE;
|
|
|
|
ec = ERROR_INVALID_DATA;
|
|
|
|
goto Error;
|
|
}
|
|
FaxArchiveConfig.lpcstrFolder = bstrFolder;
|
|
|
|
//
|
|
// follow-up for an OnApply following submition
|
|
// with unchecked IDC_TO_ARCHIVE_CHECK
|
|
//
|
|
m_bstrLastGoodFolder = bstrFolder;
|
|
if (!m_bstrLastGoodFolder)
|
|
{
|
|
*pCtrlFocus = IDC_INBOX_FOLDER_EDIT;
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Failed to allocate string (m_bstrLastGoodFolder)."));
|
|
ec = ERROR_OUTOFMEMORY;
|
|
goto Error;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
FaxArchiveConfig.bUseArchive = FALSE;
|
|
FaxArchiveConfig.lpcstrFolder = m_bstrLastGoodFolder;
|
|
}
|
|
|
|
//
|
|
// IDC_GENERATE_WARNING_CHECK
|
|
//
|
|
if (IsDlgButtonChecked(IDC_GENERATE_WARNING_CHECK) == BST_CHECKED)
|
|
{
|
|
FaxArchiveConfig.bSizeQuotaWarning = TRUE;
|
|
|
|
int iHigh = m_HighWatermarkSpin.GetPos();
|
|
FaxArchiveConfig.dwSizeQuotaHighWatermark = (DWORD) iHigh;
|
|
|
|
int iLow = m_LowWatermarkSpin.GetPos();
|
|
FaxArchiveConfig.dwSizeQuotaLowWatermark = (DWORD) iLow;
|
|
|
|
if (iHigh <= iLow)
|
|
{
|
|
*pCtrlFocus = IDC_SENT_HIGH_EDIT;
|
|
*puIds = IDS_INBOX_WATERMARK_HI_LOW;
|
|
|
|
DebugPrintEx( DEBUG_ERR,
|
|
_T("Watermark High < Low."));
|
|
|
|
fSkipMessage = TRUE;
|
|
|
|
ec = ERROR_INVALID_DATA;
|
|
|
|
goto Error;
|
|
}
|
|
//
|
|
// follow-up for an OnApply following submition
|
|
// with unchecked IDC_SENT_GENERATE_WARNING_CHECK
|
|
//
|
|
m_dwLastGoodSizeQuotaHighWatermark = (DWORD)iHigh;
|
|
m_dwLastGoodSizeQuotaLowWatermark = (DWORD)iLow;
|
|
}
|
|
else
|
|
{
|
|
FaxArchiveConfig.bSizeQuotaWarning = FALSE;
|
|
|
|
FaxArchiveConfig.dwSizeQuotaHighWatermark = m_dwLastGoodSizeQuotaHighWatermark;
|
|
FaxArchiveConfig.dwSizeQuotaLowWatermark = m_dwLastGoodSizeQuotaLowWatermark;
|
|
}
|
|
|
|
//
|
|
// IDC_AUTODEL_CHECK - AutoDelete Messages
|
|
//
|
|
if (IsDlgButtonChecked(IDC_AUTODEL_CHECK) == BST_CHECKED)
|
|
{
|
|
int iAgeLimit = m_AutoDelSpin.GetPos();
|
|
FaxArchiveConfig.dwAgeLimit = (DWORD) iAgeLimit;
|
|
}
|
|
else
|
|
{
|
|
FaxArchiveConfig.dwAgeLimit = (DWORD)FXS_DIRTYDAYS_ZERO;
|
|
}
|
|
|
|
//
|
|
// get RPC Handle
|
|
//
|
|
if (!m_pFaxServer->GetFaxServerHandle())
|
|
{
|
|
ec= GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Failed to GetFaxServerHandle. (ec: %ld)"),
|
|
ec);
|
|
goto Error;
|
|
}
|
|
|
|
//
|
|
// Set Config
|
|
//
|
|
if (!FaxSetArchiveConfiguration(
|
|
m_pFaxServer->GetFaxServerHandle(),
|
|
FAX_MESSAGE_FOLDER_INBOX,
|
|
&FaxArchiveConfig))
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(DEBUG_ERR, _T("Fail to Set inbox configuration. (ec: %ld)"), ec);
|
|
|
|
//
|
|
// Try to adjust folder
|
|
//
|
|
PropSheet_SetCurSelByID( GetParent(), IDD);
|
|
GotoDlgCtrl(GetDlgItem(IDC_INBOX_FOLDER_EDIT));
|
|
|
|
ec = AskUserAndAdjustFaxFolder(m_hWnd,
|
|
m_pFaxServer->GetServerName(),
|
|
FaxArchiveConfig.lpcstrFolder,
|
|
ec);
|
|
if(ERROR_SUCCESS != ec)
|
|
{
|
|
if(ERROR_BAD_PATHNAME == ec)
|
|
{
|
|
//
|
|
// The error message has been shown by AskUserAndAdjustFaxFolder
|
|
//
|
|
fSkipMessage = TRUE;
|
|
}
|
|
|
|
goto Error;
|
|
}
|
|
|
|
//
|
|
// The folder has been adjusted, set it again
|
|
//
|
|
if (!FaxSetArchiveConfiguration(m_pFaxServer->GetFaxServerHandle(),
|
|
FAX_MESSAGE_FOLDER_INBOX,
|
|
&FaxArchiveConfig))
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(DEBUG_ERR, _T("Fail to Set inbox configuration. (ec: %ld)"), ec);
|
|
goto Error;
|
|
}
|
|
}
|
|
|
|
ATLASSERT(S_OK == hRc);
|
|
m_fIsDirty = FALSE;
|
|
|
|
DebugPrintEx( DEBUG_MSG, _T("Succeed to set inbox configuration."));
|
|
|
|
return hRc;
|
|
|
|
Error:
|
|
|
|
ATLASSERT(ERROR_SUCCESS != ec);
|
|
hRc = HRESULT_FROM_WIN32(ec);
|
|
|
|
DWORD dwIDS = 0;
|
|
switch (ec)
|
|
{
|
|
case ERROR_DISK_FULL:
|
|
DebugPrintEx( DEBUG_ERR, _T("ERROR_DISK_FULL == ec"));
|
|
dwIDS = IDS_INBOX_ERROR_DISK_FULL;
|
|
break;
|
|
|
|
case FAX_ERR_NOT_NTFS:
|
|
DebugPrintEx( DEBUG_ERR, _T("FAX_ERR_NOT_NTFS == ec"));
|
|
dwIDS = IDS_INBOX_FAX_ERR_NOT_NTFS;
|
|
break;
|
|
|
|
case FAX_ERR_FILE_ACCESS_DENIED:
|
|
DebugPrintEx( DEBUG_ERR, _T("FAX_ERR_FILE_ACCESS_DENIED == ec"));
|
|
dwIDS = IDS_INBOX_FAX_ERR_FILE_ACCESS_DENIED;
|
|
break;
|
|
|
|
default:
|
|
dwIDS = GetFaxServerErrorMsg(ec);
|
|
break;
|
|
}
|
|
|
|
if (dwIDS && !fSkipMessage)
|
|
{
|
|
PropSheet_SetCurSelByID( GetParent(), IDD);
|
|
PageError(dwIDS, m_hWnd);
|
|
}
|
|
|
|
if (IsNetworkError(ec))
|
|
{
|
|
DebugPrintEx(DEBUG_ERR, _T("Network Error was found. (ec: %ld)"), ec);
|
|
m_pFaxServer->Disconnect();
|
|
}
|
|
|
|
return hRc;
|
|
}
|
|
|
|
/*
|
|
- CppFaxServerInbox::PreApply
|
|
-
|
|
* Purpose:
|
|
* Checks properties before apply.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* OLE error code
|
|
*/
|
|
HRESULT CppFaxServerInbox::PreApply(int *pCtrlFocus, UINT * puIds)
|
|
{
|
|
HRESULT hRc = S_OK;
|
|
|
|
//
|
|
// PreApply Checks
|
|
//
|
|
if (!AllReadyToApply(/*fSilent =*/ FALSE, pCtrlFocus , puIds))
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
hRc = E_FAIL ;
|
|
}
|
|
else
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
return(hRc);
|
|
}
|
|
|
|
/*
|
|
- CppFaxServerInbox::ToArchiveCheckboxClicked
|
|
-
|
|
* Purpose:
|
|
* Gray/Ungray the folder edit box and the
|
|
* browse button. Enable apply button.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT CppFaxServerInbox::ToArchiveCheckboxClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
BOOL State;
|
|
|
|
if (!m_fIsDialogInitiated) //event receieved in too early stage
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
m_fIsDirty = TRUE;
|
|
}
|
|
|
|
|
|
State = ( IsDlgButtonChecked(IDC_TO_ARCHIVE_CHECK) == BST_CHECKED );
|
|
::EnableWindow(GetDlgItem(IDC_INBOX_FOLDER_EDIT), State);
|
|
::EnableWindow(GetDlgItem(IDC_INBOX_BROWSE_BUTTON), State && m_fIsLocalServer);
|
|
|
|
if (m_fAllReadyToApply)//only last change should be considered
|
|
{
|
|
if ( !m_FolderBox.GetWindowTextLength() )
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
}
|
|
else //m_fAllReadyToApply == FALSE
|
|
{
|
|
if (AllReadyToApply(TRUE))
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/*
|
|
- CppFaxServerInbox::GenerateEventLogCheckboxClicked
|
|
-
|
|
* Purpose:
|
|
* Gray/Ungray the spin buttons and edit boxes
|
|
* Enable apply button.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT CppFaxServerInbox::GenerateEventLogCheckboxClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
BOOL State;
|
|
|
|
if (!m_fIsDialogInitiated) //event receieved in too early stage
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
m_fIsDirty = TRUE;
|
|
}
|
|
|
|
State = ( IsDlgButtonChecked(IDC_GENERATE_WARNING_CHECK) == BST_CHECKED );
|
|
::EnableWindow(GetDlgItem(IDC_HIGH_EDIT), State);
|
|
::EnableWindow(GetDlgItem(IDC_HIGH_SPIN), State);
|
|
::EnableWindow(GetDlgItem(IDC_QUOTA_HIGH_STATIC), State);
|
|
::EnableWindow(GetDlgItem(IDC_MB1_STATIC), State);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_LOW_EDIT), State);
|
|
::EnableWindow(GetDlgItem(IDC_LOW_SPIN), State);
|
|
::EnableWindow(GetDlgItem(IDC_QUOTA_LOW_STATIC), State);
|
|
::EnableWindow(GetDlgItem(IDC_MB2_STATIC), State);
|
|
|
|
|
|
if (m_fAllReadyToApply)//only last change should be considered
|
|
{
|
|
if ( !m_HighWatermarkBox.GetWindowTextLength() )
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
else if ( 0 != HIWORD( m_HighWatermarkSpin.GetPos() ) ) //occures for out of range such zero. MSDN UDM_GETPOS
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
else if ( !m_LowWatermarkBox.GetWindowTextLength() )
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
}
|
|
else //m_fAllReadyToApply == FALSE
|
|
{
|
|
if (AllReadyToApply(TRUE))
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
|
|
return(1);
|
|
}
|
|
|
|
/*
|
|
- CppFaxServerInbox::AutoDelCheckboxClicked
|
|
-
|
|
* Purpose:
|
|
* Gray/Ungray the spin button and edit box
|
|
* and enable apply button after Auto Delete Checkbox
|
|
* status was changed.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT CppFaxServerInbox::AutoDelCheckboxClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
BOOL State;
|
|
|
|
if (!m_fIsDialogInitiated) //event receieved in too early stage
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
m_fIsDirty = TRUE;
|
|
}
|
|
|
|
State = ( IsDlgButtonChecked(IDC_AUTODEL_CHECK) == BST_CHECKED );
|
|
::EnableWindow(GetDlgItem(IDC_AUTODEL_EDIT), State);
|
|
::EnableWindow(GetDlgItem(IDC_AUTODEL_SPIN), State);
|
|
|
|
if (m_fAllReadyToApply)//only last change should be considered
|
|
{
|
|
if (State)
|
|
{
|
|
if ( !m_AutoDelBox.GetWindowTextLength() )
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
else if ( 0 != HIWORD( m_AutoDelSpin.GetPos() ) ) //occures for out of range such zero. MSDN UDM_GETPOS
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
}
|
|
}
|
|
else //m_fAllReadyToApply == FALSE
|
|
{
|
|
if (AllReadyToApply(TRUE))
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
|
|
return(1);
|
|
}
|
|
|
|
/*
|
|
+ Routine Description:
|
|
+
|
|
* Browse for a directory
|
|
*
|
|
* Arguments:
|
|
*
|
|
* hwndDlg - Specifies the dialog window on which the Browse button is displayed
|
|
*
|
|
* Return Value:
|
|
*
|
|
* TRUE if successful, FALSE if the user presses Cancel
|
|
-
|
|
-
|
|
*/
|
|
BOOL
|
|
CppFaxServerInbox::BrowseForDirectory( WORD wNotifyCode, WORD wID, HWND hwndDlg, BOOL& bHandled )
|
|
{
|
|
UNREFERENCED_PARAMETER( wNotifyCode );
|
|
UNREFERENCED_PARAMETER( wID );
|
|
UNREFERENCED_PARAMETER( hwndDlg );
|
|
UNREFERENCED_PARAMETER( bHandled );
|
|
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxServerInbox::BrowseForDirectory"));
|
|
|
|
BOOL fResult = FALSE;
|
|
|
|
WCHAR szBrowseFolder[MAX_PATH]={0};
|
|
WCHAR szBrowseDlgTitle[FXS_MAX_TITLE_LEN];
|
|
CComBSTR bstrOldPath;
|
|
unsigned int len;
|
|
|
|
unsigned long ulBrowseFlags;
|
|
|
|
//
|
|
// Collecting the browse dialog headline
|
|
//
|
|
if (!LoadString( _Module.GetResourceInstance(),
|
|
IDS_GET_ARCHIVE_DIRECTORY,
|
|
szBrowseDlgTitle,
|
|
FXS_MAX_TITLE_LEN))
|
|
{
|
|
DWORD ec;
|
|
ec = GetLastError();
|
|
if (ec == ERROR_NOT_ENOUGH_MEMORY)
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Out of Memory - fail to load string."));
|
|
DlgMsgBox(this, IDS_MEMORY);
|
|
return fResult;
|
|
}
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Failed to load titile string - unexpected behavior."));
|
|
|
|
szBrowseDlgTitle[0] = 0;
|
|
}
|
|
|
|
//
|
|
// Collecting the old path from the calling dialog edit box
|
|
//
|
|
if(! GetDlgItemText( IDC_INBOX_FOLDER_EDIT, bstrOldPath.m_str))
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Failed to collect old path from the property page edit box."));
|
|
|
|
szBrowseFolder[0] = 0;
|
|
}
|
|
else
|
|
{
|
|
len = bstrOldPath.Length();
|
|
if ( len > MAX_PATH )
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Old Path Length is bigger then alowed maximal path."));
|
|
szBrowseFolder[0] = 0;
|
|
}
|
|
else
|
|
{
|
|
wcsncpy(szBrowseFolder, bstrOldPath, ARR_SIZE(szBrowseFolder)-1);
|
|
}
|
|
}
|
|
//
|
|
// Preparing the browse dialog style flags.
|
|
//
|
|
ulBrowseFlags = BIF_RETURNONLYFSDIRS |
|
|
BIF_STATUSTEXT |
|
|
BIF_NEWDIALOGSTYLE |
|
|
BIF_NONEWFOLDERBUTTON |
|
|
BIF_VALIDATE;
|
|
|
|
//
|
|
// Invoke the browse dialog with a function based on
|
|
// Shell functions.
|
|
//
|
|
if (InvokeBrowseDialog(szBrowseFolder,
|
|
MAX_ARCHIVE_FOLDER_PATH,
|
|
szBrowseDlgTitle,
|
|
ulBrowseFlags,
|
|
this))
|
|
{
|
|
SetDlgItemText(IDC_INBOX_FOLDER_EDIT, szBrowseFolder);
|
|
fResult = TRUE;
|
|
}
|
|
|
|
return fResult;
|
|
}
|
|
|
|
|
|
/*
|
|
- CppFaxServerInbox::OnApply
|
|
-
|
|
* Purpose:
|
|
* Calls PreApply and SetProp to Apply changes.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* TRUE or FALSE
|
|
*/
|
|
BOOL CppFaxServerInbox::OnApply()
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxServerInbox::OnApply"));
|
|
|
|
HRESULT hRc = S_OK;
|
|
int CtrlFocus = 0;
|
|
UINT uIds = 0;
|
|
|
|
if (!m_fIsDirty)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
hRc = PreApply(&CtrlFocus, &uIds);
|
|
if (FAILED(hRc))
|
|
{
|
|
if (PropSheet_SetCurSelByID( GetParent(), IDD) )
|
|
{
|
|
PageError(uIds, m_hWnd, _Module.GetResourceInstance());
|
|
|
|
if (CtrlFocus)
|
|
{
|
|
GotoDlgCtrl(GetDlgItem(CtrlFocus));
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
else //(Succeeded(hRc))
|
|
{
|
|
hRc = SetProps(&CtrlFocus, &uIds);
|
|
if (FAILED(hRc))
|
|
{
|
|
if (uIds)
|
|
{
|
|
if (PropSheet_SetCurSelByID( GetParent(), IDD) )
|
|
{
|
|
PageError(uIds, m_hWnd, _Module.GetResourceInstance());
|
|
|
|
if (CtrlFocus)
|
|
{
|
|
GotoDlgCtrl(GetDlgItem(CtrlFocus));
|
|
}
|
|
}
|
|
}
|
|
//else Error Msg by called func.
|
|
return FALSE;
|
|
}
|
|
else //(Succeeded(hRc))
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
- CppFaxServerInbox::EditChanged
|
|
-
|
|
* Purpose:
|
|
* set Apply buttom modified.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT CppFaxServerInbox::EditChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (!m_fIsDialogInitiated)
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
m_fIsDirty = TRUE;
|
|
}
|
|
|
|
|
|
if (m_fAllReadyToApply) //only last change should be considered
|
|
{
|
|
switch (wID)
|
|
{
|
|
case IDC_INBOX_FOLDER_EDIT:
|
|
if ( !m_FolderBox.GetWindowTextLength() )
|
|
{
|
|
SetModified(FALSE);
|
|
m_fAllReadyToApply = FALSE;
|
|
}
|
|
break;
|
|
|
|
case IDC_HIGH_EDIT:
|
|
if ( !m_HighWatermarkBox.GetWindowTextLength() )
|
|
{
|
|
SetModified(FALSE);
|
|
m_fAllReadyToApply = FALSE;
|
|
}
|
|
else if ( 0 != HIWORD( m_HighWatermarkSpin.GetPos() ) ) //occures for out of range such zero. MSDN UDM_GETPOS
|
|
{
|
|
SetModified(FALSE);
|
|
m_fAllReadyToApply = FALSE;
|
|
}
|
|
break;
|
|
|
|
case IDC_LOW_EDIT:
|
|
if ( !m_LowWatermarkBox.GetWindowTextLength() )
|
|
{
|
|
SetModified(FALSE);
|
|
m_fAllReadyToApply = FALSE;
|
|
}
|
|
break;
|
|
|
|
case IDC_AUTODEL_EDIT:
|
|
if ( !m_AutoDelBox.GetWindowTextLength() )
|
|
{
|
|
SetModified(FALSE);
|
|
m_fAllReadyToApply = FALSE;
|
|
}
|
|
else if ( 0 != HIWORD( m_AutoDelSpin.GetPos() ) ) //occures for out of range such zero. MSDN UDM_GETPOS
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
else //m_fAllReadyToApply == FALSE
|
|
{
|
|
if (AllReadyToApply(TRUE))
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
/*
|
|
- CppFaxServerInbox::AllReadyToApply
|
|
-
|
|
* Purpose:
|
|
* This function validate that no zero length strings
|
|
* are found data areas that should be saved.
|
|
*
|
|
* Arguments:
|
|
* [in] fSilent - boolean who defines if to pop up messages (FALSE)
|
|
* or not.(TRUE)
|
|
*
|
|
* Return:
|
|
* BOOOLEAN
|
|
*/
|
|
BOOL CppFaxServerInbox::AllReadyToApply(BOOL fSilent, int *pCtrlFocus, UINT *pIds)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxServerInbox::AllReadyToApply"));
|
|
|
|
DWORD ec = ERROR_SUCCESS;
|
|
|
|
HINSTANCE hInst = _Module.GetResourceInstance();
|
|
|
|
|
|
if (IsDlgButtonChecked(IDC_TO_ARCHIVE_CHECK) == BST_CHECKED)
|
|
{
|
|
if ( !m_FolderBox.GetWindowTextLength() )
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Zero text length - m_FolderBox. (ec: %ld)"),
|
|
ec);
|
|
|
|
if (!fSilent)
|
|
{
|
|
*pIds = IDS_INBOX_ARCHIVE_PATH_EMPTY;
|
|
*pCtrlFocus = IDC_INBOX_FOLDER_EDIT;
|
|
}
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
if (IsDlgButtonChecked(IDC_GENERATE_WARNING_CHECK) == BST_CHECKED)
|
|
{
|
|
if ( !m_HighWatermarkBox.GetWindowTextLength() )
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Zero text length - m_HighWatermarkBox. (ec: %ld)"),
|
|
ec);
|
|
|
|
if (!fSilent)
|
|
{
|
|
*pIds = IDS_INBOX_WATERMARK_EMPTY;
|
|
*pCtrlFocus = IDC_HIGH_EDIT;
|
|
}
|
|
return FALSE;
|
|
}
|
|
else if ( 0 != HIWORD( m_HighWatermarkSpin.GetPos() ) ) //occures for out of range such zero. MSDN UDM_GETPOS
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Zero value - m_HighWatermarkBox. (ec: %ld)"));
|
|
|
|
if (!fSilent)
|
|
{
|
|
*pIds = IDS_INBOX_HIGH_WATERMARK_ZERO;
|
|
*pCtrlFocus = IDC_HIGH_EDIT;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
if ( !m_LowWatermarkBox.GetWindowTextLength() )
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Zero text length - m_LowWatermarkBox. (ec: %ld)"),
|
|
ec);
|
|
|
|
if (!fSilent)
|
|
{
|
|
*pIds = IDS_INBOX_WATERMARK_EMPTY;
|
|
*pCtrlFocus = IDC_SENT_LOW_EDIT;
|
|
}
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
if (IsDlgButtonChecked(IDC_AUTODEL_CHECK) == BST_CHECKED)
|
|
{
|
|
if ( !m_AutoDelBox.GetWindowTextLength() )
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Zero text length - m_AutoDelBox. (ec: %ld)"),
|
|
ec);
|
|
|
|
if (!fSilent)
|
|
{
|
|
*pIds = IDS_INBOX_AUTODEL_EMPTY;
|
|
*pCtrlFocus = IDC_AUTODEL_EDIT;
|
|
}
|
|
return FALSE;
|
|
}
|
|
else if ( 0 != HIWORD( m_AutoDelSpin.GetPos() ) ) //occures for out of range such zero. MSDN UDM_GETPOS
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Zero value - m_AutoDelBox."));
|
|
|
|
if (!fSilent)
|
|
{
|
|
*pIds = IDS_INBOX_AUTODEL_EMPTY;
|
|
*pCtrlFocus = IDC_AUTODEL_EDIT;
|
|
}
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
ATLASSERT(ERROR_SUCCESS == ec);
|
|
|
|
//
|
|
// Cheers!
|
|
// ...every thing ready to apply now.
|
|
//
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CppFaxServerInbox::OnHelpRequest
|
|
|
|
This is called in response to the WM_HELP Notify
|
|
message and to the WM_CONTEXTMENU Notify message.
|
|
|
|
WM_HELP Notify message.
|
|
This message is sent when the user presses F1 or <Shift>-F1
|
|
over an item or when the user clicks on the ? icon and then
|
|
presses the mouse over an item.
|
|
|
|
WM_CONTEXTMENU Notify message.
|
|
This message is sent when the user right clicks over an item
|
|
and then clicks "What's this?"
|
|
|
|
--*/
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CppFaxServerInbox::OnHelpRequest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
|
{
|
|
DEBUG_FUNCTION_NAME(_T("CppFaxServerInbox::OnHelpRequest"));
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_HELP:
|
|
WinContextHelp(((LPHELPINFO)lParam)->dwContextId, m_hWnd);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
WinContextHelp(::GetWindowContextHelpId((HWND)wParam), m_hWnd);
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|