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.
1128 lines
23 KiB
1128 lines
23 KiB
/*++
|
|
|
|
Copyright (c) 1990-2003 Microsoft Corporation
|
|
|
|
|
|
Module Name:
|
|
|
|
ptrprop.c
|
|
|
|
|
|
Abstract:
|
|
|
|
This module contains PrinterProperties() API entry and it's related
|
|
functions
|
|
|
|
|
|
Author:
|
|
|
|
06-Dec-1993 Mon 10:30:43 created
|
|
|
|
|
|
[Environment:]
|
|
|
|
GDI Device Driver - Plotter.
|
|
|
|
|
|
[Notes:]
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#define DBG_PLOTFILENAME DbgPtrProp
|
|
|
|
|
|
extern HMODULE hPlotUIModule;
|
|
|
|
|
|
#define DBG_DEVHTINFO 0x00000001
|
|
#define DBG_PP_FORM 0x00000002
|
|
#define DBG_EXTRA_DATA 0x00000004
|
|
#define DBG_CHK_PENSET_BUTTON 0x00000008
|
|
|
|
DEFINE_DBGVAR(0);
|
|
|
|
|
|
//
|
|
// Form To Tray Assignment:
|
|
// Roll Paper Feeder: <XYZ>
|
|
// Manual Feed Method:
|
|
// Print Form Options:
|
|
// [] Auto. Rotate To Save Roll Paper:
|
|
// [] Print Smaller Paper Size:
|
|
// Halftone Setup...
|
|
// Installed Pen Set: Pen Set #1
|
|
// Pen Setup:
|
|
// Installed: Pen Set #1
|
|
// Pen Set #1:
|
|
// Pen Number 1:
|
|
// Pen Number 2:
|
|
// Pen Number 3:
|
|
// Pen Number 4:
|
|
// Pen Number 5:
|
|
// Pen Number 6:
|
|
// Pen Number 7:
|
|
// Pen Number 8:
|
|
// Pen Number 9:
|
|
// Pen Number 10:
|
|
// Pen Number 11:
|
|
// Pen Set #2;
|
|
// Pen Set #3:
|
|
// Pen Set #4: <Currently Installed>
|
|
// Pen Set #5:
|
|
// Pen Set #6:
|
|
// Pen Set #7:
|
|
// Pen Set #8:
|
|
//
|
|
|
|
OPDATA OPPenSet = { 0, IDS_PENSET_FIRST, IDI_PENSET, 0, 0, 0 };
|
|
|
|
OPDATA OPAutoRotate[] = {
|
|
|
|
{ 0, IDS_CPSUI_NO, IDI_AUTO_ROTATE_NO, 0, 0, 0 },
|
|
{ 0, IDS_CPSUI_YES, IDI_AUTO_ROTATE_YES, 0, 0, 0 }
|
|
};
|
|
|
|
OPDATA OPPrintSmallerPaper[] = {
|
|
|
|
{ 0, IDS_CPSUI_NO, IDI_PRINT_SMALLER_PAPER_NO, 0, 0, 0 },
|
|
{ 0, IDS_CPSUI_YES, IDI_PRINT_SMALLER_PAPER_YES, 0, 0, 0 }
|
|
};
|
|
|
|
|
|
OPDATA OPManualFeed[] = {
|
|
|
|
{ 0, IDS_MANUAL_CX, IDI_MANUAL_CX, 0, 0, 0 },
|
|
{ 0, IDS_MANUAL_CY, IDI_MANUAL_CY, 0, 0, 0 }
|
|
};
|
|
|
|
OPDATA OPHTSetup = {
|
|
|
|
0,
|
|
PI_OFF(ExtraData) + sizeof(DEVHTINFO),
|
|
IDI_CPSUI_HALFTONE_SETUP,
|
|
PUSHBUTTON_TYPE_HTSETUP,
|
|
0,
|
|
0
|
|
};
|
|
|
|
|
|
OIDATA PPOIData[] = {
|
|
|
|
{
|
|
ODF_PEN_RASTER,
|
|
0,
|
|
OI_LEVEL_1,
|
|
PP_FORMTRAY_ASSIGN,
|
|
TVOT_NONE,
|
|
IDS_CPSUI_FORMTRAYASSIGN,
|
|
IDI_CPSUI_FORMTRAYASSIGN,
|
|
IDH_FORMTRAYASSIGN,
|
|
0,
|
|
NULL
|
|
},
|
|
|
|
{
|
|
ODF_RASTER | ODF_ROLLFEED | ODF_CALLBACK | ODF_CALLCREATEOI,
|
|
0,
|
|
OI_LEVEL_2,
|
|
PP_INSTALLED_FORM,
|
|
TVOT_LISTBOX,
|
|
IDS_ROLLFEED,
|
|
OTS_LBCB_SORT,
|
|
IDH_FORM_ROLL_FEEDER,
|
|
0,
|
|
(POPDATA)CreateFormOI
|
|
},
|
|
|
|
{
|
|
ODF_RASTER | ODF_MANUAL_FEED | ODF_CALLBACK | ODF_CALLCREATEOI,
|
|
0,
|
|
OI_LEVEL_2,
|
|
PP_INSTALLED_FORM,
|
|
TVOT_LISTBOX,
|
|
IDS_MANUAL_FEEDER,
|
|
OTS_LBCB_SORT,
|
|
IDH_FORM_MANUAL_FEEDER,
|
|
0,
|
|
(POPDATA)CreateFormOI
|
|
},
|
|
|
|
{
|
|
ODF_PEN | ODF_CALLBACK | ODF_CALLCREATEOI,
|
|
0,
|
|
OI_LEVEL_2,
|
|
PP_INSTALLED_FORM,
|
|
TVOT_LISTBOX,
|
|
IDS_MAINFEED,
|
|
OTS_LBCB_SORT,
|
|
IDH_FORM_MAIN_FEEDER,
|
|
0,
|
|
(POPDATA)CreateFormOI
|
|
},
|
|
|
|
{
|
|
ODF_PEN_RASTER | ODF_CALLBACK | ODF_NO_PAPERTRAY,
|
|
0,
|
|
OI_LEVEL_3,
|
|
PP_MANUAL_FEED_METHOD,
|
|
TVOT_2STATES,
|
|
IDS_MANUAL_FEED_METHOD,
|
|
0,
|
|
IDH_MANUAL_FEED_METHOD,
|
|
COUNT_ARRAY(OPManualFeed),
|
|
OPManualFeed
|
|
},
|
|
|
|
{
|
|
ODF_PEN_RASTER,
|
|
0,
|
|
OI_LEVEL_1,
|
|
PP_PRINT_FORM_OPTIONS,
|
|
TVOT_NONE,
|
|
IDS_PRINT_FORM_OPTIONS,
|
|
IDI_CPSUI_GENERIC_OPTION,
|
|
IDH_PRINT_FORM_OPTIONS,
|
|
0,
|
|
NULL
|
|
},
|
|
|
|
{
|
|
ODF_PEN_RASTER | ODF_ROLLFEED,
|
|
0,
|
|
OI_LEVEL_2,
|
|
PP_AUTO_ROTATE,
|
|
TVOT_2STATES,
|
|
IDS_AUTO_ROTATE,
|
|
0,
|
|
IDH_AUTO_ROTATE,
|
|
2,
|
|
OPAutoRotate
|
|
},
|
|
|
|
{
|
|
ODF_PEN_RASTER,
|
|
0,
|
|
OI_LEVEL_2,
|
|
PP_PRINT_SMALLER_PAPER,
|
|
TVOT_2STATES,
|
|
IDS_PRINT_SAMLLER_PAPER,
|
|
0,
|
|
IDH_PRINT_SMALLER_PAPER,
|
|
2,
|
|
OPPrintSmallerPaper
|
|
},
|
|
|
|
{
|
|
ODF_RASTER,
|
|
0,
|
|
OI_LEVEL_1,
|
|
PP_HT_SETUP,
|
|
TVOT_PUSHBUTTON,
|
|
IDS_CPSUI_HALFTONE_SETUP,
|
|
0,
|
|
IDH_HALFTONE_SETUP,
|
|
1,
|
|
&OPHTSetup
|
|
},
|
|
|
|
{
|
|
ODF_PEN | ODF_INC_IDSNAME | ODF_NO_INC_POPDATA,
|
|
0,
|
|
OI_LEVEL_1,
|
|
PP_INSTALLED_PENSET,
|
|
TVOT_LISTBOX,
|
|
IDS_INSTALLED_PENSET,
|
|
OTS_LBCB_SORT,
|
|
IDH_INSTALLED_PENSET,
|
|
PRK_MAX_PENDATA_SET,
|
|
&OPPenSet
|
|
},
|
|
|
|
{
|
|
ODF_PEN | ODF_COLLAPSE | ODF_CALLCREATEOI,
|
|
0,
|
|
OI_LEVEL_1,
|
|
PP_PEN_SETUP,
|
|
TVOT_NONE,
|
|
IDS_PEN_SETUP,
|
|
IDI_PEN_SETUP,
|
|
IDH_PEN_SETUP,
|
|
1,
|
|
(POPDATA)CreatePenSetupOI
|
|
}
|
|
};
|
|
|
|
|
|
|
|
|
|
DWORD
|
|
CheckPenSetButton(
|
|
PPRINTERINFO pPI,
|
|
DWORD Action
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
|
|
Author:
|
|
|
|
30-Nov-1995 Thu 16:41:05 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
POPTITEM pOptItem = pPI->pOptItem;
|
|
POPTITEM pEndItem = pOptItem + pPI->cOptItem;
|
|
|
|
PLOTDBG(DBG_CHK_PENSET_BUTTON,
|
|
("CheckPenSetButton: pFirst=%08lx, pLast=%08lx, Count=%ld",
|
|
pOptItem, pEndItem, pPI->cOptItem));
|
|
|
|
while (pOptItem < pEndItem) {
|
|
|
|
if (pOptItem->DMPubID == PP_PENSET) {
|
|
|
|
PPENDATA pPD;
|
|
POPTITEM pOI;
|
|
DWORD Flags;
|
|
UINT i;
|
|
|
|
|
|
pOI = pOptItem + 1;
|
|
pPD = (PPENDATA)pPI->pPlotGPC->Pens.pData;
|
|
i = (UINT)pPI->pPlotGPC->MaxPens;
|
|
Flags = (OPTIF_EXT_DISABLED | OPTIF_EXT_HIDE);
|
|
|
|
while (i--) {
|
|
|
|
if (pOI->Sel != pPD->ColorIdx) {
|
|
|
|
Flags &= ~(OPTIF_EXT_DISABLED | OPTIF_EXT_HIDE);
|
|
}
|
|
|
|
pOI++;
|
|
pPD++;
|
|
}
|
|
|
|
if ((Flags & (OPTIF_EXT_DISABLED | OPTIF_EXT_HIDE)) !=
|
|
(pOptItem->Flags & (OPTIF_EXT_DISABLED | OPTIF_EXT_HIDE))) {
|
|
|
|
Action = CPSUICB_ACTION_REINIT_ITEMS;
|
|
pOptItem->Flags &= ~(OPTIF_EXT_DISABLED | OPTIF_EXT_HIDE);
|
|
pOptItem->Flags |= (Flags | OPTIF_CHANGED);
|
|
}
|
|
|
|
pOptItem = pOI;
|
|
|
|
} else {
|
|
|
|
pOptItem++;
|
|
}
|
|
}
|
|
|
|
return(Action);
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
CheckInstalledForm(
|
|
PPRINTERINFO pPI,
|
|
DWORD Action
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
|
|
Author:
|
|
|
|
30-May-1996 Thu 12:34:00 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
POPTITEM pOIForm;
|
|
POPTITEM pOIFeed;
|
|
POPTITEM pOITemp;
|
|
POPTPARAM pOP;
|
|
FORM_INFO_1 *pFI1;
|
|
DWORD MFFlags;
|
|
DWORD PSPFlags;
|
|
DWORD ARFlags;
|
|
|
|
|
|
if ((pOIForm = FindOptItem(pPI->pOptItem,
|
|
pPI->cOptItem,
|
|
PP_INSTALLED_FORM)) &&
|
|
(pOIFeed = FindOptItem(pPI->pOptItem,
|
|
pPI->cOptItem,
|
|
PP_MANUAL_FEED_METHOD))) {
|
|
|
|
pOP = pOIForm->pOptType->pOptParam + pOIForm->Sel;
|
|
|
|
switch (pOP->Style) {
|
|
|
|
case FS_ROLLPAPER:
|
|
case FS_TRAYPAPER:
|
|
|
|
MFFlags = OPTIF_DISABLED;
|
|
break;
|
|
|
|
default:
|
|
|
|
pFI1 = pPI->pFI1Base + pOP->lParam;
|
|
|
|
if ((pFI1->Size.cx > pPI->pPlotGPC->DeviceSize.cx) ||
|
|
(pFI1->Size.cy > pPI->pPlotGPC->DeviceSize.cx)) {
|
|
|
|
MFFlags = (OPTIF_OVERLAY_STOP_ICON | OPTIF_DISABLED);
|
|
|
|
} else {
|
|
|
|
MFFlags = 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if ((pOIFeed->Flags & (OPTIF_OVERLAY_STOP_ICON |
|
|
OPTIF_DISABLED)) != MFFlags) {
|
|
|
|
pOIFeed->Flags &= ~(OPTIF_OVERLAY_STOP_ICON | OPTIF_DISABLED);
|
|
pOIFeed->Flags |= (MFFlags | OPTIF_CHANGED);
|
|
Action = CPSUICB_ACTION_OPTIF_CHANGED;
|
|
}
|
|
|
|
if (pOP->Style & FS_ROLLPAPER) {
|
|
|
|
ARFlags = 0;
|
|
PSPFlags = OPTIF_DISABLED;
|
|
|
|
} else {
|
|
|
|
ARFlags = OPTIF_DISABLED;
|
|
PSPFlags = 0;
|
|
}
|
|
|
|
if ((pOITemp = FindOptItem(pPI->pOptItem,
|
|
pPI->cOptItem,
|
|
PP_PRINT_SMALLER_PAPER)) &&
|
|
((pOITemp->Flags & OPTIF_DISABLED) != PSPFlags)) {
|
|
|
|
pOITemp->Flags &= ~OPTIF_DISABLED;
|
|
pOITemp->Flags |= (PSPFlags | OPTIF_CHANGED);
|
|
Action = CPSUICB_ACTION_OPTIF_CHANGED;
|
|
}
|
|
|
|
if ((pOITemp = FindOptItem(pPI->pOptItem,
|
|
pPI->cOptItem,
|
|
PP_AUTO_ROTATE)) &&
|
|
((pOITemp->Flags & OPTIF_DISABLED) != ARFlags)) {
|
|
|
|
pOITemp->Flags &= ~OPTIF_DISABLED;
|
|
pOITemp->Flags |= (ARFlags | OPTIF_CHANGED);
|
|
Action = CPSUICB_ACTION_OPTIF_CHANGED;
|
|
}
|
|
}
|
|
|
|
return(Action);
|
|
}
|
|
|
|
|
|
|
|
UINT
|
|
SetupPPOptItems(
|
|
PPRINTERINFO pPI
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
|
|
Author:
|
|
|
|
16-Nov-1995 Thu 14:15:25 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
POPTITEM pOIForm;
|
|
POPTITEM pOptItem;
|
|
POPTITEM pOI;
|
|
POIDATA pOIData;
|
|
WORD PPFlags;
|
|
DWORD Flags;
|
|
DWORD ODFlags;
|
|
UINT i;
|
|
|
|
|
|
|
|
pOI =
|
|
pOptItem = pPI->pOptItem;
|
|
pOIData = PPOIData;
|
|
i = (UINT)COUNT_ARRAY(PPOIData);
|
|
Flags = pPI->pPlotGPC->Flags;
|
|
PPFlags = pPI->PPData.Flags;
|
|
ODFlags = (Flags & PLOTF_RASTER) ? ODF_RASTER : ODF_PEN;
|
|
|
|
while (i--) {
|
|
|
|
DWORD OIFlags = pOIData->Flags;
|
|
|
|
if ((!(OIFlags & ODFlags)) ||
|
|
((OIFlags & ODF_MANUAL_FEED) &&
|
|
(Flags & (PLOTF_ROLLFEED | PLOTF_PAPERTRAY))) ||
|
|
((OIFlags & ODF_ROLLFEED) && (!(Flags & PLOTF_ROLLFEED))) ||
|
|
((OIFlags & ODF_NO_PAPERTRAY) && (Flags & PLOTF_PAPERTRAY)) ||
|
|
((OIFlags & ODF_COLOR) && (!(Flags & PLOTF_COLOR)))) {
|
|
|
|
//
|
|
// Nothing to do here
|
|
//
|
|
|
|
NULL;
|
|
|
|
} else if (OIFlags & ODF_CALLCREATEOI) {
|
|
|
|
pOI += pOIData->pfnCreateOI(pPI,
|
|
(LPVOID)((pOptItem) ? pOI : NULL),
|
|
pOIData);
|
|
|
|
} else if (pOptItem) {
|
|
|
|
if (CreateOPTTYPE(pPI, pOI, pOIData, pOIData->cOPData, NULL)) {
|
|
|
|
switch (pOI->DMPubID) {
|
|
|
|
case PP_MANUAL_FEED_METHOD:
|
|
|
|
pOI->Sel = (LONG)((PPFlags & PPF_MANUAL_FEED_CX) ? 0 : 1);
|
|
break;
|
|
|
|
case PP_AUTO_ROTATE:
|
|
|
|
pOI->Sel = (LONG)((PPFlags & PPF_AUTO_ROTATE) ? 1 : 0);
|
|
break;
|
|
|
|
case PP_PRINT_SMALLER_PAPER:
|
|
|
|
pOI->Sel = (LONG)((PPFlags & PPF_SMALLER_FORM) ? 1 : 0);
|
|
break;
|
|
|
|
case PP_INSTALLED_PENSET:
|
|
|
|
pOI->Sel = (LONG)pPI->IdxPenSet;
|
|
break;
|
|
}
|
|
|
|
pOI++;
|
|
}
|
|
|
|
} else {
|
|
|
|
pOI++;
|
|
}
|
|
|
|
pOIData++;
|
|
}
|
|
|
|
if ((i = (UINT)(pOI - pOptItem)) && (!pOptItem)) {
|
|
|
|
if (pPI->pOptItem = (POPTITEM)LocalAlloc(LPTR, sizeof(OPTITEM) * i)) {
|
|
|
|
pPI->cOptItem = (WORD)i;
|
|
|
|
//
|
|
// Call myself second time to really create it
|
|
//
|
|
|
|
SetupPPOptItems(pPI);
|
|
|
|
CheckInstalledForm(pPI, 0);
|
|
CheckPenSetButton(pPI, 0);
|
|
|
|
} else {
|
|
|
|
i = 0;
|
|
|
|
PLOTERR(("GetPPpOptItem(): LocalAlloc(%ld) failed",
|
|
sizeof(OPTITEM) * i));
|
|
}
|
|
}
|
|
|
|
return(i);
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
SavePPOptItems(
|
|
PPRINTERINFO pPI
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function save all the device options back to registry if one changed
|
|
and has a update permission
|
|
|
|
|
|
Arguments:
|
|
|
|
pPI - Pointer to the PRINTERINFO
|
|
|
|
|
|
Return Value:
|
|
|
|
VOID
|
|
|
|
|
|
Author:
|
|
|
|
06-Nov-1995 Mon 18:05:16 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
POPTITEM pOptItem;
|
|
POPTITEM pLastItem;
|
|
PDEVHTINFO pAdjHTInfo;
|
|
PCOLORINFO pCI;
|
|
LPDWORD pHTPatSize;
|
|
LPDWORD pDevPelsDPI;
|
|
PPAPERINFO pCurPaper;
|
|
LPBYTE pIdxPen;
|
|
WORD PPFlags;
|
|
BYTE DMPubID;
|
|
|
|
|
|
pCI = NULL;
|
|
pHTPatSize = NULL;
|
|
pDevPelsDPI = NULL;
|
|
pCurPaper = NULL;
|
|
pIdxPen = NULL;
|
|
|
|
|
|
if (!(pPI->Flags & PIF_UPDATE_PERMISSION)) {
|
|
|
|
return;
|
|
}
|
|
|
|
pOptItem = pPI->pOptItem;
|
|
pLastItem = pOptItem + pPI->cOptItem - 1;
|
|
|
|
while (pOptItem <= pLastItem) {
|
|
|
|
if ((DMPubID = pOptItem->DMPubID) == PP_PEN_SETUP) {
|
|
|
|
pOptItem = SavePenSet(pPI, pOptItem);
|
|
|
|
} else {
|
|
|
|
if (pOptItem->Flags & OPTIF_CHANGEONCE) {
|
|
|
|
switch (DMPubID) {
|
|
|
|
case PP_INSTALLED_FORM:
|
|
|
|
if (GetFormSelect(pPI, pOptItem)) {
|
|
|
|
pCurPaper = &(pPI->CurPaper);
|
|
}
|
|
|
|
break;
|
|
|
|
case PP_MANUAL_FEED_METHOD:
|
|
|
|
if (pOptItem->Sel) {
|
|
|
|
pPI->PPData.Flags &= ~PPF_MANUAL_FEED_CX;
|
|
|
|
} else {
|
|
|
|
pPI->PPData.Flags |= PPF_MANUAL_FEED_CX;
|
|
}
|
|
|
|
break;
|
|
|
|
case PP_AUTO_ROTATE:
|
|
|
|
if (pOptItem->Sel) {
|
|
|
|
pPI->PPData.Flags |= PPF_AUTO_ROTATE;
|
|
|
|
} else {
|
|
|
|
pPI->PPData.Flags &= ~PPF_AUTO_ROTATE;
|
|
}
|
|
|
|
break;
|
|
|
|
case PP_PRINT_SMALLER_PAPER:
|
|
|
|
if (pOptItem->Sel) {
|
|
|
|
pPI->PPData.Flags |= PPF_SMALLER_FORM;
|
|
|
|
} else {
|
|
|
|
pPI->PPData.Flags &= ~PPF_SMALLER_FORM;
|
|
}
|
|
|
|
break;
|
|
|
|
case PP_HT_SETUP:
|
|
|
|
pAdjHTInfo = PI_PADJHTINFO(pPI);
|
|
pCI = &(pAdjHTInfo->ColorInfo);
|
|
pDevPelsDPI = &(pAdjHTInfo->DevPelsDPI);
|
|
pHTPatSize = &(pAdjHTInfo->HTPatternSize);
|
|
break;
|
|
|
|
case PP_INSTALLED_PENSET:
|
|
|
|
pPI->IdxPenSet = (BYTE)pOptItem->Sel;
|
|
pIdxPen = (LPBYTE)&(pPI->IdxPenSet);
|
|
break;
|
|
}
|
|
}
|
|
|
|
pOptItem++;
|
|
}
|
|
}
|
|
|
|
if (!SaveToRegistry(pPI->hPrinter,
|
|
pCI,
|
|
pDevPelsDPI,
|
|
pHTPatSize,
|
|
pCurPaper,
|
|
&(pPI->PPData),
|
|
pIdxPen,
|
|
0,
|
|
NULL)) {
|
|
|
|
PlotUIMsgBox(NULL, IDS_PP_NO_SAVE, MB_ICONSTOP | MB_OK);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
CPSUICALLBACK
|
|
PPCallBack(
|
|
PCPSUICBPARAM pCPSUICBParam
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This is the callback function from the common property sheet UI
|
|
|
|
|
|
Arguments:
|
|
|
|
pCPSUICBParam - Pointer to the CPSUICBPARAM data structure to describe
|
|
the nature of the callback
|
|
|
|
|
|
Return Value:
|
|
|
|
LONG
|
|
|
|
|
|
Author:
|
|
|
|
07-Nov-1995 Tue 15:15:02 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
POPTITEM pCurItem = pCPSUICBParam->pCurItem;
|
|
POPTITEM pItem;
|
|
PPRINTERINFO pPI = (PPRINTERINFO)pCPSUICBParam->UserData;
|
|
POPTPARAM pOP;
|
|
DWORD Flags;
|
|
UINT i;
|
|
WORD Reason = pCPSUICBParam->Reason;
|
|
LONG Action = CPSUICB_ACTION_NONE;
|
|
|
|
|
|
|
|
if (Reason == CPSUICB_REASON_APPLYNOW) {
|
|
|
|
PRINTER_INFO_7 PI7;
|
|
|
|
SavePPOptItems(pPI);
|
|
|
|
pCPSUICBParam->Result = CPSUI_OK;
|
|
Action = CPSUICB_ACTION_ITEMS_APPLIED;
|
|
|
|
PI7.pszObjectGUID = NULL;
|
|
PI7.dwAction = DSPRINT_UPDATE;
|
|
|
|
SetPrinter(pPI->hPrinter, 7, (LPBYTE)&PI7, 0);
|
|
|
|
} else if (Reason == CPSUICB_REASON_ITEMS_REVERTED) {
|
|
|
|
Action = CheckInstalledForm(pPI, Action);
|
|
Action = CheckPenSetButton(pPI, Action);
|
|
|
|
} else {
|
|
|
|
switch (pCurItem->DMPubID) {
|
|
|
|
case PP_PENSET:
|
|
|
|
if ((Reason == CPSUICB_REASON_EXTPUSH) ||
|
|
(Reason == CPSUICB_REASON_OPTITEM_SETFOCUS)) {
|
|
|
|
PPENDATA pPD;
|
|
|
|
pPI = (PPRINTERINFO)pCPSUICBParam->UserData;
|
|
pPD = (PPENDATA)pPI->pPlotGPC->Pens.pData;
|
|
i = (UINT)pPI->pPlotGPC->MaxPens;
|
|
pItem = pCurItem++;
|
|
|
|
if (Reason == CPSUICB_REASON_EXTPUSH) {
|
|
|
|
while (i--) {
|
|
|
|
pCurItem->Sel = pPD->ColorIdx;
|
|
pCurItem->Flags |= OPTIF_CHANGED;
|
|
|
|
pCurItem++;
|
|
pPD++;
|
|
}
|
|
|
|
pItem->Flags |= (OPTIF_EXT_DISABLED |
|
|
OPTIF_EXT_HIDE |
|
|
OPTIF_CHANGED);
|
|
Action = CPSUICB_ACTION_REINIT_ITEMS;
|
|
|
|
} else {
|
|
|
|
Action = CheckPenSetButton(pPI, Action);
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case PP_INSTALLED_FORM:
|
|
|
|
if ((Reason == CPSUICB_REASON_SEL_CHANGED) ||
|
|
(Reason == CPSUICB_REASON_OPTITEM_SETFOCUS)) {
|
|
|
|
Action = CheckInstalledForm(pPI, Action);
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return(Action);
|
|
}
|
|
|
|
|
|
|
|
LONG
|
|
DrvDevicePropertySheets(
|
|
PPROPSHEETUI_INFO pPSUIInfo,
|
|
LPARAM lParam
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Show document property dialog box and update the output DEVMODE
|
|
|
|
|
|
Arguments:
|
|
|
|
pPSUIInfo - Pointer to the PROPSHEETUI_INFO data structure
|
|
|
|
lParam - LPARAM for this call, it is a pointer to the
|
|
DEVICEPROPERTYHEADER
|
|
|
|
Return Value:
|
|
|
|
LONG, 1=successful, 0=failed.
|
|
|
|
|
|
Author:
|
|
|
|
02-Feb-1996 Fri 10:47:42 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
PDEVICEPROPERTYHEADER pDPHdr;
|
|
PPRINTERINFO pPI;
|
|
LONG_PTR Result = -1;
|
|
|
|
//
|
|
// The MapPrinter will allocate memory, set default devmode, reading and
|
|
// validating the GPC then update from current pritner registry, it also
|
|
// will cached the pPI.
|
|
|
|
if ((!pPSUIInfo) ||
|
|
(!(pDPHdr = (PDEVICEPROPERTYHEADER)pPSUIInfo->lParamInit))) {
|
|
|
|
SetLastError(ERROR_INVALID_DATA);
|
|
return(ERR_CPSUI_GETLASTERROR);
|
|
}
|
|
|
|
if (pPSUIInfo->Reason == PROPSHEETUI_REASON_INIT) {
|
|
|
|
if (!(pPI = MapPrinter(pDPHdr->hPrinter,
|
|
NULL,
|
|
NULL,
|
|
MPF_HELPFILE | MPF_DEVICEDATA | MPF_PCPSUI))) {
|
|
|
|
PLOTRIP(("DrvDevicePropertySheets: MapPrinter() failed"));
|
|
|
|
SetLastError(ERROR_INVALID_DATA);
|
|
return(ERR_CPSUI_GETLASTERROR);
|
|
}
|
|
|
|
pPI->Flags = (pDPHdr->Flags & DPS_NOPERMISSION) ?
|
|
0 : PIF_UPDATE_PERMISSION;
|
|
pPI->pCPSUI->Flags = 0;
|
|
pPI->pCPSUI->pfnCallBack = PPCallBack;
|
|
pPI->pCPSUI->pDlgPage = CPSUI_PDLGPAGE_PRINTERPROP;
|
|
|
|
//
|
|
// Add form to the database and find out if we can update
|
|
//
|
|
// Move to DrvPrinterEven()
|
|
//
|
|
//
|
|
// AddFormsToDataBase(pPI, TRUE);
|
|
//
|
|
|
|
Result = (LONG_PTR)SetupPPOptItems(pPI);
|
|
|
|
} else {
|
|
|
|
pPI = (PPRINTERINFO)pPSUIInfo->UserData;
|
|
Result = (LONG_PTR)pDPHdr->pszPrinterName;
|
|
}
|
|
|
|
return(DefCommonUIFunc(pPSUIInfo, lParam, pPI, Result));
|
|
}
|
|
|
|
|
|
|
|
BOOL
|
|
PrinterProperties(
|
|
HWND hWnd,
|
|
HANDLE hPrinter
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function first retrieves and displays the current set of printer
|
|
properties for the printer. The user is allowed to change the current
|
|
printer properties from the displayed dialog box.
|
|
|
|
Arguments:
|
|
|
|
hWnd - Handle to the caller's window (parent window)
|
|
|
|
hPrinter - Handle to the pritner interested
|
|
|
|
|
|
Return Value:
|
|
|
|
TRUE if function sucessful FALSE if failed
|
|
|
|
|
|
Author:
|
|
|
|
06-Dec-1993 Mon 11:21:28 created
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
PRINTER_INFO_4 *pPI4;
|
|
DEVICEPROPERTYHEADER DPHdr;
|
|
LONG Result = CPSUI_CANCEL;
|
|
|
|
|
|
pPI4 = (PRINTER_INFO_4 *)GetPrinterInfo(hPrinter, 4);
|
|
|
|
DPHdr.cbSize = sizeof(DPHdr);
|
|
DPHdr.Flags = 0;
|
|
DPHdr.hPrinter = hPrinter;
|
|
DPHdr.pszPrinterName = (pPI4) ? pPI4->pPrinterName : NULL;
|
|
|
|
CallCommonPropertySheetUI(hWnd,
|
|
DrvDevicePropertySheets,
|
|
(LPARAM)&DPHdr,
|
|
(LPDWORD)&Result);
|
|
|
|
if (pPI4) {
|
|
|
|
LocalFree((HLOCAL)pPI4);
|
|
}
|
|
|
|
return(Result == CPSUI_OK);
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
DrvPrinterEvent(
|
|
LPWSTR pPrinterName,
|
|
INT Event,
|
|
DWORD Flags,
|
|
LPARAM lParam
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
|
|
Author:
|
|
|
|
08-May-1996 Wed 17:38:34 created
|
|
|
|
|
|
Revision History:
|
|
|
|
04-Jun-1996 Tue 14:51:25 updated
|
|
Matched a ClosePrinter() to OpenPrinter()
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
PRINTER_DEFAULTS PrinterDef = { NULL, NULL, PRINTER_ALL_ACCESS };
|
|
HANDLE hPrinter;
|
|
BOOL bRet = TRUE;
|
|
|
|
|
|
switch (Event) {
|
|
|
|
case PRINTER_EVENT_INITIALIZE:
|
|
|
|
if (OpenPrinter(pPrinterName, &hPrinter, &PrinterDef)) {
|
|
|
|
PPRINTERINFO pPI;
|
|
|
|
if (pPI = MapPrinter(hPrinter, NULL, NULL, MPF_DEVICEDATA)) {
|
|
|
|
bRet = AddFormsToDataBase(pPI, FALSE);
|
|
|
|
UnMapPrinter(pPI);
|
|
}
|
|
|
|
ClosePrinter(hPrinter);
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
}
|
|
|
|
return(bRet);
|
|
}
|