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

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

Set codepage of DC returned by PrintDlgA

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