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.
392 lines
11 KiB
392 lines
11 KiB
#include "faxcfgwz.h"
|
|
#include <strsafe.h>
|
|
|
|
#define MAX_SUMMARY_LEN 4096
|
|
|
|
static
|
|
BOOL
|
|
AppendSummaryText(
|
|
LPTSTR pSummaryText,
|
|
DWORD dwSummaryTextLen,
|
|
INT iRes,
|
|
...
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Create summary information depending on config settings
|
|
|
|
Arguments:
|
|
|
|
pSummaryText - pointer of summary text
|
|
dwSummaryTextLen - total length (in TCHARs) of pSummaryText
|
|
iRes - resource ID for the text to be added into the summary text
|
|
... = arguments as required for the formatting
|
|
|
|
Return Value:
|
|
|
|
TRUE if successful, FALSE for failure.
|
|
|
|
--*/
|
|
{
|
|
va_list va;
|
|
HRESULT hr;
|
|
TCHAR szBuffer[MAX_SUMMARY_LEN] = {0};
|
|
TCHAR szFormat[2*MAX_PATH + 1] = {0};
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("AppendSummaryText"));
|
|
|
|
if(!LoadString(g_hResource, iRes, szFormat, ARR_SIZE(szFormat)-1))
|
|
{
|
|
DebugPrintEx(DEBUG_ERR,
|
|
TEXT("LoadString failed. string ID=%d, error=%d"),
|
|
iRes,
|
|
GetLastError());
|
|
Assert(FALSE);
|
|
return FALSE;
|
|
}
|
|
|
|
va_start(va, iRes);
|
|
hr = StringCchVPrintf (szBuffer, ARR_SIZE(szBuffer), szFormat, va);
|
|
va_end(va);
|
|
if (FAILED(hr))
|
|
{
|
|
//
|
|
// Failed to format string - buffer is too small
|
|
//
|
|
DebugPrintEx(DEBUG_ERR,
|
|
TEXT("Failed to format string - buffer is too small. 0x%08x"), hr);
|
|
Assert(FALSE);
|
|
return FALSE;
|
|
}
|
|
hr = StringCchCat (pSummaryText, dwSummaryTextLen, szBuffer);
|
|
if (FAILED(hr))
|
|
{
|
|
//
|
|
// Failed to concat string - buffer is too small
|
|
//
|
|
DebugPrintEx(DEBUG_ERR,
|
|
TEXT("Failed to concat string - buffer is too small. 0x%08x"), hr);
|
|
Assert(FALSE);
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
} // AppendSummaryText
|
|
|
|
BOOL
|
|
ShowSummaryText(
|
|
HWND hDlg
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Create summary information depending on config settings
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the complete page
|
|
|
|
Return Value:
|
|
|
|
TRUE if successful, FALSE for failure.
|
|
|
|
--*/
|
|
{
|
|
TCHAR szSummaryText[MAX_SUMMARY_LEN] = {0};
|
|
HWND hControl;
|
|
BOOL bRes = FALSE;
|
|
DWORD dwRoutingEnabled = FALSE; // indicate whether at least one routing method is enabled
|
|
DWORD dwIndex;
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("ShowSummaryText()"));
|
|
|
|
hControl = GetDlgItem(hDlg, IDC_SUMMARY);
|
|
|
|
|
|
// get the control ID and clear the current content.
|
|
SetWindowText(hControl, TEXT(""));
|
|
|
|
// if no device is selected, don't show the summary page.
|
|
if(!IsSendEnable() && !IsReceiveEnable())
|
|
{
|
|
ShowWindow(hControl, SW_HIDE);
|
|
goto exit;
|
|
}
|
|
|
|
if(!LoadString(g_hResource, IDS_SUMMARY, szSummaryText, MAX_PATH))
|
|
{
|
|
DebugPrintEx(DEBUG_ERR,
|
|
TEXT("LoadString failed: string ID=%d, error=%d"),
|
|
IDS_SUMMARY,
|
|
GetLastError());
|
|
|
|
ShowWindow(hControl, SW_HIDE);
|
|
goto exit;
|
|
}
|
|
//
|
|
// Add send device settings
|
|
//
|
|
if(IsSendEnable())
|
|
{
|
|
if (!AppendSummaryText(szSummaryText, ARR_SIZE (szSummaryText), IDS_SUMMARY_SEND_DEVICES))
|
|
{
|
|
goto exit;
|
|
}
|
|
for(dwIndex = 0; dwIndex < g_wizData.dwDeviceCount; dwIndex++)
|
|
{
|
|
if(g_wizData.pDevInfo[dwIndex].bSend)
|
|
{
|
|
if (!AppendSummaryText(szSummaryText,
|
|
ARR_SIZE (szSummaryText),
|
|
IDS_SUMMARY_DEVICE_ITEM,
|
|
g_wizData.pDevInfo[dwIndex].szDeviceName))
|
|
{
|
|
goto exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(g_wizData.szTsid)
|
|
{
|
|
if (!AppendSummaryText(szSummaryText, ARR_SIZE (szSummaryText), IDS_SUMMARY_TSID, g_wizData.szTsid))
|
|
{
|
|
goto exit;
|
|
}
|
|
}
|
|
}
|
|
//
|
|
// Add receive device settings
|
|
//
|
|
if(IsReceiveEnable())
|
|
{
|
|
BOOL bAuto = FALSE;
|
|
int iManualAnswerDeviceIndex = -1;
|
|
|
|
if (!AppendSummaryText(szSummaryText, ARR_SIZE (szSummaryText), IDS_SUMMARY_RECEIVE_DEVICES))
|
|
{
|
|
goto exit;
|
|
}
|
|
for(dwIndex = 0; dwIndex < g_wizData.dwDeviceCount; dwIndex++)
|
|
{
|
|
if(FAX_DEVICE_RECEIVE_MODE_AUTO == g_wizData.pDevInfo[dwIndex].ReceiveMode)
|
|
{
|
|
bAuto = TRUE;
|
|
if (!AppendSummaryText(szSummaryText,
|
|
ARR_SIZE (szSummaryText),
|
|
IDS_SUMMARY_DEVICE_ITEM,
|
|
g_wizData.pDevInfo[dwIndex].szDeviceName))
|
|
{
|
|
goto exit;
|
|
}
|
|
}
|
|
else if (FAX_DEVICE_RECEIVE_MODE_MANUAL == g_wizData.pDevInfo[dwIndex].ReceiveMode)
|
|
{
|
|
iManualAnswerDeviceIndex = dwIndex;
|
|
}
|
|
}
|
|
|
|
if(bAuto)
|
|
{
|
|
if (!AppendSummaryText(szSummaryText,
|
|
ARR_SIZE (szSummaryText),
|
|
IDS_SUMMARY_AUTO_ANSWER,
|
|
g_wizData.dwRingCount))
|
|
{
|
|
goto exit;
|
|
}
|
|
}
|
|
|
|
if(iManualAnswerDeviceIndex != -1)
|
|
{
|
|
Assert(!bAuto);
|
|
|
|
if (!AppendSummaryText(szSummaryText,
|
|
ARR_SIZE (szSummaryText),
|
|
IDS_SUMMARY_DEVICE_ITEM,
|
|
g_wizData.pDevInfo[iManualAnswerDeviceIndex].szDeviceName))
|
|
{
|
|
goto exit;
|
|
}
|
|
if (!AppendSummaryText(szSummaryText, ARR_SIZE (szSummaryText), IDS_SUMMARY_MANUAL_ANSWER))
|
|
{
|
|
goto exit;
|
|
}
|
|
}
|
|
|
|
if(g_wizData.szCsid)
|
|
{
|
|
if (!AppendSummaryText(szSummaryText, ARR_SIZE (szSummaryText), IDS_SUMMARY_CSID, g_wizData.szCsid))
|
|
{
|
|
goto exit;
|
|
}
|
|
}
|
|
|
|
// check whether user selects routing methods
|
|
for(dwIndex = 0; dwIndex < RM_COUNT; dwIndex++)
|
|
{
|
|
if(g_wizData.pRouteInfo[dwIndex].bEnabled)
|
|
{
|
|
dwRoutingEnabled = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
//
|
|
// add routing information:
|
|
//
|
|
if(dwRoutingEnabled)
|
|
{
|
|
if (!AppendSummaryText(szSummaryText, ARR_SIZE (szSummaryText), IDS_SUMMARY_ROUTING_METHODS))
|
|
{
|
|
goto exit;
|
|
}
|
|
for(dwIndex = 0; dwIndex < RM_COUNT; dwIndex++)
|
|
{
|
|
BOOL bEnabled;
|
|
LPTSTR tszCurSel;
|
|
|
|
//
|
|
// if we don't have this kind of method, go to the next one
|
|
//
|
|
tszCurSel = g_wizData.pRouteInfo[dwIndex].tszCurSel;
|
|
bEnabled = g_wizData.pRouteInfo[dwIndex].bEnabled;
|
|
|
|
switch (dwIndex)
|
|
{
|
|
case RM_FOLDER:
|
|
|
|
if(bEnabled)
|
|
{
|
|
if (!AppendSummaryText(szSummaryText, ARR_SIZE (szSummaryText), IDS_SUMMARY_SAVE_FOLDER, tszCurSel))
|
|
{
|
|
goto exit;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case RM_PRINT:
|
|
|
|
if(bEnabled)
|
|
{
|
|
if (!AppendSummaryText(szSummaryText, ARR_SIZE (szSummaryText), IDS_SUMMARY_PRINT, tszCurSel))
|
|
{
|
|
goto exit;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ShowWindow(hControl, SW_NORMAL);
|
|
SetWindowText(hControl, szSummaryText);
|
|
bRes = TRUE;
|
|
|
|
exit:
|
|
return bRes;
|
|
}
|
|
|
|
|
|
INT_PTR CALLBACK
|
|
CompleteDlgProc (
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Procedure for handling the "Complete" page
|
|
|
|
Arguments:
|
|
|
|
hDlg - Identifies the property sheet page
|
|
uMsg - Specifies the message
|
|
wParam - Specifies additional message-specific information
|
|
lParam - Specifies additional message-specific information
|
|
|
|
Return Value:
|
|
|
|
Depends on the value of message parameter
|
|
|
|
--*/
|
|
|
|
{
|
|
HWND hwndControl;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG :
|
|
{
|
|
// It's an intro/end page, so get the title font
|
|
// from the shared data and use it for the title control
|
|
|
|
hwndControl = GetDlgItem(hDlg, IDCSTATIC_COMPLETE);
|
|
SetWindowFont(hwndControl, g_wizData.hTitleFont, TRUE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
case WM_NOTIFY :
|
|
{
|
|
LPNMHDR lpnm = (LPNMHDR) lParam;
|
|
|
|
switch (lpnm->code)
|
|
{
|
|
case PSN_SETACTIVE : // Enable the Back and Finish button
|
|
|
|
ShowSummaryText(hDlg);
|
|
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_FINISH);
|
|
break;
|
|
|
|
case PSN_WIZBACK :
|
|
{
|
|
//
|
|
// Handle a Back button click here
|
|
//
|
|
if(RemoveLastPage(hDlg))
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
case PSN_WIZFINISH :
|
|
|
|
//
|
|
// Handle a Finish button click, if necessary
|
|
//
|
|
|
|
g_wizData.bFinishPressed = TRUE;
|
|
|
|
break;
|
|
|
|
case PSN_RESET :
|
|
{
|
|
// Handle a Cancel button click, if necessary
|
|
break;
|
|
}
|
|
|
|
default :
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|