home *** CD-ROM | disk | FTP | other *** search
- #include "audiofolder.hh"
- #include "audiofolderhelp.h"
-
- #include <stdlib.h>
- #include <stdio.h>
-
- BOOL setupDone=FALSE;
- BOOL GrabberSetupDone=FALSE;
- BOOL bGrabberFirst=FALSE;
-
- int iNumCD;
- char cFirstCD;
- char chosenCD[3];
- char chosenWriter[3];// Drive letter of CD-writer
-
- char chrGrabberPath[CCHMAXPATH];
- char chrGrabberOptions[CCHMAXPATH];
- int bTrackNumbers;
-
- char chrCDRecord[CCHMAXPATH]={0};/* Path to cdrecord */
- char chrCDROptions[CCHMAXPATH]={0};
- LONG lCDROptions=0;
- char chrInstallDir[CCHMAXPATH]={0};
-
- ATOM atomUpdateStatusbar;
- ATOM atomStartGrab;
- ATOM atomStartWrite;
-
- HMODULE queryModuleHandle(void);
- void _Optlink toolsThreadFunc (void *arg);
- void sendConfig();
- MRESULT EXPENTRY selectDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
- MRESULT EXPENTRY statusLineDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
- MRESULT EXPENTRY dialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
- MRESULT EXPENTRY grabDialogProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
-
- BOOL CWAudioFolder::wpSetupOnce(PSZ pSetupString)
- {
- /**************************************************
- * *
- * Supported setupstrings: *
- * FLDRWRITEFLAGS=1+2+4+8 *
- * *
- **************************************************/
- BOOL rcParent;
- char buffer[CCHMAXPATH];
- ULONG bufferSize;
-
- rcParent=((somTD_WPObject_wpSetupOnce)
- somParentNumResolve(__ClassObject->somGetPClsMtabs(),
- 1,
- __ClassObject->
- somGetMethodToken(somIdFromString
- ("wpSetupOnce")))
- )(this,pSetupString);
- /* Doing our own setup here */
- bufferSize=sizeof(buffer);
- if(!wpScanSetupString(pSetupString,"ICONVIEW",buffer,&bufferSize))
- wpSetup( "ICONVIEW=NONFLOWED,MINI");/* Fill in defaults */
- bufferSize=sizeof(buffer);
- if(!wpScanSetupString(pSetupString,"ICONVIEWPOS",buffer,&bufferSize))
- wpSetup( "ICONVIEWPOS=20,15,50,60");/* Fill in defaults */
- bufferSize=sizeof(buffer);
- if(!wpScanSetupString(pSetupString,"FLDRWRITEFLAGS",buffer,&bufferSize))
- ulWriteFlags=IDWF_PAD|IDWF_NOFIX|IDWF_DUMMY; /* No key, set defaults */
- else
- wpSetup(pSetupString);
- return rcParent;
- }
-
- BOOL CWAudioFolder::wpSetup(PSZ pSetupString)
- {
- /**************************************************
- * *
- * Supported setupstrings: *
- * FLDRWRITEFLAGS=1+2+4+8 *
- * *
- **************************************************/
- char buffer[CCHMAXPATH];
- ULONG bufferSize;
- ULONG ulWFlags;
-
- bufferSize=sizeof(buffer);
- if(wpScanSetupString(pSetupString,"FLDRWRITEFLAGS",buffer,&bufferSize))
- {
- ulWFlags=atol(buffer);
- cwSetWriteFlags( ulWFlags,WF_ALLFLAGS);
- /* ulWriteFlags=0;
- if(ulWFlags & IDWF_PAD)ulWriteFlags|=IDWF_PAD;
- if(ulWFlags & IDWF_NOFIX)ulWriteFlags|=IDWF_NOFIX;
- if(ulWFlags & IDWF_PREEMP)ulWriteFlags|=IDWF_PREEMP;
- if(ulWFlags & IDWF_DUMMY)ulWriteFlags|=IDWF_DUMMY;*/
- }
- return CWProgFolder::wpSetup(pSetupString);
- }
-
- void CWAudioFolder::wpCopiedFromTemplate()
- {
- wpSetup("ICONVIEW=NONFLOWED,MINI;ICONVIEWPOS=20,15,50,60");
- if(!setupDone)
- cwLoadIniValues();
- CWProgFolder:: wpCopiedFromTemplate();
- }
-
-
- /*************************************************/
- /* Remove the general-page for the animated icon */
- /*************************************************/
- ULONG CWAudioFolder::wpAddObjectGeneralPage2(HWND hwndNotebook)
- {
- return SETTINGS_PAGE_REMOVED;
- }
-
- /************************************************/
- /* Override function: Remove the tree view page */
- /************************************************/
- ULONG CWAudioFolder::wpAddFolderView2Page(HWND hwndNotebook)
- {
- return SETTINGS_PAGE_REMOVED;
- }
-
-
- BOOL CWAudioFolder::wpAddSettingsPages(HWND hwndNotebook)
- {
- BOOL rc;
-
- /* Call the parent so it can insert its settings pages */
- rc=((somTD_WPObject_wpAddSettingsPages)
- somParentNumResolve(__ClassObject->somGetPClsMtabs(),
- 1,
- __ClassObject->
- somGetMethodToken(somIdFromString
- ("wpAddSettingsPages")))
- )(this,hwndNotebook);
- if(bGrabberFirst)
- rc && AddCdrecordOptionPage(hwndNotebook)
- && AddGrabOptionPage(hwndNotebook);
- else
- rc && AddGrabOptionPage(hwndNotebook)
- && AddCdrecordOptionPage(hwndNotebook);
-
- return rc;
- // Durch obige Konstruktion wird die Elternmethode des direkten Vorgängers aufgerufen,
- // und nicht die ursprüngliche von WPLaunchPad, falls WPLaunchPad replaced wurde.
- // Durch diesen Aufruf gehen eventuelle Erweiterungen durch Vererbung verloren:
- // < return WPLaunchPad::wpMenuItemSelected(hwndFrame, ulMenuId); >
- // Dieser Aufruf macht Ergänzungen in wpobject.hh erforderlich!!! Wird durch ein VAC-Fixpack vielleicht später
- //erledigt
- }
-
- /************************************************/
- /* Override function: Remove the tree view open */
- /* item from the menu. */
- /************************************************/
- ULONG CWAudioFolder::wpFilterPopupMenu(ULONG ulFlags, HWND hwndCnr, BOOL fMultiSelect)
- {
- return CWProgFolder::wpFilterPopupMenu( ulFlags, hwndCnr, fMultiSelect) & ~CTXT_TREE;
- }
-
- /************************************************/
- /* Override function: */
- /************************************************/
- BOOL CWAudioFolder::wpModifyPopupMenu(HWND hwndMenu, HWND hwndCnr, ULONG ulPosition)
- {
- /* Remove the change to tree view item from menu */
- /* This does not remove it from the menubar :( */
- WinSendMsg(hwndMenu,MM_REMOVEITEM,MPFROM2SHORT(717,TRUE),0);
- wpInsertPopupMenuItems(hwndMenu,1,queryModuleHandle(),ID_MENUTOOLS,0);
- wpInsertPopupMenuItems(hwndMenu,-1,queryModuleHandle(),ID_MENUABOUT,WPMENUID_HELP);
- return CWProgFolder::wpModifyPopupMenu(hwndMenu, hwndCnr, ulPosition);
- }
-
- BOOL CWAudioFolder::wpMenuItemSelected(HWND hwndFrame,ULONG ulMenuId)
- {
- int tid;
-
- /* char text[200];
- sprintf(text,"Menu-Id: %d",ulMenuId);
- WinMessageBox( HWND_DESKTOP, HWND_DESKTOP, text, "wpMenuItemSelected()",
- 0UL, MB_OK | MB_ICONEXCLAMATION );
- */
- switch(ulMenuId)
- {
- case 717://Change to tree view
- DosBeep(100,100);
- return TRUE;
- case ID_TOOLSITEM:
- // DosBeep(1000,1000);
- tid=_beginthread(toolsThreadFunc,NULL,8192*2,this); //Fehlerbehandlung fehlt
- return TRUE;
- case ID_ABOUTITEM:
- cwShowAboutDlg(queryModuleHandle(),IDDLG_ABOUT);
- return TRUE;
- default:
- break;
- }
-
- return CWProgFolder::wpMenuItemSelected( hwndFrame, ulMenuId);
- }
-
-
- BOOL CWAudioFolder::wpMenuItemHelpSelected(ULONG MenuId)
- {
- switch(MenuId) {
- case ID_TOOLSITEM:
- return wpDisplayHelp(ID_TOOLSITEM,AFHELPLIBRARY);
- case ID_ABOUTITEM:
- return FALSE;
- default:
- break;
- }
- return CWProgFolder::wpMenuItemHelpSelected(MenuId);
- }
-
-
- BOOL CWAudioFolder::wpRestoreState(ULONG ulReserved)
- {
- ULONG keyLength;
- char profileName[CCHMAXPATH];
- char moduleName[CCHMAXPATH];
- char *chrPtr;
- HINI hini=0;
- char text[200];
- ULONG ulSize;
- int a;
- char chrCD[4];
- HOBJECT hObject;
-
- bShowGrab=FALSE;
-
- /* cwLoadIniValues();
- return CWProgFolder::wpRestoreState(ulReserved);
- */
-
- /* Query the number of CD-drives */
- cwQueryCDDrives(&iNumCD,&cFirstCD);
-
- /* Restore write flags */
- if(!wpRestoreLong("CWAudioFolder",IDKEY_FDRWRITEFLAGS,&ulWriteFlags))
- ulWriteFlags=IDWF_PAD|IDWF_NOFIX|IDWF_DUMMY;
-
- /* Get folder of class-dll. */
- DosQueryModuleName(queryModuleHandle(),sizeof(moduleName),moduleName);
- chrPtr=strrchr(moduleName,'\\');
- if(chrPtr)
- *chrPtr=0;
- /* Save install dir */
- sprintf(chrInstallDir,"%s",moduleName);
- /* Build full path for cdrecord.ini file */
- sprintf(profileName,"%s\\cdrecord.ini",moduleName);
- /* Open ini-file */
- hini=PrfOpenProfile(WinQueryAnchorBlock(HWND_DESKTOP),profileName);
- do{
- if(!hini) {
- WinMessageBox( HWND_DESKTOP,
- HWND_DESKTOP,
- "Warning! Cannot open Ini-file!",
- "Audio-CD-Creator",
- 0UL,
- MB_OK | MB_ICONEXCLAMATION );
- break;
- }/* end of if(!hini) */
-
- keyLength=PrfQueryProfileString(hini,"CDWriter","cdrecord","",chrCDRecord,sizeof(chrCDRecord));
- if(keyLength==1){
- break;/* First opening. We havn't got entries yet */
- }
- PrfQueryProfileString(hini,"CDWriter","cdroptions","",chrCDROptions,sizeof(chrCDROptions));
- ulSize=sizeof(lCDROptions);
- PrfQueryProfileData(hini,"CDWriter","options",&lCDROptions,&ulSize);
- PrfQueryProfileString(hini,"CDWriter","writedrive","",chosenWriter,sizeof(chosenWriter));
-
- setupDone=TRUE;
- sendConfig();
-
- keyLength=PrfQueryProfileString(hini,"CDGrabber","grabber","",chrGrabberPath,sizeof(chrGrabberPath));
- if(keyLength==1){
- break;/* We havn't got entries yet */
- }
- PrfQueryProfileString(hini,"CDGrabber","graboptions","",chrGrabberOptions,sizeof(chrGrabberOptions));
- PrfQueryProfileString(hini,"CDGrabber","grabdrive","",chosenCD,sizeof(chosenCD));
- bTrackNumbers=PrfQueryProfileInt(hini,"CDGrabber","tracknumbers",1);
- GrabberSetupDone=TRUE;
-
- break;
- } while(TRUE);
- if(hini)PrfCloseProfile(hini);
- return CWProgFolder::wpRestoreState(ulReserved);
- }
-
- BOOL CWAudioFolder::wpSaveState()
- {
- char profileName[CCHMAXPATH];
- char moduleName[CCHMAXPATH];
- char *chrPtr;
- HINI hini=0;
-
- /* This saves the instance write flags */
- if(!wpSaveLong("CWAudioFolder",IDKEY_FDRWRITEFLAGS,ulWriteFlags))
- WinMessageBox( HWND_DESKTOP,
- HWND_DESKTOP,
- "Warning! Cannot write instance data!",
- "Audio-CD-Creator",
- 0UL,
- MB_OK | MB_ICONEXCLAMATION );
-
- /* Build the ini-file name */
- /* Get folder of class-dll. */
- DosQueryModuleName(queryModuleHandle(),sizeof(moduleName),moduleName);
- chrPtr=strrchr(moduleName,'\\');
- if(chrPtr)
- *chrPtr=0;
- /* Build full path */
- sprintf(profileName,"%s\\cdrecord.ini",moduleName);
-
- /* Global settings are saved in an ini-file */
- do{
- /* Open the ini-file */
- hini=PrfOpenProfile(WinQueryAnchorBlock(HWND_DESKTOP),profileName);
- if(!hini) {
- WinMessageBox( HWND_DESKTOP,
- HWND_DESKTOP,
- "Warning! Cannot open Ini-file!",
- "Audio-CD-Creator",
- 0UL,
- MB_OK | MB_ICONEXCLAMATION );
- return CWProgFolder::wpSaveState();
- }/* end of if(!hini) */
- /* Save cdrecord-path */
- if(!PrfWriteProfileString(hini,"CDWriter","cdrecord",chrCDRecord))
- break;
- /* Save cdrecord options */
- if(!PrfWriteProfileString(hini,"CDWriter","cdroptions",chrCDROptions))
- break;
-
- if(!PrfWriteProfileString(hini,"CDWriter","writedrive",chosenWriter))
- break;
-
- if(!PrfWriteProfileString(hini,"CDGrabber","grabber",chrGrabberPath))
- break;
-
- if(!PrfWriteProfileString(hini,"CDGrabber","graboptions",chrGrabberOptions))
- break;
-
- if(!PrfWriteProfileString(hini,"CDGrabber","grabdrive",chosenCD))
- break;
-
- if(!PrfWriteProfileData(hini,"CDGrabber","tracknumbers",&bTrackNumbers,sizeof(bTrackNumbers)))
- break;
- if(!PrfWriteProfileData(hini,"CDWriter","options",&lCDROptions,sizeof(lCDROptions))) {
- break;
- };
- PrfCloseProfile(hini);
- return CWProgFolder::wpSaveState();
- }while(TRUE);
- WinMessageBox( HWND_DESKTOP,
- HWND_DESKTOP,
- "Warning! Cannot write to Ini-file!",
- "Audio-CD-Creator",
- 0UL,
- MB_OK | MB_ICONEXCLAMATION );
- if(hini)PrfCloseProfile(hini);
-
- return CWProgFolder::wpSaveState();
- }
-
-
- MRESULT CWAudioFolder::wpDrop(HWND hwndCnr,PDRAGINFO pDragInfo,PDRAGITEM pDragItem)
- {
- MRESULT mr;
-
- mr=CWProgFolder::wpDrop(hwndCnr, pDragInfo, pDragItem);
- cwForceStatusUpdate() ;
- return mr;
- }
-
-
- BOOL CWAudioFolder::wpDeleteFromContent(WPObject* Object)
- {
- BOOL rc;
-
- rc=CWProgFolder::wpDeleteFromContent(Object);
- cwForceStatusUpdate() ;
- return rc;
- }
-
- BOOL CWAudioFolder::wpAddToContent(WPObject* Object)
- {
- BOOL rc;
-
- rc=CWProgFolder::wpAddToContent(Object);
- cwForceStatusUpdate() ;
- return rc;
- }
-
- BOOL CWAudioFolder::wpPopulate(ULONG ulReserved,PSZ Folder,BOOL fFoldersOnly)
- {
- BOOL rc;
-
- rc=CWProgFolder::wpPopulate(ulReserved,Folder,fFoldersOnly);
- /*
- if(!(fFlags&FOI_POPULATEDWITHALL || fFlags&FOI_POPULATEDWITHFOLDERS)||ulTrackSize<44100*4) {
- ulTrackSize=cwFillTrackList(WinQueryWindow(hwndStatusFrameCtl,QW_PARENT), NULL);
- }*/
- /* Set total time into status line */
- cwForceStatusUpdate();
- return rc;
- }
-
- void CWAudioFolder::wpInitData()
- {
- HATOMTBL hatSystem;
-
- CWProgFolder::wpInitData();
-
- /* Get unique window messages for our internal communication */
- hatSystem=WinQuerySystemAtomTable();
- /* Window message for updating the statusbar */
- atomUpdateStatusbar=WinAddAtom(hatSystem,WM_UPDATESTATUSBARMSG);
- /* Window message for starting a grab */
- atomStartGrab=WinAddAtom(hatSystem,WM_STARTGRABMSG);
- /* Window message for starting a write */
- atomStartWrite=WinAddAtom(hatSystem,WM_STARTWRITEMSG);
- }
-
- HWND CWAudioFolder::wpOpen(HWND hwndCnr,ULONG ulView,ULONG ulParam)
- {
- HWND hwnd;
- SIZEL sizelLeft={0};
- HWND myFrameHWND;
- RECTL rectl;
- MENUITEM mi;
- HWND hwndMenu;
- int iItemCount;
- char text[200];
-
- /* Call parent to build folder window */
- hwnd=CWProgFolder::wpOpen(hwndCnr, ulView, ulParam);
-
- /* Only subclass folder frames, not settings notebooks */
- if(ulView!=OPEN_SETTINGS){
- myFrameHWND=WinWindowFromID(hwnd,FID_MENU);//Get menu hwnd
- /* Remove the change to tree view item from menubar */
- //WinSendMsg(myFrameHWND,MM_DELETEITEM,MPFROM2SHORT(717,TRUE),0);
-
- if(myFrameHWND){
- /* Query the number of items in the menubar */
- iItemCount=(int)WinSendMsg(myFrameHWND,MM_QUERYITEMCOUNT,(MPARAM)0,
- (MPARAM)0);
- /* Load the Misc-tools menu from the resource */
- hwndMenu=WinLoadMenu(myFrameHWND,queryModuleHandle(),ID_TBMENUTOOLS);
- //723
- if(hwndMenu){
- /* Fill the MENUITEM structure */
- mi.iPosition=iItemCount-1;
- mi.afStyle=MIS_TEXT|MIS_SUBMENU;
- mi.id=ID_TBMENUTOOLS;
- mi.afAttribute=NULL;
- mi.hwndSubMenu=hwndMenu;
- mi.hItem=NULL;
- /* Add the Misc-tools item to the folder menubar */
- WinSendMsg(myFrameHWND,MM_INSERTITEM,(MPARAM)&mi,
- (MPARAM)"Misc-Tools");
- }/* end of if(hwndMenu) */
- /* WinSendMsg(myFrameHWND,MM_QUERYITEM,MPFROM2SHORT(723,FALSE),
- (MPARAM)&mi);*/
- }
- /* Now add the framecontrols */
-
- /* This is the select-frameCtrl. */
- /* Load the dialog from the resource. The object pointer of this
- folder is given to the dialog procedure (this). In WM_INITDLG
- the procedure saves this pointer for later use. */
- myFrameHWND=WinLoadDlg(hwnd,hwnd,selectDialogProc,queryModuleHandle(),IDDLG_SELECTDLG,this);
- /* Save the HWND in the instance data */
- hwndSelect=myFrameHWND;
-
- if(tid)
- /* The folder currently grabs some tracks from CD so disable the controls. */
- cwEnableSelectControls(FALSE);
-
- if(myFrameHWND){
- /* Query the size of the dialog */
- WinQueryWindowRect(myFrameHWND,&rectl);
- /* It's the top dialog so we need the height but not the width. The width
- is always the width of the folder. */
- sizelLeft.cy=rectl.yTop-rectl.yBottom;
- /* Call a method of CWProgFolder to add the dialog as a framecontrol.
- FCTL_TOP means put it at the top of the folder.
- After calling cwUpdateFrame(hwnd) it will be visible */
- cwAddFrameCtl(hwnd, myFrameHWND, sizelLeft, FCTL_TOP,0);
- }
-
- if(tid) {
- /* The folder currently grabs some tracks from CD so show grab framecontrol. */
- /* This is the grab-framectrl. */
- myFrameHWND=WinLoadDlg(hwnd,hwnd,grabDialogProc,queryModuleHandle(),IDDLG_GRABDIALOG,this);
- hwndGrab=myFrameHWND;
- cwEnableGrabControls(FALSE);
- }
- else {
- /* This is the write-framectrl. */
- myFrameHWND=WinLoadDlg(hwnd,hwnd,dialogProc,queryModuleHandle(),ID_DIALOG,this);
- hwndWrite=myFrameHWND;
- if(hwndWrite&&tidWrite)
- cwEnableWriteControls(FALSE);
- }
- if(myFrameHWND){
- WinQueryWindowRect(myFrameHWND,&rectl);
- sizelLeft.cx=rectl.xRight-rectl.xLeft;
- /* Put the dialog at the left side of the folder */
- cwAddFrameCtl(hwnd, myFrameHWND, sizelLeft, FCTL_LEFT,FCTL_POSBELOW);
- }
- /* Statusbar */
- hwndStatusFrameCtl=WinLoadDlg(hwnd,hwnd,statusLineDialogProc,queryModuleHandle(),IDDLG_STATUS,this);
- if(hwndStatusFrameCtl) {
- WinQueryWindowRect(hwndStatusFrameCtl,&rectl);
- sizelLeft.cy=rectl.yTop-rectl.yBottom;
- /* Put the dialog at the bottom of the folder */
- cwAddFrameCtl(hwnd, hwndStatusFrameCtl, sizelLeft, FCTL_BOTTOM,0);
- }
- /* Refresh frame to show the new framecontrols */
- cwUpdateFrame(hwnd);
- /* Let the statusbar show the right time */
- cwForceStatusUpdate();
- }
- return hwnd;
- }
-
-
-
-
-
-
-
-
-
-
-