source: branches/classes/c/c_audio/cwm3u.c

Last change on this file was 108, checked in by gyoung, 23 months ago

Fix all the warnings and errors reported by CPPCheck.

File size: 16.8 KB
Line 
1/*
2 * (C) Chris Wohlgemuth 2002-2004
3 *
4 */
5/*
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
9 * any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; see the file COPYING. If not, write to
18 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20/*
21 * If you need another license for your project/product (commercial,
22 * noncommercial, whatever) contact me at
23 *
24 * http://www.os2world.com/cdwriting
25 * http://www.geocities.com/SiliconValley/Sector/5785/
26 *
27 */
28/*
29 * This file was generated by the SOM Compiler and Emitter Framework.
30 * Generated using:
31 * SOM Emitter emitctm: 2.42
32 */
33
34#ifndef SOM_Module_cwm3u_Source
35#define SOM_Module_cwm3u_Source
36#endif
37#define MMM3U_Class_Source
38#define M_MMM3U_Class_Source
39
40#define INCL_PM
41
42#define INCL_DOS
43#define INCL_DOSERRORS
44
45#include <os2.h>
46#include <stdio.h>
47#include "cwm3u.ih"
48#include "cwaudioinc.h"
49//#include "cwmmres.h"
50#include "mmres.h"
51#include "except.h"
52#include "wpfolder.h"
53
54#include "som_wps_funcs.h"
55
56HMODULE queryResModuleHandle(void);
57HMODULE queryModuleHandle(void);
58BOOL getMessage(char* text,ULONG ulID, LONG lSizeText, HMODULE hResource,HWND hwnd);
59ULONG launchPMProg(PSZ pszTitle, PSZ wrapperExe, PSZ parameters, WPObject *thisPtr, ULONG ulView);
60void HlpWriteToTrapLog(const char* chrFormat, ...);
61BOOL mmclsCreateTheDefaultTemplate(M_WPObject *somSelf,
62 WPObject* Folder);
63PSZ _queryMp3HelpLibraryName(void);
64
65
66SOM_Scope BOOL SOMLINK cwm3u_wpModifyPopupMenu(MMM3U *somSelf,
67 HWND hwndMenu,
68 HWND hwndCnr,
69 ULONG iPosition)
70{
71 /* MMM3UData *somThis = MMM3UGetData(somSelf); */
72 MMM3UMethodDebug("MMM3U","cwm3u_wpModifyPopupMenu");
73
74 _wpInsertPopupMenuItems(somSelf, hwndMenu, 1, queryResModuleHandle(), ID_MENU_M3UPLAYER, 1);
75 _wpInsertPopupMenuItems(somSelf, hwndMenu, 1, queryResModuleHandle(), ID_MENU_M3UEDITOR, 1);
76 return (MMM3U_parent_CWMMDataFile_wpModifyPopupMenu(somSelf,
77 hwndMenu,
78 hwndCnr,
79 iPosition));
80}
81
82SOM_Scope BOOL SOMLINK cwm3u_wpMenuItemSelected(MMM3U *somSelf,
83 HWND hwndFrame,
84 ULONG ulMenuId)
85{
86 /* MMM3UData *somThis = MMM3UGetData(somSelf); */
87 MMM3UMethodDebug("MMM3U","cwm3u_wpMenuItemSelected");
88 switch(ulMenuId)
89 {
90 case ID_MENU_M3UEDITOR:
91 _wpViewObject(somSelf, NULLHANDLE, ulMenuId, 0);
92 return TRUE;
93 case ID_MENU_M3UPLAYER:
94 _wpViewObject(somSelf, NULLHANDLE, ulMenuId, 0);
95 return TRUE;
96 default:
97 break;
98 }
99
100 return (MMM3U_parent_CWMMDataFile_wpMenuItemSelected(somSelf,
101 hwndFrame,
102 ulMenuId));
103}
104
105
106MRESULT EXPENTRY m3uFolderCloseHandlerProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
107{
108
109 switch (msg)
110 {
111 case WM_TIMER:
112 {
113 MMDATAFILEVIEW *pParams=(MMDATAFILEVIEW*)WinQueryWindowULong(hwnd, QWL_USER);
114 WPObject*somSelf;
115
116 WinStopTimer(WinQueryAnchorBlock(HWND_DESKTOP), hwnd, 1);
117 somSelf=pParams->thisPtr;
118 /* Destroy folder */
119 _wpFree(pParams->wpObject);
120 _wpFreeMem(somSelf, (PBYTE)pParams);
121 WinDestroyWindow(hwnd);
122 }
123 return MRFALSE;
124 case WM_APPTERMINATENOTIFY:
125 {
126 MMDATAFILEVIEW *pParams=(MMDATAFILEVIEW*)WinQueryWindowULong(hwnd, QWL_USER);
127 WPObject*somSelf;
128
129 somSelf=pParams->thisPtr;
130 _wpDeleteFromObjUseList(somSelf, &pParams->useItem);
131 WinStartTimer(WinQueryAnchorBlock(HWND_DESKTOP), hwnd, 1, 1000);
132 return MRFALSE;
133 }
134 default:
135 break;
136 }
137 return WinDefWindowProc( hwnd, msg, mp1, mp2);
138}
139
140
141SOM_Scope HWND SOMLINK cwm3u_wpOpen(MMM3U *somSelf, HWND hwndCnr,
142 ULONG ulView, ULONG param)
143{
144 ULONG ulRc;
145 /* MMM3UData *somThis = MMM3UGetData(somSelf); */
146 MMM3UMethodDebug("MMM3U","cwm3u_wpOpen");
147
148 switch(ulView)
149 {
150 case ID_MENU_M3UEDITOR:
151 /* case 0xbc2d: Editor */
152 {
153 char chrPlayer[CCHMAXPATH]={0};
154 char chrParams[CCHMAXPATH+10]="\"";
155 char chrTitle[50];
156 char *chrPtr=chrParams;
157 ULONG ulSize;
158 WPObject* wpObject;
159 WPFolder *wpFolder;
160
161 if(!getMessage(chrTitle, IDSTR_M3UEDITORTITLE, sizeof(chrTitle), queryResModuleHandle(), HWND_DESKTOP))
162 strcpy(chrTitle, "Playlist editor");
163
164 chrPtr++;
165 ulSize=sizeof(chrParams)-2;
166 _wpQueryRealName(somSelf, chrPtr, &ulSize, TRUE);
167 strcat(chrPtr,"\"");
168
169 /* Check for user setting */
170 if(PrfQueryProfileString(HINI_USERPROFILE, "CWMM", "m3ueditor", NULLHANDLE, chrPlayer,sizeof(chrPlayer))) {
171 if((ulRc=launchPMProg( chrTitle, chrPlayer, chrParams, somSelf, ulView))==NULLHANDLE)
172 break; /* Use System default (E.EXE) */
173 return NULLHANDLE;
174 }
175
176 /* Create and open M3U folder */
177 wpFolder=_wpclsQueryFolder(_WPFolder, "<WP_NOWHERE>", FALSE);
178 if(somIsObj(wpFolder))
179 {
180 SOMClass* somClass;
181
182 ulSize=sizeof(chrPlayer);
183 /* Get name of M3U file */
184 _wpQueryRealName(somSelf, chrPlayer, &ulSize, FALSE);
185 somClass=somGetSomClass("CWM3UFolder");
186
187 if(!somIsObj(somClass))
188 somClass=somGetSomClass("CWM3UFolder");
189
190 if(somIsObj(somClass))
191 wpObject=_wpclsNew(somClass, chrPlayer, "",
192 wpFolder,FALSE);
193 else
194 break;
195
196 if(somIsObj(wpObject)) {
197 HWND hwnd;
198 /* Send the handle of the M3U-File to the M3U folder. */
199 sprintf(chrPlayer, "M3UOBJECTHANDLE=%p;", somSelf);
200 _wpSetup(wpObject, chrPlayer);
201
202 if((hwnd=_wpViewObject(wpObject, NULLHANDLE, OPEN_DEFAULT, 0))!=NULLHANDLE) {
203 HWND hwndAppTerminateHandler;
204 /* Folder opened. Add the object to inuse list. */
205 ULONG ulError;
206 MMDATAFILEVIEW *pParams=(MMDATAFILEVIEW*)_wpAllocMem(somSelf,sizeof(MMDATAFILEVIEW), &ulError);
207
208 if(pParams) {
209 /* Create an object window which will process the WM_APPTERMINATE message. While processing of this
210 message the view item (see below) will be removed from the inuse list thus removing the inuse emphasis. */
211 hwndAppTerminateHandler=WinCreateWindow(HWND_OBJECT,WC_STATIC,"CWMMAppTerminate",0,0,0,0,0,
212 NULLHANDLE,HWND_BOTTOM,13344,NULL,NULL);
213 if(hwndAppTerminateHandler) {
214 WinSubclassWindow(hwndAppTerminateHandler,&m3uFolderCloseHandlerProc);
215 sprintf(chrPlayer, "M3UOBJECTWINDOW=%ld;",
216 hwndAppTerminateHandler);
217 _wpSetup(wpObject, chrPlayer);
218 }
219 /* We have memory */
220 memset((void*)pParams ,0, sizeof(MMDATAFILEVIEW));
221 pParams->pid=0;
222 pParams->thisPtr=somSelf; /* The object */
223 pParams->viewItem.view=ulView; /* The open view */
224 pParams->useItem.type=USAGE_OPENVIEW; /* We add a view item to the inus list */
225 pParams->viewItem.handle=hwnd; /* */
226 pParams->wpObject=wpObject;
227 _wpAddToObjUseList(somSelf, &pParams->useItem); /* add to inuse list */
228 WinSetWindowULong(hwndAppTerminateHandler, QWL_USER,(ULONG)pParams);
229 return hwnd;
230 }/* pParams */
231 }/* wpViewObject() */
232 _wpFree(wpObject);
233 }/* somIsObj() */
234 }/* somIsObj(wpFolder) */
235 /* No M3U folder. Open E.EXE as fallback. */
236 launchPMProg( chrTitle, "e.exe", chrParams, somSelf, ulView);
237 break;
238 }
239 case ID_MENU_M3UPLAYER:
240 /* case 0xbc2d: player */
241 {
242 char chrPlayer[CCHMAXPATH]={0};
243 char chrParams[CCHMAXPATH+10]="\"";
244 char chrTitle[50];
245 char *chrPtr=chrParams;
246 ULONG ulSize;
247 WPObject* wpObject;
248 WPFolder *wpFolder;
249
250 if(!getMessage(chrTitle, IDSTR_AUDPLAYERTITLE, sizeof(chrTitle), queryResModuleHandle(), HWND_DESKTOP))
251 strcpy(chrTitle, "Player");
252
253 chrPtr++;
254 ulSize=sizeof(chrParams)-2;
255 _wpQueryRealName(somSelf, chrPtr, &ulSize, TRUE);
256 strcat(chrPtr,"\"");
257
258 /* Check for user setting */
259 if(PrfQueryProfileString(HINI_USERPROFILE, "CWMM", "m3uplayer", NULLHANDLE, chrPlayer,sizeof(chrPlayer))) {
260 if((ulRc=launchPMProg( chrTitle, chrPlayer, chrParams, somSelf, ulView))==NULLHANDLE)
261 break; /* Use System default (E.EXE) */
262 return NULLHANDLE;
263 }
264
265 /* Create and open M3U folder */
266 wpFolder=_wpclsQueryFolder(_WPFolder, "<WP_NOWHERE>", FALSE);
267 if(somIsObj(wpFolder))
268 {
269 SOMClass* somClass;
270
271 ulSize=sizeof(chrPlayer);
272 /* Get name of M3U file */
273 _wpQueryRealName(somSelf, chrPlayer, &ulSize, FALSE);
274 somClass=somGetSomClass("CWMediaFolder");
275
276 if(!somIsObj(somClass))
277 somClass=somGetSomClass("CWMediaFolder");
278
279 if(somIsObj(somClass))
280 wpObject=_wpclsNew(somClass, chrPlayer, "",
281 wpFolder,FALSE);
282 else
283 break;
284
285 if(somIsObj(wpObject)) {
286 HWND hwnd;
287 /* Send the handle of the M3U-File to the M3U folder. */
288 sprintf(chrPlayer, "M3UOBJECTHANDLE=%p;", somSelf);
289 _wpSetup(wpObject, chrPlayer);
290
291 /* Open folder */
292 if((hwnd=_wpViewObject(wpObject, NULLHANDLE, OPEN_DEFAULT, 0))!=NULLHANDLE) {
293 HWND hwndAppTerminateHandler;
294 /* Folder opened. Add the object to inuse list. */
295 ULONG ulError;
296 MMDATAFILEVIEW *pParams=(MMDATAFILEVIEW*)_wpAllocMem(somSelf,sizeof(MMDATAFILEVIEW), &ulError);
297
298 if(pParams) {
299 /* Create an object window which will process the WM_APPTERMINATE message. While processing of this
300 message the view item (see below) will be removed from the inuse list thus removing the inuse emphasis. */
301 hwndAppTerminateHandler=WinCreateWindow(HWND_OBJECT,WC_STATIC,"CWMMAppTerminate",0,0,0,0,0,
302 NULLHANDLE,HWND_BOTTOM,13344,NULL,NULL);
303 if(hwndAppTerminateHandler) {
304 WinSubclassWindow(hwndAppTerminateHandler,&m3uFolderCloseHandlerProc);
305 sprintf(chrPlayer, "M3UOBJECTWINDOW=%ld;",
306 hwndAppTerminateHandler);
307 _wpSetup(wpObject, chrPlayer);
308 }
309 /* We have memory */
310 memset((void*)pParams ,0, sizeof(MMDATAFILEVIEW));
311 pParams->pid=0;
312 pParams->thisPtr=somSelf; /* The object */
313 pParams->viewItem.view=ulView; /* The open view */
314 pParams->useItem.type=USAGE_OPENVIEW; /* We add a view item to the inus list */
315 pParams->viewItem.handle=hwnd; /* */
316 pParams->wpObject=wpObject;
317 _wpAddToObjUseList(somSelf, &pParams->useItem); /* add to inuse list */
318 WinSetWindowULong(hwndAppTerminateHandler, QWL_USER,(ULONG)pParams);
319 sprintf(chrPlayer, "INSERTTRACKS=1;");
320 _wpSetup(wpObject, chrPlayer);
321 return hwnd;
322 }/* pParams */
323 }/* wpViewObject() */
324 _wpFree(wpObject);
325 }/* somIsObj() */
326 }/* somIsObj(wpFolder) */
327 /* No M3U folder. Open E.EXE as fallback. */
328 launchPMProg( chrTitle, "e.exe", chrParams, somSelf, ulView);
329 break;
330 }
331
332 default:
333 break;
334 }
335 return (MMM3U_parent_CWMMDataFile_wpOpen(somSelf, hwndCnr,
336 ulView, param));
337}
338
339
340SOM_Scope void SOMLINK cwm3u_wpCopiedFromTemplate(MMM3U *somSelf)
341{
342 /* MMM3UData *somThis = MMM3UGetData(somSelf); */
343 MMM3UMethodDebug("MMM3U","cwm3u_wpCopiedFromTemplate");
344
345 MMM3U_parent_CWMMDataFile_wpCopiedFromTemplate(somSelf);
346
347 _wpViewObject(somSelf, NULLHANDLE, OPEN_DEFAULT, 0);
348}
349
350
351/*
352 * wpclsQueryInstanceFilter : override;
353 */
354SOM_Scope PSZ SOMLINK cwm3uM_wpclsQueryInstanceType(M_MMM3U *somSelf)
355{
356 /* M_MMM3UData *somThis = M_MMM3UGetData(somSelf); */
357 M_MMM3UMethodDebug("M_MMM3U","cwm3uM_wpclsQueryInstanceType");
358
359 // return "M3U,Plain Text";
360 return TYPE_M3U;
361}
362
363SOM_Scope PSZ SOMLINK cwm3uM_wpclsQueryInstanceFilter(M_MMM3U *somSelf)
364{
365 /* M_MMM3UData *somThis = M_MMM3UGetData(somSelf); */
366 M_MMM3UMethodDebug("M_MMM3U","cwm3uM_wpclsQueryInstanceFilter");
367
368 return "*.M3U";
369}
370
371SOM_Scope BOOL SOMLINK cwm3uM_wpclsQueryDefaultHelp(M_MMM3U *somSelf,
372 PULONG pHelpPanelId,
373 PSZ pszHelpLibrary)
374{
375 PSZ pszHelpLibName;
376
377 /* M_MMM3UData *somThis = M_MMM3UGetData(somSelf); */
378 M_MMM3UMethodDebug("M_MMM3U","cwm3uM_wpclsQueryDefaultHelp");
379
380
381 if((pszHelpLibName=_queryMp3HelpLibraryName())!=NULLHANDLE)
382 {
383 if(pHelpPanelId)
384 *pHelpPanelId=M3UFILE_HELP_PANEL;
385 if(pszHelpLibrary)
386 strncpy(pszHelpLibrary, pszHelpLibName, CCHMAXPATH);
387 return TRUE;
388 }
389
390 return (M_MMM3U_parent_M_CWMMDataFile_wpclsQueryDefaultHelp(somSelf,
391 pHelpPanelId,
392 pszHelpLibrary));
393}
394
395SOM_Scope PSZ SOMLINK cwm3uM_wpclsQueryTitle(M_MMM3U *somSelf)
396{
397 static char chrTitle[20]={0};
398 /* M_MMM3UData *somThis = M_MMM3UGetData(somSelf); */
399 M_MMM3UMethodDebug("M_MMM3U","cwm3uM_wpclsQueryTitle");
400
401 if(chrTitle[0]==0)
402 if(!getMessage(chrTitle, IDSTR_M3UTITLE, sizeof(chrTitle), queryResModuleHandle(), HWND_DESKTOP))
403 strcpy(chrTitle, CLSTITLE_M3U);
404
405 return chrTitle;
406}
407
408SOM_Scope ULONG SOMLINK cwm3uM_wpclsQueryIconData(M_MMM3U *somSelf,
409 PICONINFO pIconInfo)
410{
411 HMODULE hmod;
412 /* M_MMM3UData *somThis = M_MMM3UGetData(somSelf); */
413 M_MMM3UMethodDebug("M_MMM3U","cwm3uM_wpclsQueryIconData");
414
415 hmod=queryModuleHandle();
416 if(!hmod)
417 return M_MMM3U_parent_M_CWMMDataFile_wpclsQueryIconData(somSelf, pIconInfo);
418
419 if (pIconInfo) {
420 pIconInfo->fFormat = ICON_RESOURCE;
421 pIconInfo->hmod = hmod;
422 pIconInfo->resid = ID_ICONM3UFILE;
423 } /* endif */
424
425 return ( sizeof(ICONINFO) );
426}
427
428
429SOM_Scope ULONG SOMLINK cwm3uM_wpclsQueryDefaultView(M_MMM3U *somSelf)
430{
431 /* M_MMM3UData *somThis = M_MMM3UGetData(somSelf); */
432 M_MMM3UMethodDebug("M_MMM3U","cwm3uM_wpclsQueryDefaultView");
433
434 return ID_MENU_M3UEDITOR;
435}
436
437
438SOM_Scope BOOL SOMLINK cwm3uM_wpclsCreateDefaultTemplates(M_MMM3U *somSelf,
439 WPObject* Folder)
440{
441 /* M_MMM3UData *somThis = M_MMM3UGetData(somSelf); */
442 M_MMM3UMethodDebug("M_MMM3U","cwm3uM_wpclsCreateDefaultTemplates");
443
444 mmclsCreateTheDefaultTemplate(somSelf, Folder);
445 return TRUE;
446}
447
Note: See TracBrowser for help on using the repository browser.