1061 lines
25 KiB
C
1061 lines
25 KiB
C
/*++
|
||
|
||
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) {
|
||
|
||
lstrcpyA((LPSTR)pDefSel, (LPSTR)pItem->pSel);
|
||
|
||
} else {
|
||
|
||
lstrcpy((LPWSTR)pDefSel, (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);
|
||
|
||
CopyMemory(pDefSel,
|
||
pDevHTAdjData->pAdjHTInfo,
|
||
sizeof(DEVHTINFO));
|
||
|
||
break;
|
||
|
||
case PUSHBUTTON_TYPE_HTCLRADJ:
|
||
|
||
if (!pvAlloc) {
|
||
|
||
CPSUIASSERT(0, "SetOptItemNewDef(HTCLRADJ:pvAlloc=NULL)", pvAlloc, 0);
|
||
break;
|
||
}
|
||
|
||
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;
|
||
}
|
||
|
||
#if 0
|
||
if (pTVWnd->hbrGray) {
|
||
|
||
DeleteObject(pTVWnd->hbrGray);
|
||
pTVWnd->hbrGray = NULL;
|
||
}
|
||
|
||
if (pTVWnd->hbmGray) {
|
||
|
||
DeleteObject(pTVWnd->hbmGray);
|
||
pTVWnd->hbmGray = NULL;
|
||
}
|
||
#endif
|
||
|
||
return(TRUE);
|
||
}
|