home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / ACDCR032.ZIP / source / audiodialogprocs.cpp next >
Encoding:
C/C++ Source or Header  |  1999-08-08  |  44.4 KB  |  1,168 lines

  1. /*
  2.  * This file is (C) Chris Wohlgemuth 1999
  3.  */
  4. /*
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2, or (at your option)
  8.  * any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; see the file COPYING.  If not, write to
  17.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19. #include "audiofolder.hh"
  20. #include "audiofolderhelp.h"
  21. #include <stdio.h>
  22. #include <stdlib.h>
  23. #include "cddb.h"
  24.  
  25.  
  26. extern BOOL GrabberSetupDone;
  27.  
  28. extern int iNumCD;
  29. extern char cFirstCD;
  30. extern char chosenCD[3];
  31. extern char chrGrabberPath[CCHMAXPATH];
  32. extern char chrGrabberOptions[CCHMAXPATH];
  33. extern int bTrackNumbers;
  34. extern BOOL bGrabberFirst;
  35. extern char chrInstallDir[CCHMAXPATH];
  36. extern char chrCDRecord[CCHMAXPATH];/* Path to cdrecord */
  37. extern char chrCDROptions[CCHMAXPATH];
  38. extern LONG lCDROptions;
  39. extern char chosenWriter[3];
  40. extern BOOL setupDone;
  41. extern ATOM atomUpdateStatusbar;
  42.  
  43. /* Extern */
  44. HMODULE queryModuleHandle(void);
  45. HFILE openDrive(char * drive);
  46. void closeDrive(HFILE hfDrive);
  47. void _Optlink grabThreadFunc (void *arg);
  48. int CDQueryAudioCDTracks(HFILE hfDrive);
  49. LONG CDDBDiscID(char * drive, CDDBINFO * cddbInfo);
  50. void getTrackName(LONG lDiskID,int iNumTrack,char * text);
  51. void sendConfig();
  52. void _Optlink writeThreadFunc (void *arg);
  53.  
  54. /* Local */
  55. MRESULT EXPENTRY trackDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  56. void getTrackName(LONG lDiskID,int iNumTrack,char * text);
  57. MRESULT EXPENTRY statusLineDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
  58. MRESULT EXPENTRY selectDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
  59. MRESULT EXPENTRY grabDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
  60. MRESULT EXPENTRY writeStatusDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
  61. MRESULT EXPENTRY cdrecordOptionDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
  62. MRESULT EXPENTRY grabberOptionDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
  63. MRESULT EXPENTRY dialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
  64. MRESULT EXPENTRY trackDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) ;
  65.  
  66.  
  67.  
  68. void getTrackName(LONG lDiskID,int iNumTrack,char * text)
  69. {
  70.   HINI hini;
  71.   ULONG keyLength;
  72.   char profileName[CCHMAXPATH];
  73.   char discKey[20];
  74.   char trackKey[20];
  75.  
  76.   /* Build full path for cddb.ini file */
  77.   sprintf(profileName,"%s\\cddb.ini",chrInstallDir);       
  78.   /* Open ini-file */
  79.   hini=PrfOpenProfile(WinQueryAnchorBlock(HWND_DESKTOP),profileName);
  80.   do{
  81.     if(!hini) {
  82.       WinMessageBox(  HWND_DESKTOP,
  83.                       HWND_DESKTOP,
  84.                       "Warning! Cannot open CDDB.ini file!",
  85.                       "Audio-CD-Creator",
  86.                       0UL,
  87.                       MB_OK | MB_ICONEXCLAMATION );
  88.       break;
  89.     }/* end of if(!hini) */
  90.  
  91.     sprintf(discKey,"%X",lDiskID);
  92.     sprintf(trackKey,"TRACK%d",iNumTrack);
  93.     keyLength=PrfQueryProfileString(hini,discKey,trackKey,"",text,CCHMAXPATH);
  94.     if(keyLength==1){
  95.       break;/*  We have no trackname */
  96.     }
  97.  
  98.     if(hini)PrfCloseProfile(hini);
  99.     return;
  100.   }while(TRUE);
  101.   if(hini)PrfCloseProfile(hini);
  102.   sprintf(text,"CDDB-Track %d",iNumTrack);
  103. }
  104.  
  105. MRESULT EXPENTRY statusLineDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
  106. {
  107.   CWAudioFolder *thisPtr;
  108.   HWND hwndMenu;
  109.   POINTL ptl;
  110.   SHORT a,b;
  111.     
  112.   switch(msg)
  113.     {
  114.     case WM_INITDLG :   
  115.       WinSetWindowULong(hwnd,QWL_USER,(ULONG)PVOIDFROMMP(mp2));//Save object ptr.
  116.       return (MRESULT) TRUE;
  117.     case WM_HELP:
  118.       break;
  119.     case WM_DESTROY:
  120.       /* The dialog closes and gets destroyed */     
  121.       break;    
  122.     case WM_BUTTON2DOWN:
  123.       /* Display popup menu for status bar */
  124.       WinQueryPointerPos(HWND_DESKTOP,&ptl);
  125.       WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1);
  126.       hwndMenu=WinWindowFromPoint(hwnd,&ptl,FALSE);/* Get child window under ptr */
  127.       switch(WinQueryWindowUShort(hwndMenu,QWS_ID))/* Get child window id */
  128.         {
  129.         default:
  130.           a=IDM_STATUSDEFAULTHELP;
  131.           b=a;
  132.           break;
  133.         }
  134.       hwndMenu=WinLoadMenu(hwnd,queryModuleHandle(),a);
  135.       if(hwndMenu) {
  136.         if(WinPopupMenu(hwnd,hwnd,hwndMenu,ptl.x,ptl.y,b,PU_VCONSTRAIN|PU_HCONSTRAIN|
  137.                         PU_MOUSEBUTTON1|PU_KEYBOARD|PU_NONE|PU_SELECTITEM)) {
  138.                                         
  139.           return (MRESULT)FALSE;
  140.         }
  141.       }
  142.       break;
  143.     case WM_TIMER:
  144.       if(SHORT1FROMMP(mp1)==1) {
  145.         thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  146.         thisPtr->ulTrackSize=thisPtr->cwFillTrackList(WinQueryWindow(hwnd,QW_PARENT), NULL);
  147.         thisPtr->cwSetStatusTime(thisPtr->ulTrackSize);
  148.         WinStopTimer(    WinQueryAnchorBlock(HWND_DESKTOP),hwnd,1);
  149.       }
  150.       return (MRESULT) TRUE;            
  151.     case WM_COMMAND:    
  152.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  153.       if(thisPtr){
  154.         switch(SHORT1FROMMP(mp1))
  155.           {
  156.           case IDM_STATUSDEFAULTHELP:
  157.             return (MRESULT)thisPtr->wpDisplayHelp(603,AFHELPLIBRARY);
  158.           default:
  159.             break;
  160.           }
  161.       }/* end of if(thisPtr) */
  162.             
  163.       return (MRESULT) TRUE;
  164.     default:
  165.       if(msg == atomUpdateStatusbar){ /* Update the statusbar */
  166.         WinStartTimer(WinQueryAnchorBlock(HWND_DESKTOP),hwnd,1,500);
  167.         return (MRESULT) TRUE;
  168.       }
  169.       break;
  170.     }
  171.   return WinDefDlgProc(hwnd, msg, mp1, mp2);
  172. }
  173.  
  174.  
  175. /*********************************************************************/
  176. /*                                                                   */
  177. /* This procedure handles the select-dialog (frame extension) of the folder */
  178. /*                                                                   */
  179. /*********************************************************************/
  180. MRESULT EXPENTRY selectDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
  181. {
  182.   CWAudioFolder *thisPtr;
  183.   HWND hwndTracks;
  184.   WPObject * contentObject;
  185.   char name[CCHMAXPATH];
  186.   ULONG ulNameSize;
  187.   HWND hwndCnr;
  188.   PMINIRECORDCORE mrc;
  189.   SIZEL sizel;
  190.   ULONG ulFlags;
  191.   HWND hwndTemp;
  192.   POINTL ptl;
  193.   SHORT a,b;
  194.     
  195.   switch(msg)
  196.     {
  197.     case WM_INITDLG :   
  198.       WinSetWindowULong(hwnd,QWL_USER,(ULONG)PVOIDFROMMP(mp2));//Save object ptr.
  199.       thisPtr=(CWAudioFolder*) PVOIDFROMMP(mp2);
  200.       WinShowWindow(WinWindowFromID(hwnd,IDEF_TRACKNAME),thisPtr->bShowGrab);
  201.       WinShowWindow(WinWindowFromID(hwnd,IDST_TRACKNAME),thisPtr->bShowGrab);
  202.       WinCheckButton(hwnd,IDRB_GRAB,thisPtr->bShowGrab);
  203.       WinCheckButton(hwnd,IDRB_WRITE,!thisPtr->bShowGrab);
  204.       if(thisPtr->bShowGrab) {
  205.         if(thisPtr->tid) {
  206.           /* There is a grabbing in progress */
  207.           thisPtr->cwEnableSelectControls(FALSE);
  208.         }
  209.       }
  210.       return (MRESULT) TRUE;
  211.     case WM_HELP:
  212.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  213.       if(thisPtr)
  214.         return (MRESULT)thisPtr->wpDisplayHelp(IDDLG_GRABDIALOG,AFHELPLIBRARY);
  215.       break;
  216.     case WM_DESTROY:
  217.       /* The dialog closes and gets destroyed */     
  218.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  219.       if(thisPtr){
  220.         //thisPtr->wpSaveDeferred();
  221.       }
  222.       break;    
  223.     case WM_BUTTON2DOWN:
  224.       WinQueryPointerPos(HWND_DESKTOP,&ptl);
  225.       WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1);
  226.       hwndTracks=WinWindowFromPoint(hwnd,&ptl,FALSE);/* Get child window under ptr */
  227.       switch(WinQueryWindowUShort(hwndTracks,QWS_ID))/* Get child window id */
  228.         {
  229.  
  230.         default:
  231.           a=IDM_DEFAULTHELP;
  232.           b=a;
  233.           break;
  234.         }
  235.       hwndTracks=WinLoadMenu(hwnd,queryModuleHandle(),a);
  236.       if(hwndTracks) {
  237.         if(WinPopupMenu(hwnd,hwnd,hwndTracks,ptl.x,ptl.y,b,PU_VCONSTRAIN|PU_HCONSTRAIN|
  238.                         PU_MOUSEBUTTON1|PU_KEYBOARD|PU_NONE|PU_SELECTITEM)) {
  239.                                         
  240.           return (MRESULT)FALSE;
  241.         }
  242.       }
  243.       break;
  244.  
  245.     case WM_CONTROL:
  246.       /* This part handles the radio button messages */
  247.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  248.       if(thisPtr){
  249.         switch(SHORT1FROMMP(mp1))
  250.           {
  251.           case IDRB_WRITE:
  252.             /* Hide trackname window */
  253.             WinShowWindow(WinWindowFromID(hwnd,IDEF_TRACKNAME),FALSE);
  254.             WinShowWindow(WinWindowFromID(hwnd,IDST_TRACKNAME),FALSE);
  255.             hwndTemp=thisPtr->cwQueryFrameCtl(WinQueryWindow(hwnd,QW_PARENT), &sizel,FCTL_LEFT, &ulFlags);
  256.                         
  257.             if(WinQueryWindowUShort(hwndTemp,QWS_ID)==IDDLG_GRABDIALOG)
  258.               thisPtr->hwndGrab=hwndTemp;
  259.             if(!thisPtr->hwndWrite)
  260.               thisPtr->hwndWrite=WinLoadDlg(WinQueryWindow(hwnd,QW_PARENT),WinQueryWindow(hwnd,QW_PARENT),
  261.                                             dialogProc,queryModuleHandle(),ID_DIALOG,thisPtr);
  262.             thisPtr->cwAddFrameCtl(WinQueryWindow(hwnd,QW_PARENT),thisPtr->hwndWrite,sizel,FCTL_LEFT, ulFlags);
  263.             WinShowWindow(thisPtr->hwndGrab,FALSE);
  264.                         
  265.             thisPtr->cwUpdateFrame(WinQueryWindow(hwnd,QW_PARENT));
  266.             break;
  267.           case IDRB_GRAB:
  268.             WinShowWindow(WinWindowFromID(hwnd,IDEF_TRACKNAME),TRUE);
  269.             WinShowWindow(WinWindowFromID(hwnd,IDST_TRACKNAME),TRUE);
  270.             hwndTemp=thisPtr->cwQueryFrameCtl(WinQueryWindow(hwnd,QW_PARENT), &sizel,FCTL_LEFT, &ulFlags);
  271.             if(WinQueryWindowUShort(hwndTemp,QWS_ID)==ID_DIALOG)
  272.               thisPtr->hwndWrite=hwndTemp;
  273.             if(!thisPtr->hwndGrab) {
  274.               thisPtr->hwndGrab=WinLoadDlg(WinQueryWindow(hwnd,QW_PARENT),WinQueryWindow(hwnd,QW_PARENT),
  275.                                            grabDialogProc,queryModuleHandle(),IDDLG_GRABDIALOG,thisPtr);
  276.             }
  277.             thisPtr->cwAddFrameCtl(WinQueryWindow(hwnd,QW_PARENT),thisPtr->hwndGrab, sizel,FCTL_LEFT, ulFlags);
  278.             WinShowWindow(thisPtr->hwndWrite,FALSE);
  279.             thisPtr->cwUpdateFrame(WinQueryWindow(hwnd,QW_PARENT)); 
  280.             break;
  281.           default:
  282.             break;
  283.           }
  284.         /* Tell the WPS to save the instance data */
  285.         //thisPtr->wpSaveDeferred();
  286.       }/* if(thisPtr) */
  287.       break;
  288.     case WM_COMMAND:    
  289.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  290.       if(thisPtr){
  291.         switch(SHORT1FROMMP(mp1))
  292.           {
  293.           case IDM_DEFAULTHELP:
  294.             return (MRESULT)thisPtr->wpDisplayHelp(600,AFHELPLIBRARY);
  295.           default:
  296.             break;
  297.           }
  298.       }
  299.       return (MRESULT) TRUE;
  300.     default:
  301.       break;
  302.     }
  303.   return WinDefDlgProc(hwnd, msg, mp1, mp2);
  304. }
  305.  
  306.  
  307.  
  308. /*********************************************************************/
  309. /*                                                                   */
  310. /* This procedure handles the grab-dialog (frame extension) of the folder */
  311. /*                                                                   */
  312. /*********************************************************************/
  313. MRESULT EXPENTRY grabDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
  314. {
  315.   CWAudioFolder *thisPtr;
  316.   int numTracks;
  317.   HFILE hfCD;
  318.   char text[CCHMAXPATH];
  319.   char title[CCHMAXPATH];
  320.     
  321.   SHORT a,b;
  322.   ULONG ulFlags;
  323.   SIZEL sizel;
  324.   HWND hwndTemp;
  325.   POINTL ptl;
  326.     
  327.   switch(msg)
  328.     {
  329.     case WM_INITDLG :   
  330.       WinSetWindowULong(hwnd,QWL_USER,(ULONG)PVOIDFROMMP(mp2));//Save object ptr.
  331.       thisPtr=(CWAudioFolder*) PVOIDFROMMP(mp2);
  332.       WinEnableWindow(WinWindowFromID(hwnd,IDPB_SELECTALL) ,FALSE);
  333.       WinEnableWindow(WinWindowFromID(hwnd,IDPB_GRAB) ,FALSE);
  334.       return (MRESULT) TRUE;
  335.     case WM_DESTROY:
  336.       /* The dialog closes and gets destroyed */     
  337.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  338.       if(thisPtr){
  339.         thisPtr->hwndGrab=0;
  340.       }
  341.       break;    
  342.     case WM_HELP:
  343.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  344.       if(thisPtr)
  345.         return (MRESULT)thisPtr->wpDisplayHelp(IDDLG_GRABDIALOG,AFHELPLIBRARY);
  346.       break;
  347.     case WM_CONTROL:
  348.       /* This part handles the radio button messages */
  349.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  350.       if(thisPtr){
  351.         switch(SHORT1FROMMP(mp1))
  352.           {
  353.           default:                     
  354.             break;
  355.           }
  356.         /* Tell the WPS to save the instance data */
  357.       }
  358.       break;
  359.     case WM_BUTTON2DOWN:
  360.       WinQueryPointerPos(HWND_DESKTOP,&ptl);
  361.       WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1);
  362.       hwndTemp=WinWindowFromPoint(hwnd,&ptl,FALSE);/* Get child window under ptr */
  363.       switch(WinQueryWindowUShort(hwndTemp,QWS_ID))/* Get child window id */
  364.         {
  365.         case IDLB_GRABTRACKS:
  366.           a=IDM_GRABTRACKLISTHELP;
  367.           b=IDPB_REFRESH;
  368.           break;
  369.         case IDPB_GRAB:
  370.           a=IDM_GRABGRABHELP;
  371.           b=a;
  372.           break;
  373.         case IDPB_REFRESH:
  374.           a=IDM_GRABREFRESHHELP;
  375.           b=a;
  376.           break;
  377.         case IDPB_SELECTALL:
  378.           a=IDM_GRABSELECTALLHELP;
  379.           b=a;
  380.           break;
  381.         default:
  382.           a=IDM_GRABDEFAULTHELP;
  383.           b=IDM_GRABBERSETUP;
  384.           break;
  385.         }
  386.       hwndTemp=WinLoadMenu(hwnd,queryModuleHandle(),a);
  387.       if(hwndTemp) {
  388.         if(WinPopupMenu(hwnd,hwnd,hwndTemp,ptl.x,ptl.y,b,PU_VCONSTRAIN|PU_HCONSTRAIN|
  389.                         PU_MOUSEBUTTON1|PU_KEYBOARD|PU_NONE|PU_SELECTITEM)) {
  390.           if(!(a==IDM_GRABTRACKLISTHELP && WinIsControlEnabled(hwnd,IDPB_SELECTALL)))
  391.             WinEnableMenuItem(hwndTemp,IDPB_SELECTALL,FALSE);
  392.                     
  393.           return (MRESULT)FALSE;
  394.         }
  395.       }
  396.       break;
  397.     case WM_COMMAND:    
  398.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  399.       if(thisPtr) {
  400.         switch(SHORT1FROMMP(mp1))
  401.           {
  402.             /* These are the popup menu items */
  403.           case IDM_GRABDEFAULTHELP:
  404.             return (MRESULT)thisPtr->wpDisplayHelp(602,AFHELPLIBRARY);
  405.             break;
  406.           case IDM_GRABGRABHELP:
  407.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_GRABGRAB,AFHELPLIBRARY);
  408.             break;
  409.           case IDM_GRABTRACKLISTHELP:
  410.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_GRABTRACKLIST,AFHELPLIBRARY);
  411.             break;                  
  412.           case IDM_GRABREFRESHHELP:                   
  413.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_GRABREFRESH,AFHELPLIBRARY);
  414.             break;
  415.           case IDM_GRABSELECTALLHELP:
  416.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_GRABSELECTALL,AFHELPLIBRARY);
  417.             break;
  418.           case IDM_GRABBERSETUP:
  419.             bGrabberFirst=TRUE;
  420.             thisPtr->wpViewObject(NULL,OPEN_SETTINGS,0);
  421.             return (MRESULT)TRUE;
  422.             /* push buttons */
  423.           default:
  424.             break;
  425.           }
  426.       } /* end of if(thisPtr) */
  427.                         
  428.       switch(SHORT1FROMMP(mp1))
  429.         {
  430.         case IDPB_GRAB:
  431.                                     
  432.           thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  433.           if(thisPtr) {
  434.             hwndTemp=thisPtr->cwQueryFrameCtl(WinQueryWindow(hwnd,QW_PARENT), &sizel,FCTL_TOP, &ulFlags);
  435.                     
  436.             WinQueryWindowText( WinWindowFromID(hwndTemp,IDEF_TRACKNAME),sizeof(text),text);
  437.                         
  438.             if(!strlen(text)) {
  439.               if(!WinLoadString(WinQueryAnchorBlock(hwnd),queryModuleHandle(),IDSTR_NOTRACKNAMETEXT,sizeof(text),text))
  440.                 sprintf(text,"You must specify a filename.");
  441.               if(!WinLoadString(WinQueryAnchorBlock(hwnd),queryModuleHandle(),IDSTR_NOTRACKSSELECTEDTITLE, sizeof(title),title))
  442.                 sprintf(title,"Grab tracks message");
  443.               WinMessageBox(  HWND_DESKTOP,   hwnd,   text,   title, 0UL, MB_OK | MB_ICONEXCLAMATION|MB_MOVEABLE );
  444.               break;
  445.             }
  446.             /* Get num Tracks */
  447.             numTracks=(int)LONGFROMMR(WinSendMsg(WinWindowFromID(hwnd,IDLB_GRABTRACKS),LM_QUERYITEMCOUNT,0,0));
  448.             if(!numTracks)
  449.               break;/* Catch error */
  450.                         
  451.             thisPtr->cwEnableGrabControls(FALSE);
  452.             thisPtr->cwEnableSelectControls(FALSE);
  453.                         
  454.             a=SHORT1FROMMR(WinSendMsg(WinWindowFromID(hwnd,IDLB_GRABTRACKS),LM_QUERYSELECTION,MPFROMSHORT(LIT_FIRST),0));
  455.             if(a==LIT_NONE) {
  456.               if(!WinLoadString(WinQueryAnchorBlock(hwnd),queryModuleHandle(),IDSTR_NOTRACKSSELECTEDTEXT,sizeof(text),text))
  457.                 sprintf(text,"There are no tracks selected");
  458.               if(!WinLoadString(WinQueryAnchorBlock(hwnd),queryModuleHandle(),IDSTR_NOTRACKSSELECTEDTITLE, sizeof(title),title))
  459.                 sprintf(title,"Grab tracks message");                           
  460.               WinMessageBox(  HWND_DESKTOP,   hwnd,   text,   title, 0UL, MB_OK | MB_INFORMATION|MB_MOVEABLE );
  461.               break;
  462.             }
  463.                                 
  464.             thisPtr->tid=_beginthread(grabThreadFunc,NULL,8192*2,(void*)thisPtr); //Fehlerbehandlung fehlt
  465.           }/* end of if(thisPtr) */
  466.           break;
  467.         case IDPB_SELECTALL:
  468.           numTracks=(int)LONGFROMMR(WinSendMsg(WinWindowFromID(hwnd,IDLB_GRABTRACKS),LM_QUERYITEMCOUNT,0,0));
  469.           if(!numTracks)
  470.             break;
  471.           for(a=0;a<numTracks;a++) {
  472.             WinSendMsg(WinWindowFromID(hwnd,IDLB_GRABTRACKS),LM_SELECTITEM,MPFROMSHORT(a),MPFROMSHORT(TRUE));
  473.           }
  474.           break;
  475.         case IDPB_REFRESH:
  476.           int numTracks;
  477.           int a;
  478.           LONG lCddbId;
  479.           CDDBINFO cddbInfo;
  480.  
  481.           thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  482.           if(thisPtr) {
  483.             if(!GrabberSetupDone){
  484.               thisPtr->wpViewObject(NULL,OPEN_SETTINGS,0);
  485.               break;
  486.             }
  487.                     
  488.             WinSendMsg(WinWindowFromID(hwnd,IDLB_GRABTRACKS),LM_DELETEALL,0,
  489.                        0);
  490.             WinEnableWindow(WinWindowFromID(hwnd,IDPB_SELECTALL) ,FALSE);
  491.             WinEnableWindow(WinWindowFromID(hwnd,IDPB_GRAB) ,FALSE);
  492.             hfCD=openDrive(chosenCD);
  493.             /*  sprintf(text,"chosenCD %s",chosenCD);
  494.                 WinMessageBox(  HWND_DESKTOP,
  495.                 HWND_DESKTOP,
  496.                 text,
  497.                 "Tracks",
  498.                 0UL,
  499.                 MB_OK | MB_ICONEXCLAMATION );*/
  500.             if(hfCD) {
  501.               numTracks=(int)CDQueryAudioCDTracks(hfCD);
  502.               if(numTracks) {
  503.                 if(numTracks==-1) {
  504.                   WinMessageBox(  HWND_DESKTOP,
  505.                                   HWND_DESKTOP,
  506.                                   "The Disk is a data disk!",
  507.                                   "Tracks",
  508.                                   0UL,
  509.                                   MB_OK | MB_ICONEXCLAMATION );
  510.                 }
  511.                 else {
  512.                   /* Insert the items into the listbox */
  513.                   lCddbId=CDDBDiscID(chosenCD,&cddbInfo);
  514.                   sprintf(text,"CDDB-ID: %X, Querying local database...",lCddbId);
  515.                   thisPtr->cwSetStatusText(text);
  516.                   /* Open CDDB.ini and read track names */
  517.                   
  518.                   for(a=1;a<=numTracks;a++) {
  519.                     getTrackName(lCddbId,a,text);             
  520.                     WinInsertLboxItem(WinWindowFromID(hwnd,IDLB_GRABTRACKS),LIT_END,
  521.                                       text);
  522.                   }/* end of for */
  523.                   //  thisPtr->cwSetStatusText("");
  524.                   WinEnableWindow(WinWindowFromID(hwnd,IDPB_SELECTALL) ,TRUE);
  525.                   WinEnableWindow(WinWindowFromID(hwnd,IDPB_GRAB) , TRUE);
  526.                 }
  527.               }// end of if(!numTracks)                       
  528.               closeDrive(hfCD);
  529.             }
  530.           }/* (if thisPtr) */
  531.           break;
  532.         default:
  533.           break;
  534.         }
  535.       return (MRESULT) TRUE;
  536.     default:
  537.       break;
  538.     }
  539.   return WinDefDlgProc(hwnd, msg, mp1, mp2);
  540. }
  541.  
  542. /* This procedure handles the write status dialog */
  543. MRESULT EXPENTRY writeStatusDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
  544. {
  545.   CWAudioFolder * thisPtr;
  546.     
  547.   switch(msg)
  548.     {
  549.     case WM_INITDLG :   
  550.       WinSetWindowULong(hwnd,QWL_USER,(ULONG)PVOIDFROMMP(mp2));//Save object ptr.
  551.       thisPtr=(CWAudioFolder*) PVOIDFROMMP(mp2);
  552.       return (MRESULT) TRUE;
  553.     case WM_HELP:
  554.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  555.       if(thisPtr)      
  556.         thisPtr->wpDisplayHelp(IDDLG_WRITESTATUS, AFHELPLIBRARY);
  557.             
  558.       break;
  559.     case WM_CLOSE:
  560.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  561.       if(thisPtr->tidWrite)
  562.         /* We are currently writing, so hide the window */
  563.         WinShowWindow(hwnd,FALSE);
  564.       else
  565.         WinPostMsg(hwnd,WM_QUIT,0,0);
  566.       return 0;
  567.     case WM_DESTROY:
  568.       /* The dialog closes and gets destroyed */     
  569.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  570.       if(thisPtr){
  571.         //thisPtr->wpSaveDeferred();
  572.       }
  573.       break;    
  574.     case WM_COMMAND:    
  575.       switch(SHORT1FROMMP(mp1))
  576.         {
  577.         case IDPB_WRITEBREAK:
  578.           /* User aborts writing */
  579.           DosBeep(1000,100);
  580.           thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  581.           if(thisPtr)
  582.             thisPtr->cwEnableWrite(FALSE);
  583.           WinEnableWindow(WinWindowFromID(hwnd,IDPB_WRITEBREAK),FALSE);
  584.           break;
  585.         case IDPB_ABORT:
  586.           DosBeep(5000,300);
  587.           break;                  
  588.         default:
  589.           break;
  590.         }
  591.       return (MRESULT) TRUE;
  592.     default:
  593.       break;
  594.     }
  595.   return WinDefDlgProc(hwnd, msg, mp1, mp2);    
  596. }
  597.  
  598.  
  599. /* This procedure handles the cdrecord settings page */ 
  600. MRESULT EXPENTRY cdrecordOptionDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
  601. {
  602.   FILEDLG fd = { 0 };
  603.   CWAudioFolder* thisPtr;
  604.   ULONG ulFlags;
  605.   int a;
  606.   char chrCD[4];
  607.   char driveID[40];
  608.  
  609.   HOBJECT  hObject;
  610.  
  611.   switch(msg)
  612.     {
  613.     case WM_INITDLG :   
  614.       WinSetWindowULong(WinWindowFromID(hwnd,IDPB_CDRECORDBROWSE),
  615.                         QWL_USER,(ULONG)PVOIDFROMMP(mp2));//Save object ptr.
  616.       WinSendMsg(WinWindowFromID(hwnd,IDEF_CDRECORDPATH),EM_SETTEXTLIMIT,MPFROMSHORT((SHORT)CCHMAXPATH),0);
  617.       WinSetWindowText(WinWindowFromID(hwnd,IDEF_CDRECORDPATH),chrCDRecord);
  618.       WinSendMsg(WinWindowFromID(hwnd,IDEF_CDRECORDOPTIONS),EM_SETTEXTLIMIT,MPFROMSHORT((SHORT)CCHMAXPATH),0);
  619.       WinSetWindowText(WinWindowFromID(hwnd,IDEF_CDRECORDOPTIONS),chrCDROptions);
  620.       if(lCDROptions&IDCDR_HIDEWINDOW)
  621.         WinCheckButton(hwnd,IDCB_CDRSTARTHIDDEN,1);
  622.       if(lCDROptions&IDCDR_CLOSEWINDOW)
  623.         WinCheckButton(hwnd,IDCB_CDRCLOSEWINDOW,1);
  624.       for( a=0; a<iNumCD ;a++) {
  625.         chrCD[0]=cFirstCD+a;
  626.         chrCD[1]=':';
  627.         chrCD[2]=0;
  628.         WinSendMsg(WinWindowFromID(hwnd,IDLB_WRITERLETTER),LM_INSERTITEM,MPFROMSHORT(LIT_END),(MPARAM)chrCD);
  629.         if(!a){
  630.           if(!setupDone)
  631.             WinSetWindowText(WinWindowFromID(hwnd,IDLB_WRITERLETTER),chrCD);
  632.           else
  633.             WinSetWindowText(WinWindowFromID(hwnd,IDLB_WRITERLETTER),chosenWriter);
  634.         }
  635.       }
  636.  
  637.       return (MRESULT) TRUE;
  638.     case WM_HELP:
  639.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(WinWindowFromID(hwnd,IDPB_CDRECORDBROWSE),QWL_USER);
  640.       if(!thisPtr)
  641.         break;
  642.       switch(WinQueryWindowUShort(WinQueryFocus(HWND_DESKTOP),QWS_ID))
  643.         {
  644.         case IDEF_CDRECORDOPTIONS:
  645.           return (MRESULT)thisPtr->wpDisplayHelp(IDEF_CDRECORDOPTIONS,AFHELPLIBRARY);
  646.         case IDPB_WIDERRUFEN:
  647.           return (MRESULT)thisPtr->wpDisplayHelp(IDPB_WIDERRUFEN,AFHELPLIBRARY);
  648.         case IDPB_CDRECORDBROWSE:
  649.           return (MRESULT)thisPtr->wpDisplayHelp(IDPB_CDRECORDBROWSE,AFHELPLIBRARY);
  650.         case IDEF_CDRECORDPATH:
  651.           return (MRESULT)thisPtr->wpDisplayHelp(IDEF_CDRECORDPATH,AFHELPLIBRARY);
  652.         default:
  653.           break;
  654.         }
  655.       return (MRESULT)thisPtr->wpDisplayHelp(IDDLG_CDRECORDSETUP,AFHELPLIBRARY);
  656.       break;
  657.     case WM_DESTROY:
  658.       /* The notebook closes and gets destroyed */
  659.       /* Query the cdrecord path from the entryfield */     
  660.       WinQueryWindowText( WinWindowFromID(hwnd,IDEF_CDRECORDPATH),sizeof(chrCDRecord),chrCDRecord);
  661.       /* Query the cdrecord options from the entryfield */     
  662.       WinQueryWindowText( WinWindowFromID(hwnd,IDEF_CDRECORDOPTIONS),sizeof(chrCDROptions),chrCDROptions);
  663.       ulFlags=0;
  664.       if(WinQueryButtonCheckstate(hwnd,IDCB_CDRSTARTHIDDEN)&1)
  665.         ulFlags|=IDCDR_HIDEWINDOW;
  666.       if(WinQueryButtonCheckstate(hwnd,IDCB_CDRCLOSEWINDOW)&1)
  667.         ulFlags|=IDCDR_CLOSEWINDOW;
  668.       lCDROptions=ulFlags;
  669.       sendConfig();
  670.  
  671.       /* Set/unset writeflag of diskobject */
  672.       /*      for( a=0; a<iNumCD ;a++) {
  673.               chrCD[0]=cFirstCD+a;
  674.               chrCD[1]=0;*/
  675.       /* Build ID of CD-Drive object */
  676.       //sprintf(driveID,"<WP_DRIVE_%s>",chrCD);
  677.       /* Clear writer flag of disk objects */
  678.       //if((hObject=WinQueryObject(driveID))!=NULL) {
  679.       //  WinSetObjectData(hObject,"ISWRITER=0");
  680.       // }
  681.       //}               
  682.       /* Query the cd-drive */
  683.       WinQueryWindowText( WinWindowFromID(hwnd,IDLB_WRITERLETTER),sizeof(chosenWriter),chosenWriter);
  684.       //    WinQueryWindowText( WinWindowFromID(hwnd,IDLB_WRITERLETTER),sizeof(chrCD),chrCD);
  685.       // chrCD[1]=0;
  686.       /* Build ID of chosenCD-Drive object */
  687.       // sprintf(driveID,"<WP_DRIVE_%s>",chrCD);
  688.       /* Set writer flag of this disk object */
  689.       // if((hObject=WinQueryObject(driveID))!=NULL) {
  690.       //        WinSetObjectData(hObject,"ISWRITER=1");
  691.       //}
  692.       /* Let the WPS save the new data */
  693.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(WinWindowFromID(hwnd,IDPB_CDRECORDBROWSE),QWL_USER);
  694.       if(thisPtr)
  695.         thisPtr->wpSaveDeferred();      
  696.       /* Setup is done */
  697.       setupDone=TRUE;
  698.       return (MRESULT) TRUE;
  699.     case WM_COMMAND:    
  700.       switch(SHORT1FROMMP(mp1))
  701.         {
  702.         case IDPB_CDRECORDBROWSE:
  703.           /* User pressed the browse button */
  704.           fd.cbSize = sizeof( fd );
  705.           /* It's an centered 'Open'-dialog */
  706.           fd.fl = FDS_OPEN_DIALOG|FDS_CENTER;
  707.           /* Set the title of the file dialog */
  708.           fd.pszTitle = "Search CDRecord/2";
  709.           /* Only show *.exe files */
  710.           sprintf(fd.szFullFile,"%s","*.exe");
  711.  
  712.           if( WinFileDlg( HWND_DESKTOP, hwnd, &fd ) == NULLHANDLE )
  713.             {
  714.               /* WinFileDlg failed */
  715.               break;
  716.             }
  717.           if( fd.lReturn == DID_OK )
  718.             {
  719.               WinSetWindowText( WinWindowFromID(hwnd,IDEF_CDRECORDPATH), fd.szFullFile );
  720.             }
  721.           break;
  722.         case IDPB_WIDERRUFEN:
  723.           /* User pressed the UNDO button */
  724.           WinSetWindowText(WinWindowFromID(hwnd,IDEF_CDRECORDPATH),chrCDRecord);
  725.           WinSetWindowText(WinWindowFromID(hwnd,IDEF_CDRECORDOPTIONS),chrCDROptions);
  726.           if(lCDROptions&IDCDR_HIDEWINDOW)
  727.             WinCheckButton(hwnd,IDCB_CDRSTARTHIDDEN,1);
  728.           if(lCDROptions&IDCDR_CLOSEWINDOW)
  729.             WinCheckButton(hwnd,IDCB_CDRCLOSEWINDOW,1);
  730.           break;
  731.         default:
  732.           break;
  733.         }
  734.       return (MRESULT) TRUE;
  735.     default:
  736.       break;
  737.     }
  738.   return WinDefDlgProc(hwnd, msg, mp1, mp2);
  739. }
  740.  
  741. /* This procedure handles the cdrecord settings page */ 
  742. MRESULT EXPENTRY grabberOptionDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
  743. {
  744.   FILEDLG fd = { 0 };
  745.   CWAudioFolder* thisPtr;
  746.   int a;
  747.   char chrCD[4];
  748.   
  749.   switch(msg)
  750.     {
  751.     case WM_INITDLG :    
  752.       WinSetWindowULong(WinWindowFromID(hwnd,IDPB_GRABBERBROWSE),
  753.                         QWL_USER,(ULONG)PVOIDFROMMP(mp2));//Save object ptr.
  754.       thisPtr=(CWAudioFolder*)PVOIDFROMMP(mp2);
  755.       WinSendMsg(WinWindowFromID(hwnd,IDEF_GRABBERPATH),EM_SETTEXTLIMIT,MPFROMSHORT((SHORT)CCHMAXPATH),0);
  756.       WinSetWindowText(WinWindowFromID(hwnd,IDEF_GRABBERPATH),chrGrabberPath);
  757.       WinSendMsg(WinWindowFromID(hwnd,IDEF_GRABBEROPTIONS),EM_SETTEXTLIMIT,MPFROMSHORT((SHORT)CCHMAXPATH),0);
  758.       WinSetWindowText(WinWindowFromID(hwnd,IDEF_GRABBEROPTIONS),chrGrabberOptions);
  759.       WinCheckButton(hwnd,IDCB_TRACKNUMBERS,bTrackNumbers);
  760.       for( a=0; a<iNumCD ;a++) {
  761.         chrCD[0]=cFirstCD+a;
  762.         chrCD[1]=':';
  763.         chrCD[2]=0;
  764.         WinSendMsg(WinWindowFromID(hwnd,IDLB_DROPDOWN),LM_INSERTITEM,MPFROMSHORT(LIT_END),(MPARAM)chrCD);
  765.         if(!a){
  766.           if(!GrabberSetupDone)
  767.             WinSetWindowText(WinWindowFromID(hwnd,IDLB_DROPDOWN),chrCD);
  768.           else
  769.             WinSetWindowText(WinWindowFromID(hwnd,IDLB_DROPDOWN),chosenCD);
  770.         }
  771.       }
  772.       
  773.       return (MRESULT) TRUE;
  774.     case WM_HELP:    
  775.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(WinWindowFromID(hwnd,IDPB_GRABBERBROWSE),QWL_USER);
  776.       if(!thisPtr)
  777.         break;
  778.       switch(WinQueryWindowUShort(WinQueryFocus(HWND_DESKTOP),QWS_ID))
  779.         {
  780.         case IDEF_GRABBEROPTIONS:
  781.           return (MRESULT)thisPtr->wpDisplayHelp(IDEF_GRABBEROPTIONS,AFHELPLIBRARY);
  782.         case IDPB_GRABBERUNDO:
  783.           return (MRESULT)thisPtr->wpDisplayHelp(IDPB_GRABBERUNDO,AFHELPLIBRARY);
  784.         case IDPB_GRABBERBROWSE:
  785.           return (MRESULT)thisPtr->wpDisplayHelp(IDPB_GRABBERBROWSE,AFHELPLIBRARY);
  786.         case IDEF_GRABBERPATH:
  787.           return (MRESULT)thisPtr->wpDisplayHelp(IDEF_GRABBERPATH,AFHELPLIBRARY);
  788.         case IDCB_TRACKNUMBERS:
  789.           return (MRESULT)thisPtr->wpDisplayHelp(IDCB_TRACKNUMBERS,AFHELPLIBRARY);
  790.           
  791.         default:
  792.           break;
  793.         }
  794.       return (MRESULT)thisPtr->wpDisplayHelp(IDDLG_GRABBERSETUP,AFHELPLIBRARY);
  795.       break;
  796.     case WM_DESTROY:
  797.       /* The notebook closes and gets destroyed */
  798.       /* Query the grabber path from the entryfield */     
  799.       WinQueryWindowText( WinWindowFromID(hwnd,IDEF_GRABBERPATH),sizeof(chrGrabberPath),chrGrabberPath);
  800.       /* Query the grabber options from the entryfield */     
  801.       WinQueryWindowText( WinWindowFromID(hwnd,IDEF_GRABBEROPTIONS),sizeof(chrGrabberOptions),chrGrabberOptions);
  802.       /* Query the cd-drive */
  803.       WinQueryWindowText( WinWindowFromID(hwnd,IDLB_DROPDOWN),sizeof(chosenCD),chosenCD);
  804.       /* Let the WPS save the new instance data */
  805.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(WinWindowFromID(hwnd,IDPB_GRABBERBROWSE),QWL_USER);
  806.       bTrackNumbers=WinQueryButtonCheckstate(hwnd,IDCB_TRACKNUMBERS);
  807.       if(thisPtr) {
  808.         thisPtr->wpSaveDeferred();
  809.       }
  810.       /* Setup is done */
  811.       GrabberSetupDone=TRUE;
  812.       return (MRESULT) TRUE;
  813.     case WM_COMMAND:    
  814.       switch(SHORT1FROMMP(mp1))
  815.         {
  816.         case IDPB_GRABBERBROWSE:
  817.           /* User pressed the browse button */
  818.           fd.cbSize = sizeof( fd );
  819.           /* It's an centered 'Open'-dialog */
  820.           fd.fl = FDS_OPEN_DIALOG|FDS_CENTER;
  821.           /* Set the title of the file dialog */
  822.           fd.pszTitle = "Search Audio-Grabber";
  823.           /* Only show *.exe files */
  824.           sprintf(fd.szFullFile,"%s","*.exe");
  825.           
  826.           if( WinFileDlg( HWND_DESKTOP, hwnd, &fd ) == NULLHANDLE )
  827.             {
  828.               /* WinFileDlg failed */
  829.               break;
  830.             }
  831.           if( fd.lReturn == DID_OK )
  832.             {
  833.               WinSetWindowText( WinWindowFromID(hwnd,IDEF_GRABBERPATH), fd.szFullFile );
  834.             }
  835.           break;
  836.         case IDPB_GRABBERUNDO:
  837.           /* User pressed the UNDO button */
  838.           WinSetWindowText(WinWindowFromID(hwnd,IDEF_GRABBERPATH),chrGrabberPath);
  839.           WinSetWindowText(WinWindowFromID(hwnd,IDEF_GRABBEROPTIONS),chrGrabberOptions);
  840.           WinSetWindowText(WinWindowFromID(hwnd,IDLB_DROPDOWN),chosenCD);
  841.           break;
  842.         default:
  843.           break;
  844.         }
  845.       return (MRESULT) TRUE;
  846.     default:
  847.       break;
  848.     }
  849.   return WinDefDlgProc(hwnd, msg, mp1, mp2);
  850. }
  851.  
  852. /*********************************************************************/
  853. /*                                                                   */
  854. /* This procedure handles the dialog (frame extension) of the folder */
  855. /*                                                                   */
  856. /*********************************************************************/
  857. MRESULT EXPENTRY dialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
  858. {
  859.   CWAudioFolder *thisPtr;
  860.   HWND hwndTracks;
  861.   WPObject * contentObject;
  862.   char name[CCHMAXPATH];
  863.   ULONG ulNameSize;
  864.   HWND hwndCnr;
  865.   PMINIRECORDCORE mrc;
  866.   ULONG ulWriteFlagsLocal;
  867.   ULONG ulSize;
  868.   POINTL ptl;
  869.   SHORT a,b;
  870.     
  871.   switch(msg)
  872.     {
  873.     case WM_INITDLG :   
  874.       WinSetWindowULong(hwnd,QWL_USER,(ULONG)PVOIDFROMMP(mp2));//Save object ptr.
  875.       thisPtr=(CWAudioFolder*) PVOIDFROMMP(mp2);
  876.       /* Set the check buttons according the instance write flags */
  877.       /* The member function cwQueryWriteFlags() returns the current
  878.          state of the flags. */
  879.       ulWriteFlagsLocal=thisPtr->cwQueryWriteFlags();
  880.       WinCheckButton(hwnd,IDCB_PAD,(ulWriteFlagsLocal & IDWF_PAD)&&TRUE);
  881.       WinCheckButton(hwnd,IDCB_NOFIX,(ulWriteFlagsLocal & IDWF_NOFIX)&&TRUE);
  882.       WinCheckButton(hwnd,IDCB_DUMMY,(ulWriteFlagsLocal & IDWF_DUMMY)&&TRUE);
  883.       WinCheckButton(hwnd,IDCB_PREEMP,(ulWriteFlagsLocal & IDWF_PREEMP)&&TRUE);
  884.       return (MRESULT) TRUE;
  885.     case WM_HELP:
  886.       /* Get the object pointer from the window words. We saved it in WM_INITDLG. */
  887.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  888.       if(thisPtr)
  889.         /* Display the helppanel IDDLG_GRABDIALOG */
  890.         return (MRESULT)thisPtr->wpDisplayHelp(IDDLG_GRABDIALOG,AFHELPLIBRARY);
  891.       break;
  892.     case WM_DESTROY:
  893.       /* The dialog closes and gets destroyed */
  894.       /* Get the object pointer */     
  895.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  896.       if(thisPtr){
  897.         /* Query the checkboxes */
  898.         if(WinQueryButtonCheckstate(hwnd,IDCB_PAD))
  899.           ulWriteFlagsLocal=IDWF_PAD;
  900.         if(WinQueryButtonCheckstate(hwnd,IDCB_NOFIX))
  901.           ulWriteFlagsLocal|=IDWF_NOFIX;
  902.         if(WinQueryButtonCheckstate(hwnd,IDCB_DUMMY))
  903.           ulWriteFlagsLocal|=IDWF_DUMMY;
  904.         if(WinQueryButtonCheckstate(hwnd,IDCB_PREEMP))
  905.           ulWriteFlagsLocal|=IDWF_PREEMP;
  906.         /* Save checkbox states in the instance varables */
  907.         thisPtr->cwSetWriteFlags( ulWriteFlagsLocal,WF_ALLFLAGS);
  908.         /* Let the WPS save the instance data */
  909.         thisPtr->wpSaveDeferred();
  910.         thisPtr->hwndWrite=0;
  911.       }
  912.       break;    
  913.     case WM_BUTTON2DOWN:
  914.       WinQueryPointerPos(HWND_DESKTOP,&ptl);
  915.       WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1);
  916.       hwndTracks=WinWindowFromPoint(hwnd,&ptl,FALSE);/* Get child window under ptr */
  917.       switch(WinQueryWindowUShort(hwndTracks,QWS_ID))/* Get child window id */
  918.         {
  919.         case IDCB_PAD:
  920.           a=IDM_WRITEPADHELP;
  921.           b=a;
  922.           break;
  923.         case IDCB_NOFIX:
  924.           a=IDM_WRITENOFIXHELP;
  925.           b=a;
  926.           break;
  927.         case IDCB_DUMMY:
  928.           a=IDM_WRITEDUMMYHELP;
  929.           b=a;
  930.           break;
  931.         case IDCB_PREEMP:
  932.           a=IDM_WRITEPREEMPHELP;
  933.           b=a;
  934.           break;
  935.         case IDPB_BURN:
  936.           a=IDM_WRITEBURNHELP;
  937.           b=a;
  938.           break;
  939.         default:
  940.           a=IDM_WRITEDEFAULTHELP;
  941.           b=IDM_CDRECORDSETUP;
  942.           break;
  943.         }
  944.       hwndTracks=WinLoadMenu(hwnd,queryModuleHandle(),a);
  945.       if(hwndTracks) {
  946.         if(WinPopupMenu(hwnd,hwnd,hwndTracks,ptl.x,ptl.y,b,PU_VCONSTRAIN|PU_HCONSTRAIN|
  947.                         PU_MOUSEBUTTON1|PU_KEYBOARD|PU_NONE|PU_SELECTITEM)) {
  948.                                         
  949.           return (MRESULT)FALSE;
  950.         }
  951.       }
  952.       break;
  953.     case WM_CONTROL:
  954.       /* This part handles the check button messages */
  955.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  956.       if(thisPtr){
  957.         ulWriteFlagsLocal=0;
  958.         switch(SHORT1FROMMP(mp1))
  959.           {
  960.           case IDCB_PAD:
  961.             if(WinQueryButtonCheckstate(hwnd,IDCB_PAD))
  962.               ulWriteFlagsLocal=IDWF_PAD;
  963.             thisPtr->cwSetWriteFlags( ulWriteFlagsLocal,IDWF_PAD);
  964.             break;
  965.           case IDCB_NOFIX:
  966.             if(WinQueryButtonCheckstate(hwnd,IDCB_NOFIX))
  967.               ulWriteFlagsLocal=IDWF_NOFIX;
  968.             thisPtr->cwSetWriteFlags( ulWriteFlagsLocal,IDWF_NOFIX);
  969.             break;
  970.           case IDCB_DUMMY:
  971.             if(WinQueryButtonCheckstate(hwnd,IDCB_DUMMY))
  972.               ulWriteFlagsLocal=IDWF_DUMMY;
  973.             thisPtr->cwSetWriteFlags( ulWriteFlagsLocal,IDWF_DUMMY);
  974.             break;
  975.           case IDCB_PREEMP:
  976.             if(WinQueryButtonCheckstate(hwnd,IDCB_PREEMP))
  977.               ulWriteFlagsLocal=IDWF_PREEMP;
  978.             thisPtr->cwSetWriteFlags( ulWriteFlagsLocal,IDWF_PREEMP);
  979.             break;
  980.           default:
  981.             break;
  982.           }
  983.         /* Tell the WPS to save the instance data */
  984.         thisPtr->wpSaveDeferred();
  985.       }
  986.       break;
  987.     case WM_COMMAND:    
  988.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  989.       if(thisPtr) {
  990.         switch(SHORT1FROMMP(mp1))
  991.           {
  992.           case IDM_WRITEDEFAULTHELP:
  993.             return (MRESULT)thisPtr->wpDisplayHelp(601,AFHELPLIBRARY);
  994.           case IDM_WRITEPADHELP:
  995.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_WRITEPAD,AFHELPLIBRARY);
  996.           case IDM_WRITENOFIXHELP:
  997.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_WRITENOFIX,AFHELPLIBRARY);
  998.           case IDM_WRITEDUMMYHELP:
  999.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_WRITEDUMMY,AFHELPLIBRARY);
  1000.           case IDM_WRITEPREEMPHELP:
  1001.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_WRITEPREEMP,AFHELPLIBRARY);
  1002.           case IDM_WRITEBURNHELP:
  1003.             return (MRESULT)thisPtr->wpDisplayHelp(IDHLP_WRITEBURN,AFHELPLIBRARY);
  1004.             
  1005.           case IDM_CDRECORDSETUP:
  1006.             bGrabberFirst=FALSE;
  1007.             thisPtr->wpViewObject(NULL,OPEN_SETTINGS,0);
  1008.             return (MRESULT)TRUE;
  1009.           default:
  1010.             break;
  1011.           }
  1012.       }
  1013.       switch(SHORT1FROMMP(mp1))
  1014.         {
  1015.         case IDPB_BURN:
  1016.           ulSize=0;
  1017.           /* Write CD button pressed */
  1018.           thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  1019.           if(!setupDone){
  1020.             if(thisPtr)thisPtr->wpViewObject(NULL,OPEN_SETTINGS,0);
  1021.           }
  1022.           else{
  1023.             /* Load the track list dialog */
  1024.             hwndTracks=WinLoadDlg(HWND_DESKTOP,hwnd,trackDialogProc,queryModuleHandle(),IDDLG_SHOWTITLES,thisPtr);
  1025.             if(hwndTracks){ /* Catch error */
  1026.               /* Get the object pointer */
  1027.               thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  1028.               if(thisPtr){ /* Catch error */
  1029.                 /* Get folder hwnd */
  1030.                 hwndCnr=WinQueryWindow(hwnd,QW_PARENT);
  1031.                 ulSize=thisPtr->cwFillTrackList(hwndCnr,WinWindowFromID(hwndTracks,IDLB_TRACKLIST));
  1032.                 sprintf(name,"Total size: %d.%d.%d Bytes",ulSize/1000000,(ulSize%1000000)/1000,(ulSize%1000));
  1033.                 WinSetWindowText(WinWindowFromID(hwndTracks,IDST_TOTALSIZE),name);
  1034.             
  1035.                 ulSize/=(2*2*44100);/* Calculate seconds */
  1036.                 sprintf(name,"Total time: %d min %d sec",ulSize/60 , (ulSize % 60));
  1037.                 WinSetWindowText(WinWindowFromID(hwndTracks,IDST_TOTALTIME),name);
  1038.               }//end of if(thisPtr)
  1039.             }//end of if(hwndTracks)
  1040.           }
  1041.           break;
  1042.         default:
  1043.           break;
  1044.         }
  1045.       return (MRESULT) TRUE;
  1046.     default:
  1047.       break;
  1048.     }
  1049.   return WinDefDlgProc(hwnd, msg, mp1, mp2);
  1050. }
  1051.  
  1052.  
  1053.  
  1054. /***********************************************/
  1055. /*                                             */
  1056. /* This procedure handles the tracklist dialog */
  1057. /*                                             */
  1058. /***********************************************/
  1059. MRESULT EXPENTRY trackDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
  1060. {
  1061.   CWAudioFolder *thisPtr;
  1062.   
  1063.   STARTDATA startData={0};
  1064.   char chrParams[CCHMAXPATH+4000];
  1065.   char chrParams2[CCHMAXPATH];
  1066.   char chrLoadError[CCHMAXPATH];
  1067.   PSZ pszTitle="CDRecord/2";
  1068.   APIRET rc;
  1069.   PID pid;
  1070.   ULONG ulSessionID=0;
  1071.   ULONG ulWriteFlagsLocal;
  1072.   int iItemCount,a;
  1073.  
  1074.   switch(msg)
  1075.     {
  1076.     case WM_INITDLG :    
  1077.       WinSetWindowULong(hwnd,QWL_USER,(ULONG)PVOIDFROMMP(mp2));//Save object ptr.
  1078.       /* Disable the 'Write'-button of the Audio folder */ 
  1079.    
  1080.       /* Check if we have items in the listbox. If not disable Ok-button. */
  1081.       // iItemCount=(int)LONGFROMMR(WinSendMsg(WinWindowFromID(hwnd,IDLB_TRACKLIST),LM_QUERYITEMCOUNT,0,0));
  1082.       thisPtr=(CWAudioFolder*)PVOIDFROMMP(mp2);
  1083.       thisPtr->hwndWriteLB=WinWindowFromID(hwnd,IDLB_TRACKLIST);
  1084.       /* Disable windows in write dialog */
  1085.       thisPtr->cwEnableWriteControls(FALSE);
  1086.       return (MRESULT) TRUE;
  1087.     case WM_DESTROY:
  1088.       /* The notebook closes and gets destroyed */     
  1089.       /* Enable windows in write dialog */
  1090.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  1091.       thisPtr->hwndWriteLB=0;
  1092.       thisPtr->cwEnableWriteControls(TRUE);
  1093.       break;    
  1094.     case WM_CLOSE:
  1095.       /* Enable the 'Write'-button of the Audio folder */
  1096.       WinDismissDlg(hwnd,0);
  1097.       thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  1098.       if(!thisPtr->tidWrite)
  1099.         WinDestroyWindow(hwnd);
  1100.       break;    
  1101.     case WM_COMMAND:    
  1102.       switch(SHORT1FROMMP(mp1))
  1103.         {
  1104.         case IDPB_CANCEL:
  1105.           thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  1106.           thisPtr->cwEnableWriteControls(TRUE);
  1107.           WinPostMsg(hwnd,WM_CLOSE,0,0);
  1108.           break;
  1109.         case IDPB_OK:
  1110.           
  1111.           thisPtr=(CWAudioFolder*) WinQueryWindowULong(hwnd,QWL_USER);
  1112.           if(thisPtr)
  1113.             ulWriteFlagsLocal=thisPtr->cwQueryWriteFlags();
  1114.           memset(&startData,0,sizeof(startData));
  1115.           startData.Length=sizeof(startData);
  1116.           //startData.Related=SSF_RELATED_CHILD;
  1117.           startData.Related=SSF_RELATED_INDEPENDENT;
  1118.           startData.FgBg=SSF_FGBG_FORE;
  1119.           startData.TraceOpt=SSF_TRACEOPT_NONE;
  1120.           startData.PgmTitle=pszTitle;
  1121.           startData.PgmName=chrCDRecord;
  1122.           startData.InheritOpt=SSF_INHERTOPT_SHELL;
  1123.           startData.SessionType=SSF_TYPE_WINDOWABLEVIO;
  1124.           startData.PgmControl=SSF_CONTROL_VISIBLE|SSF_CONTROL_MAXIMIZE|SSF_CONTROL_NOAUTOCLOSE;
  1125.           startData.InitXPos=30;
  1126.           startData.InitYPos=30;
  1127.           startData.InitXSize=500;
  1128.           startData.InitYSize=400;
  1129.           startData.ObjectBuffer=chrLoadError;
  1130.           startData.ObjectBuffLen=(ULONG)sizeof(chrLoadError);
  1131.           sprintf(chrParams,"%s -audio",chrCDROptions);
  1132.           if(ulWriteFlagsLocal & IDWF_DUMMY)
  1133.             sprintf(chrParams,"%s -dummy",chrParams);
  1134.           if(ulWriteFlagsLocal & IDWF_PAD)
  1135.             sprintf(chrParams,"%s -pad",chrParams);
  1136.           if(ulWriteFlagsLocal & IDWF_NOFIX)
  1137.             sprintf(chrParams,"%s -nofix",chrParams);
  1138.           if(ulWriteFlagsLocal & IDWF_PREEMP)
  1139.             sprintf(chrParams,"%s -preemp",chrParams);
  1140.  
  1141.           iItemCount=(int)LONGFROMMR(WinSendMsg(WinWindowFromID(hwnd,IDLB_TRACKLIST),LM_QUERYITEMCOUNT,0,0));
  1142.           for(a=0;a<iItemCount;a++){
  1143.             WinSendMsg(WinWindowFromID(hwnd,IDLB_TRACKLIST),LM_QUERYITEMTEXT,
  1144.                        MPFROM2SHORT(a,sizeof(chrParams2)),
  1145.                        chrParams2);
  1146.             sprintf(chrParams,"%s %s ",chrParams,chrParams2);/* add track path to cmd-line */
  1147.           }
  1148.           if(!iItemCount){
  1149.             DosBeep(100,100);
  1150.             break;
  1151.           }
  1152.           startData.PgmTitle=chrParams;
  1153.           startData.PgmInputs=chrParams;
  1154.           thisPtr->tidWrite=_beginthread(writeThreadFunc,NULL,8192*8,(void*)thisPtr); //Fehlerbehandlung fehlt
  1155.           WinPostMsg(hwnd,WM_CLOSE,0,0);
  1156.           break;
  1157.         default:
  1158.           break;
  1159.         }
  1160.       return (MRESULT) TRUE;
  1161.     default:
  1162.       return WinDefDlgProc(hwnd, msg, mp1, mp2);
  1163.     }
  1164.   return (MRESULT) FALSE;
  1165. }
  1166.  
  1167.  
  1168.