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.

884 lines
24 KiB

  1. /*++
  2. Copyright (c) 1990-1995 Microsoft Corporation
  3. Module Name:
  4. stdpage.c
  5. Abstract:
  6. This module contains standard page procs
  7. Author:
  8. 18-Aug-1995 Fri 18:57:12 created -by- Daniel Chou (danielc)
  9. [Environment:]
  10. NT Windows - Common Printer Driver UI DLL.
  11. [Notes:]
  12. Revision History:
  13. --*/
  14. #include "precomp.h"
  15. #pragma hdrstop
  16. #define DBG_CPSUIFILENAME DbgStdPage
  17. #define DBG_STDPAGE1ID 0x00000001
  18. #define DBGITEM_SDP 0x00000002
  19. #define DBGITEM_STDPAGEID 0x00000004
  20. DEFINE_DBGVAR(0);
  21. extern HINSTANCE hInstDLL;
  22. #define DOCPROP_PDLGPAGE_START 0
  23. #define DOCPROP_CDLGPAGE 3
  24. #define ADVDOCPROP_PDLGPAGE_START 3
  25. #define ADVDOCPROP_CDLGPAGE 1
  26. #define PRINTERPROP_PDLGPAGE_START 4
  27. #define PRINTERPROP_CDLGPAGE 1
  28. #define TVONLY_PDLGPAGE_START 5
  29. #define TVONLY_CDLGPAGE 1
  30. typedef struct _INTOIDATA {
  31. WORD HelpIdx;
  32. WORD wReserved;
  33. WORD StrID;
  34. WORD IconID;
  35. } INTOIDATA;
  36. typedef struct _STDDLGPAGE {
  37. WORD UseHdrIconID;
  38. WORD wReserved;
  39. WORD IDSTabName;
  40. WORD DlgTemplateID;
  41. } STDDLGPAGE;
  42. const INTOIDATA IntOIData[INTIDX_TOTAL] = {
  43. { IDH_STD_TVROOT, 0, 0, IDI_CPSUI_PRINTER3 },
  44. { IDH_PAPEROUTPUT, 0, IDS_CPSUI_PAPER_OUTPUT, IDI_CPSUI_PAPER_OUTPUT },
  45. { IDH_GRAPHIC, 0, IDS_CPSUI_GRAPHIC, IDI_CPSUI_GRAPHIC },
  46. { IDH_OPTIONS, 0, IDS_CPSUI_DOCUMENT, IDI_CPSUI_OPTION },
  47. { IDH_ICMHDR, 0, IDS_CPSUI_ICM, IDI_CPSUI_ICM_OPTION },
  48. { IDH_ADVANCED_PUSH, 0, IDS_CPSUI_ADVANCED, IDI_CPSUI_EMPTY }
  49. };
  50. //
  51. // We must use PUSHBUTTON_TYPE_CALLBACK because it will never overwrite the
  52. // pSel which we use for the icon id.
  53. //
  54. OPTPARAM OptParamHdrPush = {
  55. sizeof(OPTPARAM),
  56. 0,
  57. PUSHBUTTON_TYPE_CALLBACK,
  58. (LPTSTR)InternalRevertOptItem,
  59. (WORD)IDI_CPSUI_WARNING,
  60. 0
  61. };
  62. OPTTYPE OptTypeHdrPush = {
  63. sizeof(OPTTYPE),
  64. TVOT_PUSHBUTTON,
  65. 0,
  66. 1,
  67. 0,
  68. &OptParamHdrPush,
  69. OTS_PUSH_NO_DOT_DOT_DOT
  70. };
  71. EXTPUSH ExtPushAbout = {
  72. sizeof(EXTPUSH),
  73. 0,
  74. (LPTSTR)IDS_CPSUI_ABOUT,
  75. NULL,
  76. IDI_CPSUI_QUESTION,
  77. 0
  78. };
  79. STDDLGPAGE StdDlgPage[] = {
  80. { 0, 0, IDS_CPSUI_STDDOCPROPTAB1, DP_STD_DOCPROPPAGE1 },
  81. { 0, 0, IDS_CPSUI_STDDOCPROPTAB2, DP_STD_DOCPROPPAGE2 },
  82. { 0, 0, IDS_CPSUI_STDDOCPROPTVTAB, DP_STD_INT_TVPAGE },
  83. { 0, 0, IDS_CPSUI_STDDOCPROPTVTAB, DP_STD_TREEVIEWPAGE },
  84. { 0, 0, IDS_CPSUI_DEVICE_SETTINGS, DP_STD_TREEVIEWPAGE },
  85. { 0, 0, IDS_CPSUI_OPTIONS, DP_STD_TREEVIEWPAGE }
  86. };
  87. BYTE StdTVOT[] = { TVOT_2STATES, // 0
  88. TVOT_3STATES, // 1
  89. TVOT_COMBOBOX, // 2
  90. TVOT_LISTBOX, // 3
  91. TVOT_UDARROW, // 4
  92. TVOT_TRACKBAR, // 5
  93. TVOT_SCROLLBAR // 6
  94. };
  95. STDPAGEINFO StdPageInfo[] = {
  96. { IDD_ORIENT_GROUP ,0, 2, IDS_CPSUI_ORIENTATION ,IDH_ORIENTATION ,STDPAGEID_0 },
  97. { 0 ,4, 3, IDS_CPSUI_SCALING ,IDH_SCALING ,STDPAGEID_NONE},
  98. { 0 ,4, 1, IDS_CPSUI_NUM_OF_COPIES ,IDH_NUM_OF_COPIES ,STDPAGEID_NONE},
  99. { IDD_DEFSOURCE_GROUP,2, 2, IDS_CPSUI_SOURCE ,IDH_SOURCE ,STDPAGEID_1 },
  100. { 0 ,0, 4, IDS_CPSUI_PRINTQUALITY ,IDH_RESOLUTION ,STDPAGEID_NONE},
  101. { IDD_COLOR_GROUP ,0, 1, IDS_CPSUI_COLOR_APPERANCE,IDH_COLOR_APPERANCE ,STDPAGEID_1 },
  102. { IDD_DUPLEX_GROUP ,0, 2, IDS_CPSUI_DUPLEX ,IDH_DUPLEX ,STDPAGEID_0 },
  103. { 0 ,0, 4, IDS_CPSUI_TTOPTION ,IDH_TTOPTION ,STDPAGEID_NONE},
  104. { 0 ,2, 2, IDS_CPSUI_FORMNAME ,IDH_FORMNAME ,STDPAGEID_NONE},
  105. { 0 ,0, 4, IDS_CPSUI_ICMMETHOD ,IDH_ICMMETHOD ,STDPAGEID_NONE},
  106. { 0 ,0, 4, IDS_CPSUI_ICMINTENT ,IDH_ICMINTENT ,STDPAGEID_NONE},
  107. { IDD_MEDIATYPE_GROUP,2, 2, IDS_CPSUI_MEDIA ,IDH_MEDIA ,STDPAGEID_1 },
  108. { 0 ,0, 4, IDS_CPSUI_DITHERING ,IDH_DITHERING ,STDPAGEID_NONE},
  109. { IDD_OUTPUTBIN_GROUP,2, 2, IDS_CPSUI_OUTPUTBIN ,IDH_OUTPUTBIN ,STDPAGEID_1 },
  110. { IDD_QUALITY_GROUP ,0, 2, IDS_CPSUI_QUALITY_SETTINGS ,IDH_QUALITY ,STDPAGEID_1 },
  111. { IDD_NUP_GROUP ,2, 2, IDS_CPSUI_NUP ,IDH_NUP ,STDPAGEID_0 },
  112. { IDD_PAGEORDER_GROUP,0, 2, IDS_CPSUI_PAGEORDER ,IDH_PAGEORDER ,STDPAGEID_0 },
  113. };
  114. LONG
  115. SetStdPropPageID(
  116. PTVWND pTVWnd
  117. )
  118. /*++
  119. Routine Description:
  120. Do all the standard checking and set flags
  121. Arguments:
  122. Return Value:
  123. Author:
  124. 22-Aug-1995 Tue 14:34:01 created -by- Daniel Chou (danielc)
  125. Revision History:
  126. --*/
  127. {
  128. POPTITEM pItem;
  129. POPTITEM pFirstItem;
  130. POPTITEM pLastItem;
  131. POPTITEM pItemColor = NULL;
  132. POPTITEM pItemICMMethod = NULL;
  133. POPTITEM pItemICMIntent = NULL;
  134. HINSTANCE hInstCaller;
  135. UINT cDMPub = 0;
  136. FillMemory(pTVWnd->DMPubIdx, sizeof(pTVWnd->DMPubIdx), 0xFF);
  137. pFirstItem =
  138. pItem = pTVWnd->ComPropSheetUI.pOptItem;
  139. pLastItem = pTVWnd->pLastItem;
  140. hInstCaller = pTVWnd->ComPropSheetUI.hInstCaller;
  141. while (pItem <= pLastItem) {
  142. POPTTYPE pOptType;
  143. LPBYTE pTVOT;
  144. UINT cTVOT;
  145. BYTE LastTVOT;
  146. BYTE DMPubID = pItem->DMPubID;
  147. BYTE CurLevel = pItem->Level;
  148. do {
  149. if ((DMPubID != DMPUB_NONE) &&
  150. (DMPubID <= DMPUB_LAST) &&
  151. (pOptType = pItem->pOptType)) {
  152. POPTPARAM pOptParam;
  153. UINT Count;
  154. UINT Idx;
  155. WORD StdNameID;
  156. WORD BegCtrlID;
  157. Idx = (UINT)(DMPubID - DMPUB_FIRST);
  158. StdNameID = StdPageInfo[Idx].StdNameID;
  159. //
  160. // If there is help ID for standard item, use it; otherwise use the
  161. // system standard help ID
  162. //
  163. _OI_HELPIDX(pItem) = (DWORD)(((pItem->pOIExt) && (pItem->pOIExt->pHelpFile)) ?
  164. 0 : StdPageInfo[Idx].HelpIdx);
  165. if ((!(pItem->Flags & OPTIF_ITEM_HIDE)) &&
  166. (pTVWnd->DMPubIdx[Idx] == 0xFFFF)) {
  167. ++cDMPub;
  168. switch (DMPubID) {
  169. case DMPUB_PRINTQUALITY:
  170. switch (LODWORD(pItem->pName)) {
  171. case IDS_CPSUI_RESOLUTION:
  172. case IDS_CPSUI_PRINTQUALITY:
  173. StdNameID = LOWORD(LODWORD(pItem->pName));
  174. break;
  175. }
  176. break;
  177. case DMPUB_COPIES_COLLATE:
  178. if ((pItem->Flags & OPTIF_EXT_IS_EXTPUSH) &&
  179. (pItem->pExtChkBox)) {
  180. return(ERR_CPSUI_DMCOPIES_USE_EXTPUSH);
  181. }
  182. break;
  183. case DMPUB_COLOR:
  184. pItemColor = pItem;
  185. break;
  186. case DMPUB_ICMINTENT:
  187. pItemICMIntent = pItem;
  188. break;
  189. case DMPUB_ICMMETHOD:
  190. pItemICMMethod = pItem;
  191. break;
  192. case DMPUB_ORIENTATION:
  193. pOptParam = pOptType->pOptParam;
  194. Count = pOptType->Count;
  195. if (Count > 2 )
  196. {
  197. while (Count--) {
  198. switch (pOptParam->IconID) {
  199. case IDI_CPSUI_PORTRAIT:
  200. pOptParam->pData = (LPTSTR)IDS_CPSUI_PORTRAIT;
  201. break;
  202. case IDI_CPSUI_LANDSCAPE:
  203. pOptParam->pData = (LPTSTR)IDS_CPSUI_LANDSCAPE;
  204. break;
  205. case IDI_CPSUI_ROT_LAND:
  206. pOptParam->pData = (LPTSTR)IDS_CPSUI_ROT_LAND;
  207. break;
  208. }
  209. pOptParam++;
  210. }
  211. }
  212. else
  213. {
  214. while (Count--) {
  215. switch (pOptParam->IconID) {
  216. case IDI_CPSUI_PORTRAIT:
  217. pOptParam->pData = (LPTSTR)IDS_CPSUI_PORTRAIT;
  218. break;
  219. case IDI_CPSUI_LANDSCAPE:
  220. case IDI_CPSUI_ROT_LAND:
  221. pOptParam->pData = (LPTSTR)IDS_CPSUI_LANDSCAPE;
  222. break;
  223. }
  224. pOptParam++;
  225. }
  226. }
  227. break;
  228. case DMPUB_DUPLEX:
  229. pOptParam = pOptType->pOptParam;
  230. Count = pOptType->Count;
  231. while (Count--) {
  232. switch (pOptParam->IconID) {
  233. case IDI_CPSUI_DUPLEX_NONE:
  234. case IDI_CPSUI_DUPLEX_NONE_L:
  235. pOptParam->pData = (LPTSTR)IDS_CPSUI_SIMPLEX;
  236. break;
  237. case IDI_CPSUI_DUPLEX_HORZ:
  238. case IDI_CPSUI_DUPLEX_HORZ_L:
  239. pOptParam->pData = (LPTSTR)IDS_CPSUI_HORIZONTAL;
  240. break;
  241. case IDI_CPSUI_DUPLEX_VERT:
  242. case IDI_CPSUI_DUPLEX_VERT_L:
  243. pOptParam->pData = (LPTSTR)IDS_CPSUI_VERTICAL;
  244. break;
  245. }
  246. pOptParam++;
  247. }
  248. break;
  249. default:
  250. break;
  251. }
  252. pItem->pName = (LPTSTR)StdNameID;
  253. pTVWnd->DMPubIdx[Idx] = (WORD)(pItem - pFirstItem);
  254. }
  255. pTVOT = (LPBYTE)&StdTVOT[StdPageInfo[Idx].iStdTVOT];
  256. cTVOT = (UINT)StdPageInfo[Idx].cStdTVOT;
  257. LastTVOT = pTVOT[cTVOT - 1];
  258. while (cTVOT--) {
  259. if (pOptType->Type == *pTVOT++) {
  260. pTVOT = NULL;
  261. break;
  262. }
  263. }
  264. if (pTVOT) {
  265. CPSUIERR(("DMPubID=%u has wrong type=%u",
  266. (UINT)DMPubID, (UINT)pOptType->Type));
  267. return(ERR_CPSUI_INVALID_DMPUB_TVOT);
  268. }
  269. if (BegCtrlID = StdPageInfo[Idx].BegCtrlID) {
  270. BYTE HideMask;
  271. switch (pOptType->Type) {
  272. case TVOT_3STATES:
  273. pOptParam = pOptType->pOptParam;
  274. Count = pOptType->Count;
  275. HideMask = OTINTF_STATES_1;
  276. //
  277. // The OPTPF_HIDE cannot be dynamically changed for
  278. // standard page items (3 states one)
  279. //
  280. while (Count--) {
  281. if (pOptParam++->Flags & OPTPF_HIDE) {
  282. _OT_FLAGS(pOptType) |=
  283. (OTINTF_STDPAGE_3STATES | HideMask);
  284. }
  285. HideMask <<= 1;
  286. }
  287. break;
  288. case TVOT_2STATES:
  289. if (LastTVOT == TVOT_3STATES) {
  290. //
  291. // The 0x04 is to hide the last radio button/text
  292. // on the standard page and 0x80 is to tell the
  293. // InitStates() that ExtChkBoxID is located on
  294. // the end of 3 states
  295. //
  296. _OT_FLAGS(pOptType) |= (OTINTF_STDPAGE_3STATES |
  297. OTINTF_STATES_3);
  298. }
  299. break;
  300. case TVOT_LISTBOX:
  301. pOptType->Style |= OTS_LBCB_PROPPAGE_LBUSECB;
  302. }
  303. pOptType->BegCtrlID = BegCtrlID;
  304. CPSUIOPTITEM(DBGITEM_STDPAGEID, pTVWnd,
  305. "SetStdPageID", 1, pItem);
  306. }
  307. } else {
  308. _OI_HELPIDX(pItem) = 0;
  309. }
  310. } WHILE_SKIP_CHILDREN(pItem, pLastItem, CurLevel);
  311. }
  312. if (pItemColor) {
  313. DWORD dw;
  314. dw = (pItemColor->Sel < 1) ? OPTIF_DISABLED : 0;
  315. if (pItemICMMethod) {
  316. pItemICMMethod->Flags &= ~OPTIF_DISABLED;
  317. pItemICMMethod->Flags |= dw;
  318. }
  319. if (pItemICMIntent) {
  320. pItemICMIntent->Flags &= ~OPTIF_DISABLED;
  321. pItemICMIntent->Flags |= dw;
  322. }
  323. }
  324. pTVWnd->cDMPub = (BYTE)cDMPub;
  325. return(cDMPub);
  326. }
  327. LONG
  328. AddIntOptItem(
  329. PTVWND pTVWnd
  330. )
  331. /*++
  332. Routine Description:
  333. This function add standard internal OPTITEM to the TVWND
  334. Arguments:
  335. pTVWnd - Our instance data
  336. Return Value:
  337. LONG number of item added if >= 0, else error code
  338. Author:
  339. 13-Sep-1995 Wed 14:40:37 created -by- Daniel Chou (danielc)
  340. Revision History:
  341. --*/
  342. {
  343. POPTITEM pItem;
  344. POIDATA pOIData;
  345. UINT i;
  346. for (i = 0, pItem = PBEG_INTOPTITEM(pTVWnd), pOIData = pTVWnd->IntOIData;
  347. i < INTIDX_TOTAL;
  348. i++, pItem++, pOIData++) {
  349. //
  350. // Only set anything is none zero to it
  351. //
  352. pItem->cbSize = sizeof(OPTITEM);
  353. if (!(pItem->pName = (LPTSTR)IntOIData[i].StrID)) {
  354. if (!(pItem->pName = pTVWnd->ComPropSheetUI.pOptItemName)) {
  355. if (!(pItem->pName = pTVWnd->ComPropSheetUI.pCallerName)) {
  356. pItem->pName = (LPTSTR)IDS_CPSUI_OPTIONS;
  357. }
  358. }
  359. pItem->pSel = (LPTSTR)pTVWnd->ComPropSheetUI.IconID;
  360. pItem->Flags |= OPTIF_EXT_IS_EXTPUSH;
  361. pItem->pExtPush = &ExtPushAbout;
  362. if (pTVWnd->ComPropSheetUI.Flags & CPSUIF_ICONID_AS_HICON) {
  363. pItem->Flags |= OPTIF_SEL_AS_HICON;
  364. }
  365. } else if (pItem->pName == (LPTSTR)IDS_CPSUI_DOCUMENT) {
  366. pItem->Flags |= OPTIF_COLLAPSE;
  367. }
  368. if (!pItem->pName) {
  369. pItem->pName = (LPTSTR)IDS_CPSUI_PROPERTIES;
  370. }
  371. if (!pItem->Sel) {
  372. pItem->Sel = IntOIData[i].IconID;
  373. pItem->Flags &= ~OPTIF_SEL_AS_HICON;
  374. }
  375. pItem->pOptType = &OptTypeHdrPush;
  376. pItem->DMPubID = DMPUB_NONE;
  377. pOIData->HelpIdx = IntOIData[i].HelpIdx;
  378. pOIData->OIExtFlags = (pTVWnd->Flags & TWF_ANSI_CALL) ?
  379. OIEXTF_ANSI_STRING : 0;
  380. pOIData->hInstCaller = pTVWnd->hInstCaller;
  381. pOIData->pHelpFile = (LPTSTR)IDS_INT_CPSUI_HELPFILE;
  382. _OI_POIDATA(pItem) = pOIData;
  383. }
  384. pTVWnd->OptParamNone.cbSize = sizeof(OPTPARAM);
  385. pTVWnd->OptParamNone.pData = (LPTSTR)IDS_CPSUI_LBCB_NOSEL;
  386. pTVWnd->OptParamNone.IconID = IDI_CPSUI_SEL_NONE;
  387. pTVWnd->OptParamNone.lParam = 0;
  388. return(INTIDX_TOTAL);
  389. }
  390. LONG
  391. SetpMyDlgPage(
  392. PTVWND pTVWnd,
  393. UINT cCurPages
  394. )
  395. /*++
  396. Routine Description:
  397. Arguments:
  398. Return Value:
  399. Author:
  400. 06-Sep-1995 Wed 12:12:27 created -by- Daniel Chou (danielc)
  401. Revision History:
  402. --*/
  403. {
  404. PDLGPAGE pDP;
  405. PMYDLGPAGE pMyDP;
  406. POPTITEM pHdrItem;
  407. UINT cInitPage;
  408. UINT cPage;
  409. INT iPage;
  410. UINT cb;
  411. BOOL ChkDMPub = FALSE;
  412. pHdrItem = PIDX_INTOPTITEM(pTVWnd, INTIDX_TVROOT);
  413. switch ((ULONG_PTR)(pDP = pTVWnd->ComPropSheetUI.pDlgPage)) {
  414. case (ULONG_PTR)CPSUI_PDLGPAGE_DOCPROP:
  415. cInitPage = DOCPROP_CDLGPAGE - 1;
  416. cPage = DOCPROP_CDLGPAGE;
  417. iPage = DOCPROP_PDLGPAGE_START;
  418. pTVWnd->Flags |= (TWF_TVPAGE_CHK_DMPUB | TWF_HAS_ADVANCED_PUSH);
  419. pTVWnd->IntTVOptIdx = INTIDX_OPTIONS;
  420. pHdrItem->UserData = IDS_INT_CPSUI_ADVDOC_SET;
  421. ChkDMPub = TRUE;
  422. _OI_HELPIDX(pHdrItem) = IDH_DOCPROP_TVROOT;
  423. break;
  424. case (ULONG_PTR)CPSUI_PDLGPAGE_ADVDOCPROP:
  425. cInitPage =
  426. cPage = ADVDOCPROP_CDLGPAGE;
  427. iPage = ADVDOCPROP_PDLGPAGE_START;
  428. pTVWnd->Flags |= (TWF_TVPAGE_CHK_DMPUB | TWF_ADVDOCPROP);
  429. pTVWnd->IntTVOptIdx = INTIDX_OPTIONS;
  430. pHdrItem->UserData = IDS_INT_CPSUI_ADVDOC_SET;
  431. ChkDMPub = TRUE;
  432. _OI_HELPIDX(pHdrItem) = IDH_ADVDOCPROP_TVROOT;
  433. break;
  434. case (ULONG_PTR)CPSUI_PDLGPAGE_PRINTERPROP:
  435. cInitPage =
  436. cPage = PRINTERPROP_CDLGPAGE;
  437. iPage = PRINTERPROP_PDLGPAGE_START;
  438. pTVWnd->Flags |= (TWF_TVPAGE_CHK_DMPUB | TWF_TVPAGE_NODMPUB);
  439. pHdrItem->UserData = IDS_INT_CPSUI_DEVICE_SET;
  440. _OI_HELPIDX(pHdrItem) = IDH_DEVPROP_TVROOT;
  441. break;
  442. case (ULONG_PTR)CPSUI_PDLGPAGE_TREEVIEWONLY:
  443. cInitPage =
  444. cPage = TVONLY_CDLGPAGE;
  445. iPage = TVONLY_PDLGPAGE_START;
  446. pHdrItem->UserData = IDS_INT_CPSUI_SETTINGS;
  447. _OI_HELPIDX(pHdrItem) = IDH_STD_TVROOT;
  448. break;
  449. default:
  450. if (cPage = (UINT)pTVWnd->ComPropSheetUI.cDlgPage) {
  451. if (!VALID_PTR(pDP)) {
  452. return(ERR_CPSUI_INVALID_PDLGPAGE);
  453. }
  454. } else {
  455. return(0);
  456. }
  457. cInitPage = cPage;
  458. iPage = -1;
  459. break;
  460. }
  461. if ((cPage + cCurPages) > MAXPROPPAGES) {
  462. return(ERR_CPSUI_TOO_MANY_PROPSHEETPAGES);
  463. }
  464. cb = (UINT)(cPage * sizeof(MYDLGPAGE));
  465. pTVWnd->cInitMyDlgPage = (BYTE)cInitPage;
  466. pTVWnd->cMyDlgPage = (BYTE)cPage;
  467. if (!(pMyDP = pTVWnd->pMyDlgPage = (PMYDLGPAGE)LocalAlloc(LPTR, cb))) {
  468. return(ERR_CPSUI_ALLOCMEM_FAILED);
  469. }
  470. if (iPage < 0) {
  471. InitMYDLGPAGE(pMyDP, pDP, cPage);
  472. } else {
  473. POPTITEM pItem;
  474. POPTITEM pLastItem;
  475. POPTITEM pNextItem;
  476. WORD cChildren;
  477. BYTE DlgPageIdx;
  478. BYTE CurDMPubID;
  479. BYTE CurLevel;
  480. cb = cPage;
  481. while (cb--) {
  482. pMyDP->ID = MYDP_ID;
  483. pMyDP->DlgPage.cbSize = sizeof(DLGPAGE);
  484. pMyDP->DlgPage.Flags = 0;
  485. pMyDP->DlgPage.DlgProc = NULL;
  486. pMyDP->DlgPage.pTabName = (LPTSTR)StdDlgPage[iPage].IDSTabName;
  487. pMyDP->DlgPage.DlgTemplateID = StdDlgPage[iPage].DlgTemplateID;
  488. pMyDP->DlgPage.IconID = (StdDlgPage[iPage].UseHdrIconID) ?
  489. (DWORD)pHdrItem->Sel : 0;
  490. pMyDP++;
  491. iPage++;
  492. }
  493. pItem = pTVWnd->ComPropSheetUI.pOptItem;
  494. pLastItem = pTVWnd->pLastItem;
  495. while (pItem <= pLastItem) {
  496. DWORD FlagsClear;
  497. DWORD FlagsSet;
  498. FlagsClear =
  499. FlagsSet = 0;
  500. CurDMPubID = pItem->DMPubID;
  501. CurLevel = pItem->Level;
  502. if (ChkDMPub) {
  503. switch (CurDMPubID) {
  504. case DMPUB_NUP:
  505. FlagsSet |= OPTIF_NO_GROUPBOX_NAME;
  506. DlgPageIdx = 0;
  507. break;
  508. case DMPUB_ORIENTATION:
  509. case DMPUB_PAGEORDER:
  510. case DMPUB_DUPLEX:
  511. FlagsClear |= OPTIF_NO_GROUPBOX_NAME;
  512. DlgPageIdx = 0;
  513. break;
  514. case DMPUB_DEFSOURCE:
  515. FlagsSet |= OPTIF_NO_GROUPBOX_NAME;
  516. DlgPageIdx = (cPage > 1) ? 1 : 0;
  517. break;
  518. case DMPUB_COPIES_COLLATE:
  519. pItem->pOptType->pOptParam[0].pData =
  520. (LPTSTR)((ULONG_PTR)((pItem->Sel <= 1) ? IDS_CPSUI_COPY :
  521. IDS_CPSUI_COPIES));
  522. if ((!(pItem->Flags & OPTIF_EXT_HIDE)) &&
  523. (pItem->pExtChkBox)) {
  524. if (pItem->Sel <= 1) {
  525. FlagsSet |= OPTIF_EXT_DISABLED;
  526. } else {
  527. FlagsClear |= OPTIF_EXT_DISABLED;
  528. }
  529. }
  530. FlagsClear |= OPTIF_NO_GROUPBOX_NAME;
  531. DlgPageIdx = cPage - 1;
  532. break;
  533. case DMPUB_COLOR:
  534. case DMPUB_MEDIATYPE:
  535. case DMPUB_QUALITY:
  536. case DMPUB_OUTPUTBIN:
  537. FlagsClear |= OPTIF_NO_GROUPBOX_NAME;
  538. DlgPageIdx = (cPage > 1) ? 1 : 0;
  539. break;
  540. default:
  541. DlgPageIdx = cPage - 1;
  542. break;
  543. }
  544. } else {
  545. DlgPageIdx = 0;
  546. }
  547. //
  548. // Set the correct flags and DlgPageIdx for the item and all of
  549. // its children
  550. //
  551. do {
  552. BYTE DMPubID;
  553. pItem->Flags = (pItem->Flags & ~FlagsClear) | FlagsSet;
  554. pItem->DlgPageIdx = DlgPageIdx;
  555. if (((DMPubID = pItem->DMPubID) < DMPUB_USER) &&
  556. (DMPubID != DMPUB_NONE)) {
  557. pItem->DMPubID = CurDMPubID;
  558. }
  559. CPSUIOPTITEM(DBGITEM_SDP, pTVWnd, "SetDlgPage", 1, pItem);
  560. } WHILE_SKIP_CHILDREN(pItem, pLastItem, CurLevel);
  561. }
  562. }
  563. if (ChkDMPub) {
  564. SetStdPropPageID(pTVWnd);
  565. }
  566. return(cPage);
  567. }