source: trunk/dll/presparm.c@ 882

Last change on this file since 882 was 882, checked in by Gregg Young, 18 years ago

Update CopyPresParams to include all types of Pres Params

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 14.3 KB
RevLine 
[356]1
2/***********************************************************************
3
4 $Id: presparm.c 882 2007-12-11 00:11:58Z gyoung $
5
6 Edit presentation parameters
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2006 Steven H.Levine
10
11 22 Jul 06 SHL Check more run time errors
[793]12 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[872]13 22 Nov 07 GKY Use CopyPresParams to fix presparam inconsistencies in menus
[882]14 10 Dec 07 GKY Updated CopyPresParams to copy all parameter types
[356]15
16***********************************************************************/
17
[2]18#define INCL_DOS
19#define INCL_WIN
20#define INCL_GPI
[356]21#include <os2.h>
[2]22
23#include <stdarg.h>
24#include <stdio.h>
25#include <stdlib.h>
26#include <string.h>
27#include <ctype.h>
[356]28
[2]29#include "fm3dll.h"
30
[689]31// static PSZ pszSrcFile = __FILE__;
[356]32
[2]33#ifdef NEVER
34/*
35 * this routine will fill a buffer with all defined window pres params
36 * the PRESPARAMS structure returned is suitable to be passed as
37 * pPresParams ie. WinCreateWindow(,,,,,,,,,,,, PVOID pPresParams)
38 */
[551]39VOID StoreWndPresParams(HWND hwnd, CHAR * tagname, HINI prof)
[356]40{
[551]41 PARAM *pparam;
42 PRESPARAMS *ppresparams;
[2]43
[551]44 if (!tagname || !*tagname || !prof)
[2]45 return;
46 /* setup memory access */
[551]47 ppresparams = (PRESPARAMS *) xmalloc(PP_MAXBUF, pszSrcFile, __LINE__);
48 if (!ppresparams)
[2]49 return;
[766]50 ppresparams->cb = 0; /* no entries yet */
[551]51 pparam = ppresparams->aparam; /* cast structure onto memory */
[2]52
53 /*
54 * query every possible presentation parameter...
55 */
56
57 /* foreground color -- takes 12 bytes */
58 pparam->cb = WinQueryPresParam(hwnd,
[551]59 PP_FOREGROUNDCOLOR,
60 PP_FOREGROUNDCOLORINDEX,
61 &pparam->id,
62 sizeof(LONG),
63 (PVOID) pparam->ab, QPF_NOINHERIT);
64 if (pparam->cb) { /* was the param found? */
[766]65 ppresparams->cb += 12; /* used 12 bytes */
66 pparam = (PPARAM) (((ULONG) pparam) + 12); /* advance 12 bytes to next memory location */
[2]67 }
68
69 /* background color -- takes 12 bytes */
70 pparam->cb = WinQueryPresParam(hwnd,
[551]71 PP_BACKGROUNDCOLOR,
72 PP_BACKGROUNDCOLORINDEX,
73 &pparam->id,
74 sizeof(LONG),
75 (PVOID) pparam->ab, QPF_NOINHERIT);
76 if (pparam->cb) {
[766]77 ppresparams->cb += 12;
78 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]79 }
80
81 /* hilited foreground color -- takes 12 bytes */
82 pparam->cb = WinQueryPresParam(hwnd,
[551]83 PP_HILITEFOREGROUNDCOLOR,
84 PP_HILITEFOREGROUNDCOLORINDEX,
85 &pparam->id,
86 sizeof(LONG),
87 (PVOID) pparam->ab, QPF_NOINHERIT);
88 if (pparam->cb) {
[766]89 ppresparams->cb += 12;
90 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]91 }
92
93 /* hilited background color -- takes 12 bytes */
94 pparam->cb = WinQueryPresParam(hwnd,
[551]95 PP_HILITEBACKGROUNDCOLOR,
96 PP_HILITEBACKGROUNDCOLORINDEX,
97 &pparam->id,
98 sizeof(LONG),
99 (PVOID) pparam->ab, QPF_NOINHERIT);
100 if (pparam->cb) {
[766]101 ppresparams->cb += 12;
102 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]103 }
104
105 /* disabled foreground color -- takes 12 bytes */
106 pparam->cb = WinQueryPresParam(hwnd,
[551]107 PP_DISABLEDFOREGROUNDCOLOR,
108 PP_DISABLEDFOREGROUNDCOLORINDEX,
109 &pparam->id,
110 sizeof(LONG),
111 (PVOID) pparam->ab, QPF_NOINHERIT);
112 if (pparam->cb) {
[766]113 ppresparams->cb += 12;
114 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]115 }
116
117 /* disabled background color -- takes 12 bytes */
118 pparam->cb = WinQueryPresParam(hwnd,
[551]119 PP_DISABLEDBACKGROUNDCOLOR,
120 PP_DISABLEDBACKGROUNDCOLORINDEX,
121 &pparam->id,
122 sizeof(LONG),
123 (PVOID) pparam->ab, QPF_NOINHERIT);
124 if (pparam->cb) {
[766]125 ppresparams->cb += 12;
126 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]127 }
128
129 /* border color -- takes 12 bytes */
130 pparam->cb = WinQueryPresParam(hwnd,
[551]131 PP_BORDERCOLOR,
132 PP_BORDERCOLORINDEX,
133 &pparam->id,
134 sizeof(LONG),
135 (PVOID) pparam->ab, QPF_NOINHERIT);
136 if (pparam->cb) {
[766]137 ppresparams->cb += 12;
138 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]139 }
140
141 /* font name & size -- maximum 44 bytes (32 for face name, 4 for point size) + 8 for data */
142 pparam->cb = WinQueryPresParam(hwnd,
[551]143 PP_FONTNAMESIZE,
[766]144 0,
[551]145 &pparam->id,
[766]146 36, (PVOID) pparam->ab, QPF_NOINHERIT);
[551]147 if (pparam->cb) {
[766]148 ppresparams->cb += (pparam->cb + 8);
149 pparam = (PPARAM) (((ULONG) pparam) + pparam->cb + 8);
[2]150 }
151
152 /* active color -- takes 12 bytes */
153 pparam->cb = WinQueryPresParam(hwnd,
[551]154 PP_ACTIVECOLOR,
155 PP_ACTIVECOLORINDEX,
156 &pparam->id,
157 sizeof(LONG),
158 (PVOID) pparam->ab, QPF_NOINHERIT);
159 if (pparam->cb) {
[766]160 ppresparams->cb += 12;
161 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]162 }
163
164 /* inactive color -- takes 12 bytes */
165 pparam->cb = WinQueryPresParam(hwnd,
[551]166 PP_INACTIVECOLOR,
167 PP_INACTIVECOLORINDEX,
168 &pparam->id,
169 sizeof(LONG),
170 (PVOID) pparam->ab, QPF_NOINHERIT);
171 if (pparam->cb) {
[766]172 ppresparams->cb += 12;
173 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]174 }
175
176 /* active text foreground color -- takes 12 bytes */
177 pparam->cb = WinQueryPresParam(hwnd,
[551]178 PP_ACTIVETEXTFGNDCOLOR,
179 PP_ACTIVETEXTFGNDCOLORINDEX,
180 &pparam->id,
181 sizeof(LONG),
182 (PVOID) pparam->ab,
183 QPF_NOINHERIT | QPF_PURERGBCOLOR);
184 if (pparam->cb) {
[766]185 ppresparams->cb += 12;
186 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]187 }
188
189 /* active text background color -- takes 12 bytes */
190 pparam->cb = WinQueryPresParam(hwnd,
[551]191 PP_ACTIVETEXTBGNDCOLOR,
192 PP_ACTIVETEXTBGNDCOLORINDEX,
193 &pparam->id,
194 sizeof(LONG),
195 (PVOID) pparam->ab,
196 QPF_NOINHERIT | QPF_PURERGBCOLOR);
197 if (pparam->cb) {
[766]198 ppresparams->cb += 12;
199 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]200 }
201
202 /* inactive text foreground color -- takes 12 bytes */
203 pparam->cb = WinQueryPresParam(hwnd,
[551]204 PP_INACTIVETEXTFGNDCOLOR,
205 PP_INACTIVETEXTFGNDCOLORINDEX,
206 &pparam->id,
207 sizeof(LONG),
208 (PVOID) pparam->ab,
209 QPF_NOINHERIT | QPF_PURERGBCOLOR);
210 if (pparam->cb) {
[766]211 ppresparams->cb += 12;
212 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]213 }
214
215 /* inactive text background color -- takes 12 bytes */
216 pparam->cb = WinQueryPresParam(hwnd,
[551]217 PP_INACTIVETEXTBGNDCOLOR,
218 PP_INACTIVETEXTBGNDCOLORINDEX,
219 &pparam->id,
220 sizeof(LONG),
221 (PVOID) pparam->ab,
222 QPF_NOINHERIT | QPF_PURERGBCOLOR);
223 if (pparam->cb) {
[766]224 ppresparams->cb += 12;
225 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]226 }
227
228 /* shadow color -- takes 12 bytes */
229 pparam->cb = WinQueryPresParam(hwnd,
[766]230 PP_SHADOW, 0,
[551]231 &pparam->id,
232 sizeof(LONG),
233 (PVOID) pparam->ab, QPF_NOINHERIT);
234 if (pparam->cb) {
[766]235 ppresparams->cb += 12;
236 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]237 }
238
239 /* menu foreground color -- takes 12 bytes */
240 pparam->cb = WinQueryPresParam(hwnd,
[551]241 PP_MENUFOREGROUNDCOLOR,
242 PP_MENUFOREGROUNDCOLORINDEX,
243 &pparam->id,
244 sizeof(LONG),
245 (PVOID) pparam->ab, QPF_NOINHERIT);
246 if (pparam->cb) {
[766]247 ppresparams->cb += 12;
248 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]249 }
250
251 /* menu background color -- takes 12 bytes */
252 pparam->cb = WinQueryPresParam(hwnd,
[551]253 PP_MENUBACKGROUNDCOLOR,
254 PP_MENUBACKGROUNDCOLORINDEX,
255 &pparam->id,
256 sizeof(LONG),
257 (PVOID) pparam->ab, QPF_NOINHERIT);
258 if (pparam->cb) {
[766]259 ppresparams->cb += 12;
260 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]261 }
262
263 /* menu hilite foreground color -- takes 12 bytes */
264 pparam->cb = WinQueryPresParam(hwnd,
[551]265 PP_MENUHILITEFGNDCOLOR,
266 PP_MENUHILITEFGNDCOLORINDEX,
267 &pparam->id,
268 sizeof(LONG),
269 (PVOID) pparam->ab, QPF_NOINHERIT);
270 if (pparam->cb) {
[766]271 ppresparams->cb += 12;
272 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]273 }
274
275 /* menu hilite background color -- takes 12 bytes */
276 pparam->cb = WinQueryPresParam(hwnd,
[551]277 PP_MENUHILITEBGNDCOLOR,
278 PP_MENUHILITEBGNDCOLORINDEX,
279 &pparam->id,
280 sizeof(LONG),
281 (PVOID) pparam->ab, QPF_NOINHERIT);
282 if (pparam->cb) {
[766]283 ppresparams->cb += 12;
284 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]285 }
286
287 /* menu disabled foreground color -- takes 12 bytes */
288 pparam->cb = WinQueryPresParam(hwnd,
[551]289 PP_MENUDISABLEDFGNDCOLOR,
290 PP_MENUDISABLEDFGNDCOLORINDEX,
291 &pparam->id,
292 sizeof(LONG),
293 (PVOID) pparam->ab, QPF_NOINHERIT);
294 if (pparam->cb) {
[766]295 ppresparams->cb += 12;
296 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]297 }
298
299 /* menu disabled background color -- takes 12 bytes */
300 pparam->cb = WinQueryPresParam(hwnd,
[551]301 PP_MENUDISABLEDBGNDCOLOR,
302 PP_MENUDISABLEDBGNDCOLORINDEX,
303 &pparam->id,
304 sizeof(LONG),
305 (PVOID) pparam->ab, QPF_NOINHERIT);
306 if (pparam->cb) {
[766]307 ppresparams->cb += 12;
308 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]309 }
310
[551]311 if (ppresparams->cb)
[2]312 PrfWriteProfileData(prof,
[766]313 appname, tagname, ppresparams, ppresparams->cb + 4);
[2]314
315 free(ppresparams);
316}
317
[356]318#endif // NEVER
[2]319
[551]320VOID CopyPresParams(HWND target, HWND source)
[356]321{
[2]322 /*
323 * Copy presentation parameters of interest to us from one window
324 * to another
325 */
326
[766]327 ULONG AttrFound, AttrValue[64], cbRetLen, x = 0,
[877]328 AttrName[] = { PP_FONTNAMESIZE, PP_FOREGROUNDCOLOR,
329 PP_BACKGROUNDCOLOR, PP_HILITEBACKGROUNDCOLOR,
[881]330 PP_HILITEFOREGROUNDCOLOR, PP_BORDERCOLOR, PP_MENUFOREGROUNDCOLOR,
[882]331 PP_MENUBACKGROUNDCOLOR, PP_FOREGROUNDCOLORINDEX, PP_BACKGROUNDCOLORINDEX,
332 PP_HILITEFOREGROUNDCOLORINDEX, PP_HILITEBACKGROUNDCOLORINDEX,
333 PP_DISABLEDFOREGROUNDCOLOR, PP_DISABLEDBACKGROUNDCOLOR,
334 PP_DISABLEDFOREGROUNDCOLORINDEX, PP_DISABLEDBACKGROUNDCOLORINDEX,
335 PP_BORDERCOLOR, PP_BORDERCOLORINDEX, PP_FONTHANDLE, PP_ACTIVECOLOR,
336 PP_ACTIVECOLORINDEX, PP_INACTIVECOLOR, PP_INACTIVECOLORINDEX,
337 PP_ACTIVETEXTFGNDCOLOR, PP_ACTIVETEXTFGNDCOLORINDEX, PP_ACTIVETEXTBGNDCOLOR,
338 PP_ACTIVETEXTBGNDCOLORINDEX, PP_INACTIVETEXTFGNDCOLOR,
339 PP_INACTIVETEXTFGNDCOLORINDEX, PP_INACTIVETEXTBGNDCOLOR,
340 PP_INACTIVETEXTBGNDCOLORINDEX, PP_SHADOW, PP_MENUFOREGROUNDCOLORINDEX,
341 PP_MENUBACKGROUNDCOLORINDEX, PP_MENUHILITEFGNDCOLOR, PP_MENUHILITEFGNDCOLORINDEX,
342 PP_MENUHILITEBGNDCOLOR, PP_MENUHILITEBGNDCOLORINDEX, PP_MENUDISABLEDFGNDCOLOR,
343 PP_MENUDISABLEDFGNDCOLORINDEX, PP_MENUDISABLEDBGNDCOLOR,
344 PP_MENUDISABLEDBGNDCOLORINDEX, PP_SHADOWTEXTCOLOR, PP_SHADOWTEXTCOLORINDEX,
345 PP_SHADOWHILITEFGNDCOLOR, PP_SHADOWHILITEFGNDCOLORINDEX, PP_SHADOWHILITEBGNDCOLOR,
346 PP_SHADOWHILITEBGNDCOLORINDEX, PP_ICONTEXTBACKGROUNDCOLOR,
347 PP_ICONTEXTBACKGROUNDCOLORINDEX, PP_BORDERLIGHTCOLOR, PP_BORDERDARKCOLOR,
348 PP_BORDER2COLOR, PP_BORDER2LIGHTCOLOR, PP_BORDER2DARKCOLOR, PP_BORDERDEFAULTCOLOR,
349 PP_FIELDBACKGROUNDCOLOR, PP_BUTTONBACKGROUNDCOLOR, PP_BUTTONBORDERLIGHTCOLOR,
350 PP_BUTTONBORDERDARKCOLOR, PP_ARROWCOLOR, PP_ARROWBORDERLIGHTCOLOR,
351 PP_ARROWBORDERDARKCOLOR, PP_ARROWDISABLEDCOLOR, PP_CHECKLIGHTCOLOR,
352 PP_CHECKMIDDLECOLOR, PP_CHECKDARKCOLOR, PP_PAGEFOREGROUNDCOLOR,
353 PP_PAGEBACKGROUNDCOLOR, PP_MAJORTABFOREGROUNDCOLOR, PP_MAJORTABBACKGROUNDCOLOR,
354 PP_MINORTABFOREGROUNDCOLOR, PP_MINORTABBACKGROUNDCOLOR, PP_USER, 0 };
[2]355
[882]356 while (AttrName[x]) {
[2]357 cbRetLen = WinQueryPresParam(source,
[551]358 AttrName[x],
359 0,
360 &AttrFound,
[877]361 sizeof(AttrValue),
362 &AttrValue, 0);
363 //printf("%s %x\n", AttrValue, source); fflush(stdout);
364 //printf("%x\n", AttrValue); fflush(stdout);
[551]365 if (cbRetLen)
366 WinSetPresParam(target, AttrName[x], cbRetLen, (PVOID) AttrValue);
[882]367 x++;
368 } //while
[2]369}
370
[551]371VOID SetPresParams(HWND hwnd, RGB2 * back, RGB2 * fore, RGB2 * border,
372 CHAR * font)
[356]373{
[551]374 if (font)
[766]375 WinSetPresParam(hwnd, PP_FONTNAMESIZE, strlen(font) + 1, (PVOID) font);
[551]376 if (back)
377 WinSetPresParam(hwnd, PP_BACKGROUNDCOLOR, sizeof(RGB2), (PVOID) back);
378 if (fore)
379 WinSetPresParam(hwnd, PP_FOREGROUNDCOLOR, sizeof(RGB2), (PVOID) fore);
380 if (border)
381 WinSetPresParam(hwnd, PP_BORDERCOLOR, sizeof(RGB2), (PVOID) border);
[2]382}
383
[551]384VOID IfNoParam(HWND hwnd, CHAR * keyroot, ULONG size, PVOID attrvalue)
[356]385{
[766]386 ULONG fsize = 0;
[551]387 CHAR s[81];
[2]388
[551]389 sprintf(s, "%s", keyroot);
390 if (!PrfQueryProfileSize(fmprof, appname, s, &fsize) || !fsize)
391 WinSetPresParam(hwnd, PP_FONTNAMESIZE, size, (PVOID) attrvalue);
[2]392}
393
[551]394VOID PresParamChanged(HWND hwnd, CHAR * keyroot, MPARAM mp1, MPARAM mp2)
[356]395{
[551]396 ULONG AttrFound, AttrValue[64], cbRetLen;
[2]397
[551]398 cbRetLen = WinQueryPresParam(hwnd, (ULONG) mp1, 0, &AttrFound,
399 (ULONG) sizeof(AttrValue), &AttrValue, 0);
400 if (cbRetLen) {
[2]401
402 CHAR s[133];
403
404 *s = 0;
[551]405 switch (AttrFound) {
406 case PP_BACKGROUNDCOLOR:
407 sprintf(s, "%s.Backgroundcolor", keyroot);
408 break;
409 case PP_FOREGROUNDCOLOR:
410 sprintf(s, "%s.Foregroundcolor", keyroot);
411 break;
412 case PP_HILITEBACKGROUNDCOLOR:
413 sprintf(s, "%s.Hilitebackgroundcolor", keyroot);
414 break;
415 case PP_HILITEFOREGROUNDCOLOR:
416 sprintf(s, "%s.Hiliteforegroundcolor", keyroot);
417 break;
418 case PP_BORDERCOLOR:
419 sprintf(s, "%s.Bordercolor", keyroot);
420 break;
421 case PP_FONTNAMESIZE:
422 sprintf(s, "%s.Fontnamesize", keyroot);
423 break;
424 default:
425 break;
[2]426 }
[551]427 if (*s)
428 PrfWriteProfileData(fmprof, appname, s, (PVOID) AttrValue, cbRetLen);
[2]429 }
430}
431
[551]432VOID RestorePresParams(HWND hwnd, CHAR * keyroot)
[356]433{
[551]434 CHAR s[81];
435 ULONG AttrValue[64], size;
[2]436
437 size = sizeof(AttrValue);
[551]438 sprintf(s, "%s.Backgroundcolor", keyroot);
439 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
440 && size)
441 WinSetPresParam(hwnd, PP_BACKGROUNDCOLOR, size, (PVOID) AttrValue);
[2]442 size = sizeof(AttrValue);
[551]443 sprintf(s, "%s.Foregroundcolor", keyroot);
444 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
445 && size)
446 WinSetPresParam(hwnd, PP_FOREGROUNDCOLOR, size, (PVOID) AttrValue);
[2]447 size = sizeof(AttrValue);
[551]448 sprintf(s, "%s.Hilitebackgroundcolor", keyroot);
449 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
450 && size)
451 WinSetPresParam(hwnd, PP_HILITEBACKGROUNDCOLOR, size, (PVOID) AttrValue);
[2]452 size = sizeof(AttrValue);
[551]453 sprintf(s, "%s.Hiliteforegroundcolor", keyroot);
454 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
455 && size)
456 WinSetPresParam(hwnd, PP_HILITEFOREGROUNDCOLOR, size, (PVOID) AttrValue);
[2]457 size = sizeof(AttrValue);
[551]458 sprintf(s, "%s.Bordercolor", keyroot);
459 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
460 && size)
461 WinSetPresParam(hwnd, PP_BORDERCOLOR, size, (PVOID) AttrValue);
[2]462 size = sizeof(AttrValue);
[551]463 sprintf(s, "%s.Fontnamesize", keyroot);
464 if (PrfQueryProfileData(fmprof,
465 appname, s, (PVOID) AttrValue, &size) && size)
466 WinSetPresParam(hwnd, PP_FONTNAMESIZE, size, (PVOID) AttrValue);
[2]467}
[793]468
469#pragma alloc_text(PRESPARAM,CopyPresParams,SetPresParams,IfNoParam)
470#pragma alloc_text(PRESPARAM,PresParamChanged,RestorePresParams)
471#pragma alloc_text(PRESPARAM,StoreWndPresParams)
Note: See TracBrowser for help on using the repository browser.