Leaked source code of windows server 2003
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.
 
 
 
 
 
 

318 lines
9.3 KiB

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-1999 Microsoft Corporation
//
// Module Name:
// PrtSpool.cpp
//
// Abstract:
// Implementation of the CPrintSpoolerParamsPage class.
//
// Author:
// David Potter (davidp) October 17, 1996
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CluAdmX.h"
#include "ExtObj.h"
#include "PrtSpool.h"
#include "DDxDDv.h"
#include "HelpData.h" // for g_rghelpmap*
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPrintSpoolerParamsPage property page
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CPrintSpoolerParamsPage, CBasePropertyPage)
/////////////////////////////////////////////////////////////////////////////
// Message Maps
BEGIN_MESSAGE_MAP(CPrintSpoolerParamsPage, CBasePropertyPage)
//{{AFX_MSG_MAP(CPrintSpoolerParamsPage)
ON_EN_CHANGE(IDC_PP_PRTSPOOL_PARAMS_SPOOL_DIR, OnChangeSpoolDir)
//}}AFX_MSG_MAP
// TODO: Modify the following lines to represent the data displayed on this page.
ON_EN_CHANGE(IDC_PP_PRTSPOOL_PARAMS_TIMEOUT, CBasePropertyPage::OnChangeCtrl)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CPrintSpoolerParamsPage::CPrintSpoolerParamsPage
//
// Routine Description:
// Default constructor.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
CPrintSpoolerParamsPage::CPrintSpoolerParamsPage(void)
: CBasePropertyPage(g_aHelpIDs_IDD_PP_PRTSPOOL_PARAMETERS, g_aHelpIDs_IDD_WIZ_PRTSPOOL_PARAMETERS)
{
// TODO: Modify the following lines to represent the data displayed on this page.
//{{AFX_DATA_INIT(CPrintSpoolerParamsPage)
m_strSpoolDir = _T("");
m_nJobCompletionTimeout = 0;
//}}AFX_DATA_INIT
// Setup the property array.
{
m_rgProps[epropSpoolDir].Set(REGPARAM_PRTSPOOL_DEFAULT_SPOOL_DIR, m_strSpoolDir, m_strPrevSpoolDir);
m_rgProps[epropTimeout].Set(REGPARAM_PRTSPOOL_TIMEOUT, m_nJobCompletionTimeout, m_nPrevJobCompletionTimeout);
} // Setup the property array
m_iddPropertyPage = IDD_PP_PRTSPOOL_PARAMETERS;
m_iddWizardPage = IDD_WIZ_PRTSPOOL_PARAMETERS;
} //*** CPrintSpoolerParamsPage::CPrintSpoolerParamsPage()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CPrintSpoolerParamsPage::HrInit
//
// Routine Description:
// Initialize the page.
//
// Arguments:
// peo [IN OUT] Pointer to the extension object.
//
// Return Value:
// S_OK Page initialized successfully.
// hr Page failed to initialize.
//
//--
/////////////////////////////////////////////////////////////////////////////
HRESULT CPrintSpoolerParamsPage::HrInit(IN OUT CExtObject * peo)
{
HRESULT _hr;
CWaitCursor _wc;
do
{
// Call the base class method.
_hr = CBasePropertyPage::HrInit(peo);
if (FAILED(_hr))
break;
if (BWizard())
m_nJobCompletionTimeout = 160;
else
{
// Convert the job completion timeout to seconds.
m_nPrevJobCompletionTimeout = m_nJobCompletionTimeout;
m_nJobCompletionTimeout = (m_nJobCompletionTimeout + 999) / 1000;
} // else: not creating new resource
} while ( 0 );
return _hr;
} //*** CPrintSpoolerParamsPage::HrInit()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CPrintSpoolerParamsPage::DoDataExchange
//
// Routine Description:
// Do data exchange between the dialog and the class.
//
// Arguments:
// pDX [IN OUT] Data exchange object
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CPrintSpoolerParamsPage::DoDataExchange(CDataExchange * pDX)
{
if (!pDX->m_bSaveAndValidate || !BSaved())
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Modify the following lines to represent the data displayed on this page.
//{{AFX_DATA_MAP(CPrintSpoolerParamsPage)
DDX_Control(pDX, IDC_PP_PRTSPOOL_PARAMS_SPOOL_DIR, m_editSpoolDir);
DDX_Text(pDX, IDC_PP_PRTSPOOL_PARAMS_SPOOL_DIR, m_strSpoolDir);
DDX_Text(pDX, IDC_PP_PRTSPOOL_PARAMS_TIMEOUT, m_nJobCompletionTimeout);
//}}AFX_DATA_MAP
if (!BBackPressed())
{
DDX_Number(pDX, IDC_PP_PRTSPOOL_PARAMS_TIMEOUT, m_nJobCompletionTimeout, 0, 0x7fffffff / 1000);
}
if (pDX->m_bSaveAndValidate && !BBackPressed())
{
DDV_RequiredText(pDX, IDC_PP_PRTSPOOL_PARAMS_SPOOL_DIR, IDC_PP_PRTSPOOL_PARAMS_SPOOL_DIR_LABEL, m_strSpoolDir);
DDV_MaxChars(pDX, m_strSpoolDir, MAX_PATH);
DDV_Path(pDX, IDC_PP_PRTSPOOL_PARAMS_SPOOL_DIR, IDC_PP_PRTSPOOL_PARAMS_SPOOL_DIR_LABEL, m_strSpoolDir);
} // if: saving data from dialog and back button not pressed
} // if: not saving or haven't saved yet
CBasePropertyPage::DoDataExchange(pDX);
} //*** CPrintSpoolerParamsPage::DoDataExchange()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CPrintSpoolerParamsPage::OnInitDialog
//
// Routine Description:
// Handler for the WM_INITDIALOG message.
//
// Arguments:
// None.
//
// Return Value:
// TRUE We need the focus to be set for us.
// FALSE We already set the focus to the proper control.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL CPrintSpoolerParamsPage::OnInitDialog(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// Get a default value for the spool directory if it hasn't been set yet.
if (m_strSpoolDir.GetLength() == 0)
{
ConstructDefaultDirectory(m_strSpoolDir, IDS_DEFAULT_SPOOL_DIR);
}
// Call the base class.
CBasePropertyPage::OnInitDialog();
// Set limits on the edit controls.
m_editSpoolDir.SetLimitText(MAX_PATH);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
} //*** CPrintSpoolerParamsPage::OnInitDialog()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CPrintSpoolerParamsPage::OnSetActive
//
// Routine Description:
// Handler for the PSN_SETACTIVE message.
//
// Arguments:
// None.
//
// Return Value:
// TRUE Page successfully initialized.
// FALSE Page not initialized.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL CPrintSpoolerParamsPage::OnSetActive(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// Enable/disable the Next/Finish button.
if (BWizard())
{
if (m_strSpoolDir.GetLength() == 0)
{
EnableNext(FALSE);
}
else
{
EnableNext(TRUE);
}
} // if: enable/disable the Next button
return CBasePropertyPage::OnSetActive();
} //*** CPrintSpoolerParamsPage::OnSetActive()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CPrintSpoolerParamsPage::BApplyChanges
//
// Routine Description:
// Apply changes made on the page.
//
// Arguments:
// None.
//
// Return Value:
// TRUE Page successfully applied.
// FALSE Error applying page.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL CPrintSpoolerParamsPage::BApplyChanges(void)
{
BOOL bSuccess;
CWaitCursor wc;
// Convert the job completion timeout from seconds to milliseconds.
m_nJobCompletionTimeout *= 1000;
// Call the base class method.
bSuccess = CBasePropertyPage::BApplyChanges();
// Convert the job completion timeout back to seconds.
if (bSuccess)
m_nPrevJobCompletionTimeout = m_nJobCompletionTimeout;
m_nJobCompletionTimeout /= 1000;
return bSuccess;
} //*** CPrintSpoolerParamsPage::BApplyChanges()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CPrintSpoolerParamsPage::OnChangeSpoolDir
//
// Routine Description:
// Handler for the EN_CHANGE message on the Spool Folder edit control.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CPrintSpoolerParamsPage::OnChangeSpoolDir(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
OnChangeCtrl();
if (BWizard())
{
if (m_editSpoolDir.GetWindowTextLength() == 0)
EnableNext(FALSE);
else
EnableNext(TRUE);
} // if: in a wizard
} //*** CPrintSpoolerParamsPage::OnChangeSpoolDir()