outdlg.c
上传用户:xmgzy123
上传日期:2007-01-07
资源大小:373k
文件大小:6k
源码类别:

SCSI/ASPI

开发平台:

WINDOWS

  1. /*
  2.  * outdlg.c - Copyright (C) 1999,2000 Jay A. Key
  3.  *
  4.  * Output options dialog for options property sheet.  Selection of 
  5.  * output format (WAV/MP3), plus output directories are configured here.
  6.  *
  7.  **********************************************************************
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  22.  *
  23.  */
  24. #include <windows.h>
  25. #include <commctrl.h>
  26. #include "resources.h"
  27. #include "globals.h"
  28. BOOL SelectDirectory( HWND hParent, LPTSTR lpszDir, int len, BOOL bAutoCreate );
  29. BOOL DirExists( char *dir );
  30. // save old settings for output dialog config
  31. static BOOL bInInit = FALSE;
  32. static char szTmpWavOutputDir[MAX_PATH+1];
  33. static char szTmpMP3OutputDir[MAX_PATH+1];
  34. static BOOL bMP3Tmp;
  35. //static HWND hOutDlg;
  36. /*
  37.  * Called in response to PSN_KILLACTIVE.  Should validate all values in the
  38.  * dialog, and save them to the temp variables.
  39.  */
  40. BOOL ValidateOutputDlg( HWND hWnd )
  41. {
  42.   // get the items from the text edits IDM_WAVDIR and IDM_MP3DIR
  43.   if ( !DirExists( szTmpWavOutputDir ) )
  44.     {
  45.       MessageBox( hWnd, "The folder you have selected for WAV output does not exist, or is not accessible.", "Huh?!?", MB_APPLMODAL | MB_ICONERROR | MB_OK );
  46.       return FALSE;
  47.     }
  48.   if ( !DirExists( szTmpMP3OutputDir ) )
  49.     {
  50.       MessageBox( hWnd, "The folder you have selected for MP3 output does not exist, or is not accessible.", "Huh?!?", MB_APPLMODAL | MB_ICONERROR | MB_OK );
  51.       return FALSE;
  52.     }
  53.   bMP3Tmp = IsDlgButtonChecked( hWnd, IDRBN_MP3 );
  54.   return TRUE;
  55. }
  56. /*
  57.  * Called in response to PSN_SETACTIVE.  Sets dialog items with the values
  58.  * from the temp variables.
  59.  */
  60. void ConfigureOutputDlg( HWND hWnd )
  61. {
  62.   bInInit = FALSE;
  63.   // sets the dialog's items with the temporary values.
  64.   SetDlgItemText( hWnd, IDE_WAVDIR, szTmpWavOutputDir );
  65.   SetDlgItemText( hWnd, IDE_MP3DIR, szTmpMP3OutputDir );
  66.   if ( bMP3Tmp && ( hBladeDll || hLameDll ) )
  67.     {
  68.       CheckDlgButton( hWnd, IDRBN_MP3, BST_CHECKED );
  69.       CheckDlgButton( hWnd, IDRBN_WAV, BST_UNCHECKED );
  70.     }
  71.   else
  72.     {
  73.       CheckDlgButton( hWnd, IDRBN_WAV, BST_CHECKED );
  74.       CheckDlgButton( hWnd, IDRBN_MP3, BST_UNCHECKED );
  75.     }
  76.   // if we have no encoders present, disable the radio button
  77.   if ( !( hBladeDll || hLameDll ) )
  78.     EnableWindow( GetDlgItem( hWnd, IDRBN_MP3 ), FALSE );
  79.   // until the browse for output director dialog is done, just disable the
  80.   // buttons
  81.   //SendDlgItemMessage( hWnd, IDBN_BRWSEWAVDIR, WM_ENABLE, 0, 0L );
  82.   //SendDlgItemMessage( hWnd, IDBN_BRWSEMP3DIR, WM_ENABLE, 0, 0L );
  83.   bInInit = TRUE;
  84. }
  85. BOOL CALLBACK OutputDlgProc( HWND hWnd, UINT uMsg, WPARAM wParam,
  86.      LPARAM lParam )
  87. {
  88.   //  char buf[81];
  89.   NMHDR *l = (NMHDR *)lParam;
  90.   WORD wID;
  91.   WORD wNotify;
  92.   BOOL bChanged;
  93.   switch( uMsg )
  94.     {
  95.     case WM_INITDIALOG:
  96.       //hOutDlg = hWnd;
  97.       break;
  98.     case WM_COMMAND:
  99.       wID = LOWORD( wParam );
  100.       wNotify = HIWORD( wParam );
  101.       bChanged = TRUE;
  102.       switch( wID )
  103. {
  104. case IDE_WAVDIR:
  105.   if ( wNotify == EN_CHANGE )
  106.     GetDlgItemText( hWnd, IDE_WAVDIR, szTmpWavOutputDir, MAX_PATH+1 );
  107.   else
  108.     bChanged = FALSE;
  109.   break;
  110. case IDE_MP3DIR:
  111.   if ( wNotify == EN_CHANGE )
  112.     GetDlgItemText( hWnd, IDE_MP3DIR, szTmpMP3OutputDir, MAX_PATH+1 );
  113.   else
  114.     bChanged = FALSE;
  115.   break;
  116. case IDBN_BRWSEWAVDIR:
  117.   if ( SelectDirectory( hWnd, szTmpWavOutputDir, MAX_PATH + 1, TRUE ) )
  118.     SetDlgItemText( hWnd, IDE_WAVDIR, szTmpWavOutputDir );
  119.   else
  120.     bChanged = FALSE;
  121.   break;
  122. case IDBN_BRWSEMP3DIR:
  123.   if ( SelectDirectory( hWnd, szTmpMP3OutputDir, MAX_PATH + 1, TRUE ) )
  124.     SetDlgItemText( hWnd, IDE_MP3DIR, szTmpWavOutputDir );
  125.   else
  126.     bChanged = FALSE;
  127.   break;
  128. case IDRBN_MP3:
  129.   bMP3Tmp = TRUE;
  130.   break;
  131. case IDRBN_WAV:
  132.   bMP3Tmp = FALSE;
  133.   break;
  134. default:
  135.   break;
  136. }
  137.       if ( bInInit && bChanged )
  138. SendMessage( (HWND)GetWindowLong( hWnd, GWL_HWNDPARENT ),
  139.      PSM_CHANGED, (WPARAM)hWnd, 0L );
  140.       break;
  141.     case WM_NOTIFY:
  142.       switch( l->code )
  143. {
  144. case PSN_SETACTIVE:  // sent before page is shown
  145.   ConfigureOutputDlg( hWnd );
  146.   break;
  147. case PSN_KILLACTIVE:  //losing focus
  148. #if 1
  149.   if ( ValidateOutputDlg( hWnd ) )
  150.     // ok to lose focus
  151.     SetWindowLong( hWnd, DWL_MSGRESULT, FALSE );
  152.   else
  153.     {
  154.       // don't use allow loss of focus
  155.       SetWindowLong( hWnd, DWL_MSGRESULT, TRUE );
  156.       return TRUE;
  157.     }
  158. #endif
  159.   break;
  160. case PSN_QUERYCANCEL:
  161.   break;
  162. case PSN_APPLY:
  163.   bMP3 = bMP3Tmp;
  164.   lstrcpy( szWavOutputDir, szTmpWavOutputDir );
  165.   lstrcpy( szMP3OutputDir, szTmpMP3OutputDir );
  166.   break;
  167. case PSN_HELP:
  168.   break;
  169. case PSN_RESET:
  170.   break;
  171. default:
  172.   break;
  173. }
  174.       break;
  175.     }
  176.   return FALSE;
  177. }
  178. /*
  179.  * Used to initialize the values in the dialog.  If bGet is TRUE, values are
  180.  * read and stored in tmp variables.  Otherwise, the values of the tmp vars
  181.  * are written to the dialogs values.
  182.  */
  183. void GetSetOutputDlgCurrentVals( BOOL bGet )
  184. {
  185.   if ( bGet )
  186.     {
  187.       lstrcpy( szTmpWavOutputDir, szWavOutputDir );
  188.       lstrcpy( szTmpMP3OutputDir, szMP3OutputDir );
  189.       bMP3Tmp = bMP3;
  190.     }
  191.   else
  192.     {
  193.       lstrcpy( szWavOutputDir, szTmpWavOutputDir );
  194.       lstrcpy( szMP3OutputDir, szTmpMP3OutputDir );
  195.       bMP3 = bMP3Tmp;
  196.     }
  197. }