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

Last change on this file since 178 was 178, checked in by gyoung, 15 months ago

Add Media Play Help and M3U help to their folders help menu

File size: 33.3 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 CHAR *lang = getenv("LANG");
464 PSZ pszh = "mediafldr";
465 if (lang) {
466 if (!strnicmp(lang, "es", 2)) {
467 pszh = "mediafldr034";
468 }
469 else if (!strnicmp(lang, "tw", 2)) {
470 pszh = "mediafldr088";
471 }
472 else if (!strnicmp(lang, "de", 2)) {
473 pszh = "mediafldr049";
474 }
475 else if (!strnicmp(lang, "ru", 2)) {
476 pszh = "mediafldr007";
477 }
478 else if (!strnicmp(lang, "it", 2)) {
479 pszh = "mediafldr039";
480 }
481 else if (!strnicmp(lang, "fr", 2)) {
482 pszh = "mediafldr033";
483 }
484 else if (!strnicmp(lang, "nl", 2)) {
485 pszh = "mediafldr031";
486 }
487 }
488 queryModuleHandle("M_CWMediaFolder");
489 sprintf(chrBuf,"%s\\bin\\%s.hlp",chrInstallDir, pszh);
490 strncpy(chrBuffer, chrBuf, iSize);
491 chrBuffer[iSize-1]=0;
492 return TRUE;
493}
494
495
496BOOL M_CWMediaFolder::wpclsQueryDefaultHelp(PULONG HelpPanelId, PSZ HelpLibrary)
497{
498 if(HelpLibrary)
499 _queryHelpLibrary(HelpLibrary, CCHMAXPATH);
500
501 //SysWriteToTrapLog("%s\n", HelpLibrary);
502 if(HelpPanelId)
503 *HelpPanelId= IDHLP_MEDIAFOLDERMAIN;
504
505 return TRUE;
506}
507
508/* Overriden function which returns our class name */
509PSZ M_CWMediaFolder::wpclsQueryTitle()
510{
511 static char chrTitle[40];
512
513 if(getMessage(chrTitle, IDSTR_TITLEMEDIAFOLDER,sizeof(chrTitle), queryResModuleHandle(), HWND_DESKTOP))
514 return chrTitle;
515 /* Fall back in case of error */
516 return "Media-Player";
517}
518
519/* Overriden function which returns the custom icon */
520ULONG M_CWMediaFolder::wpclsQueryIconData(PICONINFO pIconInfo)
521{
522 // HMODULE hResource=queryResModuleHandle();
523 /* The icon is bound to the class DLL not the language DLL */
524 HMODULE hResource=queryModuleHandle("M_CWMediaFolder");
525
526 if(!hResource)
527 return M_CWProgFolder::wpclsQueryIconData(pIconInfo);
528
529 if (pIconInfo) {
530 pIconInfo->fFormat = ICON_RESOURCE;
531 pIconInfo->hmod = hResource;
532 pIconInfo->resid = IDICON_FOLDER1;
533 } /* endif */
534
535 return ( sizeof(ICONINFO) );
536}
537
538ULONG M_CWMediaFolder::wpclsQueryIconDataN(PICONINFO pIconInfo, ULONG ulIconIndex)
539{
540 //HMODULE hResource=queryResModuleHandle();
541 /* The icon is bound to the class DLL not the language DLL */
542 HMODULE hResource=queryModuleHandle("M_CWMediaFolder");
543 if(!hResource)
544 return M_CWProgFolder::wpclsQueryIconDataN(pIconInfo, ulIconIndex);
545
546 if (pIconInfo) {
547 pIconInfo->fFormat = ICON_RESOURCE;
548 pIconInfo->hmod = hResource;
549 pIconInfo->resid = IDICON_FOLDER2;
550 } /* endif */
551 return ( sizeof(ICONINFO) );
552}
553
554void M_CWMediaFolder::wpclsInitData()
555{
556 COUNTRYCODE country= {0};
557 COUNTRYINFO countryInfo= {0};
558 ULONG ulInfoLen=0;
559 APIRET rc;
560 char path[CCHMAXPATH];
561 char* found;
562 char buf[CCHMAXPATH];
563 HATOMTBL hatSystem;
564
565 cwCreateMutex(&hmtxFileName);
566
567 /* Call parent */
568 M_CWProgFolder::wpclsInitData();
569
570 /* Get slider cursor */
571 if(!hptrArrowWE)
572 hptrArrowWE=WinLoadPointer(HWND_DESKTOP, queryModuleHandle("M_CWMediaFolder"), IDPTR_ARROWWE);
573 /* Register the slider window class */
574 WinRegisterClass(WinQueryAnchorBlock(HWND_DESKTOP), SLIDER_CLASS, privateSliderProc,0, SLADDBYTES);
575
576 /* Register media folder REXX functions */
577 RexxRegisterFunctionExe("MFldrCallFunc", (PFN)rxCallCWWPSFunc);
578
579 _loadBmps();
580
581}
582
583void M_CWMediaFolder::wpclsUnInitData()
584{
585 /* Don't deregister the function here. If doing it the function
586 may be unavailable if the class object goes dormant. */
587 /* RexxDeregisterFunction("MFldrCallFunc"); */
588
589 cwCloseMutex( hmtxFileName);
590 M_CWProgFolder::wpclsUnInitData();
591}
592
593
594ULONG M_CWMediaFolder::wpclsQueryStyle()
595{
596 /* CWProgFolder returns *_NEVERTEMPLATE but we want a template */
597
598 /* We don't want an automatic template because we create it during
599 installation because we need one with an ID so we can create a shadow
600 without problems. So we return CLSSTYLE_DONTTEMPLATE.
601 Another way would be an override of wpclsCreateDefaultTemplate()
602 but this works, too, and we have to override this method anyway. We must
603 disable CLSSTYLE_NEVERTEMPLATE or 'Create another' and the template checkbox
604 will be lost. */
605 return (M_CWProgFolder::wpclsQueryStyle()&~CLSSTYLE_NEVERTEMPLATE)|CLSSTYLE_DONTTEMPLATE;
606}
607
608void writeLog(char* logFile, char* logText);
609
610static void createMediaFolderShadow(M_WPObject * m_wpObject)
611{
612 char chrSetup[CCHMAXPATH];
613
614 /* Get special settings from the INI file */
615 if(PrfQueryProfileInt(HINI_USERPROFILE, APPKEY_CWMM, MFLDR_NO_TEMPLATE_SHADOW, 0))
616 return;
617
618 if(!WinQueryObject(ID_MEDIALDRTMPL_SHADOW))
619 {
620 sprintf(chrSetup,"SHADOWID=%s;OBJECTID=%s;", ID_MEDIAFLDRTEMPLATE,ID_MEDIALDRTMPL_SHADOW);
621 WinCreateObject("WPShadow", m_wpObject->wpclsQueryTitle(), chrSetup, ID_MMFOLDER, CO_UPDATEIFEXISTS);
622 }
623};
624
625BOOL M_CWMediaFolder::wpclsCreateDefaultTemplates(WPObject * wpObject)
626{
627 HOBJECT hObject;
628 WPObject * wpTemplate;
629 char chrSetup[CCHMAXPATH*2];
630 BOOL rc;
631
632#ifdef WRITE_TEMPLATE_LOG
633 writeLog( "template.log", "In wpclsCreateDefaultTemplates()\n");
634 rc=FALSE;
635 TRY_LOUD(TEMPLATE) {
636 do {
637
638 if((hObject=WinQueryObject(ID_MEDIAFLDRTEMPLATE))!=NULLHANDLE) {
639 writeLog( "template.log", "1 WinQueryObject() gibt hObject zurck. Template bereits vorhanden.\n");
640 /* There's an object with the ID. Check if it's the right template */
641 if((wpTemplate=wpclsQueryObject(hObject))==NULLHANDLE) {
642 /* A handle but no object?! Shouldn't happen, fall back to default. */
643 writeLog( "template.log", "2 wpTemplate zu hObject kann nicht gefunden werden!!! -> break\n");
644 break;
645 }
646
647 if(somIsObj(wpTemplate)) {
648 writeLog( "template.log", "3 wpTemplate ist ein SOMObject. Test, ob ein CWAudio-Objekt...\n");
649 if(wpTemplate->somIsInstanceOf(this)) {
650 ULONG ulStyle;
651
652 writeLog( "template.log", "4 wpTemplate ist ein CWAudio-Objekt.\n");
653
654 /* It's an instance of our class. Make sure it's a template. */
655 ulStyle=wpTemplate->wpQueryStyle();
656 writeLog( "template.log", "5 ulStyle=wpTemplate->wpQueryStyle(); done\n");
657 wpTemplate->wpSetStyle(ulStyle|OBJSTYLE_TEMPLATE);
658 writeLog( "template.log", "6 wpTemplate->wpSetStyle(ulStyle|OBJSTYLE_TEMPLATE); done\n");
659 rc=TRUE;
660 break;
661 /* Ok we have a template */
662 }
663 else
664 writeLog( "template.log", "7 Nein, kein CWAudio-Objekt. Entfernen...\n");
665 /* The object isn't our template. Probably left over from previous installation
666 so remove it. */
667 ((WPFileSystem*)wpTemplate)->wpSetAttr(FILE_NORMAL); /* Remove system, readonly, hidden flags */
668 writeLog( "template.log", "8 ((WPFileSystem*)wpTemplate)->wpSetAttr(FILE_NORMAL); done\n");
669 wpTemplate->wpSetStyle(0);/* Remove styles so deleting is possible */
670 writeLog( "template.log", "9 wpTemplate->wpSetStyle(0); done\n");
671 wpTemplate->wpDelete(NULL);
672 writeLog( "template.log", "10 wpTemplate->wpDelete(NULL); done\n");
673 }/* somIsObj() */
674 else
675 writeLog( "template.log", "11 wpTemplate ist kein SOMObject!!?\n");
676 }/* if((hObject=WinQueryObject(ID_AUDIOTEMPLATE))!=NULLHANDLE) */
677 else
678 writeLog( "template.log", "12 WinQueryObject() gibt NULLHANDLE zurck. Kein Template vorhanden.\n");
679
680 wpTemplate=wpObject;
681 /* Create a new template */
682 /* Get Multimedia template folder */
683 writeLog( "template.log", "13 Neues Template erstellen...\n");
684 if((hObject=WinQueryObject(ID_MMTEMPLATEFOLDER))!=NULLHANDLE) {
685 writeLog( "template.log", "14 Multimediaordner gefunden...\n");
686 /* There's an object with the ID. */
687 if((wpTemplate=wpclsQueryObject(hObject))==NULLHANDLE) {
688 writeLog( "template.log", "15 Objekt-Ptr. zu Multimediaordner nicht gefunden!!\n");
689 /* A handle but no object?! Shouldn't happen, fall back to default. */
690 wpTemplate=wpObject;
691 }
692 writeLog( "template.log", "15b Objekt-Ptr. zu Multimediaordner gefunden!!\n");
693 }
694 else
695 writeLog( "template.log", "16 Multimediaordner nicht gefunden. Benutze Schablonen-Ordner\n");
696
697 sprintf(chrSetup,
698 "TEMPLATE=YES;OBJECTID=%s", ID_MEDIAFLDRTEMPLATE);
699 writeLog( "template.log", "16b erstelle Template...\n");
700 if((wpTemplate=wpclsNew(MEDIAFLDR_TEMPLATE_NAME, chrSetup, (WPFolder*)wpTemplate, FALSE))!=NULLHANDLE) {
701 writeLog( "template.log", "17 wpTemplate=wpclsNew() war erfogreich.\n");
702 sprintf(chrSetup,
703 // "DEFAULTVIEW=DETAILS;DETAILSCLASS=CWAudioShadow;SORTCLASS=CWAudioShadow;");
704 "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");
705 if(somIsObj(wpTemplate)) {
706 writeLog( "template.log", "18 wpTemplate ist ein SOMObject.\n");
707 wpTemplate->wpSetup(chrSetup);
708 writeLog( "template.log", "19 wpTemplate->wpSetup(chrSetup); done\n");
709 }
710 rc=TRUE;
711 }
712 writeLog( "template.log", "20 Verlasse while()\n");
713 }while(FALSE);
714 }
715 CATCH(TEMPLATE)
716 {
717 } END_CATCH;
718 if(rc)
719 writeLog( "template.log", "21 Verlasse wpclsCreateDefaultTemplates() mit rc=TRUE\n\n");
720 else
721 writeLog( "template.log", "21 Verlasse wpclsCreateDefaultTemplates() mit rc=FALSE\n\n");
722 return rc;
723 /* Above is for debugging only */
724#else
725
726 rc=FALSE;
727 TRY_LOUD(TEMPLATE) {
728 do {
729 if((hObject=WinQueryObject(ID_MEDIAFLDRTEMPLATE))!=NULLHANDLE) {
730 /* There's an object with the ID. Check if it's the right template */
731 if((wpTemplate=wpclsQueryObject(hObject))==NULLHANDLE) {
732 /* A handle but no object?! Shouldn't happen, fall back to default. */
733 break;
734 }
735
736 if(somIsObj(wpTemplate)) {
737 if(wpTemplate->somIsInstanceOf(this)) {
738 ULONG ulStyle;
739
740 /* It's an instance of our class. Make sure it's a template. */
741 ulStyle=wpTemplate->wpQueryStyle();
742 wpTemplate->wpSetStyle(ulStyle|OBJSTYLE_TEMPLATE);
743 rc=TRUE;
744 /* Now create a shadow in the MM folder. */
745 createMediaFolderShadow(this);
746#if 0
747 if(!WinQueryObject(ID_MEDIALDRTMPL_SHADOW))
748 {
749 sprintf(chrSetup,"SHADOWID=%s;OBJECTID=%s;", ID_MEDIAFLDRTEMPLATE,ID_MEDIALDRTMPL_SHADOW);
750 WinCreateObject("WPShadow", wpclsQueryTitle(), chrSetup, ID_MMFOLDER, CO_UPDATEIFEXISTS);
751 }
752#endif
753 break;
754 /* Ok we have a template */
755 }
756
757 /* The object isn't our template. Probably left over from previous installation
758 so remove it. */
759 ((WPFileSystem*)wpTemplate)->wpSetAttr(FILE_NORMAL); /* Remove system, readonly, hidden flags */
760 wpTemplate->wpSetStyle(0);/* Remove styles so deleting is possible */
761 wpTemplate->wpDelete(NULL);
762 }/* somIsObj() */
763 }/* if((hObject=WinQueryObject(ID_AUDIOTEMPLATE))!=NULLHANDLE) */
764
765 wpTemplate=wpObject;
766 /* Create a new template */
767 /* Get Multimedia template folder */
768 if((hObject=WinQueryObject(ID_MMTEMPLATEFOLDER))!=NULLHANDLE) {
769 /* There's an object with the ID. */
770 if((wpTemplate=wpclsQueryObject(hObject))==NULLHANDLE) {
771 /* A handle but no object?! Shouldn't happen, fall back to default. */
772 wpTemplate=wpObject;
773 }
774 }
775
776 sprintf(chrSetup,
777 "TEMPLATE=YES;OBJECTID=%s", ID_MEDIAFLDRTEMPLATE);
778 // if((wpTemplate=wpclsNew(MEDIAFLDR_TEMPLATE_NAME, chrSetup, (WPFolder*)wpTemplate, FALSE))!=NULLHANDLE) {
779 if((wpTemplate=wpclsNew(wpclsQueryTitle(), chrSetup, (WPFolder*)wpTemplate, FALSE))!=NULLHANDLE) {
780 sprintf(chrSetup,
781 // "DEFAULTVIEW=DETAILS;DETAILSCLASS=CWAudioShadow;SORTCLASS=CWAudioShadow;");
782 "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");
783 if(somIsObj(wpTemplate)) {
784 wpTemplate->wpSetup(chrSetup);
785 /* Now create a shadow in the MM folder. */
786 createMediaFolderShadow(this);
787#if 0
788 if(!WinQueryObject(ID_MEDIALDRTMPL_SHADOW))
789 {
790 sprintf(chrSetup,"SHADOWID=%s;OBJECTID=%s;", ID_MEDIAFLDRTEMPLATE,ID_MEDIALDRTMPL_SHADOW);
791 WinCreateObject("WPShadow", wpclsQueryTitle(), chrSetup, ID_MMFOLDER, CO_UPDATEIFEXISTS);
792 }
793#endif
794 }
795 rc=TRUE;
796 }
797 }while(FALSE);
798 }
799 CATCH(TEMPLATE)
800 {
801 } END_CATCH;
802
803 return rc;
804#endif
805
806}
807
808
809
810
811
812
813
814
815
816
Note: See TracBrowser for help on using the repository browser.