| 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 | 
 | 
|---|
| 41 | ULONG EXPENTRY rxCallPMFunc(PSZ name, LONG argc, RXSTRING argv[], PSZ queuename,PRXSTRING retstring);
 | 
|---|
| 42 | ULONG EXPENTRY rxCallWPSFunc(PSZ name, LONG argc, RXSTRING argv[], PSZ queuename,PRXSTRING retstring);
 | 
|---|
| 43 | ULONG EXPENTRY rxCallCWWPSFunc(PSZ name, LONG argc, RXSTRING argv[], PSZ queuename,PRXSTRING retstring);
 | 
|---|
| 44 | 
 | 
|---|
| 45 | HMODULE queryModuleHandle(PSZ pszClassName);
 | 
|---|
| 46 | 
 | 
|---|
| 47 | char chrInstallDir[CCHMAXPATH];
 | 
|---|
| 48 | HPOINTER hptrArrowWE=NULLHANDLE; /* Pointer for slider control */
 | 
|---|
| 49 | 
 | 
|---|
| 50 | HMTX hmtxFileName;
 | 
|---|
| 51 | 
 | 
|---|
| 52 | LOADEDBITMAP 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 | 
 | 
|---|
| 64 | CONTROLINFO 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 | 
 | 
|---|
| 106 | void errorResource();
 | 
|---|
| 107 | ULONG messageBox( char* text, ULONG ulTextID , LONG lSizeText,
 | 
|---|
| 108 |                   char* title, ULONG ulTitleID, LONG lSizeTitle,
 | 
|---|
| 109 |                   HMODULE hResource, HWND hwnd, ULONG ulFlags);
 | 
|---|
| 110 | BOOL getMessage(char* text,ULONG ulID, LONG lSizeText, HMODULE hResource,HWND hwnd);
 | 
|---|
| 111 | ULONG cwRequestMutex(HMTX  hmtxBMP, ULONG ulTimeOut);
 | 
|---|
| 112 | ULONG cwReleaseMutex(HMTX  hmtxBMP);
 | 
|---|
| 113 | ULONG cwCreateMutex(HMTX * hmtxBMP);
 | 
|---|
| 114 | ULONG cwCloseMutex(HMTX  hmtxBMP);
 | 
|---|
| 115 | 
 | 
|---|
| 116 | MRESULT EXPENTRY topCtrlDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
 | 
|---|
| 117 | MRESULT EXPENTRY rightCtrlDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
 | 
|---|
| 118 | MRESULT EXPENTRY privateSliderProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
 | 
|---|
| 119 | HMODULE queryResModuleHandle(void);
 | 
|---|
| 120 | 
 | 
|---|
| 121 | static 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 */
 | 
|---|
| 314 | HMODULE 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 */
 | 
|---|
| 390 | HMODULE 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 | 
 | 
|---|
| 460 | BOOL _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 | 
 | 
|---|
| 496 | BOOL 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 */
 | 
|---|
| 509 | PSZ 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 */
 | 
|---|
| 520 | ULONG 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 | 
 | 
|---|
| 538 | ULONG 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 | 
 | 
|---|
| 554 | void 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 | 
 | 
|---|
| 583 | void 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 | 
 | 
|---|
| 594 | ULONG 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 | 
 | 
|---|
| 608 | void writeLog(char* logFile, char* logText);
 | 
|---|
| 609 | 
 | 
|---|
| 610 | static 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 | 
 | 
|---|
| 625 | BOOL 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 zurck. 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 zurck. 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 | 
 | 
|---|