source: trunk/src/comdlg32/comdlg32.cpp@ 6335

Last change on this file since 6335 was 6335, checked in by sandervl, 24 years ago

added (inactive) Wine printer dialog code

File size: 6.8 KB
Line 
1/* $Id: comdlg32.cpp,v 1.31 2001-07-15 14:35:11 sandervl Exp $ */
2
3/*
4 * COMDLG32 implementation
5 *
6 * Copyright 1998 Sander van Leeuwen
7 * Copyright 1999 Patrick Haller
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12
13
14/****************************************************************************
15 * Includes *
16 ****************************************************************************/
17
18#include <os2win.h>
19#include <stdarg.h>
20#include <stdlib.h>
21#include <string.h>
22#include <misc.h>
23#include <odinwrap.h>
24#include <winuser32.h>
25#include <unicode.h>
26
27ODINDEBUGCHANNEL(COMDLG32-COMDLG32)
28
29
30#define COMDLG32_CHECKHOOK(a,b,c) \
31 if(a->Flags & b) \
32 { \
33 a->lpfnHook = 0; \
34 } \
35 a->hwndOwner = Win32ToOS2Handle(a->hwndOwner);
36
37#define COMDLG32_CHECKHOOK2(a,b,c,d) \
38 if(a->Flags & b) \
39 { \
40 a->d = 0; \
41 } \
42 a->hwndOwner = Win32ToOS2Handle(a->hwndOwner);
43
44#ifdef USING_OPEN32
45
46#define FLAG_TO_OPEN32 0
47#define FLAG_FROM_OPEN32 1
48
49//******************************************************************************
50//******************************************************************************
51HGLOBAL GlobalCopy(HGLOBAL hDest, HGLOBAL hSource, BOOL fToOpen32)
52{
53 LPVOID src;
54 LPVOID dest;
55 ULONG size;
56
57 if(fToOpen32 == FLAG_TO_OPEN32) {
58 src = GlobalLock(hSource);
59 if(src) {
60 size = GlobalSize(hSource);
61 if(hDest == NULL) {
62 hDest = O32_GlobalAlloc(GHND, size);
63 }
64 dest = O32_GlobalLock(hDest);
65 memcpy(dest, src, size);
66 O32_GlobalUnlock(hDest);
67 }
68 GlobalUnlock(hSource);
69 }
70 else {
71 src = O32_GlobalLock(hSource);
72 if(src) {
73 size = O32_GlobalSize(hSource);
74 if(hDest == NULL) {
75 hDest = GlobalAlloc(GHND, size);
76 }
77 dest = GlobalLock(hDest);
78 memcpy(dest, src, size);
79 GlobalUnlock(hDest);
80 }
81 O32_GlobalUnlock(hSource);
82 }
83 return hDest;
84}
85#endif
86#if 1
87/*****************************************************************************
88 * Name :
89 * Purpose :
90 * Parameters:
91 * Variables :
92 * Result :
93 * Remark :
94 * Status :
95 *
96 * Author : Patrick Haller [Tue, 1998/02/10 01:55]
97 *****************************************************************************/
98
99ODINFUNCTION1(BOOL, PrintDlgA,
100 LPPRINTDLGA, lppd)
101{
102 BOOL ret;
103#ifdef USING_OPEN32
104 HGLOBAL hDevmode = 0, hDevNames = 0;
105 HGLOBAL hOrgDevmode = 0, hOrgDevNames = 0;
106 DEVMODEA *devmode, *devmodeorg;
107 DEVNAMES *devnames, *devnamesorg;
108 ULONG size;
109#endif
110
111 COMDLG32_CHECKHOOK2(lppd, PD_ENABLEPRINTHOOK, LPPRINTHOOKPROC,lpfnPrintHook)
112 COMDLG32_CHECKHOOK2(lppd, PD_ENABLESETUPHOOK, LPSETUPHOOKPROC,lpfnSetupHook)
113
114#ifdef USING_OPEN32
115 if(lppd->hDevMode) {
116 hOrgDevmode = lppd->hDevMode;
117 lppd->hDevMode = GlobalCopy(NULL, hOrgDevmode, FLAG_TO_OPEN32);
118 }
119 if(lppd->hDevNames) {
120 hOrgDevNames = lppd->hDevNames;
121 lppd->hDevNames = GlobalCopy(NULL, hOrgDevNames, FLAG_TO_OPEN32);
122 }
123#endif
124 HWND hwndOwner = lppd->hwndOwner;
125 if(lppd->hwndOwner) {
126 lppd->hwndOwner = Win32ToOS2Handle(lppd->hwndOwner);
127 }
128 ret = O32_PrintDlg(lppd);
129 lppd->hwndOwner = hwndOwner;
130#ifdef USING_OPEN32
131 if(ret == TRUE) {
132 if(lppd->hDevMode) {
133 hDevmode = lppd->hDevMode;
134 lppd->hDevMode = GlobalCopy(hOrgDevmode, lppd->hDevMode, FLAG_FROM_OPEN32);
135 O32_GlobalFree(hDevmode);
136 }
137 if(lppd->hDevNames) {
138 hDevNames = lppd->hDevNames;
139 lppd->hDevNames = GlobalCopy(hOrgDevNames, lppd->hDevNames, FLAG_FROM_OPEN32);
140 O32_GlobalFree(hDevNames);
141 }
142 }
143#endif
144 return ret;
145}
146
147
148/*****************************************************************************
149 * Name :
150 * Purpose :
151 * Parameters:
152 * Variables :
153 * Result :
154 * Remark :
155 * Status :
156 *
157 * Author : Patrick Haller [Tue, 1998/02/10 01:55]
158 *****************************************************************************/
159
160ODINFUNCTION1(BOOL, PrintDlgW,
161 LPPRINTDLGW, lppd)
162{
163
164 PRINTDLGA pd;
165 BOOL bResult;
166
167 //SvL: TODO: hDevMode & hDevNames
168 dprintf(("PrintDlgW: ERROR NOT COMPLETE (UNICODE TRANSLATION)!!"));
169
170 memcpy(&pd, // make binary copy first to save all the fields
171 lppd,
172 sizeof(pd));
173
174 // convert to ASCII string
175 if ((lppd->Flags & PD_ENABLEPRINTTEMPLATE) &&
176 (lppd->lpPrintTemplateName != NULL))
177 pd.lpPrintTemplateName = UnicodeToAsciiString((WCHAR*)lppd->lpPrintTemplateName);
178 else
179 pd.lpPrintTemplateName = NULL;
180
181 if ((lppd->Flags & PD_ENABLESETUPTEMPLATE) &&
182 (lppd->lpSetupTemplateName != NULL))
183 pd.lpSetupTemplateName = UnicodeToAsciiString((WCHAR*)lppd->lpSetupTemplateName);
184 else
185 pd.lpSetupTemplateName = NULL;
186
187 COMDLG32_CHECKHOOK2((&pd), PD_ENABLEPRINTHOOK, LPPRINTHOOKPROC,lpfnPrintHook)
188 COMDLG32_CHECKHOOK2((&pd), PD_ENABLESETUPHOOK, LPSETUPHOOKPROC,lpfnSetupHook)
189
190 bResult = O32_PrintDlg(&pd); // call ASCII API
191
192 if (pd.lpPrintTemplateName != NULL) FreeAsciiString((char*)pd.lpPrintTemplateName);
193 if (pd.lpSetupTemplateName != NULL) FreeAsciiString((char*)pd.lpSetupTemplateName);
194
195 // copy back result
196 lppd->Flags = pd.Flags;
197 lppd->nFromPage = pd.nFromPage;
198 lppd->nToPage = pd.nToPage;
199 lppd->nMinPage = pd.nMinPage;
200 lppd->nMaxPage = pd.nMaxPage;
201 lppd->nCopies = pd.nCopies;
202 //@@@PH: all pass-back fields ?
203
204 return bResult;
205}
206
207
208/*****************************************************************************
209 * Name :
210 * Purpose :
211 * Parameters:
212 * Variables :
213 * Result :
214 * Remark :
215 * Status :
216 *
217 * Author : Patrick Haller [Tue, 1998/02/10 01:55]
218 *****************************************************************************/
219
220ODINFUNCTION1(BOOL, PageSetupDlgA,
221 LPPAGESETUPDLGA, lppsd)
222{
223
224 dprintf(("COMDLG32: PageSetupDlgA not implemented.\n"));
225
226 //COMDLG32_CHECKHOOK2(lppsd, PSD_ENABLESETUPHOOK, LPPAGESETUPHOOK, lpfnPageSetupHook)
227
228 return(FALSE);
229}
230
231
232/*****************************************************************************
233 * Name :
234 * Purpose :
235 * Parameters:
236 * Variables :
237 * Result :
238 * Remark :
239 * Status :
240 *
241 * Author : Patrick Haller [Tue, 1998/02/10 01:55]
242 *****************************************************************************/
243
244ODINFUNCTION1(BOOL, PageSetupDlgW,
245 LPPAGESETUPDLGW, lppsd)
246{
247
248 dprintf(("COMDLG32: PageSetupDlgW(%08xh) not implemented.\n"));
249
250 //COMDLG32_CHECKHOOK2(lppsd, PSD_ENABLESETUPHOOK, LPPAGESETUPHOOK, lpfnPageSetupHook)
251
252 return(FALSE);
253}
254
255#endif
Note: See TracBrowser for help on using the repository browser.