source: trunk/mediafolder/c/mediafldr/mediafolderoverridenwpclsmethods.cpp@ 47

Last change on this file since 47 was 47, checked in by gyoung, 2 years ago

REM out function redefinition and cast a variable the compiler didn't like.

File size: 32.6 KB
Line 
1/*
2 * This file is (C) Chris Wohlgemuth 1999-2003
3 *
4 * It's part of the Audio/Data-CD-Creator distribution
5 */
6/*
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; see the file COPYING. If not, write to
19 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#define INCL_DOSERRORS
23#define INCL_DOSERRORS
24#define INCL_GPIBITMAPS
25#define INCL_REXXSAA
26
27#include "mediafolder.hh"
28#include "mediafolderres.h"
29
30#pragma SOMAsDefault(pop)
31#include <rexxsaa.h> /* needed for RexxStart() */
32#include <wpclsmgr.hh> /* For wpModuleForClass() */
33#include <stdio.h>
34#include <stdlib.h>
35#include <string.h>
36#include "sys_funcs.h"
37
38#pragma SOMAsDefault(on)
39
40
41ULONG EXPENTRY rxCallPMFunc(PSZ name, LONG argc, RXSTRING argv[], PSZ queuename,PRXSTRING retstring);
42ULONG EXPENTRY rxCallWPSFunc(PSZ name, LONG argc, RXSTRING argv[], PSZ queuename,PRXSTRING retstring);
43ULONG EXPENTRY rxCallCWWPSFunc(PSZ name, LONG argc, RXSTRING argv[], PSZ queuename,PRXSTRING retstring);
44
45HMODULE queryModuleHandle(PSZ pszClassName);
46
47char chrInstallDir[CCHMAXPATH];
48HPOINTER hptrArrowWE=NULLHANDLE; /* Pointer for slider control */
49
50HMTX hmtxFileName;
51
52LOADEDBITMAP allBMPs[NUM_CTRL_IDX];
53
54/* Format:
55 typedef struct
56 {
57 INT id;
58 RECTL rclSource;
59 HBITMAP hbmSource;
60 RECTL rclDest;
61 }CONTROLINFO;
62 */
63
64CONTROLINFO ciControls[NUM_CTRL_IDX]={
65 {0,{0,0,590,70}, NULLHANDLE,{0}},/* main */
66 // {IDPB_POSBAR,{356, 17, 548,25},NULLHANDLE, { 0, 0, 191,10}},
67 {IDSL_POSBAR,{353, 15, 551,28},NULLHANDLE, { 0, 0, 191,10}},
68 {IDPB_SLIDERARM,{0,1,9,8},NULLHANDLE, {0,0,9,9} },
69 // {IDSL_VOLUME,{33, 5,158,14},NULLHANDLE, {0, 0, 126, 9} /* {10,18,93,13} */ },
70 {IDSL_VOLUME,{32, 2,158,17},NULLHANDLE, {0, 0, 126, 9} /* {10,18,93,13} */ },
71 {IDSL_VOLUMEARM,{0,0,9,9},NULLHANDLE, {0,0,9,9}},
72 {IDSL_VOLUMEARM,{0,0,9,9},NULLHANDLE, {0,0,9,9}},
73 // {IDST_PLAYTIME, {351, 25, 551,52},NULLHANDLE, { 0, 0, 190, 27} },
74 {IDST_PLAYTIME, {351, 29, 551,52},NULLHANDLE, { 0, 0, 190, 25} },
75 {0,{0,0,20,72}, NULLHANDLE,{0}},/* Top left */
76 {0,{0,0,20,72}, NULLHANDLE,{0}},/* Top right */
77 /* Achtung destination verwendet fuer position */
78 {IDPB_PLAY, {0, 0, 36, 36},NULLHANDLE, { 114, 18, 150, 54} },/* Play */
79 {IDPB_PLAY, {0, 0, 36,36},NULLHANDLE, { 114, 18, 150, 54} }, /* Playsel */
80
81 {IDPB_STOP, {0, 0, 36, 36},NULLHANDLE, { 40, 18, 76, 54} },/* Stop */
82 {IDPB_STOP, {0, 0, 36,36},NULLHANDLE, { 40, 18, 76, 54} }, /* Stop sel */
83 {IDPB_PAUSE, {0, 0, 36, 36},NULLHANDLE, { 77, 18, 112, 54} },/* Pause */
84 {IDPB_PAUSE, {0, 0, 36,36},NULLHANDLE, { 77, 18, 112, 54} }, /* Pause sel */
85 {IDPB_SKIPBACK, {0, 0, 36, 36},NULLHANDLE, { 3, 18, 39, 54} },/* Skip back */
86 {IDPB_SKIPBACK, {0, 0, 36,36},NULLHANDLE, { 3, 18, 39, 54} }, /* Skip back sel */
87 {IDPB_SKIPFORWARD, {0, 0, 36, 36},NULLHANDLE, { 151, 18, 187, 54} },/* Skip fwd */
88 {IDPB_SKIPFORWARD, {0, 0, 36,36},NULLHANDLE, { 151, 18, 187, 54} }, /* Skip fwd sel */
89 {0,{0,0,300,20}, NULLHANDLE,{0}},/* Bottom */
90
91 // {IDCB_REPEAT, {0, 0, 13,13},NULLHANDLE, { 197, 24, 233, 60} }, /* Placeholder for checkbutton */
92
93 {IDCB_REPEAT, {0, 0, 13,13},NULLHANDLE, { 197, 36, 233, 60} }, /* Placeholder for checkbutton */
94 {IDCB_REPEAT, {0, 0, 13,13},NULLHANDLE, { 197, 36, 233, 60} }, /* Placeholder for checkbutton */
95 {IDCB_REPEAT, {0, 0, 13,13},NULLHANDLE, { 197, 36, 233, 60} }, /* Placeholder for checkbutton selected */
96 {IDCB_REPEAT, {0, 0, 13,13},NULLHANDLE, { 197, 36, 233, 60} }, /* Placeholder for checkbutton selected */
97
98 {IDCB_RANDOM, {0, 0, 13,13},NULLHANDLE, { 197, 10, 233, 60} }, /* Placeholder for checkbutton */
99 {IDCB_RANDOM, {0, 0, 13,13},NULLHANDLE, { 197, 10, 233, 60} }, /* Placeholder for checkbutton */
100 {IDCB_RANDOM, {0, 0, 13,13},NULLHANDLE, { 197, 10, 233, 60} }, /* Placeholder for checkbutton selected */
101 {IDCB_RANDOM, {0, 0, 13,13},NULLHANDLE, { 197, 10, 233, 60} } /* Placeholder for checkbutton selected */
102
103};
104
105
106void errorResource();
107ULONG messageBox( char* text, ULONG ulTextID , LONG lSizeText,
108 char* title, ULONG ulTitleID, LONG lSizeTitle,
109 HMODULE hResource, HWND hwnd, ULONG ulFlags);
110BOOL getMessage(char* text,ULONG ulID, LONG lSizeText, HMODULE hResource,HWND hwnd);
111ULONG cwRequestMutex(HMTX hmtxBMP, ULONG ulTimeOut);
112ULONG cwReleaseMutex(HMTX hmtxBMP);
113ULONG cwCreateMutex(HMTX * hmtxBMP);
114ULONG cwCloseMutex(HMTX hmtxBMP);
115
116MRESULT EXPENTRY topCtrlDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
117MRESULT EXPENTRY rightCtrlDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
118MRESULT EXPENTRY privateSliderProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
119HMODULE queryResModuleHandle(void);
120
121static void _loadBmps()
122{
123 HPS hps;
124 BITMAPINFOHEADER bmpInfoHdr;
125 HMODULE hResource;
126
127 if(allBMPs[MAIN_BMP_IDX].hbm)
128 return;
129
130 // hResource=queryResModuleHandle();
131 hResource=queryModuleHandle("M_CWMediaFolder");
132
133 hps=WinGetPS(HWND_DESKTOP);
134
135 /* The main BMP */
136 allBMPs[MAIN_BMP_IDX].hbm=GpiLoadBitmap(hps, hResource, IDBMP_TOPMIDDLE, 0, 0);
137 GpiQueryBitmapParameters(allBMPs[MAIN_BMP_IDX].hbm, &allBMPs[MAIN_BMP_IDX].bmpInfoHdr);
138
139 /* Top right bmp */
140 allBMPs[CTRLIDX_TOPRIGHT].hbm=GpiLoadBitmap(hps, hResource, IDBMP_TOPRIGHT, 0, 0);
141 GpiQueryBitmapParameters(allBMPs[CTRLIDX_TOPRIGHT].hbm, &allBMPs[CTRLIDX_TOPRIGHT].bmpInfoHdr);
142
143 /* Top left bmp */
144 allBMPs[CTRLIDX_TOPLEFT].hbm=GpiLoadBitmap(hps, hResource, IDBMP_TOPLEFT, 0, 0);
145 GpiQueryBitmapParameters(allBMPs[CTRLIDX_TOPLEFT].hbm, &allBMPs[CTRLIDX_TOPLEFT].bmpInfoHdr);
146
147 /* Bottom bmp */
148 allBMPs[CTRLIDX_BOTTOM].hbm=GpiLoadBitmap(hps, hResource, IDBMP_BOTTOM, 0, 0);
149 GpiQueryBitmapParameters(allBMPs[CTRLIDX_BOTTOM].hbm, &allBMPs[CTRLIDX_BOTTOM].bmpInfoHdr);
150
151 /* Positionslider bg */
152 ciControls[CTRLIDX_POSSLIDER].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
153
154 /* Positionslider arm */
155 allBMPs[CTRLIDX_POSSLIDERARM].hbm=GpiLoadBitmap(hps, hResource, IDBMP_POSSLIDERARM, 0, 0);
156 GpiQueryBitmapParameters(allBMPs[CTRLIDX_POSSLIDERARM].hbm, &allBMPs[CTRLIDX_POSSLIDERARM].bmpInfoHdr);
157 ciControls[CTRLIDX_POSSLIDERARM].hbmSource=allBMPs[CTRLIDX_POSSLIDERARM].hbm;
158
159 /* Volume slider background */
160 ciControls[CTRLIDX_VOLSLIDER].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
161
162 /* Volume slider arm */
163 allBMPs[CTRLIDX_VOLSLIDERARM].hbm=GpiLoadBitmap(hps, hResource, IDBMP_VOLSLIDERARM, 0, 0);
164 GpiQueryBitmapParameters(allBMPs[CTRLIDX_VOLSLIDERARM].hbm, &allBMPs[CTRLIDX_VOLSLIDERARM].bmpInfoHdr);
165 ciControls[CTRLIDX_VOLSLIDERARM].hbmSource=allBMPs[CTRLIDX_VOLSLIDERARM].hbm;
166
167 /* Volume slider arm selected*/
168 allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_VOLSLIDERARMSEL, 0, 0);
169 GpiQueryBitmapParameters(allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm, &allBMPs[CTRLIDX_VOLSLIDERARMSEL].bmpInfoHdr);
170 ciControls[CTRLIDX_VOLSLIDERARMSEL].hbmSource=allBMPs[CTRLIDX_VOLSLIDERARMSEL].hbm;
171
172 /* Playtime text field */
173 ciControls[CTRLIDX_PLAYTIME].hbmSource=allBMPs[MAIN_BMP_IDX].hbm;
174
175 /* Skip back */
176 allBMPs[CTRLIDX_SKIPBACKBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_SKIPBACK, 0, 0);
177 GpiQueryBitmapParameters(allBMPs[CTRLIDX_SKIPBACKBUTTON].hbm, &allBMPs[CTRLIDX_SKIPBACKBUTTON].bmpInfoHdr);
178 ciControls[CTRLIDX_SKIPBACKBUTTON].hbmSource=allBMPs[CTRLIDX_SKIPBACKBUTTON].hbm;
179
180 /* Skip back sel */
181 allBMPs[CTRLIDX_SKIPBACKBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_SKIPBACKSEL, 0, 0);
182 GpiQueryBitmapParameters(allBMPs[CTRLIDX_SKIPBACKBUTTONSEL].hbm, &allBMPs[CTRLIDX_SKIPBACKBUTTONSEL].bmpInfoHdr);
183 ciControls[CTRLIDX_SKIPBACKBUTTONSEL].hbmSource=allBMPs[CTRLIDX_SKIPBACKBUTTONSEL].hbm;
184
185 /* Stop */
186 allBMPs[CTRLIDX_STOPBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_STOP, 0, 0);
187 GpiQueryBitmapParameters(allBMPs[CTRLIDX_STOPBUTTON].hbm, &allBMPs[CTRLIDX_STOPBUTTON].bmpInfoHdr);
188 ciControls[CTRLIDX_STOPBUTTON].hbmSource=allBMPs[CTRLIDX_STOPBUTTON].hbm;
189
190 /* Stop sel */
191 allBMPs[CTRLIDX_STOPBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_STOPSEL, 0, 0);
192 GpiQueryBitmapParameters(allBMPs[CTRLIDX_STOPBUTTONSEL].hbm, &allBMPs[CTRLIDX_STOPBUTTONSEL].bmpInfoHdr);
193 ciControls[CTRLIDX_STOPBUTTONSEL].hbmSource=allBMPs[CTRLIDX_STOPBUTTONSEL].hbm;
194
195 /* Pause */
196 allBMPs[CTRLIDX_PAUSEBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PAUSE, 0, 0);
197 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PAUSEBUTTON].hbm, &allBMPs[CTRLIDX_PAUSEBUTTON].bmpInfoHdr);
198 ciControls[CTRLIDX_PAUSEBUTTON].hbmSource=allBMPs[CTRLIDX_PAUSEBUTTON].hbm;
199
200 /* Pause sel */
201 allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PAUSESEL, 0, 0);
202 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm, &allBMPs[CTRLIDX_PAUSEBUTTONSEL].bmpInfoHdr);
203 ciControls[CTRLIDX_PAUSEBUTTONSEL].hbmSource=allBMPs[CTRLIDX_PAUSEBUTTONSEL].hbm;
204
205 /* Play */
206 allBMPs[CTRLIDX_PLAYBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PLAY, 0, 0);
207 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PLAYBUTTON].hbm, &allBMPs[CTRLIDX_PLAYBUTTON].bmpInfoHdr);
208 ciControls[CTRLIDX_PLAYBUTTON].hbmSource=allBMPs[CTRLIDX_PLAYBUTTON].hbm;
209
210 /* Play sel */
211 allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_PLAYSEL, 0, 0);
212 GpiQueryBitmapParameters(allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm, &allBMPs[CTRLIDX_PLAYBUTTONSEL].bmpInfoHdr);
213 ciControls[CTRLIDX_PLAYBUTTONSEL].hbmSource=allBMPs[CTRLIDX_PLAYBUTTONSEL].hbm;
214
215 /* Skip forward */
216 allBMPs[CTRLIDX_SKIPFWDBUTTON].hbm=GpiLoadBitmap(hps, hResource, IDBMP_SKIPFORWARD, 0, 0);
217 GpiQueryBitmapParameters(allBMPs[CTRLIDX_SKIPFWDBUTTON].hbm, &allBMPs[CTRLIDX_SKIPFWDBUTTON].bmpInfoHdr);
218 ciControls[CTRLIDX_SKIPFWDBUTTON].hbmSource=allBMPs[CTRLIDX_SKIPFWDBUTTON].hbm;
219
220 /* Skip forward sel */
221 allBMPs[CTRLIDX_SKIPFWDBUTTONSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_SKIPFORWARDSEL, 0, 0);
222 GpiQueryBitmapParameters(allBMPs[CTRLIDX_SKIPFWDBUTTONSEL].hbm, &allBMPs[CTRLIDX_SKIPFWDBUTTONSEL].bmpInfoHdr);
223 ciControls[CTRLIDX_SKIPFWDBUTTONSEL].hbmSource=allBMPs[CTRLIDX_SKIPFWDBUTTONSEL].hbm;
224
225 /* Checkbutton checked */
226 allBMPs[CTRLIDX_CHECK].hbm=GpiLoadBitmap(hps, hResource, IDBMP_CHECK, 0, 0);
227 GpiQueryBitmapParameters(allBMPs[CTRLIDX_CHECK].hbm, &allBMPs[CTRLIDX_CHECK].bmpInfoHdr);
228 ciControls[CTRLIDX_CHECK].hbmSource=allBMPs[CTRLIDX_CHECK].hbm;
229 /* Adjust source pos */
230 ciControls[CTRLIDX_CHECK].rclSource.yBottom=0;
231 ciControls[CTRLIDX_CHECK].rclSource.yTop=allBMPs[CTRLIDX_CHECK].bmpInfoHdr.cy;
232 ciControls[CTRLIDX_CHECK].rclSource.xLeft=0;
233 ciControls[CTRLIDX_CHECK].rclSource.xRight=allBMPs[CTRLIDX_CHECK].bmpInfoHdr.cx;
234
235 /* Checkbutton unchecked */
236 allBMPs[CTRLIDX_UNCHECK].hbm=GpiLoadBitmap(hps, hResource, IDBMP_UNCHECK, 0, 0);
237 GpiQueryBitmapParameters(allBMPs[CTRLIDX_UNCHECK].hbm, &allBMPs[CTRLIDX_UNCHECK].bmpInfoHdr);
238 ciControls[CTRLIDX_UNCHECK].hbmSource=allBMPs[CTRLIDX_UNCHECK].hbm;
239 ciControls[CTRLIDX_UNCHECK].rclSource.yBottom=0;
240 ciControls[CTRLIDX_UNCHECK].rclSource.yTop=allBMPs[CTRLIDX_UNCHECK].bmpInfoHdr.cy;
241 ciControls[CTRLIDX_UNCHECK].rclSource.xLeft=0;
242 ciControls[CTRLIDX_UNCHECK].rclSource.xRight=allBMPs[CTRLIDX_UNCHECK].bmpInfoHdr.cx;
243
244 /* Checkbutton checked selected */
245 allBMPs[CTRLIDX_CHECKSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_CHECKSEL, 0, 0);
246 GpiQueryBitmapParameters(allBMPs[CTRLIDX_CHECKSEL].hbm, &allBMPs[CTRLIDX_CHECKSEL].bmpInfoHdr);
247 ciControls[CTRLIDX_CHECKSEL].hbmSource=allBMPs[CTRLIDX_CHECKSEL].hbm;
248 /* Adjust source pos */
249 ciControls[CTRLIDX_CHECKSEL].rclSource.yBottom=0;
250 ciControls[CTRLIDX_CHECKSEL].rclSource.yTop=allBMPs[CTRLIDX_CHECKSEL].bmpInfoHdr.cy;
251 ciControls[CTRLIDX_CHECKSEL].rclSource.xLeft=0;
252 ciControls[CTRLIDX_CHECKSEL].rclSource.xRight=allBMPs[CTRLIDX_CHECKSEL].bmpInfoHdr.cx;
253
254 /* Checkbutton unchecked selected */
255 allBMPs[CTRLIDX_UNCHECKSEL].hbm=GpiLoadBitmap(hps, hResource, IDBMP_UNCHECKSEL, 0, 0);
256 GpiQueryBitmapParameters(allBMPs[CTRLIDX_UNCHECKSEL].hbm, &allBMPs[CTRLIDX_UNCHECKSEL].bmpInfoHdr);
257 ciControls[CTRLIDX_UNCHECKSEL].hbmSource=allBMPs[CTRLIDX_UNCHECKSEL].hbm;
258 ciControls[CTRLIDX_UNCHECKSEL].rclSource.yBottom=0;
259 ciControls[CTRLIDX_UNCHECKSEL].rclSource.yTop=allBMPs[CTRLIDX_UNCHECKSEL].bmpInfoHdr.cy;
260 ciControls[CTRLIDX_UNCHECKSEL].rclSource.xLeft=0;
261 ciControls[CTRLIDX_UNCHECKSEL].rclSource.xRight=allBMPs[CTRLIDX_UNCHECK].bmpInfoHdr.cx;
262 /*********************/
263
264 /* Checkbutton checked */
265 // allBMPs[CTRLIDX_CHECK].hbm=GpiLoadBitmap(hps, hResource, IDBMP_CHECK, 0, 0);
266 // GpiQueryBitmapParameters(allBMPs[CTRLIDX_CHECK].hbm, &allBMPs[CTRLIDX_CHECK].bmpInfoHdr);
267 ciControls[CTRLIDX_RANDOMCHECK].hbmSource=allBMPs[CTRLIDX_CHECK].hbm;
268 /* Adjust source pos */
269 ciControls[CTRLIDX_RANDOMCHECK].rclSource.yBottom=0;
270 ciControls[CTRLIDX_RANDOMCHECK].rclSource.yTop=allBMPs[CTRLIDX_CHECK].bmpInfoHdr.cy;
271 ciControls[CTRLIDX_RANDOMCHECK].rclSource.xLeft=0;
272 ciControls[CTRLIDX_RANDOMCHECK].rclSource.xRight=allBMPs[CTRLIDX_CHECK].bmpInfoHdr.cx;
273
274 /* Checkbutton unchecked */
275 // allBMPs[CTRLIDX_UNCHECK].hbm=GpiLoadBitmap(hps, hResource, IDBMP_UNCHECK, 0, 0);
276 // GpiQueryBitmapParameters(allBMPs[CTRLIDX_UNCHECK].hbm, &allBMPs[CTRLIDX_UNCHECK].bmpInfoHdr);
277 ciControls[CTRLIDX_RANDOMUNCHECK].hbmSource=allBMPs[CTRLIDX_UNCHECK].hbm;
278 ciControls[CTRLIDX_RANDOMUNCHECK].rclSource.yBottom=0;
279 ciControls[CTRLIDX_RANDOMUNCHECK].rclSource.yTop=allBMPs[CTRLIDX_UNCHECK].bmpInfoHdr.cy;
280 ciControls[CTRLIDX_RANDOMUNCHECK].rclSource.xLeft=0;
281 ciControls[CTRLIDX_RANDOMUNCHECK].rclSource.xRight=allBMPs[CTRLIDX_UNCHECK].bmpInfoHdr.cx;
282
283 /* Checkbutton checked selected */
284 // allBMPs[CTRLIDX_RANDOMCHECKSEL].hbm=allBMPs[CTRLIDX_CHECKSEL].hbm;
285 // GpiQueryBitmapParameters(allBMPs[CTRLIDX_CHECKSEL].hbm, &allBMPs[CTRLIDX_RANDOMCHECKSEL].bmpInfoHdr);
286 ciControls[CTRLIDX_RANDOMCHECKSEL].hbmSource=allBMPs[CTRLIDX_CHECKSEL].hbm;
287 /* Adjust source pos */
288 ciControls[CTRLIDX_RANDOMCHECKSEL].rclSource.yBottom=0;
289 ciControls[CTRLIDX_RANDOMCHECKSEL].rclSource.yTop=allBMPs[CTRLIDX_CHECKSEL].bmpInfoHdr.cy;
290 ciControls[CTRLIDX_RANDOMCHECKSEL].rclSource.xLeft=0;
291 ciControls[CTRLIDX_RANDOMCHECKSEL].rclSource.xRight=allBMPs[CTRLIDX_CHECKSEL].bmpInfoHdr.cx;
292
293
294 /* Random checkbutton unchecked selected */
295 // allBMPs[CTRLIDX_RANDOMUNCHECKSEL].hbm=allBMPs[CTRLIDX_UNCHECKSEL].hbm;
296 // GpiQueryBitmapParameters(allBMPs[CTRLIDX_UNCHECKSEL].hbm, &allBMPs[CTRLIDX_RANDOMUNCHECKSEL].bmpInfoHdr);
297 ciControls[CTRLIDX_RANDOMUNCHECKSEL].hbmSource=allBMPs[CTRLIDX_UNCHECKSEL].hbm;
298 ciControls[CTRLIDX_RANDOMUNCHECKSEL].rclSource.yBottom=0;
299 ciControls[CTRLIDX_RANDOMUNCHECKSEL].rclSource.yTop=allBMPs[CTRLIDX_UNCHECKSEL].bmpInfoHdr.cy;
300 ciControls[CTRLIDX_RANDOMUNCHECKSEL].rclSource.xLeft=0;
301 ciControls[CTRLIDX_RANDOMUNCHECK].rclSource.xRight=allBMPs[CTRLIDX_UNCHECK].bmpInfoHdr.cx;
302
303
304 WinReleasePS(hps);
305}
306/*APIRET APIENTRY DosQueryModFromEIP( HMODULE *phMod,
307 ULONG *pObjNum,
308 ULONG BuffLen,
309 PCHAR pBuff,
310 ULONG *pOffset,
311 PVOID Address );*/
312
313/* This function returns the module handle of our class-dll */
314HMODULE queryModuleHandle(PSZ pszClassName)
315{
316 static HMODULE hmod=0;
317
318 if(!hmod) {
319 // PSZ pathname;
320 ULONG ulObj, ulBufLen, ulOffset;
321 char thePath[CCHMAXPATH];
322
323 if(DosQueryModFromEIP( &hmod,
324 &ulObj,
325 CCHMAXPATH,
326 thePath,
327 &ulOffset,
328 (ULONG) queryModuleHandle )!=NO_ERROR) {
329 SysWriteToTrapLog("Can't get module handle for class DLL!\n");
330 hmod=0;
331 return NULLHANDLE; /* Error */
332 }
333
334#if 0
335 /*
336 Sometimes the returned name isn't correct. To prevent loading a bunch of classes just
337 to get the module handle the following is replaced by the undocumented DosQueryModFromEIP()
338 call. Maybe this even fixes some deadlocks people had during WPS startup with the classes
339 because now the WPS isn't urged to load all classes at once.
340 */
341 pathname=((WPClassManager*)SOMClassMgrObject) //Query Pathname of class file
342 ->wpModuleForClass(pszClassName);
343 if(DosQueryModuleHandle(pathname,&hmod)) {
344 pathname=((WPClassManager*)SOMClassMgrObject) //Query Pathname of class file
345 ->wpModuleForClass("M_CWMediaFolder");
346 if(DosQueryModuleHandle(pathname,&hmod)) {
347 pathname=((WPClassManager*)SOMClassMgrObject) //Query Pathname of class file
348 ->wpModuleForClass("CWMediaFolder");
349 if(DosQueryModuleHandle(pathname,&hmod)) {
350 pathname=((WPClassManager*)SOMClassMgrObject) //Query Pathname of class file
351 ->wpModuleForClass("M_CWAudioShadow");
352 if(DosQueryModuleHandle(pathname,&hmod)) {
353 pathname=((WPClassManager*)SOMClassMgrObject) //Query Pathname of class file
354 ->wpModuleForClass("CWAudioShadow");
355 if(DosQueryModuleHandle(pathname,&hmod)) {
356 pathname=((WPClassManager*)SOMClassMgrObject) //Query Pathname of class file
357 ->wpModuleForClass("M_CWCDFolder");
358 if(DosQueryModuleHandle(pathname,&hmod)) {
359 pathname=((WPClassManager*)SOMClassMgrObject) //Query Pathname of class file
360 ->wpModuleForClass("CWCDFolder");
361 if(DosQueryModuleHandle(pathname,&hmod)) {
362 hmod=0;
363 return NULLHANDLE; /* Error */
364 }
365 }
366 }
367 }
368 }
369 }
370 }
371#endif
372
373 /* Get install dir. */
374 if(!DosQueryModuleName(hmod,sizeof(chrInstallDir),chrInstallDir)) {
375 char *found;
376 if((found=strrchr(chrInstallDir,'\\'))!=NULLHANDLE) {
377 *found=0;
378 if((found=strrchr(chrInstallDir,'\\'))!=NULLHANDLE)
379 *found=0;
380
381 /* Save the dir for config files. */
382 //strcpy( chrConfigDir, chrInstallDir);
383 }
384 }
385 }/* end of if(!hmod) */
386 return hmod;
387}
388
389/* This function returns the module handle of our ressource DLL */
390HMODULE queryResModuleHandle(void)
391{
392 static HMODULE hmod=0;
393
394 if(!hmod) {
395 char path[CCHMAXPATH];
396 char buf[CCHMAXPATH];
397 char* found;
398 APIRET rc;
399
400 /* Get the language code of our system and load the
401 resource DLL with the right language */
402 do {
403 static char chrLang[]="en_EN";
404 PCSZ pszLang=chrLang;
405 char *chrPtr;
406
407 /* Get Language var */
408 if(NO_ERROR!=DosScanEnv("LANG", &pszLang))
409 {
410 /* No language var set */
411 pszLang=chrLang; /* Be safe. I don't know if a failing DosScanEnv()
412 may change the contents of the pointer. */
413 }
414
415 // SysWriteToTrapLog("LANG: %s\n", pszLang);
416
417 /* Skip leading spaces */
418 chrPtr=(char*)pszLang;
419 while(*chrPtr==' ')
420 chrPtr++;
421
422 /* Check if value seems to be valid. The var must be something like xx_XX thus length is 5 */
423 if(strlen(chrPtr)<5)
424 break;
425
426 if(DosQueryModuleName(queryModuleHandle("M_CWMediaFolder"),sizeof(path),path)!=NO_ERROR)
427 break;
428
429 found=strrchr(path,'\\');
430 if(!found)
431 break;
432 *found=0;
433
434 /* Extract the first two chars */
435 sprintf(buf, RESDLLNAME, chrPtr[0], chrPtr[1]);
436 strcat(path,buf);
437
438 if(DosLoadModule(buf,sizeof(buf),path, &hmod)==NO_ERROR)
439 break;
440
441 /* NLS DLL not found. Try to load default */
442 found=strrchr(path,'\\');
443 if(!found)
444 break;
445
446 *found=0;
447 sprintf(buf, DEFRESDLLNAME);
448 strcat(path,buf);
449
450 rc=DosLoadModule(buf,sizeof(buf),path, &hmod);
451 if(rc==NO_ERROR)
452 break;
453 hmod=NULLHANDLE;
454 }while(FALSE);
455 }
456 return hmod;
457}
458
459
460BOOL _queryHelpLibrary(char * chrBuffer, int iSize)
461{
462 char chrBuf[CCHMAXPATH];
463
464 queryModuleHandle("M_CWMediaFolder");
465 sprintf(chrBuf,"%s\\bin\\mediafld.hlp",chrInstallDir);
466 strncpy(chrBuffer, chrBuf, iSize);
467 chrBuffer[iSize-1]=0;
468 return TRUE;
469}
470
471
472BOOL M_CWMediaFolder::wpclsQueryDefaultHelp(PULONG HelpPanelId, PSZ HelpLibrary)
473{
474 if(HelpLibrary)
475 _queryHelpLibrary(HelpLibrary, CCHMAXPATH);
476
477 //SysWriteToTrapLog("%s\n", HelpLibrary);
478 if(HelpPanelId)
479 *HelpPanelId= IDHLP_MEDIAFOLDERMAIN;
480
481 return TRUE;
482}
483
484/* Overriden function which returns our class name */
485PSZ M_CWMediaFolder::wpclsQueryTitle()
486{
487 static char chrTitle[40];
488
489 if(getMessage(chrTitle, IDSTR_TITLEMEDIAFOLDER,sizeof(chrTitle), queryResModuleHandle(), HWND_DESKTOP))
490 return chrTitle;
491 /* Fall back in case of error */
492 return "Media-Player";
493}
494
495/* Overriden function which returns the custom icon */
496ULONG M_CWMediaFolder::wpclsQueryIconData(PICONINFO pIconInfo)
497{
498 // HMODULE hResource=queryResModuleHandle();
499 /* The icon is bound to the class DLL not the language DLL */
500 HMODULE hResource=queryModuleHandle("M_CWMediaFolder");
501
502 if(!hResource)
503 return M_CWProgFolder::wpclsQueryIconData(pIconInfo);
504
505 if (pIconInfo) {
506 pIconInfo->fFormat = ICON_RESOURCE;
507 pIconInfo->hmod = hResource;
508 pIconInfo->resid = IDICON_FOLDER1;
509 } /* endif */
510
511 return ( sizeof(ICONINFO) );
512}
513
514ULONG M_CWMediaFolder::wpclsQueryIconDataN(PICONINFO pIconInfo, ULONG ulIconIndex)
515{
516 //HMODULE hResource=queryResModuleHandle();
517 /* The icon is bound to the class DLL not the language DLL */
518 HMODULE hResource=queryModuleHandle("M_CWMediaFolder");
519 if(!hResource)
520 return M_CWProgFolder::wpclsQueryIconDataN(pIconInfo, ulIconIndex);
521
522 if (pIconInfo) {
523 pIconInfo->fFormat = ICON_RESOURCE;
524 pIconInfo->hmod = hResource;
525 pIconInfo->resid = IDICON_FOLDER2;
526 } /* endif */
527 return ( sizeof(ICONINFO) );
528}
529
530void M_CWMediaFolder::wpclsInitData()
531{
532 COUNTRYCODE country= {0};
533 COUNTRYINFO countryInfo= {0};
534 ULONG ulInfoLen=0;
535 APIRET rc;
536 char path[CCHMAXPATH];
537 char* found;
538 char buf[CCHMAXPATH];
539 HATOMTBL hatSystem;
540
541 cwCreateMutex(&hmtxFileName);
542
543 /* Call parent */
544 M_CWProgFolder::wpclsInitData();
545
546 /* Get slider cursor */
547 if(!hptrArrowWE)
548 hptrArrowWE=WinLoadPointer(HWND_DESKTOP, queryModuleHandle("M_CWMediaFolder"), IDPTR_ARROWWE);
549 /* Register the slider window class */
550 WinRegisterClass(WinQueryAnchorBlock(HWND_DESKTOP), SLIDER_CLASS, privateSliderProc,0, SLADDBYTES);
551
552 /* Register media folder REXX functions */
553 RexxRegisterFunctionExe("MFldrCallFunc", (PFN)rxCallCWWPSFunc);
554
555 _loadBmps();
556
557}
558
559void M_CWMediaFolder::wpclsUnInitData()
560{
561 /* Don't deregister the function here. If doing it the function
562 may be unavailable if the class object goes dormant. */
563 /* RexxDeregisterFunction("MFldrCallFunc"); */
564
565 cwCloseMutex( hmtxFileName);
566 M_CWProgFolder::wpclsUnInitData();
567}
568
569
570ULONG M_CWMediaFolder::wpclsQueryStyle()
571{
572 /* CWProgFolder returns *_NEVERTEMPLATE but we want a template */
573
574 /* We don't want an automatic template because we create it during
575 installation because we need one with an ID so we can create a shadow
576 without problems. So we return CLSSTYLE_DONTTEMPLATE.
577 Another way would be an override of wpclsCreateDefaultTemplate()
578 but this works, too, and we have to override this method anyway. We must
579 disable CLSSTYLE_NEVERTEMPLATE or 'Create another' and the template checkbox
580 will be lost. */
581 return (M_CWProgFolder::wpclsQueryStyle()&~CLSSTYLE_NEVERTEMPLATE)|CLSSTYLE_DONTTEMPLATE;
582}
583
584void writeLog(char* logFile, char* logText);
585
586static void createMediaFolderShadow(M_WPObject * m_wpObject)
587{
588 char chrSetup[CCHMAXPATH];
589
590 /* Get special settings from the INI file */
591 if(PrfQueryProfileInt(HINI_USERPROFILE, APPKEY_CWMM, MFLDR_NO_TEMPLATE_SHADOW, 0))
592 return;
593
594 if(!WinQueryObject(ID_MEDIALDRTMPL_SHADOW))
595 {
596 sprintf(chrSetup,"SHADOWID=%s;OBJECTID=%s;", ID_MEDIAFLDRTEMPLATE,ID_MEDIALDRTMPL_SHADOW);
597 WinCreateObject("WPShadow", m_wpObject->wpclsQueryTitle(), chrSetup, ID_MMFOLDER, CO_UPDATEIFEXISTS);
598 }
599};
600
601BOOL M_CWMediaFolder::wpclsCreateDefaultTemplates(WPObject * wpObject)
602{
603 HOBJECT hObject;
604 WPObject * wpTemplate;
605 char chrSetup[CCHMAXPATH*2];
606 BOOL rc;
607
608#ifdef WRITE_TEMPLATE_LOG
609 writeLog( "template.log", "In wpclsCreateDefaultTemplates()\n");
610 rc=FALSE;
611 TRY_LOUD(TEMPLATE) {
612 do {
613
614 if((hObject=WinQueryObject(ID_MEDIAFLDRTEMPLATE))!=NULLHANDLE) {
615 writeLog( "template.log", "1 WinQueryObject() gibt hObject zurck. Template bereits vorhanden.\n");
616 /* There's an object with the ID. Check if it's the right template */
617 if((wpTemplate=wpclsQueryObject(hObject))==NULLHANDLE) {
618 /* A handle but no object?! Shouldn't happen, fall back to default. */
619 writeLog( "template.log", "2 wpTemplate zu hObject kann nicht gefunden werden!!! -> break\n");
620 break;
621 }
622
623 if(somIsObj(wpTemplate)) {
624 writeLog( "template.log", "3 wpTemplate ist ein SOMObject. Test, ob ein CWAudio-Objekt...\n");
625 if(wpTemplate->somIsInstanceOf(this)) {
626 ULONG ulStyle;
627
628 writeLog( "template.log", "4 wpTemplate ist ein CWAudio-Objekt.\n");
629
630 /* It's an instance of our class. Make sure it's a template. */
631 ulStyle=wpTemplate->wpQueryStyle();
632 writeLog( "template.log", "5 ulStyle=wpTemplate->wpQueryStyle(); done\n");
633 wpTemplate->wpSetStyle(ulStyle|OBJSTYLE_TEMPLATE);
634 writeLog( "template.log", "6 wpTemplate->wpSetStyle(ulStyle|OBJSTYLE_TEMPLATE); done\n");
635 rc=TRUE;
636 break;
637 /* Ok we have a template */
638 }
639 else
640 writeLog( "template.log", "7 Nein, kein CWAudio-Objekt. Entfernen...\n");
641 /* The object isn't our template. Probably left over from previous installation
642 so remove it. */
643 ((WPFileSystem*)wpTemplate)->wpSetAttr(FILE_NORMAL); /* Remove system, readonly, hidden flags */
644 writeLog( "template.log", "8 ((WPFileSystem*)wpTemplate)->wpSetAttr(FILE_NORMAL); done\n");
645 wpTemplate->wpSetStyle(0);/* Remove styles so deleting is possible */
646 writeLog( "template.log", "9 wpTemplate->wpSetStyle(0); done\n");
647 wpTemplate->wpDelete(NULL);
648 writeLog( "template.log", "10 wpTemplate->wpDelete(NULL); done\n");
649 }/* somIsObj() */
650 else
651 writeLog( "template.log", "11 wpTemplate ist kein SOMObject!!?\n");
652 }/* if((hObject=WinQueryObject(ID_AUDIOTEMPLATE))!=NULLHANDLE) */
653 else
654 writeLog( "template.log", "12 WinQueryObject() gibt NULLHANDLE zurck. Kein Template vorhanden.\n");
655
656 wpTemplate=wpObject;
657 /* Create a new template */
658 /* Get Multimedia template folder */
659 writeLog( "template.log", "13 Neues Template erstellen...\n");
660 if((hObject=WinQueryObject(ID_MMTEMPLATEFOLDER))!=NULLHANDLE) {
661 writeLog( "template.log", "14 Multimediaordner gefunden...\n");
662 /* There's an object with the ID. */
663 if((wpTemplate=wpclsQueryObject(hObject))==NULLHANDLE) {
664 writeLog( "template.log", "15 Objekt-Ptr. zu Multimediaordner nicht gefunden!!\n");
665 /* A handle but no object?! Shouldn't happen, fall back to default. */
666 wpTemplate=wpObject;
667 }
668 writeLog( "template.log", "15b Objekt-Ptr. zu Multimediaordner gefunden!!\n");
669 }
670 else
671 writeLog( "template.log", "16 Multimediaordner nicht gefunden. Benutze Schablonen-Ordner\n");
672
673 sprintf(chrSetup,
674 "TEMPLATE=YES;OBJECTID=%s", ID_MEDIAFLDRTEMPLATE);
675 writeLog( "template.log", "16b erstelle Template...\n");
676 if((wpTemplate=wpclsNew(MEDIAFLDR_TEMPLATE_NAME, chrSetup, (WPFolder*)wpTemplate, FALSE))!=NULLHANDLE) {
677 writeLog( "template.log", "17 wpTemplate=wpclsNew() war erfogreich.\n");
678 sprintf(chrSetup,
679 // "DEFAULTVIEW=DETAILS;DETAILSCLASS=CWAudioShadow;SORTCLASS=CWAudioShadow;");
680 "DEFAULTVIEW=DETAILS;DETAILSCLASS=CWAudioShadow;SORTCLASS=CWAudioShadow;DETAILSTODISPLAY=0,1,4,12,13,14,15,16,17,18,19,20,21;SORTBYATTR=6,24,25,26,27,28,29,30,31,32,33");
681 if(somIsObj(wpTemplate)) {
682 writeLog( "template.log", "18 wpTemplate ist ein SOMObject.\n");
683 wpTemplate->wpSetup(chrSetup);
684 writeLog( "template.log", "19 wpTemplate->wpSetup(chrSetup); done\n");
685 }
686 rc=TRUE;
687 }
688 writeLog( "template.log", "20 Verlasse while()\n");
689 }while(FALSE);
690 }
691 CATCH(TEMPLATE)
692 {
693 } END_CATCH;
694 if(rc)
695 writeLog( "template.log", "21 Verlasse wpclsCreateDefaultTemplates() mit rc=TRUE\n\n");
696 else
697 writeLog( "template.log", "21 Verlasse wpclsCreateDefaultTemplates() mit rc=FALSE\n\n");
698 return rc;
699 /* Above is for debugging only */
700#else
701
702 rc=FALSE;
703 TRY_LOUD(TEMPLATE) {
704 do {
705 if((hObject=WinQueryObject(ID_MEDIAFLDRTEMPLATE))!=NULLHANDLE) {
706 /* There's an object with the ID. Check if it's the right template */
707 if((wpTemplate=wpclsQueryObject(hObject))==NULLHANDLE) {
708 /* A handle but no object?! Shouldn't happen, fall back to default. */
709 break;
710 }
711
712 if(somIsObj(wpTemplate)) {
713 if(wpTemplate->somIsInstanceOf(this)) {
714 ULONG ulStyle;
715
716 /* It's an instance of our class. Make sure it's a template. */
717 ulStyle=wpTemplate->wpQueryStyle();
718 wpTemplate->wpSetStyle(ulStyle|OBJSTYLE_TEMPLATE);
719 rc=TRUE;
720 /* Now create a shadow in the MM folder. */
721 createMediaFolderShadow(this);
722#if 0
723 if(!WinQueryObject(ID_MEDIALDRTMPL_SHADOW))
724 {
725 sprintf(chrSetup,"SHADOWID=%s;OBJECTID=%s;", ID_MEDIAFLDRTEMPLATE,ID_MEDIALDRTMPL_SHADOW);
726 WinCreateObject("WPShadow", wpclsQueryTitle(), chrSetup, ID_MMFOLDER, CO_UPDATEIFEXISTS);
727 }
728#endif
729 break;
730 /* Ok we have a template */
731 }
732
733 /* The object isn't our template. Probably left over from previous installation
734 so remove it. */
735 ((WPFileSystem*)wpTemplate)->wpSetAttr(FILE_NORMAL); /* Remove system, readonly, hidden flags */
736 wpTemplate->wpSetStyle(0);/* Remove styles so deleting is possible */
737 wpTemplate->wpDelete(NULL);
738 }/* somIsObj() */
739 }/* if((hObject=WinQueryObject(ID_AUDIOTEMPLATE))!=NULLHANDLE) */
740
741 wpTemplate=wpObject;
742 /* Create a new template */
743 /* Get Multimedia template folder */
744 if((hObject=WinQueryObject(ID_MMTEMPLATEFOLDER))!=NULLHANDLE) {
745 /* There's an object with the ID. */
746 if((wpTemplate=wpclsQueryObject(hObject))==NULLHANDLE) {
747 /* A handle but no object?! Shouldn't happen, fall back to default. */
748 wpTemplate=wpObject;
749 }
750 }
751
752 sprintf(chrSetup,
753 "TEMPLATE=YES;OBJECTID=%s", ID_MEDIAFLDRTEMPLATE);
754 // if((wpTemplate=wpclsNew(MEDIAFLDR_TEMPLATE_NAME, chrSetup, (WPFolder*)wpTemplate, FALSE))!=NULLHANDLE) {
755 if((wpTemplate=wpclsNew(wpclsQueryTitle(), chrSetup, (WPFolder*)wpTemplate, FALSE))!=NULLHANDLE) {
756 sprintf(chrSetup,
757 // "DEFAULTVIEW=DETAILS;DETAILSCLASS=CWAudioShadow;SORTCLASS=CWAudioShadow;");
758 "DEFAULTVIEW=DETAILS;DETAILSCLASS=CWAudioShadow;SORTCLASS=CWAudioShadow;DETAILSTODISPLAY=0,1,4,12,13,14,15,16,17,18,19,20,21;SORTBYATTR=6,24,25,26,27,28,29,30,31,32,33");
759 if(somIsObj(wpTemplate)) {
760 wpTemplate->wpSetup(chrSetup);
761 /* Now create a shadow in the MM folder. */
762 createMediaFolderShadow(this);
763#if 0
764 if(!WinQueryObject(ID_MEDIALDRTMPL_SHADOW))
765 {
766 sprintf(chrSetup,"SHADOWID=%s;OBJECTID=%s;", ID_MEDIAFLDRTEMPLATE,ID_MEDIALDRTMPL_SHADOW);
767 WinCreateObject("WPShadow", wpclsQueryTitle(), chrSetup, ID_MMFOLDER, CO_UPDATEIFEXISTS);
768 }
769#endif
770 }
771 rc=TRUE;
772 }
773 }while(FALSE);
774 }
775 CATCH(TEMPLATE)
776 {
777 } END_CATCH;
778
779 return rc;
780#endif
781
782}
783
784
785
786
787
788
789
790
791
792
Note: See TracBrowser for help on using the repository browser.