windows-nt/Source/XPSP1/NT/printscan/fax/admin/fspext/fsp.cpp
2020-09-26 16:20:57 +08:00

245 lines
6.7 KiB
C++

#include "stdafx.h"
#include "fspext.h"
#include "FSP.h"
/////////////////////////////////////////////////////////////////////////////
// CFSPComponentData
static const GUID CFSPGUID_NODETYPE =
{ 0xde58ae00, 0x4c0f, 0x11d1, {0x90, 0x83, 0x00, 0xa0, 0xc9, 0x0a, 0xb5, 0x04}};
const GUID* CFSPData::m_NODETYPE = &CFSPGUID_NODETYPE;
const TCHAR* CFSPData::m_SZNODETYPE = _T("de58ae00-4c0f-11d1-9083-00a0c90ab504");
const TCHAR* CFSPData::m_SZDISPLAY_NAME = _T("CFSP");
const CLSID* CFSPData::m_SNAPIN_CLASSID = &CLSID_FSP;
LRESULT CFSPPage::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
//::SendMessage(GetParent(), PSM_SETWIZBUTTONS, 0, PSWIZB_FINISH);
SetChangedFlag (FALSE);
switch (m_LoggingLevel) {
case LOGGING_NONE:
CheckDlgButton( IDC_LOG_NONE, TRUE);
::EnableWindow( GetDlgItem( IDC_LOGLOCATION ), FALSE );
::EnableWindow( GetDlgItem( IDC_LOCATION_LABEL ), FALSE );
::EnableWindow( GetDlgItem( IDC_LOGBROWSE ), FALSE );
break;
case LOGGING_ERRORS:
CheckDlgButton( IDC_LOG_ERRORS, TRUE);
::EnableWindow( GetDlgItem( IDC_LOGLOCATION ), TRUE );
::EnableWindow( GetDlgItem( IDC_LOCATION_LABEL ), TRUE );
::EnableWindow( GetDlgItem( IDC_LOGBROWSE ), TRUE );
break;
case LOGGING_ALL:
CheckDlgButton( IDC_LOG_ALL , TRUE);
::EnableWindow( GetDlgItem( IDC_LOGLOCATION ), TRUE );
::EnableWindow( GetDlgItem( IDC_LOCATION_LABEL ), TRUE );
::EnableWindow( GetDlgItem( IDC_LOGBROWSE ), TRUE );
break;
default:
CheckDlgButton( IDC_LOG_NONE , TRUE);
::EnableWindow( GetDlgItem( IDC_LOGLOCATION ), FALSE );
::EnableWindow( GetDlgItem( IDC_LOCATION_LABEL ), FALSE );
::EnableWindow( GetDlgItem( IDC_LOGBROWSE ), FALSE );
}
SendDlgItemMessage( IDC_LOGLOCATION, EM_SETLIMITTEXT, MAX_PATH - 2, 0 );
if (m_LoggingDirectory) {
SetDlgItemText( IDC_LOGLOCATION, m_LoggingDirectory );
}
return 1;
}
VOID CFSPPage::SetChangedFlag( BOOL Flag ) {
PropSheet_Changed( GetParent(), m_hWnd );
m_bChanged = TRUE;
}
LRESULT CFSPPage::DisableLogging(INT code, INT id, HWND hwnd, BOOL& bHandled)
{
::EnableWindow( GetDlgItem( IDC_LOGLOCATION ), FALSE );
::EnableWindow( GetDlgItem( IDC_LOCATION_LABEL ), FALSE );
::EnableWindow( GetDlgItem( IDC_LOGBROWSE ), FALSE );
SetChangedFlag(TRUE);
return 1;
}
LRESULT CFSPPage::EnableLogging(INT code, INT id, HWND hwnd, BOOL& bHandled)
{
::EnableWindow( GetDlgItem( IDC_LOGLOCATION ), TRUE );
::EnableWindow( GetDlgItem( IDC_LOCATION_LABEL ), TRUE );
::EnableWindow( GetDlgItem( IDC_LOGBROWSE ), TRUE );
SetChangedFlag(TRUE);
return 1;
}
LRESULT CFSPPage::OnBrowseDir(INT code, INT id, HWND hwnd, BOOL& bHandled) {
BrowseForDirectory();
return 1;
}
BOOL CFSPPage::OnApply()
{
//
// if there aren't any changes, don't commit anything
//
if (!m_bChanged) {
return TRUE;
}
if (IsDlgButtonChecked(IDC_LOG_NONE)== BST_CHECKED) {
m_LoggingLevel = LOGGING_NONE;
} else if (IsDlgButtonChecked(IDC_LOG_ERRORS)== BST_CHECKED) {
m_LoggingLevel = LOGGING_ERRORS;
} else if (IsDlgButtonChecked(IDC_LOG_ALL)== BST_CHECKED) {
m_LoggingLevel = LOGGING_ALL;
} else
m_LoggingLevel = LOGGING_NONE;
if (m_LoggingLevel != LOGGING_NONE) {
if (m_LoggingDirectory) {
MemFree(m_LoggingDirectory);
}
m_LoggingDirectory = (LPTSTR) MemAlloc ( MAX_PATH );
if (!GetDlgItemText( IDC_LOGLOCATION,m_LoggingDirectory, MAX_PATH - 1 ) ) {
MessageBox(TEXT("You must enter a logging location"),
TEXT("Logging Error"),
MB_OK | MB_ICONEXCLAMATION);
MemFree(m_LoggingDirectory);
m_LoggingDirectory = NULL;
::SetFocus(GetDlgItem(IDC_LOGLOCATION));
return FALSE;
} else {
if (!ValidateLogLocation()) {
MessageBox(TEXT("You must enter a logging location"),
TEXT("Logging Error"),
MB_OK | MB_ICONEXCLAMATION);
MemFree(m_LoggingDirectory);
m_LoggingDirectory = NULL;
::SetFocus(GetDlgItem(IDC_LOGLOCATION));
return FALSE;
}
}
} else
if (m_LoggingDirectory) {
MemFree(m_LoggingDirectory);
m_LoggingDirectory = TEXT("");
}
if (!m_LogKey) {
Assert(FALSE);
}
SetRegistryDword(m_LogKey,LOGLEVEL,m_LoggingLevel);
SetRegistryString(m_LogKey,LOGLOCATION,m_LoggingDirectory);
MessageBox(TEXT("You must restart the fax service for your logging changes to take effect"),
TEXT("Logging Change"),
MB_OK);
SetChangedFlag(FALSE);
return TRUE;
}
BOOL
CFSPPage::BrowseForDirectory(
)
/*++
Routine Description:
Browse for a directory
Arguments:
hDlg - Specifies the dialog window on which the Browse button is displayed
textFieldId - Specifies the text field adjacent to the Browse button
titleStrId - Specifies the title to be displayed in the browse window
Return Value:
TRUE if successful, FALSE if the user presses Cancel
--*/
{
LPITEMIDLIST pidl;
WCHAR buffer[MAX_PATH];
WCHAR title[MAX_TITLE_LEN];
VOID SHFree(LPVOID);
BOOL result = FALSE;
LPMALLOC pMalloc;
BROWSEINFO bi = {
m_hWnd,
NULL,
buffer,
title,
BIF_RETURNONLYFSDIRS,
NULL,
(LPARAM) buffer,
};
if (! LoadString(_Module.m_hInst, IDS_BROWSE_TITLE, title, MAX_TITLE_LEN))
title[0] = 0;
if (! GetDlgItemText( IDC_LOGLOCATION, buffer, MAX_PATH))
buffer[0] = 0;
if (pidl = SHBrowseForFolder(&bi)) {
if (SHGetPathFromIDList(pidl, buffer)) {
if (wcslen(buffer) > MAX_PATH-2) {
Assert(FALSE);
} else {
SetDlgItemText(IDC_LOGLOCATION, buffer);
result = TRUE;
}
}
SHGetMalloc(&pMalloc);
pMalloc->Free(pidl);
pMalloc->Release();
}
return result;
}
BOOL CFSPPage::ValidateLogLocation()
{
HANDLE hFile = INVALID_HANDLE_VALUE;
TCHAR file[MAX_PATH];
wsprintf(file,TEXT("%s\\faxt30.log"),m_LoggingDirectory);
hFile = CreateFile(file,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,NULL);
if (hFile == INVALID_HANDLE_VALUE) {
CloseHandle(hFile);
return FALSE;
}
CloseHandle(hFile);
DeleteFile(m_LoggingDirectory);
return TRUE;
}