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.
1054 lines
26 KiB
1054 lines
26 KiB
/*++
|
|
|
|
Copyright (c) 1990-1995 Microsoft Corporation
|
|
|
|
|
|
Module Name:
|
|
|
|
validate.c
|
|
|
|
|
|
Abstract:
|
|
|
|
This module contains the function to validate all optitem
|
|
|
|
|
|
Author:
|
|
|
|
05-Sep-1995 Tue 18:42:44 created -by- Daniel Chou (danielc)
|
|
|
|
|
|
[Environment:]
|
|
|
|
NT Windows - Common Printer Driver UI DLL
|
|
|
|
|
|
[Notes:]
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#define DBG_CPSUIFILENAME DbgValidate
|
|
|
|
|
|
#define DBG_VALIDATE 0x00000001
|
|
#define DBGITEM_VALIDATE 0x00000002
|
|
#define DBG_CLEANUP 0x00000004
|
|
#define DBG_ALLOCEDIT 0x00000008
|
|
#define DBG_DMPUBHIDE 0x00000010
|
|
|
|
DEFINE_DBGVAR(0);
|
|
|
|
|
|
#if DBG
|
|
|
|
static const LPSTR pszDMPub[] = { "DMPUB_ORIENTATION",
|
|
"DMPUB_SCALE",
|
|
"DMPUB_COPIES_COLLATE",
|
|
"DMPUB_DEFSOURCE",
|
|
"DMPUB_PRINTQUALITY",
|
|
"DMPUB_COLOR",
|
|
"DMPUB_DUPLEX",
|
|
"DMPUB_TTOPTION",
|
|
"DMPUB_FORMNAME",
|
|
"DMPUB_ICMMETHOD",
|
|
"DMPUB_ICMINTENT",
|
|
"DMPUB_MEDIATYPE",
|
|
"DMPUB_DITHERTYPE",
|
|
"DMPUB_OUTPUTBIN",
|
|
"DMPUB_QUALITY",
|
|
"DMPUB_NUP",
|
|
"DMPUB_PAGEORDER"
|
|
};
|
|
|
|
#endif
|
|
|
|
extern HINSTANCE hInstDLL;
|
|
extern OPTTYPE OptTypeHdrPush;
|
|
|
|
|
|
|
|
|
|
|
|
LONG
|
|
ValidateChildrenItems(
|
|
PTVWND pTVWnd,
|
|
POPTITEM *ppItem,
|
|
DWORD DMPubHideBits,
|
|
DWORD ParentFlags
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
|
|
Author:
|
|
|
|
05-Sep-1995 Tue 18:43:47 created -by- Daniel Chou (danielc)
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
POPTITEM pItem;
|
|
POPTITEM pNext;
|
|
POPTITEM pLastItem;
|
|
LONG cGroup = 1;
|
|
DWORD Flags;
|
|
BYTE DMPubID;
|
|
BYTE DlgPageIdx;
|
|
BYTE CurLevel;
|
|
|
|
|
|
pNext =
|
|
pItem = *ppItem;
|
|
CurLevel = pItem->Level;
|
|
pLastItem = pTVWnd->pLastItem;
|
|
Flags = (ParentFlags &= OPTIF_ITEM_HIDE);
|
|
|
|
while ((cGroup >= 0) &&
|
|
(pItem <= pLastItem) &&
|
|
(pItem->Level >= CurLevel)) {
|
|
|
|
CPSUIASSERT(0, "pItem != pNext", pItem == pNext, 0);
|
|
|
|
if (pItem->Level > CurLevel) {
|
|
|
|
cGroup = ValidateChildrenItems(pTVWnd, &pItem, DMPubHideBits, Flags);
|
|
pNext = pItem;
|
|
continue;
|
|
}
|
|
|
|
DlgPageIdx = pItem->DlgPageIdx;
|
|
DMPubID = pItem->DMPubID;
|
|
Flags = pItem->Flags;
|
|
|
|
if ((DMPubHideBits) &&
|
|
(DMPubID >= DMPUB_FIRST) &&
|
|
(DMPubID <= DMPUB_LAST) &&
|
|
(MAKE_DMPUB_HIDEBIT(DMPubID) & DMPubHideBits)) {
|
|
|
|
Flags |= OPTIF_INT_HIDE;
|
|
|
|
CPSUIDBG(DBG_DMPUBHIDE, ("Hide DMPUB_ID=%hs, Bits=%08lx (%08lx)",
|
|
pszDMPub[DMPubID - DMPUB_FIRST],
|
|
MAKE_DMPUB_HIDEBIT(DMPubID), DMPubHideBits));
|
|
|
|
} else {
|
|
|
|
Flags &= ~OPTIF_INT_HIDE;
|
|
}
|
|
|
|
{
|
|
|
|
POPTTYPE pOptType;
|
|
POPTPARAM pOptParam = NULL;
|
|
PEXTCHKBOX pECB;
|
|
INT Count;
|
|
INT IconCount;
|
|
INT cNotHide;
|
|
BYTE Mask;
|
|
BYTE HideBits;
|
|
LONG MinSel;
|
|
LONG MaxSel;
|
|
BYTE Type;
|
|
BOOL pDefSelIsMem;
|
|
|
|
|
|
Flags |= ParentFlags;
|
|
|
|
CPSUIOPTITEM(DBGITEM_VALIDATE, pTVWnd, "Validate", 2, pItem);
|
|
|
|
if (pItem->cbSize != sizeof(OPTITEM)) {
|
|
|
|
return(ERR_CPSUI_INVALID_OPTITEM_CBSIZE);
|
|
}
|
|
|
|
//
|
|
// clear the unused flags
|
|
//
|
|
|
|
pItem->Flags &= (OPTIF_MASK ^ OPTIF_ENTER_MASK);
|
|
|
|
if ((Flags & OPTIF_HIDE) && (!(pItem->Flags & OPTIF_HIDE))) {
|
|
|
|
return(ERR_CPSUI_SUBITEM_DIFF_OPTIF_HIDE);
|
|
}
|
|
|
|
if (Flags & OPTIF_INT_HIDE) {
|
|
|
|
pItem->Flags |= OPTIF_INT_HIDE;
|
|
}
|
|
|
|
if (!(pItem->Flags & OPTIF_ITEM_HIDE)) {
|
|
|
|
if (pOptType = pItem->pOptType) {
|
|
|
|
//
|
|
// Validate OPTTYPE
|
|
//
|
|
|
|
if (pOptType->cbSize != sizeof(OPTTYPE)) {
|
|
|
|
return(ERR_CPSUI_INVALID_OPTTYPE_CBSIZE);
|
|
}
|
|
|
|
IconCount = 1;
|
|
|
|
switch (Type = pOptType->Type) {
|
|
|
|
case TVOT_CHKBOX:
|
|
case TVOT_PUSHBUTTON:
|
|
|
|
Count = 1;
|
|
break;
|
|
|
|
case TVOT_2STATES:
|
|
|
|
IconCount = 2;
|
|
|
|
case TVOT_EDITBOX:
|
|
case TVOT_UDARROW:
|
|
|
|
Count = 2;
|
|
|
|
break;
|
|
|
|
case TVOT_3STATES:
|
|
|
|
IconCount = 3;
|
|
|
|
//
|
|
// Fall through
|
|
//
|
|
|
|
case TVOT_TRACKBAR:
|
|
case TVOT_SCROLLBAR:
|
|
|
|
Count = 3;
|
|
break;
|
|
|
|
case TVOT_LISTBOX:
|
|
case TVOT_COMBOBOX:
|
|
|
|
IconCount =
|
|
Count = (INT)pOptType->Count;
|
|
break;
|
|
|
|
default:
|
|
|
|
return(ERR_CPSUI_INVALID_TVOT_TYPE);
|
|
}
|
|
|
|
if (pOptType->Count != (WORD)Count) {
|
|
|
|
return(ERR_CPSUI_INVALID_OPTTYPE_COUNT);
|
|
}
|
|
|
|
//
|
|
// Validate OPTPARAM
|
|
//
|
|
|
|
if (pOptParam = pOptType->pOptParam) {
|
|
|
|
cNotHide = Count;
|
|
HideBits = 0;
|
|
Mask = 0x01;
|
|
|
|
while (Count--) {
|
|
|
|
if (pOptParam->cbSize != sizeof(OPTPARAM)) {
|
|
|
|
return(ERR_CPSUI_INVALID_OPTPARAM_CBSIZE);
|
|
}
|
|
|
|
if (pOptParam->Flags & OPTPF_HIDE) {
|
|
|
|
cNotHide--;
|
|
HideBits |= Mask;
|
|
}
|
|
|
|
Mask <<= 1;
|
|
pOptParam++;
|
|
}
|
|
|
|
} else {
|
|
|
|
return(ERR_CPSUI_NULL_POPTPARAM);
|
|
}
|
|
|
|
pOptParam = pOptType->pOptParam;
|
|
|
|
//
|
|
// for TVOT_2STATES, TVOT_3STATES, TVOT_LISTBOX and
|
|
// TVOT_COMBOBOX, if all selection are hided then we will
|
|
// hide this item
|
|
//
|
|
|
|
switch (Type) {
|
|
|
|
case TVOT_PUSHBUTTON:
|
|
|
|
switch (pOptParam->Style) {
|
|
|
|
case PUSHBUTTON_TYPE_HTSETUP:
|
|
|
|
_OI_HELPIDX(pItem) = IDH_HT_SETUP;
|
|
pOptType->Flags |= OTS_PUSH_ENABLE_ALWAYS;
|
|
break;
|
|
|
|
case PUSHBUTTON_TYPE_HTCLRADJ:
|
|
|
|
_OI_HELPIDX(pItem) = IDH_HT_CLRADJ;
|
|
pOptType->Flags |= OTS_PUSH_ENABLE_ALWAYS;
|
|
break;
|
|
|
|
case PUSHBUTTON_TYPE_DLGPROC:
|
|
case PUSHBUTTON_TYPE_CALLBACK:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return(ERR_CPSUI_INVALID_PUSHBUTTON_TYPE);
|
|
}
|
|
|
|
break;
|
|
|
|
case TVOT_3STATES:
|
|
case TVOT_2STATES:
|
|
|
|
_OT_FLAGS(pOptType) |= (WORD)HideBits;
|
|
|
|
CPSUIINT(("States Type=%d, HideBits=0x%02x",
|
|
(UINT)pOptType->Type, (UINT)HideBits));
|
|
|
|
case TVOT_LISTBOX:
|
|
case TVOT_COMBOBOX:
|
|
|
|
if (!cNotHide) {
|
|
|
|
CPSUIWARN(("Type=%ld, all OPTPARAMs are OPTPF_HIDE, hide the item"));
|
|
|
|
pItem->Flags |= OPTIF_INT_HIDE;
|
|
Flags |= OPTIF_INT_HIDE;
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Validate pSel
|
|
//
|
|
// 19-May-1998 Tue 16:38:35 updated
|
|
// -by- Daniel Chou (danielc)
|
|
// We allocate (memory * 2) because for new IN PLACE
|
|
// treeview editing, we need to save another of undo
|
|
//
|
|
|
|
MinSel = 0;
|
|
MaxSel = -1;
|
|
pDefSelIsMem = FALSE;
|
|
_OI_CBPDEFSEL(pItem) = (WORD)0;
|
|
|
|
switch (Type) {
|
|
|
|
case TVOT_CHKBOX:
|
|
case TVOT_2STATES:
|
|
|
|
MaxSel = 1;
|
|
break;
|
|
|
|
case TVOT_UDARROW:
|
|
case TVOT_TRACKBAR:
|
|
case TVOT_SCROLLBAR:
|
|
|
|
MinSel = (LONG)((SHORT)pOptParam[1].IconID);
|
|
MaxSel = (LONG)((SHORT)pOptParam[1].lParam);
|
|
|
|
if (MinSel > MaxSel) {
|
|
|
|
pOptParam[1].IconID = MaxSel;
|
|
pOptParam[1].lParam = MinSel;
|
|
|
|
CPSUIWARN(("Type=%d, Swap select range (%d - %d)",
|
|
Type, MinSel, MaxSel));
|
|
|
|
MinSel = MaxSel;
|
|
MaxSel = (LONG)((SHORT)pOptParam[1].lParam);
|
|
}
|
|
|
|
if (Type != TVOT_UDARROW) {
|
|
|
|
//
|
|
// This is the multiple factor
|
|
//
|
|
|
|
if (!pOptParam[2].IconID) {
|
|
|
|
pOptParam[2].IconID = 1;
|
|
}
|
|
|
|
if (!pOptParam[2].lParam) {
|
|
|
|
pOptParam[2].lParam = 1;
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case TVOT_3STATES:
|
|
|
|
MaxSel = 2;
|
|
break;
|
|
|
|
case TVOT_LISTBOX:
|
|
case TVOT_COMBOBOX:
|
|
|
|
if (pOptType->Style & OTS_LBCB_INCL_ITEM_NONE) {
|
|
|
|
MinSel = -1;
|
|
|
|
if (pItem->Sel < 0) {
|
|
|
|
pItem->Sel = -1;
|
|
}
|
|
}
|
|
|
|
MaxSel = (LONG)((LONG)pOptType->Count - 1);
|
|
break;
|
|
|
|
case TVOT_PUSHBUTTON:
|
|
|
|
switch (pOptParam->Style) {
|
|
|
|
case PUSHBUTTON_TYPE_HTSETUP:
|
|
|
|
if (_OI_PDEFSEL(pItem) = (LPVOID)
|
|
LocalAlloc(LPTR,
|
|
sizeof(DEVHTINFO) * 2)) {
|
|
|
|
PDEVHTADJDATA pDevHTAdjData;
|
|
|
|
pDefSelIsMem = TRUE;
|
|
_OI_CBPDEFSEL(pItem) = (WORD)sizeof(DEVHTINFO);
|
|
pDevHTAdjData =
|
|
(PDEVHTADJDATA)(pOptParam->pData);
|
|
|
|
CopyMemory(_OI_PDEFSEL(pItem),
|
|
pDevHTAdjData->pAdjHTInfo,
|
|
sizeof(DEVHTINFO));
|
|
|
|
} else {
|
|
|
|
CPSUIERR(("LocalAlloc(HTSETUP/DEVHTINFO) failed"));
|
|
return(ERR_CPSUI_ALLOCMEM_FAILED);
|
|
}
|
|
|
|
break;
|
|
|
|
case PUSHBUTTON_TYPE_HTCLRADJ:
|
|
|
|
if (_OI_PDEFSEL(pItem) = (LPVOID)
|
|
LocalAlloc(LPTR,
|
|
sizeof(COLORADJUSTMENT) * 2)) {
|
|
|
|
pDefSelIsMem = TRUE;
|
|
_OI_CBPDEFSEL(pItem) =
|
|
(WORD)sizeof(COLORADJUSTMENT);
|
|
|
|
CopyMemory(_OI_PDEFSEL(pItem),
|
|
pOptParam->pData,
|
|
sizeof(COLORADJUSTMENT));
|
|
|
|
} else {
|
|
|
|
CPSUIERR(("LocalAlloc(HTCLRADJ/COLORADJUSTMENT) failed"));
|
|
return(ERR_CPSUI_ALLOCMEM_FAILED);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
case TVOT_EDITBOX:
|
|
|
|
if ((!pItem->pSel) || (!VALID_PTR(pItem->pSel))) {
|
|
|
|
return(ERR_CPSUI_INVALID_EDITBOX_PSEL);
|
|
}
|
|
|
|
if ((MaxSel = (LONG)pOptParam[1].IconID) <= 1) {
|
|
|
|
return(ERR_CPSUI_INVALID_EDITBOX_BUF_SIZE);
|
|
|
|
} else {
|
|
|
|
--MaxSel;
|
|
|
|
if (pTVWnd->Flags & TWF_ANSI_CALL) {
|
|
|
|
MinSel = lstrlenA((LPSTR)pItem->pSel);
|
|
|
|
if (MinSel > MaxSel) {
|
|
|
|
((LPSTR)pItem->pSel)[MaxSel] = 0;
|
|
}
|
|
|
|
MaxSel++;
|
|
|
|
} else {
|
|
|
|
MinSel = lstrlenW((LPWSTR)pItem->pSel);
|
|
|
|
if (MinSel > MaxSel) {
|
|
|
|
((LPWSTR)pItem->pSel)[MaxSel] = 0;
|
|
}
|
|
|
|
MaxSel = (LONG)((DWORD)(MaxSel + 1) << 1);
|
|
}
|
|
|
|
if (_OI_PDEFSEL(pItem) =
|
|
(LPVOID)LocalAlloc(LPTR, MaxSel * 2)) {
|
|
|
|
pDefSelIsMem = TRUE;
|
|
_OI_CBPDEFSEL(pItem) = (WORD)MaxSel;
|
|
|
|
CopyMemory(_OI_PDEFSEL(pItem),
|
|
pItem->pSel,
|
|
MaxSel);
|
|
|
|
} else {
|
|
|
|
CPSUIERR(("LocalAlloc(EditBuf=%ld bytes) failed", MaxSel));
|
|
return(ERR_CPSUI_ALLOCMEM_FAILED);
|
|
}
|
|
}
|
|
|
|
//
|
|
// Fall through
|
|
//
|
|
|
|
default:
|
|
|
|
MinSel = 0;
|
|
MaxSel = -1;
|
|
break;
|
|
}
|
|
|
|
if ((MinSel < MaxSel) &&
|
|
((pItem->Sel < MinSel) ||
|
|
(pItem->Sel > MaxSel))) {
|
|
|
|
CPSUIWARN(("Sel=%ld (%08lx) Out of range (%ld - %ld)",
|
|
pItem->Sel, pItem->pSel, MinSel, MaxSel));
|
|
|
|
pItem->Flags |= OPTIF_CHANGED;
|
|
pItem->Sel = MinSel;
|
|
}
|
|
|
|
//
|
|
// Saved old selection
|
|
//
|
|
|
|
if (!pDefSelIsMem) {
|
|
|
|
_OI_PDEFSEL(pItem) = pItem->pSel;
|
|
}
|
|
|
|
_OI_DEF_OPTIF(pItem) = pItem->Flags;
|
|
|
|
//
|
|
// Validate pExtChkBox
|
|
//
|
|
|
|
if ((pECB = pItem->pExtChkBox) &&
|
|
(!(pItem->Flags & OPTIF_EXT_HIDE))) {
|
|
|
|
if (pItem->Flags & OPTIF_EXT_IS_EXTPUSH) {
|
|
|
|
PEXTPUSH pEP = (PEXTPUSH)pECB;
|
|
|
|
|
|
if (pEP->cbSize != sizeof(EXTPUSH)) {
|
|
|
|
return(ERR_CPSUI_INVALID_EXTPUSH_CBSIZE);
|
|
}
|
|
|
|
if (pEP->Flags & EPF_PUSH_TYPE_DLGPROC) {
|
|
|
|
if (!(pEP->DlgProc)) {
|
|
|
|
return(ERR_CPSUI_NULL_EXTPUSH_DLGPROC);
|
|
}
|
|
|
|
if (((pEP->Flags & EPF_USE_HDLGTEMPLATE) &&
|
|
(pEP->hDlgTemplate == NULL)) ||
|
|
(pEP->DlgTemplateID == 0)) {
|
|
|
|
return(ERR_CPSUI_NO_EXTPUSH_DLGTEMPLATEID);
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
if ((!(pEP->pfnCallBack)) &&
|
|
(!(pTVWnd->ComPropSheetUI.pfnCallBack))) {
|
|
|
|
return(ERR_CPSUI_NULL_EXTPUSH_CALLBACK);
|
|
}
|
|
}
|
|
|
|
} else {
|
|
|
|
CPSUIDBG(DBG_VALIDATE, ("ExtChkBox: cbSize=%u [%u]",
|
|
pECB->cbSize, sizeof(EXTCHKBOX)));
|
|
|
|
if (pECB->cbSize != sizeof(EXTCHKBOX)) {
|
|
|
|
return(ERR_CPSUI_INVALID_ECB_CBSIZE);
|
|
}
|
|
|
|
if (!(pECB->pTitle)) {
|
|
|
|
return(ERR_CPSUI_NULL_ECB_PTITLE);
|
|
}
|
|
|
|
if (!(pECB->pCheckedName)) {
|
|
|
|
return(ERR_CPSUI_NULL_ECB_PCHECKEDNAME);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Validate DMPubID
|
|
//
|
|
|
|
if ((DMPubID < DMPUB_OEM_PAPER_ITEM) &&
|
|
(DMPubID != DMPUB_NONE) &&
|
|
(pItem->DMPubID != DMPubID)) {
|
|
|
|
return(ERR_CPSUI_INVALID_DMPUBID);
|
|
}
|
|
|
|
//
|
|
// Validate DlgPageIdx
|
|
//
|
|
|
|
if (pItem->DlgPageIdx != DlgPageIdx) {
|
|
|
|
return(ERR_CPSUI_SUBITEM_DIFF_DLGPAGEIDX);
|
|
}
|
|
|
|
if (DlgPageIdx >= pTVWnd->cMyDlgPage) {
|
|
|
|
return(ERR_CPSUI_INVALID_DLGPAGEIDX);
|
|
}
|
|
|
|
if (pItem->Flags & OPTIF_CHANGED) {
|
|
|
|
CPSUIOPTITEM(0,pTVWnd, "Validate: OPTIF_CHANGED", 2, pItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
pNext = ++pItem;
|
|
}
|
|
|
|
CPSUIASSERT(0, "pItem != *ppItem", pItem != *ppItem, 0);
|
|
|
|
*ppItem = pItem;
|
|
|
|
return(cGroup);
|
|
}
|
|
|
|
|
|
|
|
|
|
LONG
|
|
ValidatepOptItem(
|
|
PTVWND pTVWnd,
|
|
DWORD DMPubHideBits
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
|
|
Author:
|
|
|
|
05-Sep-1995 Tue 18:43:47 created -by- Daniel Chou (danielc)
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
POPTITEM pItem;
|
|
|
|
|
|
pItem = pTVWnd->ComPropSheetUI.pOptItem;
|
|
|
|
return(ValidateChildrenItems(pTVWnd, &pItem, DMPubHideBits, 0));
|
|
}
|
|
|
|
|
|
|
|
UINT
|
|
SetOptItemNewDef(
|
|
HWND hDlg,
|
|
PTVWND pTVWnd,
|
|
BOOL DoDef2
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function set the new default for the OptItems
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
|
|
Author:
|
|
|
|
02-Feb-1996 Fri 22:07:59 created -by- Daniel Chou (danielc)
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
POPTITEM pItem;
|
|
POPTITEM pLastItem;
|
|
POPTTYPE pOptType;
|
|
LPVOID pvAlloc;
|
|
LPBYTE pDefSel;
|
|
UINT cSet = 0;
|
|
|
|
pItem = pTVWnd->ComPropSheetUI.pOptItem;
|
|
pLastItem = pTVWnd->pLastItem;
|
|
|
|
while (pItem <= pLastItem) {
|
|
|
|
if ((pOptType = pItem->pOptType) &&
|
|
(!(pItem->Flags & OPTIF_ITEM_HIDE)) &&
|
|
((DoDef2) || (pItem->Flags & (OPTIF_CHANGEONCE|OPTIF_CHANGED)))) {
|
|
|
|
PDEVHTADJDATA pDevHTAdjData;
|
|
|
|
++cSet;
|
|
|
|
pvAlloc = (LPVOID)(pDefSel = (LPBYTE)_OI_PDEFSEL(pItem));
|
|
|
|
if (DoDef2) {
|
|
|
|
pDefSel += _OI_CBPDEFSEL(pItem);
|
|
|
|
} else {
|
|
|
|
pItem->Flags |= OPTIF_CHANGED;
|
|
}
|
|
|
|
switch (pOptType->Type) {
|
|
|
|
case TVOT_EDITBOX:
|
|
|
|
if (!pvAlloc) {
|
|
|
|
CPSUIASSERT(0, "SetOptItemNewDef(EDITBOX:pvAlloc=NULL)", pvAlloc, 0);
|
|
break;
|
|
}
|
|
|
|
if (pTVWnd->Flags & TWF_ANSI_CALL) {
|
|
|
|
StringCchCopyA((LPSTR)pDefSel, (size_t)pOptType->pOptParam[1].IconID, (LPSTR)pItem->pSel);
|
|
|
|
} else {
|
|
|
|
StringCchCopyW((LPWSTR)pDefSel, (size_t)pOptType->pOptParam[1].IconID, (LPWSTR)pItem->pSel);
|
|
}
|
|
|
|
break;
|
|
|
|
case TVOT_PUSHBUTTON:
|
|
|
|
switch (pOptType->pOptParam->Style) {
|
|
|
|
case PUSHBUTTON_TYPE_HTSETUP:
|
|
|
|
if (!pvAlloc) {
|
|
|
|
CPSUIASSERT(0, "SetOptItemNewDef(HTSETUP:pvAlloc=NULL)", pvAlloc, 0);
|
|
break;
|
|
}
|
|
|
|
pDevHTAdjData = (PDEVHTADJDATA)(pOptType->pOptParam->pData);
|
|
|
|
//
|
|
// The buffer should be large enough since we allocate
|
|
// enough memory ahead
|
|
//
|
|
CopyMemory(pDefSel,
|
|
pDevHTAdjData->pAdjHTInfo,
|
|
sizeof(DEVHTINFO));
|
|
|
|
break;
|
|
|
|
case PUSHBUTTON_TYPE_HTCLRADJ:
|
|
|
|
if (!pvAlloc) {
|
|
|
|
CPSUIASSERT(0, "SetOptItemNewDef(HTCLRADJ:pvAlloc=NULL)", pvAlloc, 0);
|
|
break;
|
|
}
|
|
|
|
//
|
|
// The buffer should be large enough since we allocate
|
|
// enough memory ahead
|
|
//
|
|
CopyMemory(pDefSel,
|
|
pOptType->pOptParam->pData,
|
|
sizeof(COLORADJUSTMENT));
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (DoDef2) {
|
|
|
|
_OI_PDEFSEL2(pItem) = pItem->pSel;
|
|
|
|
} else {
|
|
|
|
_OI_PDEFSEL(pItem) = pItem->pSel;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (DoDef2) {
|
|
|
|
_OI_PDEFSEL2(pItem) = pItem->pSel;
|
|
|
|
} else {
|
|
|
|
pItem->Flags &= ~OPTIF_CHANGEONCE;
|
|
_OI_PDEFSEL(pItem) = pItem->pSel;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (DoDef2) {
|
|
|
|
_OI_DEF_OPTIF2(pItem) = pItem->Flags;
|
|
|
|
} else {
|
|
|
|
_OI_DEF_OPTIF(pItem) = pItem->Flags;
|
|
}
|
|
}
|
|
|
|
pItem++;
|
|
}
|
|
|
|
if ((cSet) && (!DoDef2)) {
|
|
|
|
UpdateCallBackChanges(hDlg, pTVWnd, TRUE);
|
|
UpdateTreeViewItem(hDlg, pTVWnd, pTVWnd->pCurTVItem, TRUE);
|
|
}
|
|
|
|
return(cSet);
|
|
}
|
|
|
|
|
|
|
|
BOOL
|
|
CleanUpTVWND(
|
|
PTVWND pTVWnd
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
|
|
Author:
|
|
|
|
05-Sep-1995 Tue 19:41:45 created -by- Daniel Chou (danielc)
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
PMYDLGPAGE pMyDP;
|
|
POPTITEM pItem;
|
|
UINT cItem;
|
|
|
|
|
|
pItem = pTVWnd->ComPropSheetUI.pOptItem;
|
|
cItem = (UINT)pTVWnd->ComPropSheetUI.cOptItem;
|
|
|
|
while (cItem--) {
|
|
|
|
POPTTYPE pOptType;
|
|
LPVOID pDefSel;
|
|
|
|
pItem->Flags &= (OPTIF_MASK ^ OPTIF_EXIT_MASK);
|
|
pDefSel = _OI_PDEFSEL(pItem);
|
|
pOptType = pItem->pOptType;
|
|
|
|
if (pOptType) {
|
|
|
|
switch (pOptType->Type) {
|
|
|
|
case TVOT_PUSHBUTTON:
|
|
|
|
switch (pOptType->pOptParam->Style) {
|
|
|
|
case PUSHBUTTON_TYPE_HTSETUP:
|
|
case PUSHBUTTON_TYPE_HTCLRADJ:
|
|
|
|
if (pDefSel) {
|
|
|
|
CPSUIOPTITEM(DBG_CLEANUP, pTVWnd, "Free Halftone pointer", 1, pItem);
|
|
|
|
LocalFree((HLOCAL)pDefSel);
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case TVOT_EDITBOX:
|
|
|
|
if (pDefSel) {
|
|
|
|
CPSUIOPTITEM(DBG_CLEANUP, pTVWnd, "Free EditBuf", 1, pItem);
|
|
|
|
LocalFree((HLOCAL)pDefSel);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
ZeroMemory(&pOptType->wReserved[0],
|
|
sizeof(OPTTYPE) - FIELD_OFFSET(OPTTYPE, wReserved));
|
|
}
|
|
|
|
pItem->wReserved = 0;
|
|
|
|
ZeroMemory(&pItem->dwReserved[0],
|
|
sizeof(OPTITEM) - FIELD_OFFSET(OPTITEM, dwReserved));
|
|
|
|
|
|
pItem++;
|
|
}
|
|
|
|
if (pMyDP = pTVWnd->pMyDlgPage) {
|
|
|
|
UINT cMyDP = pTVWnd->cMyDlgPage;
|
|
|
|
while (cMyDP--) {
|
|
|
|
if (pMyDP->hIcon) {
|
|
|
|
DestroyIcon(pMyDP->hIcon);
|
|
}
|
|
|
|
pMyDP++;
|
|
}
|
|
|
|
LocalFree((HLOCAL)pTVWnd->pMyDlgPage);
|
|
pTVWnd->pMyDlgPage = NULL;
|
|
}
|
|
|
|
if (pTVWnd->pIcon16ID) {
|
|
|
|
LocalFree((HLOCAL)pTVWnd->pIcon16ID);
|
|
pTVWnd->pIcon16ID = NULL;
|
|
}
|
|
|
|
if (pTVWnd->himi) {
|
|
|
|
ImageList_Destroy(pTVWnd->himi);
|
|
pTVWnd->himi = NULL;
|
|
}
|
|
|
|
return(TRUE);
|
|
}
|