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.
991 lines
25 KiB
991 lines
25 KiB
/////////////////////////////////////////////////////////////////////////////
|
|
// FILE : ppFaxDeviceGeneral.cpp //
|
|
// //
|
|
// DESCRIPTION : prop pages of Inbox archive //
|
|
// //
|
|
// AUTHOR : yossg //
|
|
// //
|
|
// HISTORY : //
|
|
// Oct 17 2000 yossg //
|
|
// Windows XP //
|
|
// Feb 14 2001 yossg Add Manual Receive support //
|
|
// //
|
|
// Copyright (C) 1999 Microsoft Corporation All Rights Reserved //
|
|
// //
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "MSFxsSnp.h"
|
|
|
|
#include "ppFaxDeviceGeneral.h"
|
|
#include "Device.h"
|
|
|
|
#include "FaxServer.h"
|
|
#include "FaxServerNode.h"
|
|
|
|
#include "FaxMMCPropertyChange.h"
|
|
|
|
#include "FaxMMCGlobals.h"
|
|
|
|
#include "FxsValid.h"
|
|
#include "dlgutils.h"
|
|
#include <faxres.h>
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//
|
|
// Constructor
|
|
//
|
|
CppFaxDeviceGeneral::CppFaxDeviceGeneral(
|
|
LONG_PTR hNotificationHandle,
|
|
CSnapInItem *pNode,
|
|
CSnapInItem *pParentNode,
|
|
DWORD dwDeviceID,
|
|
HINSTANCE hInst)
|
|
: CPropertyPageExImpl<CppFaxDeviceGeneral>(pNode, NULL)
|
|
|
|
{
|
|
m_lpNotifyHandle = hNotificationHandle;
|
|
|
|
m_pParentNode = NULL; //in case static-cast failed and wont change the pointer
|
|
m_pParentNode = static_cast <CFaxDeviceNode *> (pNode);
|
|
|
|
m_pGrandParentNode = pParentNode;
|
|
|
|
m_dwDeviceID = dwDeviceID;
|
|
|
|
m_pFaxDeviceConfig = NULL;
|
|
|
|
m_fAllReadyToApply = FALSE;
|
|
m_fIsDialogInitiated = FALSE;
|
|
|
|
}
|
|
|
|
//
|
|
// Destructor
|
|
//
|
|
CppFaxDeviceGeneral::~CppFaxDeviceGeneral()
|
|
{
|
|
if (NULL != m_pFaxDeviceConfig)
|
|
{
|
|
FaxFreeBuffer( m_pFaxDeviceConfig );
|
|
}
|
|
|
|
// Note - This needs to be called only once per property sheet.
|
|
// In our convention called in the general tab.
|
|
if (NULL != m_lpNotifyHandle)
|
|
{
|
|
MMCFreeNotifyHandle(m_lpNotifyHandle);
|
|
m_lpNotifyHandle = NULL;
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CppFaxDeviceGeneral message handlers
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::InitRPC
|
|
-
|
|
* Purpose:
|
|
* Initiates the configuration structure from RPC get Call.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* OLE error code
|
|
*/
|
|
HRESULT CppFaxDeviceGeneral::InitRPC( )
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::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 Device configuration
|
|
//
|
|
if (!FaxGetPortEx(m_pFaxServer->GetFaxServerHandle(),
|
|
m_dwDeviceID,
|
|
&m_pFaxDeviceConfig))
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Fail to get device 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_pFaxDeviceConfig);
|
|
|
|
ATLASSERT(S_OK == hRc);
|
|
DebugPrintEx( DEBUG_MSG,
|
|
_T("Succeed to get device configuration."));
|
|
|
|
goto Exit;
|
|
|
|
Error:
|
|
ATLASSERT(ERROR_SUCCESS != ec);
|
|
hRc = HRESULT_FROM_WIN32(ec);
|
|
|
|
PageError(GetFaxServerErrorMsg(ec), m_hWnd);
|
|
|
|
Exit:
|
|
return (hRc);
|
|
}
|
|
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::OnInitDialog
|
|
-
|
|
* Purpose:
|
|
* Initiates all controls when dialog is called.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
*
|
|
*/
|
|
LRESULT CppFaxDeviceGeneral::OnInitDialog( UINT uiMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled )
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::PageInitDialog"));
|
|
|
|
DWORD ec = ERROR_SUCCESS;
|
|
|
|
UNREFERENCED_PARAMETER( uiMsg );
|
|
UNREFERENCED_PARAMETER( wParam );
|
|
UNREFERENCED_PARAMETER( lParam );
|
|
UNREFERENCED_PARAMETER( fHandled );
|
|
|
|
//
|
|
// init controls
|
|
//
|
|
m_DescriptionBox.Attach(GetDlgItem(IDC_DEVICE_DESCRIPTION_EDIT));
|
|
m_TSIDBox.Attach(GetDlgItem(IDC_DEVICE_TSID_EDIT));
|
|
m_CSIDBox.Attach(GetDlgItem(IDC_DEVICE_CSID_EDIT));
|
|
m_RingsBox.Attach(GetDlgItem(IDC_DEVICE_RINGS_EDIT));
|
|
m_RingsSpin.Attach(GetDlgItem(IDC_DEVICE_RINGS_SPIN));
|
|
|
|
m_DescriptionBox.SetLimitText(MAX_FAX_STRING_LEN-1);
|
|
m_TSIDBox.SetLimitText(FXS_TSID_CSID_MAX_LENGTH);
|
|
m_CSIDBox.SetLimitText(FXS_TSID_CSID_MAX_LENGTH);
|
|
m_RingsBox.SetLimitText(FXS_RINGS_LENGTH);
|
|
|
|
|
|
ATLASSERT(m_pFaxDeviceConfig);
|
|
|
|
//
|
|
// Description
|
|
//
|
|
m_DescriptionBox.SetWindowText(m_pFaxDeviceConfig->lptstrDescription);
|
|
|
|
//
|
|
// Rings
|
|
//
|
|
m_RingsSpin.SetRange(FXS_RINGS_LOWER, FXS_RINGS_UPPER);
|
|
m_RingsSpin.SetPos((int)m_pFaxDeviceConfig->dwRings);
|
|
|
|
//
|
|
// CSID
|
|
//
|
|
m_CSIDBox.SetWindowText(m_pFaxDeviceConfig->lptstrCsid);
|
|
|
|
//
|
|
// Receive
|
|
//
|
|
switch ( m_pFaxDeviceConfig->ReceiveMode )
|
|
{
|
|
case FAX_DEVICE_RECEIVE_MODE_OFF: // Do not answer to incoming calls
|
|
CheckDlgButton(IDC_RECEIVE_CHECK, BST_UNCHECKED);
|
|
CheckDlgButton(IDC_RECEIVE_AUTO_RADIO1, BST_CHECKED);
|
|
EnableReceiveControls (FALSE);
|
|
break;
|
|
|
|
case FAX_DEVICE_RECEIVE_MODE_AUTO: // Automatically answer to incoming calls after dwRings rings
|
|
CheckDlgButton(IDC_RECEIVE_CHECK, BST_CHECKED);
|
|
CheckDlgButton(IDC_RECEIVE_AUTO_RADIO1, BST_CHECKED);
|
|
EnableRingsControls (TRUE);
|
|
break;
|
|
|
|
case FAX_DEVICE_RECEIVE_MODE_MANUAL: // Manually answer to incoming calls - only FaxAnswerCall answers the call
|
|
CheckDlgButton(IDC_RECEIVE_CHECK, BST_CHECKED);
|
|
CheckDlgButton(IDC_RECEIVE_MANUAL_RADIO2, BST_CHECKED);
|
|
EnableRingsControls (FALSE);
|
|
break;
|
|
|
|
default:
|
|
ATLASSERT(FALSE);
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Unexpected m_pFaxDeviceConfig->ReceiveMode"));
|
|
|
|
}
|
|
|
|
if(m_pFaxServer->GetServerAPIVersion() == FAX_API_VERSION_0)
|
|
{
|
|
//
|
|
// The remote fax server is SBS/BOS 2000
|
|
// is does not support manual answering
|
|
//
|
|
::EnableWindow(::GetDlgItem(m_hWnd, IDC_RECEIVE_MANUAL_RADIO2), FALSE);
|
|
|
|
ATLASSERT(IsDlgButtonChecked(IDC_RECEIVE_MANUAL_RADIO2) != BST_CHECKED);
|
|
}
|
|
|
|
//
|
|
// TSID
|
|
//
|
|
m_TSIDBox.SetWindowText(m_pFaxDeviceConfig->lptstrTsid);
|
|
|
|
//
|
|
// Send
|
|
//
|
|
if (m_pFaxDeviceConfig->bSend)
|
|
{
|
|
CheckDlgButton(IDC_SEND_CHECK, BST_CHECKED) ;
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(IDC_SEND_CHECK, BST_UNCHECKED) ;
|
|
::EnableWindow(GetDlgItem(IDC_DEVICE_TSID_EDIT), FALSE);
|
|
}
|
|
|
|
m_fIsDialogInitiated = TRUE;
|
|
|
|
return (1);
|
|
|
|
}
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::SetProps
|
|
-
|
|
* Purpose:
|
|
* Sets properties on apply.
|
|
*
|
|
* Arguments:
|
|
* pCtrlFocus - focus pointer (int)
|
|
*
|
|
* Return:
|
|
* OLE error code
|
|
*/
|
|
HRESULT CppFaxDeviceGeneral::SetProps(int *pCtrlFocus)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::SetProps"));
|
|
|
|
HRESULT hRc = S_OK;
|
|
DWORD ec = ERROR_SUCCESS;
|
|
|
|
HINSTANCE hInst = _Module.GetResourceInstance();
|
|
|
|
CComBSTR bstrDescription = L"";
|
|
CComBSTR bstrCSID = L"";
|
|
CComBSTR bstrTSID = L"";
|
|
|
|
FAX_PORT_INFO_EX FaxDeviceConfig;
|
|
|
|
ATLASSERT(m_dwDeviceID == m_pFaxDeviceConfig->dwDeviceID);
|
|
|
|
CFaxDevicePropertyChangeNotification * pDevicePropPageNotification = NULL;
|
|
|
|
ATLASSERT(TRUE == m_fAllReadyToApply);
|
|
m_fAllReadyToApply = FALSE;
|
|
|
|
//
|
|
// Step 1: Collect all data and init the structure's fields
|
|
// uses Copy() to copy and also allocate before
|
|
//
|
|
ZeroMemory (&FaxDeviceConfig, sizeof(FAX_PORT_INFO_EX));
|
|
|
|
FaxDeviceConfig.dwSizeOfStruct = sizeof(FAX_PORT_INFO_EX);
|
|
FaxDeviceConfig.dwDeviceID = m_dwDeviceID;
|
|
FaxDeviceConfig.lpctstrDeviceName = m_pFaxDeviceConfig->lpctstrDeviceName;
|
|
|
|
FaxDeviceConfig.lpctstrProviderName = m_pFaxDeviceConfig->lpctstrProviderName;
|
|
FaxDeviceConfig.lpctstrProviderGUID = m_pFaxDeviceConfig->lpctstrProviderGUID;
|
|
|
|
//
|
|
// Description
|
|
//
|
|
if ( !m_DescriptionBox.GetWindowText(&bstrDescription))
|
|
{
|
|
*pCtrlFocus = IDC_DEVICE_DESCRIPTION_EDIT;
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Failed to GetWindowText(&bstrDescription)"));
|
|
ec = ERROR_OUTOFMEMORY;
|
|
goto Error;
|
|
}
|
|
// We allow empty description string!
|
|
FaxDeviceConfig.lptstrDescription = bstrDescription;
|
|
|
|
//
|
|
// Receive
|
|
//
|
|
if (IsDlgButtonChecked(IDC_RECEIVE_CHECK) == BST_CHECKED)
|
|
{
|
|
if (IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED)
|
|
{
|
|
FaxDeviceConfig.ReceiveMode = FAX_DEVICE_RECEIVE_MODE_AUTO;
|
|
|
|
//
|
|
// new Rings
|
|
//
|
|
FaxDeviceConfig.dwRings = (DWORD)m_RingsSpin.GetPos();
|
|
}
|
|
else //(IDC_RECEIVE_MANUAL_RADIO2) == BST_CHECKED)
|
|
{
|
|
FaxDeviceConfig.ReceiveMode = FAX_DEVICE_RECEIVE_MODE_MANUAL;
|
|
|
|
//
|
|
// Rings and CSID stay as is
|
|
//
|
|
FaxDeviceConfig.dwRings = m_pFaxDeviceConfig->dwRings;
|
|
}
|
|
|
|
//
|
|
// new CSID
|
|
//
|
|
if ( !m_CSIDBox.GetWindowText(&bstrCSID))
|
|
{
|
|
*pCtrlFocus = IDC_DEVICE_CSID_EDIT;
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Failed to GetWindowText(&bstrCSID)"));
|
|
ec = ERROR_OUTOFMEMORY;
|
|
goto Error;
|
|
}
|
|
//We allow empty CSID.
|
|
FaxDeviceConfig.lptstrCsid = bstrCSID;
|
|
}
|
|
else
|
|
{
|
|
FaxDeviceConfig.ReceiveMode = FAX_DEVICE_RECEIVE_MODE_OFF;
|
|
|
|
//
|
|
// Rings and CSID stay as is
|
|
//
|
|
FaxDeviceConfig.dwRings = m_pFaxDeviceConfig->dwRings;
|
|
FaxDeviceConfig.lptstrCsid = m_pFaxDeviceConfig->lptstrCsid;
|
|
}
|
|
|
|
|
|
//
|
|
// Send
|
|
//
|
|
if (IsDlgButtonChecked(IDC_SEND_CHECK) == BST_CHECKED)
|
|
{
|
|
FaxDeviceConfig.bSend = TRUE;
|
|
|
|
//
|
|
// new TSID
|
|
//
|
|
if ( !m_TSIDBox.GetWindowText(&bstrTSID))
|
|
{
|
|
*pCtrlFocus = IDC_DEVICE_TSID_EDIT;
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Failed to GetWindowText(&bstrTSID)"));
|
|
ec = ERROR_OUTOFMEMORY;
|
|
goto Error;
|
|
}
|
|
//we allow empty TSID!
|
|
FaxDeviceConfig.lptstrTsid = bstrTSID;
|
|
|
|
}
|
|
else
|
|
{
|
|
FaxDeviceConfig.bSend = FALSE;
|
|
//
|
|
// TSID stay as is
|
|
//
|
|
FaxDeviceConfig.lptstrTsid = m_pFaxDeviceConfig->lptstrTsid;
|
|
}
|
|
|
|
//
|
|
// Step 2: Set data via RPC
|
|
//
|
|
|
|
//
|
|
// get RPC Handle
|
|
//
|
|
if (!m_pFaxServer->GetFaxServerHandle())
|
|
{
|
|
ec= GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Failed to GetFaxServerHandle. (ec: %ld)"),
|
|
ec);
|
|
goto Error;
|
|
}
|
|
|
|
//
|
|
// Set Config
|
|
//
|
|
if (!FaxSetPortEx(
|
|
m_pFaxServer->GetFaxServerHandle(),
|
|
m_dwDeviceID,
|
|
&FaxDeviceConfig))
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Fail to Set device configuration. (ec: %ld)"),
|
|
ec);
|
|
|
|
if ( FAX_ERR_DEVICE_NUM_LIMIT_EXCEEDED == ec )
|
|
{
|
|
hRc = HRESULT_FROM_WIN32(ERROR_INVALID_DATA);
|
|
|
|
DlgMsgBox(this, IDS_ERR_ADMIN_DEVICE_LIMIT, MB_OK|MB_ICONEXCLAMATION);
|
|
|
|
goto Exit;
|
|
}
|
|
|
|
if (IsNetworkError(ec))
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Network Error was found. (ec: %ld)"),
|
|
ec);
|
|
|
|
m_pFaxServer->Disconnect();
|
|
}
|
|
|
|
goto Error;
|
|
}
|
|
|
|
DebugPrintEx( DEBUG_MSG,
|
|
_T("Succeed to set device configuration."));
|
|
|
|
//
|
|
// Step 3: Update MMC
|
|
//
|
|
|
|
//
|
|
// Prepare the notification fields before submit
|
|
//
|
|
pDevicePropPageNotification = new CFaxDevicePropertyChangeNotification();
|
|
if (!pDevicePropPageNotification)
|
|
{
|
|
ec = ERROR_NOT_ENOUGH_MEMORY;
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Out of Memory - fail to operate new for CFaxDevicePropertyChangeNotification"));
|
|
|
|
goto Error;
|
|
}
|
|
|
|
pDevicePropPageNotification->dwDeviceID = m_dwDeviceID;
|
|
|
|
//
|
|
// We have decided that we'll refresh all devices on a
|
|
// manual receive enabling. If it gets FALSE, just the single device is refreshed.
|
|
//
|
|
pDevicePropPageNotification->fIsToNotifyAdditionalDevices =
|
|
( (FAX_DEVICE_RECEIVE_MODE_MANUAL == FaxDeviceConfig.ReceiveMode) ? TRUE : FALSE );
|
|
|
|
pDevicePropPageNotification->pItem = m_pGrandParentNode;
|
|
pDevicePropPageNotification->enumType = DeviceFaxPropNotification;
|
|
|
|
//
|
|
// Send notification from the property sheet thread to the main MMC thread
|
|
//
|
|
hRc = MMCPropertyChangeNotify(m_lpNotifyHandle, reinterpret_cast<LPARAM>(pDevicePropPageNotification));
|
|
if (FAILED(hRc))
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Fail to call MMCPropertyChangeNotify. (hRc: %08X)"),
|
|
hRc);
|
|
|
|
PageError(IDS_FAIL_NOTIFY_MMCPROPCHANGE,m_hWnd);
|
|
|
|
goto Exit;
|
|
}
|
|
|
|
//
|
|
// To prevent deletion on error since it will be deleted
|
|
// by the reciever of the notification.
|
|
//
|
|
pDevicePropPageNotification = NULL;
|
|
|
|
|
|
ATLASSERT(S_OK == hRc);
|
|
goto Exit;
|
|
|
|
Error:
|
|
ATLASSERT(ERROR_SUCCESS != ec);
|
|
hRc = HRESULT_FROM_WIN32(ec);
|
|
|
|
PropSheet_SetCurSelByID( GetParent(), IDD);
|
|
ATLASSERT(::IsWindow(m_hWnd));
|
|
PageError(GetFaxServerErrorMsg(ec),m_hWnd);
|
|
|
|
Exit:
|
|
return(hRc);
|
|
}
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::PreApply
|
|
-
|
|
* Purpose:
|
|
* Checks properties before apply.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* OLE error code
|
|
*/
|
|
HRESULT CppFaxDeviceGeneral::PreApply(int *pCtrlFocus)
|
|
{
|
|
HRESULT hRc = S_OK;
|
|
|
|
//
|
|
// PreApply Checks
|
|
//
|
|
if (!AllReadyToApply(/*fSilent =*/ FALSE))
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
hRc = E_FAIL ;
|
|
}
|
|
else
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
return(hRc);
|
|
}
|
|
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::OnApply
|
|
-
|
|
* Purpose:
|
|
* Calls PreApply and SetProp to Apply changes.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* TRUE or FALSE
|
|
*/
|
|
BOOL CppFaxDeviceGeneral::OnApply()
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::OnApply"));
|
|
|
|
|
|
HRESULT hRc = S_OK;
|
|
int CtrlFocus = 0;
|
|
|
|
hRc = PreApply(&CtrlFocus);
|
|
if (FAILED(hRc))
|
|
{
|
|
//Error Msg by called func.
|
|
if (CtrlFocus)
|
|
{
|
|
GotoDlgCtrl(GetDlgItem(CtrlFocus));
|
|
}
|
|
return FALSE;
|
|
}
|
|
else //(Succeeded(hRc))
|
|
{
|
|
hRc = SetProps(&CtrlFocus);
|
|
if (FAILED(hRc))
|
|
{
|
|
//Error Msg by called func.
|
|
if (CtrlFocus)
|
|
{
|
|
GotoDlgCtrl(GetDlgItem(CtrlFocus));
|
|
}
|
|
return FALSE;
|
|
}
|
|
else //(Succeeded(hRc))
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::OnReceiveCheckboxClicked
|
|
-
|
|
* Purpose:
|
|
* Gray/Ungray the sub controls
|
|
* Enable apply button.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT CppFaxDeviceGeneral::OnReceiveCheckboxClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::OnReceiveCheckboxClicked"));
|
|
BOOL State;
|
|
|
|
if (!m_fIsDialogInitiated) //event receieved in too early stage
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
State = ( IsDlgButtonChecked(IDC_RECEIVE_CHECK) == BST_CHECKED );
|
|
|
|
EnableReceiveControls(State);
|
|
|
|
if (m_fAllReadyToApply)//only last change should be considered
|
|
{
|
|
if ( !m_RingsBox.GetWindowTextLength() )
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
else
|
|
{
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
else //m_fAllReadyToApply == FALSE
|
|
{
|
|
if (AllReadyToApply(TRUE))
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
else
|
|
{
|
|
SetModified(FALSE);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::OnReceiveRadioButtonClicked
|
|
-
|
|
* Purpose:
|
|
* Check status OnReceiveRadioButtonClicked
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT
|
|
CppFaxDeviceGeneral::OnReceiveRadioButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
UNREFERENCED_PARAMETER (wNotifyCode);
|
|
UNREFERENCED_PARAMETER (wID);
|
|
UNREFERENCED_PARAMETER (hWndCtl);
|
|
UNREFERENCED_PARAMETER (bHandled);
|
|
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::OnReceiveRadioButtonClicked"));
|
|
|
|
if ( IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED )
|
|
{
|
|
EnableRingsControls(TRUE);
|
|
|
|
::SetFocus(GetDlgItem(IDC_DEVICE_RINGS_EDIT));
|
|
}
|
|
else //IDC_RECEIVE_MANUAL_RADIO2
|
|
{
|
|
EnableRingsControls(FALSE);
|
|
}
|
|
|
|
if (m_fAllReadyToApply)//only last change should be considered
|
|
{
|
|
if (
|
|
( IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED )
|
|
&&
|
|
(!m_RingsBox.GetWindowTextLength() )
|
|
)
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
else
|
|
{
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
else //m_fAllReadyToApply == FALSE
|
|
{
|
|
if (AllReadyToApply(TRUE))
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
else
|
|
{
|
|
SetModified(FALSE);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
+ CppFaxDeviceGeneral::OnSendCheckboxClicked
|
|
+
|
|
* Purpose:
|
|
* Gray/Ungray sub copntrols
|
|
* Enable apply button.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
- 1
|
|
-
|
|
*/
|
|
LRESULT CppFaxDeviceGeneral::OnSendCheckboxClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::OnSendCheckboxClicked"));
|
|
BOOL State;
|
|
|
|
if (!m_fIsDialogInitiated) //event receieved in too early stage
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
State = ( IsDlgButtonChecked(IDC_SEND_CHECK) == BST_CHECKED );
|
|
::EnableWindow(GetDlgItem(IDC_DEVICE_TSID_EDIT), State);
|
|
::EnableWindow(GetDlgItem(IDC_TSID_STATIC), State);
|
|
|
|
if (AllReadyToApply(TRUE))
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
//this is due to the fact that we allow empty CSID
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::DeviceTextChanged
|
|
-
|
|
* Purpose:
|
|
* set Apply buttom modified.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT CppFaxDeviceGeneral::DeviceTextChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
|
|
if (AllReadyToApply(TRUE))
|
|
{
|
|
m_fAllReadyToApply = TRUE;
|
|
SetModified(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_fAllReadyToApply = FALSE;
|
|
SetModified(FALSE);
|
|
}
|
|
|
|
return(1);
|
|
}
|
|
|
|
|
|
/*
|
|
+ CppFaxDeviceGeneral::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 CppFaxDeviceGeneral::AllReadyToApply(BOOL fSilent)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::AllReadyToApply"));
|
|
|
|
DWORD ec = ERROR_SUCCESS;
|
|
|
|
HINSTANCE hInst = _Module.GetResourceInstance();
|
|
|
|
if (
|
|
(IsDlgButtonChecked(IDC_RECEIVE_CHECK) == BST_CHECKED)
|
|
&&
|
|
(IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED)
|
|
)
|
|
{
|
|
if ( !m_RingsBox.GetWindowTextLength() )
|
|
{
|
|
ec = GetLastError();
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
_T("Zero text length - m_RingsBox. (ec: %ld)"),
|
|
ec);
|
|
|
|
if (!fSilent)
|
|
{
|
|
PageError(IDS_DEVICE_RINGS_EMPTY, m_hWnd, hInst);
|
|
::SetFocus(GetDlgItem(IDC_DEVICE_RINGS_EDIT));
|
|
}
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
//we allow empty tsid
|
|
//we allow empty csid
|
|
//we allow empty description
|
|
|
|
ATLASSERT(ERROR_SUCCESS == ec);
|
|
|
|
//
|
|
// Cheers!
|
|
// ...every thing ready to apply now.
|
|
//
|
|
return TRUE;
|
|
}
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::EnableRingsControls
|
|
-
|
|
* Purpose:
|
|
* Enable/disable the Rings controls.
|
|
*
|
|
* Arguments:
|
|
* [in] state - boolean value to enable TRUE or FALSE to disable
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void CppFaxDeviceGeneral::EnableRingsControls(BOOL fState)
|
|
{
|
|
|
|
//
|
|
// enable/disable controls
|
|
//
|
|
::EnableWindow(GetDlgItem(IDC_DEVICE_RINGS_EDIT), fState);
|
|
::EnableWindow(GetDlgItem(IDC_DEVICE_RINGS_SPIN), fState);
|
|
::EnableWindow(GetDlgItem(IDC_DEVICE_RINGS_STATIC), fState);
|
|
}
|
|
|
|
/*
|
|
- CppFaxDeviceGeneral::EnableReceiveControls
|
|
-
|
|
* Purpose:
|
|
* Enable/disable the Rings controls.
|
|
*
|
|
* Arguments:
|
|
* [in] state - boolean value to enable TRUE or FALSE to disable
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void CppFaxDeviceGeneral::EnableReceiveControls(BOOL fState)
|
|
{
|
|
|
|
//
|
|
// enable/disable controls
|
|
//
|
|
if(m_pFaxServer->GetServerAPIVersion() == CURRENT_FAX_API_VERSION)
|
|
{
|
|
::EnableWindow(GetDlgItem(IDC_RECEIVE_MANUAL_RADIO2), fState);
|
|
}
|
|
|
|
::EnableWindow(GetDlgItem(IDC_RECEIVE_AUTO_RADIO1), fState);
|
|
|
|
|
|
::EnableWindow(GetDlgItem(IDC_DEVICE_CSID_EDIT), fState);
|
|
::EnableWindow(GetDlgItem(IDC_CSID_STATIC), fState);
|
|
|
|
//
|
|
// Combined state
|
|
//
|
|
fState = fState && (IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED);
|
|
EnableRingsControls(fState);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CppFaxDeviceGeneral::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
|
|
CppFaxDeviceGeneral::OnHelpRequest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
|
{
|
|
DEBUG_FUNCTION_NAME(_T("CppFaxDeviceGeneral::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;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|