home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2004 March / PCWELT_3_2004.ISO / pcwsoft / flaskmpeg_078_39_src.z.exe / flaskmpeg / options.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2002-10-28  |  47.1 KB  |  1,428 lines

  1. /* 
  2.  *  options.cpp    -  Controls FlasKMPEG options
  3.  *
  4.  *    Copyright (C) Alberto Vigata - January 2000
  5.  *
  6.  *  This file is part of FlasKMPEG, a free MPEG to MPEG/AVI converter
  7.  *    
  8.  *  FlasKMPEG is free software; you can redistribute it and/or modify
  9.  *  it under the terms of the GNU General Public License as published by
  10.  *  the Free Software Foundation; either version 2, or (at your option)
  11.  *  any later version.
  12.  *   
  13.  *  FlasKMPEG is distributed in the hope that it will be useful,
  14.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *  GNU General Public License for more details.
  17.  *   
  18.  *  You should have received a copy of the GNU General Public License
  19.  *  along with GNU Make; see the file COPYING.  If not, write to
  20.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  21.  *
  22.  */
  23.  
  24.  
  25. #include "flaskmpeg.h"
  26. #include "resource.h"
  27. #include "auxiliary.h"
  28. #include <commctrl.h>
  29. #include "error.h"
  30. #include ".\Resizer\resizer.h"
  31. #include ".\postprocessing.h"
  32. #include ".\Video\Videowrapper.h"
  33. #include ".\misc\ieee1180testdlg.h"
  34. #include ".\runstate.h"
  35. #include ".\misc\selectordialog.h"
  36. #include ".\OutputPad.h"
  37.  
  38. extern TRunState        rs;
  39. extern HINSTANCE        hInst;
  40.  
  41. struct TOptions{
  42.     int         frames_compile;
  43. };
  44.  
  45. #define GET_FRAMERATE(x) ((double)x.scale/(double)x.sampleSize)
  46.  
  47. // Dlg prototypes
  48. void DlgVideoStartUp( HWND hDlg );
  49.  
  50. static 
  51. struct Trunoptions{
  52.     CFrame   in, out;
  53.     TPPost              pp;
  54.     TOptions            opt;
  55.   TProfile            prof;
  56.   TConfig             conf;
  57. } opt_run;
  58.  
  59. HFONT myFont;
  60.  
  61.  
  62. #define C_PAGES 5
  63. typedef struct tag_dlghdr { 
  64.    HWND hwndTab;       // tab control 
  65.    HWND hwndDisplay;   // current child dialog box 
  66.    RECT rcDisplay;     // display rectangle for the tab control 
  67.    HWND DlgTabs[C_PAGES];
  68.    /* these function pointers check for valid data in the given
  69.     * tab (corresponding to DlgTabs); on valid data, true is returned;
  70.     * on invalid data, an error is displayed, focus set on the
  71.     * proper control and false is returned. 
  72.     *
  73.     * If this is NULL, then there are no checks and a true return
  74.     * is assumed.
  75.     */
  76.    bool (*DlgTabCheck[C_PAGES])(HWND hDlg);
  77. } DLGHDR; 
  78. HWND video,audio,processing,files,general;
  79. DLGHDR    *pHdr;
  80.  
  81. LRESULT CALLBACK OptionsProfileNameDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
  82.  
  83.  
  84. void EnableCropBoxes(HWND hDlg){
  85.   DlgEnable(hDlg, IDC_CROP_TOPOFFSET);
  86.   DlgEnable(hDlg, IDC_CROP_HEIGHT);
  87.   DlgEnable(hDlg, IDC_CROP_LEFTOFFSET);
  88.   DlgEnable(hDlg, IDC_CROP_WIDTH);
  89. }
  90.  
  91. void DisableCropBoxes(HWND hDlg){
  92.   DlgDisable(hDlg, IDC_CROP_TOPOFFSET);
  93.   DlgDisable(hDlg, IDC_CROP_HEIGHT);
  94.   DlgDisable(hDlg, IDC_CROP_LEFTOFFSET);
  95.   DlgDisable(hDlg, IDC_CROP_WIDTH);
  96. }
  97. void EnableLetterboxBoxes(HWND hDlg){
  98.   DlgEnable(hDlg, IDC_LETTERBOX_TOP);
  99.   DlgEnable(hDlg, IDC_LETTERBOX_BOTTOM);
  100.   DlgEnable(hDlg, IDC_LETTERBOX_RIGHT);
  101.   DlgEnable(hDlg, IDC_LETTERBOX_LEFT);
  102. }
  103.  
  104. void DisableLetterboxBoxes(HWND hDlg){
  105.   DlgDisable(hDlg, IDC_LETTERBOX_TOP);
  106.   DlgDisable(hDlg, IDC_LETTERBOX_BOTTOM);
  107.   DlgDisable(hDlg, IDC_LETTERBOX_RIGHT);
  108.   DlgDisable(hDlg, IDC_LETTERBOX_LEFT);
  109. }
  110. void SetCropBoxesText(HWND hDlg){
  111.   DlgSetText(hDlg, IDC_CROP_TOPOFFSET, opt_run.pp.cropTopOffset);
  112.   DlgSetText(hDlg, IDC_CROP_HEIGHT,    opt_run.pp.cropHeight);
  113.   DlgSetText(hDlg, IDC_CROP_LEFTOFFSET,opt_run.pp.cropLeftOffset);
  114.   DlgSetText(hDlg, IDC_CROP_WIDTH,     opt_run.pp.cropWidth);
  115. }
  116. void SetLetterboxBoxesText(HWND hDlg){
  117.   DlgSetText(hDlg, IDC_LETTERBOX_TOP,       opt_run.pp.letterboxTop);
  118.   DlgSetText(hDlg, IDC_LETTERBOX_BOTTOM,    opt_run.pp.letterboxBottom);
  119.   DlgSetText(hDlg, IDC_LETTERBOX_RIGHT,     opt_run.pp.letterboxRight);
  120.   DlgSetText(hDlg, IDC_LETTERBOX_LEFT,      opt_run.pp.letterboxLeft);
  121. }
  122. void GetCropBoxesText(HWND hDlg){
  123.   opt_run.pp.cropTopOffset = DlgGetText(hDlg, IDC_CROP_TOPOFFSET);
  124.   opt_run.pp.cropHeight    = DlgGetText(hDlg, IDC_CROP_HEIGHT);
  125.   opt_run.pp.cropLeftOffset= DlgGetText(hDlg, IDC_CROP_LEFTOFFSET);
  126.   opt_run.pp.cropWidth     = DlgGetText(hDlg, IDC_CROP_WIDTH);
  127. }
  128. void GetLetterboxBoxesText(HWND hDlg){
  129.   opt_run.pp.letterboxTop    = DlgGetText(hDlg, IDC_LETTERBOX_TOP);
  130.   opt_run.pp.letterboxBottom = DlgGetText(hDlg, IDC_LETTERBOX_BOTTOM);
  131.   opt_run.pp.letterboxRight  = DlgGetText(hDlg, IDC_LETTERBOX_RIGHT);
  132.   opt_run.pp.letterboxLeft   = DlgGetText(hDlg, IDC_LETTERBOX_LEFT);
  133. }
  134.  
  135. // UpdateCropAndLetterboxBoxes in postprocessing tab
  136. void UpdateCropAndLetterboxBoxes(HWND hDlg){
  137.   // when doAR is turned on, letterbox and (if needed) crop are
  138.   // turnen off automatically in opt_run.pp. We only need to disable
  139.   // the checkbox buttons.
  140.   if (opt_run.pp.doAR) {
  141.     DlgCheck(hDlg, R_OPT_PPOST_KEEPASPECT);
  142.     DlgEnable(hDlg, IDC_AR11);
  143.     DlgEnable(hDlg, IDC_AR43);
  144.     DlgEnable(hDlg, IDC_AR169);
  145.   }
  146.   else {
  147.     DlgUnCheck(hDlg, R_OPT_PPOST_KEEPASPECT);
  148.     DlgDisable(hDlg, IDC_AR11);
  149.     DlgDisable(hDlg, IDC_AR43);
  150.     DlgDisable(hDlg, IDC_AR169);
  151.   }
  152.   if(opt_run.pp.crop){
  153.     DlgUnCheck(hDlg, IDC_NOCROP);
  154.     EnableCropBoxes(hDlg);
  155.   }
  156.   else{
  157.     DlgCheck(hDlg, IDC_NOCROP);
  158.     DisableCropBoxes(hDlg);
  159.   }
  160.   if(opt_run.pp.letterbox){
  161.     DlgUnCheck(hDlg, IDC_NOLETTERBOX);
  162.     EnableLetterboxBoxes(hDlg);
  163.   }
  164.   else{
  165.     DlgCheck(hDlg, IDC_NOLETTERBOX);
  166.     DisableLetterboxBoxes(hDlg);
  167.   }
  168.   SetCropBoxesText(hDlg);
  169.   SetLetterboxBoxesText(hDlg);
  170. }
  171.  
  172.  
  173.  
  174.  
  175. // Retrieve timebase from video options tab
  176. void GetFrameRate(HWND hDlg, timebase_s *timebase){
  177.  
  178.     if(DlgIsChecked(hDlg,IDC_TB23)){ //23.976
  179.         //HACK: LSX ENCODER DOESNT LIKE RIGHT TIMEBASE
  180.         timebase->scale=        23976;
  181.         timebase->sampleSize=    1000;
  182.     }else if(DlgIsChecked(hDlg,IDC_TB24)){
  183.         timebase->scale=        24;
  184.         timebase->sampleSize=    1;
  185.     }else if(DlgIsChecked(hDlg,IDC_TB29)){
  186.         timebase->scale=        2997;
  187.         timebase->sampleSize=    100;
  188.     }else if(DlgIsChecked(hDlg,IDC_TB30)){
  189.         timebase->scale=        30;
  190.         timebase->sampleSize=    1;
  191.     }else {
  192.         timebase->scale=        25;
  193.         timebase->sampleSize=    1;
  194.     }
  195. }
  196.  
  197. ///////////////////////////////////////////////////////////
  198. //             GLOBAL    OPTIONS
  199. ///////////////////////////////////////////////////////////
  200.     // OnChildDialogInit - Positions the child dialog box to fall 
  201.     //     within the display area of the tab control. 
  202.  
  203.     VOID WINAPI OnChildDialogInit(HWND hwndDlg) 
  204.     { 
  205.     HWND hwndParent = GetParent(hwndDlg); 
  206.     DLGHDR *pHdr = (DLGHDR *) GetWindowLong( 
  207.         hwndParent, GWL_USERDATA); 
  208.     SetWindowPos(hwndDlg, HWND_TOP, 
  209.         pHdr->rcDisplay.left, pHdr->rcDisplay.top, 
  210.         0, 0, SWP_NOSIZE); 
  211.     } 
  212.  
  213.  
  214. void GetFilter(HWND hDlg){
  215.     // Check filter settings
  216.     if(DlgIsChecked(hDlg, R_OPT_PPOST_RESIZING_NEAREST))
  217.         opt_run.pp.filterMode=FILTER_NONE;
  218.     else if(DlgIsChecked(hDlg, R_OPT_PPOST_RESIZING_BILINEAR))
  219.         opt_run.pp.filterMode=FILTER_BILINEAR;
  220.     else if(DlgIsChecked(hDlg, R_OPT_PPOST_RESIZING_BICUBIC))
  221.         opt_run.pp.filterMode=FILTER_BICUBIC;
  222.     else if(DlgIsChecked(hDlg, R_OPT_PPOST_RESIZING_HQBICUBIC))
  223.         opt_run.pp.filterMode=FILTER_TABLEBICUBIC;
  224.     else 
  225.         opt_run.pp.filterMode=FILTER_TABLEBICUBIC;
  226. }
  227.  
  228. void DlgProcessingStartUp( HWND hDlg )
  229. {
  230.     //CROP
  231.  
  232.     DlgUnCheck( hDlg, R_OPT_PPOST_RESIZING_NEAREST );
  233.     DlgUnCheck( hDlg, R_OPT_PPOST_RESIZING_BILINEAR );
  234.     DlgUnCheck( hDlg, R_OPT_PPOST_RESIZING_BICUBIC );
  235.     DlgUnCheck( hDlg, R_OPT_PPOST_RESIZING_HQBICUBIC );
  236.     switch(opt_run.prof.filter)
  237.     {
  238.         case FILTER_NONE:
  239.             DlgCheck( hDlg, R_OPT_PPOST_RESIZING_NEAREST);
  240.             break;
  241.         case FILTER_BILINEAR:
  242.             DlgCheck( hDlg, R_OPT_PPOST_RESIZING_BILINEAR);
  243.             break;
  244.         case FILTER_BICUBIC:
  245.             DlgCheck( hDlg, R_OPT_PPOST_RESIZING_BICUBIC);
  246.             break;
  247.         case FILTER_TABLEBICUBIC:
  248.             DlgCheck( hDlg, R_OPT_PPOST_RESIZING_HQBICUBIC);
  249.             break;
  250.     }
  251.  
  252.     if (opt_run.prof.keepAspect & AR_43)
  253.         DlgCheck(hDlg, IDC_AR43);
  254.     else if (opt_run.prof.keepAspect & AR_169)
  255.         DlgCheck(hDlg, IDC_AR169);
  256.     else
  257.         DlgCheck(hDlg, IDC_AR11); // default VGA output AR
  258.  
  259.     // quick fix for old profiles that still allow letterboxing/cropping
  260.     // with keep AR
  261.     if (opt_run.pp.doAR) {
  262.         opt_run.pp.letterbox = false;
  263.         if (opt_run.pp.outAR & (AR_43|AR_169))
  264.             opt_run.pp.crop = false;
  265.     }
  266.  
  267.     UpdateCropAndLetterboxBoxes(hDlg);
  268.  
  269.     return;
  270. }
  271.  
  272. LRESULT CALLBACK DlgProcessing(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  273. {
  274.     switch (message)
  275.     {
  276.         case WM_INITDIALOG:
  277.                 OnChildDialogInit(hDlg);
  278.         FromConfigToPPost(&opt_run.prof, &opt_run.pp);
  279.         DlgProcessingStartUp(hDlg);
  280.                 return TRUE;
  281.  
  282.         case WM_COMMAND:
  283.             if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
  284.             {
  285.                 EndDialog(hDlg, LOWORD(wParam));
  286.                 return TRUE;
  287.             }
  288.             
  289.             switch(LOWORD(wParam)){
  290.                 case R_OPT_PPOST_KEEPASPECT:
  291.                     opt_run.pp.doAR = DlgIsChecked(processing, R_OPT_PPOST_KEEPASPECT);
  292.  
  293.                     UpdateCropAndLetterboxBoxes(hDlg);
  294.                     break;
  295.                 case IDC_AR11:
  296.                 case IDC_AR43:
  297.                 case IDC_AR169:
  298.                     if (DlgIsChecked(processing, IDC_AR11))
  299.                         opt_run.pp.outAR = AR_11;
  300.                     else if (DlgIsChecked(processing, IDC_AR43))
  301.                         opt_run.pp.outAR = AR_43;
  302.                     else if (DlgIsChecked(processing, IDC_AR169))
  303.                         opt_run.pp.outAR = AR_169;
  304.  
  305.                     UpdateCropAndLetterboxBoxes(hDlg);
  306.                     break;
  307.                 case IDC_NOCROP:
  308.                     opt_run.pp.crop=!DlgIsChecked(hDlg, IDC_NOCROP);
  309.                     if(opt_run.pp.crop)
  310.                         EnableCropBoxes(hDlg);
  311.                     else
  312.                         DisableCropBoxes(hDlg);
  313.                     break;
  314.                 case IDC_NOLETTERBOX:
  315.                     opt_run.pp.letterbox = !DlgIsChecked(hDlg, IDC_NOLETTERBOX);
  316.                     if(opt_run.pp.letterbox )
  317.                         EnableLetterboxBoxes(hDlg);
  318.                     else
  319.                         DisableLetterboxBoxes(hDlg);
  320.                     break;
  321.                 case R_OPT_PPOST_RESIZING_NEAREST:
  322.                     GetFilter(hDlg); break;
  323.                 case R_OPT_PPOST_RESIZING_BILINEAR:
  324.                     GetFilter(hDlg); break;
  325.                 case R_OPT_PPOST_RESIZING_BICUBIC:
  326.                     GetFilter(hDlg); break;
  327.                 case R_OPT_PPOST_RESIZING_HQBICUBIC:
  328.                     GetFilter(hDlg); break;
  329.  
  330.                 break;
  331.             }
  332.             break;
  333.     }
  334.     return FALSE;
  335.  
  336. }
  337.  
  338.  
  339. /* Update settings from hDlg's video section.  If all settings are valid, return
  340.  * true; if any setting is incorrect, print a warning, set focus on the erroneous
  341.  * entry and return false.
  342.  *
  343.  * The allowed sizes depend on wether we're cropping or not. If we use crop,
  344.  * the demand that sizes are a multiple of 16 goes for the cropping window,
  345.  * with some more freedom for the resizing dimensions.
  346.  */
  347. static bool DlgVideo_Check(HWND hDlg)
  348. {
  349.     // width must be smaller than 1024 always,
  350.     // a multiple of 16 if we're not cropping, a multiple of 2 if crop is on.
  351.     if(DlgGetText(hDlg, IDC_WIDTH)<=0 || DlgGetText(hDlg, IDC_WIDTH)>=4096){
  352.         PrintError(SIZE_OOR,(int)hDlg,0);
  353.         DlgSetFocus(hDlg, IDC_WIDTH);
  354.         return false;
  355.     }
  356.     if( (!opt_run.pp.crop) && ((DlgGetText(hDlg, IDC_WIDTH)%16)!=0)){
  357.         PrintError(SIZE_NOT16,(int)hDlg,0);
  358.         DlgSetFocus(hDlg, IDC_WIDTH);
  359.         return false;
  360.     }
  361.     if ( (opt_run.pp.crop) && ((DlgGetText(hDlg, IDC_WIDTH)%2)!=0)){
  362.         PrintError(INCORRECT_SETTING,(int)hDlg,0); // FIXME: should be size not /2
  363.         DlgSetFocus(hDlg, IDC_WIDTH);
  364.         return false;
  365.     }
  366.  
  367.     // a multiple of 16 if we're not cropping, free otherwise.
  368.     if(DlgGetText(hDlg, IDC_HEIGHT)<=0 || DlgGetText(hDlg, IDC_HEIGHT)>=4096){
  369.         PrintError(SIZE_OOR,(int)hDlg,0);
  370.         DlgSetFocus(hDlg, IDC_HEIGHT);
  371.         return false;
  372.     }
  373.     if( (!opt_run.pp.crop) && ((DlgGetText(hDlg, IDC_HEIGHT)%16)!=0)){
  374.         PrintError(SIZE_NOT16,(int)hDlg,0);
  375.         DlgSetFocus(hDlg, IDC_WIDTH);
  376.         return false;
  377.     }
  378.     
  379.     opt_run.pp.resWidth = DlgGetText(hDlg, IDC_WIDTH);
  380.     opt_run.pp.resHeight = DlgGetText(hDlg, IDC_HEIGHT);
  381.     return true;
  382. }
  383.  
  384. static bool DlgProcessing_Check(HWND hDlg)
  385. {
  386.     GetLetterboxBoxesText(hDlg);
  387.     GetCropBoxesText(hDlg);
  388.  
  389.     if(!CheckVideoParameters(&opt_run.pp)){
  390.         PrintError(INCORRECT_SETTING, (int)hDlg,0);
  391.         /* FIXME: we need to know where to set focus, but what's a
  392.          * clean way to do this without duplicating CheckVideoParameters() code? */
  393.         // DlgSetFocus(hDlg, LOWORD(wParam));
  394.         return false;
  395.     }
  396.  
  397.     return true;
  398. }
  399. static bool DlgGeneral_Check(HWND hDlg)
  400. {
  401.     char szTemp[256];
  402.  
  403.     if(DlgIsChecked(hDlg,IDC_COMPILE_WHOLE)) return true; /* don't bother */
  404.  
  405.     GetDlgItemText( hDlg, IDC_COMPILE_TIME, szTemp, 1024);
  406.     if(!atof(szTemp)){
  407.         PrintError(TIME_IS_NOT_POSITIVE, (int)hDlg,0);
  408.         DlgSetFocus(hDlg, IDC_COMPILE_TIME);
  409.         return false;
  410.     }
  411.  
  412.     if(opt_run.conf.displayTimeUnits == 0) {
  413.         /* it's in seconds; switch to frames */
  414.         timebase_s timebase;
  415.         GetFrameRate(video, &timebase);
  416.  
  417.         GetDlgItemText( hDlg, IDC_COMPILE_TIME, szTemp, 1024);
  418.         opt_run.opt.frames_compile = (int)(atof(szTemp) * GET_FRAMERATE(timebase));
  419.     } else {
  420.         /* it's in frames; copy it directly */
  421.         GetDlgItemText( hDlg, IDC_COMPILE_TIME, szTemp, 1024);
  422.         opt_run.opt.frames_compile = atoi(szTemp);
  423.     } 
  424.  
  425.     return true;
  426. }
  427.  
  428. void DlgVideoStartUp( HWND hDlg )
  429. {
  430.  
  431.         DlgSetText(hDlg, IDC_WIDTH, opt_run.pp.resWidth);
  432.     DlgSetText(hDlg, IDC_HEIGHT, opt_run.pp.resHeight);
  433.     
  434.     // Uncheck all checkboxes
  435.     DlgUnCheck( hDlg, IDC_TB23 );
  436.     DlgUnCheck( hDlg, IDC_TB24 );
  437.     DlgUnCheck( hDlg, IDC_TB29 );
  438.     DlgUnCheck( hDlg, IDC_TB30 );
  439.     DlgUnCheck( hDlg, IDC_TB25 );
  440.     switch( opt_run.prof.timeBase.scale )
  441.     {
  442.     case 23976: //23.976
  443.       DlgCheck(hDlg, IDC_TB23);
  444.       break;
  445.     case 24:    //24
  446.       DlgCheck(hDlg, IDC_TB24);
  447.       break; 
  448.     case 2997: //29.97
  449.       DlgCheck(hDlg, IDC_TB29);
  450.       DlgDisable(hDlg, R_OPT_TIMEBASE_RECONS);
  451.       opt_run.prof.recons_progressive = 0;
  452.       break;
  453.     case 30:    //30
  454.       DlgCheck(hDlg, IDC_TB30);
  455.       DlgDisable(hDlg, R_OPT_TIMEBASE_RECONS);
  456.       opt_run.prof.recons_progressive = 0;
  457.       break;
  458.     default:    //if not, set 25
  459.       DlgCheck(hDlg, IDC_TB25);
  460.       DlgDisable(hDlg, R_OPT_TIMEBASE_RECONS);
  461.       opt_run.prof.recons_progressive = 0;
  462.       break;
  463.     }
  464.  
  465.     DlgCheckBoxState( hDlg, R_OPT_IDCT_AUTOSELECT, opt_run.conf.idctAutoSelect );
  466.     if( DlgIsChecked(hDlg, R_OPT_IDCT_AUTOSELECT) )
  467.       DlgDisable(hDlg, R_OPT_IDCT_SELECTIONBUTTON );
  468.     else
  469.       DlgEnable(hDlg, R_OPT_IDCT_SELECTIONBUTTON );
  470.     
  471.     DlgSetText(hDlg, R_OPT_VIDEO_DEINTERLACE_THRESHOLD, opt_run.prof.threshold);
  472.     DlgCheckBoxState( hDlg, R_OPT_TIMEBASE_RECONS, opt_run.prof.recons_progressive);
  473.     DlgCheckBoxState( hDlg, R_OPT_VIDEO_DEINTERLACE_CHECK, opt_run.prof.deinterlace);
  474.     DlgCheckBoxState( hDlg, R_OPT_VIDEO_DEINTERLACE_BLEND, opt_run.prof.blend);
  475.     if(opt_run.prof.deinterlace)
  476.     {
  477.       DlgEnable(hDlg, R_OPT_VIDEO_DEINTERLACE_BLEND);
  478.       DlgEnable(hDlg, R_OPT_VIDEO_DEINTERLACE_THRESHOLD);
  479.     }
  480.     else
  481.     {
  482.       DlgDisable(hDlg, R_OPT_VIDEO_DEINTERLACE_BLEND);
  483.       DlgDisable(hDlg, R_OPT_VIDEO_DEINTERLACE_THRESHOLD);
  484.     }
  485.     
  486.     DlgCheck( hDlg, IDC_DUALPASSCHECK, opt_run.conf.bDualPass );
  487.     DlgCheck( hDlg, IDC_DONTRESIZE, !opt_run.pp.bResize );
  488.     DlgEnable( hDlg, IDC_WIDTH, opt_run.pp.bResize );
  489.     DlgEnable( hDlg, IDC_HEIGHT, opt_run.pp.bResize );
  490.  
  491.     return;
  492. }
  493.  
  494. LRESULT CALLBACK DlgVideo(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  495. {
  496.   int i;
  497.   switch (message)
  498.   {
  499.         case WM_INITDIALOG:
  500.       OnChildDialogInit(hDlg);
  501.       FromConfigToPPost(&opt_run.prof, &opt_run.pp); 
  502.       DlgVideoStartUp( hDlg );
  503.       
  504.       return TRUE;
  505.       
  506.     case WM_COMMAND:
  507.       if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
  508.       {
  509.         EndDialog(hDlg, LOWORD(wParam));
  510.         return TRUE;
  511.       }
  512.       TSelectorDialog selDlgInfo;
  513.       // framerate
  514.       switch(LOWORD(wParam))
  515.       {
  516.       case R_OPT_IDCT_PERFORMIEEE1180:
  517.         {
  518.           CIEEE1180Dlg obTest(hDlg, rs.hInst);
  519.           // Initialize idct
  520.           void (* pInitIdct)() = rs.video->GetIdctInfo(opt_run.conf.idctIndex)->InitIdct;
  521.           void (* pDeInit)() = rs.video->GetIdctInfo(opt_run.conf.idctIndex)->DeInitIdct;
  522.  
  523.           if(pInitIdct)
  524.             pInitIdct();
  525.           obTest.IsIEEE1180(rs.video->GetIdctInfo(opt_run.conf.idctIndex)->Idct,
  526.                             rs.video->GetIdctInfo(opt_run.conf.idctIndex)->sDescription);
  527.           if(pDeInit)
  528.             pDeInit();
  529.           
  530.         }
  531.         break;
  532.       case R_OPT_IDCT_SELECTIONBUTTON:
  533.         selDlgInfo.tittle = "iDCT Selection";
  534.         selDlgInfo.lateral_text = "Select iDCT";
  535.         selDlgInfo.button_text  = "Ok";
  536.         selDlgInfo.section_count = 1;
  537.         selDlgInfo.sections_titles[0] = "Available iDCTs";
  538.  
  539.         LPFMpegIdctInfo idctInfo;
  540.         selDlgInfo.strings[0].SetArraySize(rs.video->GetIdctCount());
  541.         selDlgInfo.helpstrings[0].SetArraySize(rs.video->GetIdctCount());
  542.         for(i=0; i<rs.video->GetIdctCount(); i++)
  543.         {
  544.           idctInfo = rs.video->GetIdctInfo(i);
  545.           //selDlgInfo.strings[0][i] =  (char *)(idctInfo->sDescription);
  546.           selDlgInfo.strings[0][i] =  (char *)(idctInfo->sName);
  547.           selDlgInfo.helpstrings[0][i] =  (char *)(idctInfo->sDescription);
  548.           selDlgInfo.section_mode[0] = MUST_SELECT | SINGLE_SELECT;
  549.         }
  550.         ResetSelections(&selDlgInfo);
  551.         // Select first one
  552.         selDlgInfo.selected[0][opt_run.conf.idctIndex] = 1;
  553.         OpenSelectorDialog( hDlg, hInst, &selDlgInfo );
  554.         // Get result of selection
  555.         opt_run.conf.idctIndex = GetFirstSelected( &selDlgInfo, 0 );
  556.  
  557.         break;
  558.       case R_OPT_IDCT_AUTOSELECT:
  559.         if( DlgIsChecked(hDlg, R_OPT_IDCT_AUTOSELECT) )
  560.           DlgDisable(hDlg, R_OPT_IDCT_SELECTIONBUTTON );
  561.         else
  562.           DlgEnable(hDlg, R_OPT_IDCT_SELECTIONBUTTON );
  563.         break;
  564.       case R_OPT_VIDEO_DEINTERLACE_CHECK:
  565.         if(DlgIsChecked(hDlg, R_OPT_VIDEO_DEINTERLACE_CHECK) )
  566.         {
  567.           DlgEnable(hDlg, R_OPT_VIDEO_DEINTERLACE_BLEND);
  568.           DlgEnable(hDlg, R_OPT_VIDEO_DEINTERLACE_THRESHOLD);
  569.         }
  570.         else
  571.         {
  572.           DlgDisable(hDlg, R_OPT_VIDEO_DEINTERLACE_BLEND);
  573.           DlgDisable(hDlg, R_OPT_VIDEO_DEINTERLACE_THRESHOLD);
  574.         }
  575.         break;
  576.       case IDC_TB23: 
  577.       case IDC_TB24:
  578.         DlgEnable(hDlg, R_OPT_TIMEBASE_RECONS);
  579.         break; 
  580.       case IDC_TB25:
  581.       case IDC_TB29:
  582.       case IDC_TB30:
  583.         DlgDisable(hDlg, R_OPT_TIMEBASE_RECONS);
  584.         opt_run.prof.recons_progressive = 0;
  585.         break;
  586.       case IDC_DUALPASSCHECK:
  587.         opt_run.conf.bDualPass = DlgIsChecked( hDlg, IDC_DUALPASSCHECK );
  588.         break;
  589.       case IDC_DONTRESIZE:
  590.         opt_run.pp.bResize = !DlgIsChecked( hDlg, IDC_DONTRESIZE );
  591.         DlgVideoStartUp(hDlg);
  592.         break;
  593.       }
  594.   }
  595.   return FALSE;
  596. }
  597.  
  598.  
  599. void DlgAudioStartUp( HWND hDlg )
  600. {
  601.             //Setting init options
  602.                 DlgUnCheck( hDlg, R_OPT_AUDIO_DOAUDIO );
  603.                 DlgUnCheck( hDlg, R_OPT_AUDIO_DSC );
  604.                 DlgUnCheck( hDlg, R_OPT_AUDIO_NOAUDIO );
  605.  
  606.                 int audiomode = -1;
  607.                 if(rs.audio)
  608.         {
  609.                     if(rs.audio->GetFormat()!=MpegAudio  &&  rs.audio->GetFormat()!=Ac3 )
  610.           {
  611.                         DlgDisable(hDlg, R_OPT_AUDIO_DOAUDIO);
  612.                         DlgDisable(hDlg, R_OPT_AUDIO_DSC);
  613.                         audiomode = NO_AUDIO;
  614.                     }
  615.                 }
  616.                 else{
  617.                         DlgDisable(hDlg, R_OPT_AUDIO_DOAUDIO);
  618.                         DlgDisable(hDlg, R_OPT_AUDIO_DSC);
  619.                         audiomode = NO_AUDIO;
  620.                 }
  621.  
  622.                 if (audiomode < 0)
  623.                     audiomode = opt_run.prof.audioMode;
  624.  
  625.                 DlgUnCheck( hDlg, IDC_44100 );
  626.                 DlgUnCheck( hDlg, IDC_48000 );
  627.                 if(opt_run.prof.outSampleFrequency==44100)
  628.                     DlgCheck(hDlg, IDC_44100);
  629.                 else
  630.                     DlgCheck(hDlg, IDC_48000);
  631.  
  632.                 switch( audiomode ){
  633.                     case DO_AUDIO:
  634.                         DlgCheck(hDlg, R_OPT_AUDIO_DOAUDIO);
  635.                         DlgDisable(files, IDC_OUTPUT_FILE2);
  636.                         DlgDisable(files, IDC_FILEBUTTON2);
  637.                         if(opt_run.prof.sampleFreqSameAsInput){
  638.                             DlgDisable(hDlg, IDC_48000);
  639.                             DlgDisable(hDlg, IDC_44100);
  640.                             DlgCheck(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  641.                         }
  642.                         else{
  643.                             DlgEnable(hDlg, IDC_48000);
  644.                             DlgEnable(hDlg, IDC_44100);
  645.                             DlgUnCheck(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  646.                         }
  647.                         DlgEnable(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  648.                         break;
  649.                     case DSC:
  650.                         DlgCheck(hDlg, R_OPT_AUDIO_DSC);
  651.                         DlgEnable(files, IDC_OUTPUT_FILE2);
  652.                         DlgEnable(files, IDC_FILEBUTTON2);
  653.                         DlgDisable(hDlg, IDC_48000);
  654.                         DlgDisable(hDlg, IDC_44100);
  655.                         DlgDisable(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  656.                         break;
  657.                     case NO_AUDIO:
  658.                         DlgCheck(hDlg, R_OPT_AUDIO_NOAUDIO);
  659.                         DlgDisable(files, IDC_OUTPUT_FILE2);
  660.                         DlgDisable(files, IDC_FILEBUTTON2);
  661.                         DlgDisable(hDlg, IDC_48000);
  662.                         DlgDisable(hDlg, IDC_44100);
  663.                         DlgDisable(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  664.                         break;
  665.                 }
  666.     return;
  667. }
  668.  
  669. LRESULT CALLBACK DlgAudio(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  670. {
  671.     switch (message)
  672.     {
  673.         case WM_INITDIALOG:
  674.                 OnChildDialogInit(hDlg);
  675.                 DlgAudioStartUp( hDlg );
  676.                 return TRUE;
  677.  
  678.         case WM_COMMAND:
  679.             if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
  680.             {
  681.                 EndDialog(hDlg, LOWORD(wParam));
  682.                 return TRUE;
  683.             }
  684.             switch(LOWORD(wParam)){
  685.                 case R_OPT_AUDIO_SAMPLING_SAMEASINPUT:
  686.                     if(DlgIsChecked(hDlg,R_OPT_AUDIO_SAMPLING_SAMEASINPUT))
  687.                     {
  688.                         DlgDisable(hDlg, IDC_48000);
  689.                         DlgDisable(hDlg, IDC_44100);
  690.                     }
  691.                     else{
  692.                         DlgEnable(hDlg, IDC_48000);
  693.                         DlgEnable(hDlg, IDC_44100);
  694.                     }
  695.                     break;
  696.                 case R_OPT_AUDIO_DOAUDIO:
  697.                     DlgDisable(files, IDC_OUTPUT_FILE2);
  698.                     DlgDisable(files, IDC_FILEBUTTON2);
  699.                     if(opt_run.prof.sampleFreqSameAsInput){
  700.                         DlgDisable(hDlg, IDC_48000);
  701.                         DlgDisable(hDlg, IDC_44100);
  702.                         DlgCheck(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  703.                     }
  704.                     else{
  705.                         DlgEnable(hDlg, IDC_48000);
  706.                         DlgEnable(hDlg, IDC_44100);
  707.                         DlgUnCheck(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  708.                     }
  709.                     DlgEnable(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  710.                     break;
  711.                 case R_OPT_AUDIO_DSC:
  712.                     DlgEnable(files, IDC_OUTPUT_FILE2);
  713.                     DlgEnable(files, IDC_FILEBUTTON2);
  714.                     DlgDisable(hDlg, IDC_48000);
  715.                     DlgDisable(hDlg, IDC_44100);
  716.                     DlgDisable(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  717.                     break;
  718.                 case R_OPT_AUDIO_NOAUDIO:
  719.                     DlgDisable(files, IDC_OUTPUT_FILE2);
  720.                     DlgDisable(files, IDC_FILEBUTTON2);
  721.                     DlgDisable(hDlg, IDC_48000);
  722.                     DlgDisable(hDlg, IDC_44100);
  723.                     DlgDisable(hDlg, R_OPT_AUDIO_SAMPLING_SAMEASINPUT);
  724.                     break;
  725.             }
  726.             break;
  727.     }
  728.     return FALSE;
  729. }
  730.  
  731.  
  732. void DlgGeneralStartUp( HWND hDlg )
  733. {
  734.   if(opt_run.conf.compileWhole) {
  735.     // whole file
  736.     DlgCheck( hDlg, IDC_COMPILE_WHOLE);
  737.           // disable edit box and unit selection
  738.     DlgDisable( hDlg, IDC_COMPILE_TIME);
  739.     DlgDisable( hDlg, R_GENERAL_COMPTIME_SECONDSCOMPILE);
  740.         DlgDisable( hDlg, R_GENERAL_COMPTIME_FRAMESCOMPILE);
  741.   }
  742.   else
  743.   {
  744.     DlgUnCheck( hDlg, IDC_COMPILE_WHOLE);
  745.     DlgEnable(hDlg, IDC_COMPILE_TIME);
  746.     DlgEnable(hDlg, R_GENERAL_COMPTIME_SECONDSCOMPILE);
  747.     DlgEnable(hDlg, R_GENERAL_COMPTIME_FRAMESCOMPILE);
  748.   }
  749.  
  750.     opt_run.opt.frames_compile = opt_run.conf.framesToCompile;
  751.             
  752.   /* make sure we have a sane frame count, and not our magic '300000' */
  753.   if(opt_run.conf.compileWhole) opt_run.opt.frames_compile = 100;
  754.   
  755.   if(opt_run.conf.displayTimeUnits == 0) {
  756.         /* secs */
  757.         timebase_s timebase;
  758.       GetFrameRate(video, &timebase);
  759.       
  760.       DlgSetDouble( hDlg, IDC_COMPILE_TIME, opt_run.conf.framesToCompile / GET_FRAMERATE(timebase));
  761.       DlgCheck(hDlg, R_GENERAL_COMPTIME_SECONDSCOMPILE);
  762.   } else if(opt_run.conf.displayTimeUnits == 1) {
  763.     /* frames */
  764.     DlgSetText( hDlg, IDC_COMPILE_TIME, opt_run.conf.framesToCompile);
  765.     DlgCheck(hDlg, R_GENERAL_COMPTIME_FRAMESCOMPILE);
  766.   }
  767.   
  768.   DlgSetText(hDlg, IDC_LURKSIZE, opt_run.conf.lurk_size );
  769.   
  770.   if(opt_run.conf.shutdown)
  771.     DlgCheck(hDlg, R_GENERAL_MISC_SHUTDOWN);
  772.   else
  773.     DlgUnCheck(hDlg, R_GENERAL_MISC_SHUTDOWN);
  774.   
  775.   // 
  776.   switch( opt_run.conf.nProcessingFormat )
  777.   {
  778.     case FRAME_RGB32:
  779.       DlgCheck(hDlg, IDC_PROCESSINGFORMAT_RGB);
  780.       break;
  781.     case FRAME_YUY2:
  782.       DlgCheck(hDlg, IDC_PROCESSINGFORMAT_YUY2);
  783.       break;
  784.     case FRAME_YV12:
  785.       DlgCheck(hDlg, IDC_PROCESSINGFORMAT_YV12);
  786.       break;
  787.     default:
  788.       DlgCheck(hDlg, IDC_PROCESSINGFORMAT_RGB);
  789.       break;
  790.   }
  791.  
  792.   DlgCheck( hDlg, IDC_PROCESSINGAUTO, opt_run.conf.bProcessingFormatAuto );
  793.  
  794.   DlgEnable( hDlg, IDC_PROCESSINGFORMAT_RGB, opt_run.conf.bProcessingFormatAuto==false );
  795.   DlgEnable( hDlg, IDC_PROCESSINGFORMAT_YUY2, opt_run.conf.bProcessingFormatAuto==false );
  796.   DlgEnable( hDlg, IDC_PROCESSINGFORMAT_YV12, opt_run.conf.bProcessingFormatAuto==false );
  797.  
  798.   return;
  799. }
  800.  
  801. LRESULT CALLBACK DlgGeneral(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  802. {
  803.     char szTemp[1024];
  804.     switch (message)
  805.     {
  806.         case WM_INITDIALOG:
  807.             OnChildDialogInit(hDlg);
  808.             DlgGeneralStartUp(hDlg);
  809.  
  810.                 return TRUE;
  811.  
  812.         case WM_COMMAND:
  813.             if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
  814.             {
  815.                 EndDialog(hDlg, LOWORD(wParam));
  816.                 return TRUE;
  817.             }
  818.             switch(LOWORD(wParam)){
  819.                 case IDC_COMPILE_WHOLE:
  820.                     opt_run.conf.compileWhole = DlgIsChecked(hDlg,IDC_COMPILE_WHOLE);
  821.           DlgGeneralStartUp( hDlg );
  822.                     break;
  823.                 case R_GENERAL_COMPTIME_SECONDSCOMPILE:
  824.                     if(HIWORD(wParam) == BN_CLICKED && opt_run.conf.displayTimeUnits == 1) {
  825.                         /* switch IDC_COMPILE_TIME to seconds */                        
  826.                         timebase_s timebase;
  827.                         GetFrameRate(video, &timebase);
  828.  
  829.                         GetDlgItemText( hDlg, IDC_COMPILE_TIME, szTemp, 1024);
  830.                         DlgSetDouble( hDlg, IDC_COMPILE_TIME, atoi(szTemp) / GET_FRAMERATE(timebase));
  831.                         opt_run.conf.displayTimeUnits = 0;
  832.                     }
  833.                     
  834.  
  835.                     break;
  836.                 case R_GENERAL_COMPTIME_FRAMESCOMPILE:
  837.                     if(HIWORD(wParam) == BN_CLICKED && opt_run.conf.displayTimeUnits == 0) {
  838.                         /* switch IDC_COMPILE_TIME to frames */
  839.                         timebase_s timebase;
  840.                         GetFrameRate(video, &timebase);
  841.  
  842.                         GetDlgItemText( hDlg, IDC_COMPILE_TIME, szTemp, 1024);
  843.                         DlgSetText( hDlg, IDC_COMPILE_TIME, (int) (atof(szTemp) * GET_FRAMERATE(timebase)));
  844.                         opt_run.conf.displayTimeUnits = 1;
  845.                     }
  846.                     break;
  847.         case IDC_PROCESSINGAUTO:
  848.           opt_run.conf.bProcessingFormatAuto = DlgIsChecked( hDlg, IDC_PROCESSINGAUTO );
  849.           DlgGeneralStartUp( hDlg );
  850.           break;
  851.         case IDC_PROCESSINGFORMAT_YUY2:
  852.         case IDC_PROCESSINGFORMAT_RGB:
  853.         case IDC_PROCESSINGFORMAT_YV12:
  854.           opt_run.conf.nProcessingFormat = DlgIsChecked( general, IDC_PROCESSINGFORMAT_RGB ) ? FRAME_RGB32 :
  855.                                            DlgIsChecked( general, IDC_PROCESSINGFORMAT_YUY2 )? FRAME_YUY2  :
  856.                                            DlgIsChecked( general, IDC_PROCESSINGFORMAT_YV12 ) ? FRAME_YV12  : FRAME_RGB32;
  857.           break;
  858.             }
  859.             break;
  860.     }
  861.     return FALSE;
  862. }
  863.  
  864. void DlgFilesStartUp( HWND hDlg )
  865. {
  866.     DlgSetText(hDlg, IDC_OUTPUT_FILE1, opt_run.conf.outputFile);
  867.     DlgSetText(hDlg, IDC_OUTPUT_FILE2, opt_run.conf.audioOutFile);    
  868.     if(opt_run.conf.warn_overwrite)
  869.         DlgCheck(hDlg, R_FILES_WARN);
  870.     else
  871.         DlgUnCheck(hDlg, R_FILES_WARN);
  872.     return;
  873. }
  874.  
  875. LRESULT CALLBACK DlgFiles(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  876. {
  877.     char szTemp[MAXFILENAME];
  878.  
  879.     switch (message)
  880.     {
  881.         case WM_INITDIALOG:
  882.             OnChildDialogInit(hDlg);
  883.             DlgFilesStartUp( hDlg );
  884.             return TRUE;
  885.  
  886.         case WM_COMMAND:
  887.             if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
  888.             {
  889.                 EndDialog(hDlg, LOWORD(wParam));
  890.                 return TRUE;
  891.             }
  892.             switch(LOWORD(wParam)){
  893.                 case IDC_FILEBUTTON1:
  894.                     strcpy( szTemp, opt_run.conf.outputFile);
  895.                     if(GetOutputFileName(hDlg, szTemp, opt_run.conf.outputDir, "FlasK MPEG - Select output video file")){
  896.                         DlgSetText(hDlg, IDC_OUTPUT_FILE1, szTemp);
  897.                     }
  898.                     break;
  899.                 case IDC_FILEBUTTON2:
  900.                     strcpy( szTemp, opt_run.conf.audioOutFile);
  901.                     if(GetOutputFileName(hDlg, szTemp, opt_run.conf.outputDir, "FlasK MPEG - Select output audio file")){
  902.                         DlgSetText(hDlg, IDC_OUTPUT_FILE2, szTemp);
  903.                     }
  904.                     break;
  905.             }
  906.             break;
  907.     }
  908.     return FALSE;
  909. }
  910. // DoLockDlgRes - loads and locks a dialog template resource. 
  911. // Returns the address of the locked resource. 
  912. // lpszResName - name of the resource 
  913. DLGTEMPLATE * WINAPI DoLockDlgRes(LPCSTR lpszResName) 
  914.     HRSRC hrsrc = FindResource(NULL, lpszResName, RT_DIALOG); 
  915.     HGLOBAL hglb = LoadResource(hInst, hrsrc); 
  916.     return (DLGTEMPLATE *) LockResource(hglb); 
  917.  
  918.  
  919. // OnSelChanged - processes the TCN_SELCHANGE notification. 
  920. // hwndDlg - handle to the parent dialog box. 
  921. VOID WINAPI OnSelChanged(HWND hwndDlg) 
  922.         DLGHDR *pHdr = (DLGHDR *) GetWindowLong( 
  923.         hwndDlg, GWL_USERDATA); 
  924.     int iSel =opt_run.conf.selectedTab= TabCtrl_GetCurSel(pHdr->hwndTab); 
  925.  
  926.     // Hide the current child dialog box, if any. 
  927.     if (pHdr->hwndDisplay != NULL) 
  928.         ShowWindow(pHdr->hwndDisplay,SW_HIDE); 
  929.  
  930.     // Show. 
  931.     pHdr->hwndDisplay = pHdr->DlgTabs[iSel];
  932.         ShowWindow(pHdr->hwndDisplay,SW_SHOW);
  933.  
  934.  
  935. VOID WINAPI TabbedDialogInit(HWND hwndDlg) 
  936.     pHdr = (DLGHDR *) LocalAlloc(LPTR, sizeof(DLGHDR)); 
  937.     DWORD dwDlgBase = GetDialogBaseUnits(); 
  938.     int cxMargin = LOWORD(dwDlgBase) / 4; 
  939.     int cyMargin = HIWORD(dwDlgBase) / 8; 
  940.     TCITEM tie; 
  941.     RECT rcTab; 
  942.  
  943.  
  944.     // Save a pointer to the DLGHDR structure. 
  945.     SetWindowLong(hwndDlg, GWL_USERDATA, (LONG) pHdr); 
  946.  
  947.     // Create the tab control. 
  948.     InitCommonControls(); 
  949.     pHdr->hwndTab = CreateWindow( 
  950.         WC_TABCONTROL, "", 
  951.         WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 
  952.         0, 0, 100, 100, 
  953.         hwndDlg, NULL, hInst, NULL 
  954.         ); 
  955.     if (pHdr->hwndTab == NULL) {
  956.         return ;
  957.     }
  958.     // Set font
  959.     SendMessage(pHdr->hwndTab, WM_SETFONT, (WPARAM)myFont, MAKELPARAM(TRUE, 0));    
  960.  
  961.     // Add a tab for each of the three child dialog boxes. 
  962.     tie.mask = TCIF_TEXT | TCIF_IMAGE; 
  963.     tie.iImage = -1; 
  964.     tie.pszText = "Video"; 
  965.     TabCtrl_InsertItem(pHdr->hwndTab, 0, &tie); 
  966.     tie.pszText = "Audio"; 
  967.     TabCtrl_InsertItem(pHdr->hwndTab, 1, &tie); 
  968.     tie.pszText = "Post Processing"; 
  969.     TabCtrl_InsertItem(pHdr->hwndTab, 2, &tie); 
  970.      tie.pszText = "Files"; 
  971.     TabCtrl_InsertItem(pHdr->hwndTab, 3, &tie); 
  972.      tie.pszText = "General"; 
  973.     TabCtrl_InsertItem(pHdr->hwndTab, 4, &tie); 
  974.  
  975.  
  976.     SetRectEmpty(&rcTab); 
  977.     rcTab.right = (292 * LOWORD(dwDlgBase)) / 4; 
  978.     rcTab.bottom = (130 * HIWORD(dwDlgBase)) / 8; 
  979.  
  980.     // Calculate how large to make the tab control, so 
  981.     // the display area can accommodate all the child dialog boxes. 
  982.     TabCtrl_AdjustRect(pHdr->hwndTab, TRUE, &rcTab); 
  983.     OffsetRect(&rcTab, cxMargin - rcTab.left, 
  984.             cyMargin - rcTab.top); 
  985.  
  986.     // Calculate the display rectangle. 
  987.     CopyRect(&pHdr->rcDisplay, &rcTab); 
  988.     TabCtrl_AdjustRect(pHdr->hwndTab, FALSE, &pHdr->rcDisplay); 
  989.  
  990.     // Set the size and position of the tab control, buttons, 
  991.     // and dialog box. 
  992.     SetWindowPos(pHdr->hwndTab, NULL, rcTab.left, rcTab.top, 
  993.             rcTab.right - rcTab.left, rcTab.bottom - rcTab.top, 
  994.             SWP_NOZORDER); 
  995.  
  996.   
  997.     //Create dialogs
  998.     // files tab has dependences from all the others (audio)
  999.     files=        pHdr->DlgTabs[3]=CreateDialog(hInst, MAKEINTRESOURCE(DLG_FILES), hwndDlg, (DLGPROC)DlgFiles);
  1000.  
  1001.     video=        pHdr->DlgTabs[0]=CreateDialog(hInst, MAKEINTRESOURCE(DLG_VIDEO_OPTIONS), hwndDlg, (DLGPROC)DlgVideo);
  1002.     audio=        pHdr->DlgTabs[1]=CreateDialog(hInst, MAKEINTRESOURCE(DLG_AUDIO_OPTIONS), hwndDlg, (DLGPROC)DlgAudio);
  1003.     processing=    pHdr->DlgTabs[2]=CreateDialog(hInst, MAKEINTRESOURCE(DLG_PROCESSING_OPTIONS), hwndDlg, (DLGPROC)DlgProcessing);
  1004.     general=    pHdr->DlgTabs[4]=CreateDialog(hInst, MAKEINTRESOURCE(DLG_GENERAL), hwndDlg, (DLGPROC)DlgGeneral);
  1005.  
  1006.     pHdr->DlgTabCheck[0] = DlgVideo_Check;
  1007.     pHdr->DlgTabCheck[1] = pHdr->DlgTabCheck[3] = NULL;
  1008.     pHdr->DlgTabCheck[2] = DlgProcessing_Check;
  1009.     pHdr->DlgTabCheck[4] = DlgGeneral_Check;
  1010.  
  1011.     // Select Tab from options
  1012.     TabCtrl_SetCurSel(pHdr->hwndTab, opt_run.conf.selectedTab);
  1013.     OnSelChanged(hwndDlg); 
  1014.     
  1015.  
  1016.  
  1017. // RefreshTabsFromProfile()
  1018. //    Refreses the current tabs from a given profile
  1019. void RefreshTabsFromProfile(HWND hDlg)
  1020. {
  1021.     //Select Tab from profile
  1022.     TabCtrl_SetCurSel(pHdr->hwndTab, opt_run.conf.selectedTab);
  1023.     OnSelChanged(hDlg);
  1024.  
  1025.     //Get post processing options from config
  1026.     FromConfigToPPost(&opt_run.prof, &opt_run.pp);
  1027.     
  1028.     DlgProcessingStartUp( processing );
  1029.     DlgVideoStartUp( video );
  1030.     DlgAudioStartUp( audio );
  1031.     DlgGeneralStartUp( general );
  1032.     DlgFilesStartUp( files );
  1033.  
  1034.     return;
  1035. }
  1036.  
  1037. void RefreshListBox( HWND hDlg )
  1038. {
  1039.     int i;
  1040.     //Language Selection
  1041.     //DlgSetText(hDlg, R_WELCOME_LANG, GS(MENU_LANGUAGE));
  1042.     ListClean(GetDlgItem(hDlg, IDC_PROFILES_LIST));
  1043.     for(i=0; i<rs.profiler->GetCount() ; i++){
  1044.         ListAddText(GetDlgItem(hDlg, IDC_PROFILES_LIST), (rs.profiler->Get(i))->profile_name );
  1045.     }
  1046.     ListSetCur(GetDlgItem(hDlg, IDC_PROFILES_LIST), rs.profiler->GetSelectedIndex() );
  1047.     return;
  1048. }
  1049.  
  1050. void RefreshOptionsDialog( HWND hDlg )
  1051. {
  1052.     // Get selected profile
  1053.     memcpy( &opt_run.prof, rs.profiler->GetSelected(), sizeof(TProfile) );
  1054.  
  1055.     //Get post processing options from config
  1056.     FromConfigToPPost(&opt_run.prof, &opt_run.pp);
  1057.  
  1058.     RefreshListBox(hDlg);
  1059.     RefreshTabsFromProfile(hDlg);
  1060.     return;
  1061. }
  1062.  
  1063. void RetrieveProfile( HWND hDlg )
  1064. {
  1065.  
  1066.  
  1067.         //Video options
  1068.         opt_run.pp.resWidth  = DlgGetText( video, IDC_WIDTH);
  1069.         opt_run.pp.resHeight = DlgGetText( video, IDC_HEIGHT);
  1070.  
  1071.     //iDCT options
  1072.     if( opt_run.conf.idctAutoSelect = DlgIsChecked( video, R_OPT_IDCT_AUTOSELECT ) )
  1073.       opt_run.conf.idctIndex = rs.video->SelectIdctDefault();
  1074.  
  1075.  
  1076.         DlgCheckBoxState( hDlg, R_OPT_VIDEO_DEINTERLACE_CHECK, opt_run.prof.deinterlace);
  1077.         DlgCheckBoxState( hDlg, R_OPT_VIDEO_DEINTERLACE_BLEND, opt_run.prof.blend);
  1078.  
  1079.         //Retrieve timebase
  1080.         GetFrameRate( video, &opt_run.prof.timeBase );
  1081.         // opt_run.prof.secondsToCompile = opt_run.opt.seconds;
  1082.         opt_run.conf.framesToCompile  = opt_run.opt.frames_compile;
  1083.         opt_run.prof.recons_progressive = DlgIsChecked(video, R_OPT_TIMEBASE_RECONS);
  1084.  
  1085.         opt_run.pp.deinterlace   = DlgIsChecked(video, R_OPT_VIDEO_DEINTERLACE_CHECK);
  1086.         opt_run.pp.blend_fields  = DlgIsChecked(video, R_OPT_VIDEO_DEINTERLACE_BLEND);
  1087.         opt_run.pp.threshold     = DlgGetText(video, R_OPT_VIDEO_DEINTERLACE_THRESHOLD);
  1088.         //Audio options
  1089.             if(DlgIsChecked(audio, R_OPT_AUDIO_DSC))
  1090.                 opt_run.prof.audioMode=DSC;
  1091.             else if(DlgIsChecked(audio, R_OPT_AUDIO_DOAUDIO)){
  1092.                     opt_run.prof.audioMode=DO_AUDIO;
  1093.                     if(DlgIsChecked(audio, IDC_48000)) opt_run.prof.outSampleFrequency=48000;
  1094.                     else opt_run.prof.outSampleFrequency=44100;
  1095.                     if(DlgIsChecked(audio, R_OPT_AUDIO_SAMPLING_SAMEASINPUT)) opt_run.prof.sampleFreqSameAsInput=true;
  1096.                     else opt_run.prof.sampleFreqSameAsInput=false;
  1097.                 }
  1098.                 else 
  1099.                     opt_run.prof.audioMode=NO_AUDIO;
  1100.  
  1101.         //Processing
  1102.         //Files
  1103.         DlgGetText( files, IDC_OUTPUT_FILE1, opt_run.conf.outputFile);    
  1104.         DlgGetText( files, IDC_OUTPUT_FILE2, opt_run.conf.audioOutFile);
  1105.         opt_run.conf.warn_overwrite = DlgIsChecked(files, R_FILES_WARN);
  1106.         
  1107.         //General
  1108.         opt_run.conf.shutdown = DlgIsChecked(general, R_GENERAL_MISC_SHUTDOWN);
  1109.         if(DlgIsChecked(general,IDC_COMPILE_WHOLE)){ //If we don't have the CompileWhole
  1110.             opt_run.conf.framesToCompile = 3000000; // at least 25hrs at 30fps
  1111.         }
  1112.         else
  1113.         {
  1114.             opt_run.conf.framesToCompile =  opt_run.opt.frames_compile;
  1115.         }
  1116.     opt_run.conf.lurk_size = DlgGetText( general, IDC_LURKSIZE );
  1117.  
  1118.         // Post Processing
  1119.         FromPPostToConfig(&opt_run.prof, &opt_run.pp);
  1120.         // Right now, all the data from the current options is in opt_run.prof
  1121.         return;
  1122. }
  1123.  
  1124. // Mesage handler for output options
  1125. LRESULT CALLBACK OutputOptionsDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  1126. {
  1127.     
  1128.     static LOGFONT logFont;
  1129.     char szTemp[MAX_PATH];
  1130.  
  1131.     switch (message)
  1132.     {
  1133.         case WM_INITDIALOG:
  1134.       // Get selected profile
  1135.       memcpy( &opt_run.prof, (TProfile *)lParam, sizeof(TProfile) );
  1136.       // Get curretn configurations
  1137.       memcpy( &opt_run.conf, &rs.conf, sizeof(TConfig));
  1138.  
  1139.             //Get post processing options from config
  1140.             FromConfigToPPost(&opt_run.prof, &opt_run.pp);
  1141.       opt_run.pp.nInWidth = 640;
  1142.       opt_run.pp.nInHeight = 480;
  1143.  
  1144.             strcpy(logFont.lfFaceName,"MS Sans Serif");
  1145.             logFont.lfWeight=FW_NORMAL;
  1146.             logFont.lfHeight=8; 
  1147.             myFont=CreateFontIndirect(&logFont);
  1148.             TabbedDialogInit(hDlg);
  1149.             
  1150.  
  1151.       RefreshListBox(hDlg);
  1152.  
  1153.             // SET LANGUAGE
  1154.             DlgSetText(hDlg, IDOK,GS(OPT_OK));
  1155.             DlgSetText(hDlg, IDCANCEL,GS(OPT_CANCEL));
  1156.             DlgSetText(hDlg, IDC_SHOWPAD ,GS(OPT_SHOWPAD));
  1157.             DlgSetText(hDlg, IDC_1, GS(OPT_SHOWPAD_EXP));
  1158.             SetText(hDlg, GS(OPT_TITLE));
  1159.             // Setting Tabs
  1160.             TabSetText(pHdr->hwndTab, 0, GS(OPT_VIDEO) );
  1161.             TabSetText(pHdr->hwndTab, 1, GS(OPT_AUDIO) );
  1162.             TabSetText(pHdr->hwndTab, 2, GS(OPT_PPOST) );
  1163.             TabSetText(pHdr->hwndTab, 3, GS(OPT_FILES) );
  1164.             TabSetText(pHdr->hwndTab, 4, GS(OPT_GENERAL) );
  1165.             // Video
  1166.             DlgSetText(video, R_OPT_FRAMESIZE, GS(OPT_FRAMESIZE));
  1167.             DlgSetText(video, R_OPT_WIDTH, GS(OPT_WIDTH));
  1168.             DlgSetText(video, R_OPT_HEIGHT, GS(OPT_HEIGHT));
  1169.             DlgSetText(video, R_OPT_FRAMESIZE_EXP, GS(OPT_FRAMESIZE_EXP));
  1170.             DlgSetText(video, R_OPT_OUTPAD_EXP, GS(OPT_OUTPAD_EXP));
  1171.             DlgSetText(video, R_OPT_TIMEBASE, GS(OPT_TIMEBASE));
  1172.             DlgSetText(video, R_OPT_TIMEBASE_RECONS, GS(R_OPT_TIMEBASE_RECONS) );
  1173.             DlgSetText(video, R_OPT_TIMEBASE_EXP, GS(OPT_TIMEBASE_EXP));
  1174.             DlgSetText(video, R_OPT_IDCT_TITLE, GS(OPT_IDCT_TITLE));
  1175.             DlgSetText(video, R_OPT_IDCT_EXP, GS(OPT_IDCT_EXP));
  1176.             DlgSetText(video, R_OPT_VIDEO_NOTE, GS(OPT_VIDEO_NOTE));
  1177.             
  1178.             DlgSetText(video, R_OPT_VIDEO_VIDEOSTRUCTURE, GS(R_OPT_VIDEO_VIDEOSTRUCTURE));
  1179.             DlgSetText(video, R_OPT_VIDEO_DEINTERLACE_CHECK, GS(R_OPT_VIDEO_DEINTERLACE_CHECK));
  1180.             DlgSetText(video, R_OPT_VIDEO_DEINTERLACE_BLEND, GS(R_OPT_VIDEO_DEINTERLACE_BLEND));
  1181.             DlgSetText(video, R_OPT_VIDEO_DEINTERLACE_THRESHOLD_CAPTION, GS(R_OPT_VIDEO_DEINTERLACE_THRESHOLD_CAPTION));
  1182.             
  1183.             // Audio
  1184.             DlgSetText(audio, R_OPT_AUDIO_AUDIOMODE_EXP, GS(OPT_AUDIO_AUDIOMODE_EXP));
  1185.             DlgSetText(audio, R_OPT_AUDIO_AUDIOMODE, GS(OPT_AUDIO_AUDIOMODE));
  1186.             DlgSetText(audio, R_OPT_AUDIO_DSC, GS(OPT_AUDIO_DSC));
  1187.             DlgSetText(audio, R_OPT_AUDIO_DOAUDIO, GS(OPT_AUDIO_DOAUDIO));
  1188.             DlgSetText(audio, R_OPT_AUDIO_NOAUDIO, GS(OPT_AUDIO_NOAUDIO));
  1189.             DlgSetText(audio, R_OPT_AUDIO_DSC_EXP, GS(OPT_AUDIO_DSC_EXP));
  1190.             DlgSetText(audio, R_OPT_AUDIO_DOAUDIO_EXP, GS(OPT_AUDIO_DOAUDIO_EXP));
  1191.             DlgSetText(audio, R_OPT_AUDIO_NOAUDIO_EXP, GS(OPT_AUDIO_NOAUDIO_EXP));
  1192.             DlgSetText(audio, R_OPT_AUDIO_SAMPLING_EXP, GS(OPT_AUDIO_SAMPLING_EXP));
  1193.             DlgSetText(audio, R_OPT_AUDIO_SAMPLING_TITLE, GS(OPT_AUDIO_SAMPLING_TITLE));
  1194.             DlgSetText(audio, R_OPT_AUDIO_SAMPLING_SAMEASINPUT, GS(OPT_AUDIO_SAMPLING_SAMEASINPUT));
  1195.             DlgSetText(audio, R_OPT_AUDIO_SAMPLING_SAMEASINPUT_EXP, GS(OPT_AUDIO_SAMPLING_SAMEASINPUT_EXP));
  1196.             // Post Processing
  1197.             DlgSetText(processing, R_OPT_PPOST_RESIZING_TITLE  , GS(R_OPT_PPOST_RESIZING_TITLE ));
  1198.             DlgSetText(processing, R_OPT_PPOST_RESIZING_NEAREST, GS(R_OPT_PPOST_RESIZING_NEAREST));
  1199.             DlgSetText(processing, R_OPT_PPOST_RESIZING_BILINEAR, GS(R_OPT_PPOST_RESIZING_BILINEAR));
  1200.             DlgSetText(processing, R_OPT_PPOST_RESIZING_BICUBIC, GS(R_OPT_PPOST_RESIZING_BICUBIC));
  1201.             DlgSetText(processing, R_OPT_PPOST_RESIZING_HQBICUBIC, GS(R_OPT_PPOST_RESIZING_HQBICUBIC));
  1202.             DlgSetText(processing, R_OPT_PPOST_RESIZING_NOTE, GS(R_OPT_PPOST_RESIZING_NOTE));
  1203.             DlgSetText(processing, R_OPT_PPOST_CROP_TITLE, GS(R_OPT_PPOST_CROP_TITLE));
  1204.             DlgSetText(processing, IDC_NOCROP  , GS(IDC_NOCROP ));
  1205.             DlgSetText(processing, IDC_NOLETTERBOX, GS(IDC_NOLETTERBOX));
  1206.             DlgSetText(processing, R_OPT_PPOST_CROP_TOPOFFSET, GS(R_OPT_PPOST_CROP_TOPOFFSET));
  1207.             DlgSetText(processing, R_OPT_PPOST_CROP_HEIGHT, GS(R_OPT_PPOST_CROP_HEIGHT));
  1208.             DlgSetText(processing, R_OPT_PPOST_CROP_LEFTOFFSET, GS(R_OPT_PPOST_CROP_LEFTOFFSET));
  1209.             DlgSetText(processing, R_OPT_PPOST_CROP_WIDTH, GS(R_OPT_PPOST_CROP_WIDTH));
  1210.             DlgSetText(processing, R_OPT_PPOST_CROP_TOP  , GS(R_OPT_PPOST_CROP_TOP ));
  1211.             DlgSetText(processing, R_OPT_PPOST_CROP_BOTTOM, GS(R_OPT_PPOST_CROP_BOTTOM));
  1212.             DlgSetText(processing, R_OPT_PPOST_CROP_LEFT, GS(R_OPT_PPOST_CROP_LEFT));
  1213.             DlgSetText(processing, R_FILES_AUDIOBOX_TITLE, GS(R_FILES_AUDIOBOX_TITLE));
  1214.             DlgSetText(processing, R_OPT_PPOST_CROP_RIGHT, GS(R_OPT_PPOST_CROP_RIGHT));
  1215.             DlgSetText(processing, R_OPT_PPOST_KEEPASPECT, GS(R_OPT_PPOST_KEEPASPECT));
  1216.             DlgSetText(processing, R_OPT_PPOST_KEEPASPECT_EXP, GS(R_OPT_PPOST_KEEPASPECT_EXP));
  1217.             DlgSetText(processing, R_OPT_PPOST_SHOWPAD_EXP, GS(R_OPT_PPOST_SHOWPAD_EXP));
  1218.             DlgSetText(processing, R_OPT_PPOST_CROP_SETTINGS_EXP, GS(R_OPT_PPOST_CROP_SETTINGS_EXP));
  1219.             DlgSetText(processing, R_OPT_PPOST_CROP_LETTERBOX_EXP, GS(R_OPT_PPOST_CROP_LETTERBOX_EXP));
  1220.             DlgSetText(processing, R_OPT_PPOST_KEEPASPECT, GS(R_OPT_PPOST_KEEPASPECT));
  1221.             DlgSetText(processing, IDC_SHOWPAD, GS(OPT_SHOWPAD));
  1222.             // Files
  1223.             DlgSetText(files, R_FILES_OUTFILES_TITLE  , GS(R_FILES_OUTFILES_TITLE ));
  1224.             DlgSetText(files, R_FILES_VIDEOBOX_TITLE, GS(R_FILES_VIDEOBOX_TITLE));
  1225.             DlgSetText(files, R_FILES_OUTVIDEO_SEX, GS(R_FILES_OUTVIDEO_SEX));
  1226.             DlgSetText(files, R_FILES_AUDIOBOX_TITLE, GS(R_FILES_AUDIOBOX_TITLE));
  1227.             DlgSetText(files, R_FILES_AUDIOBOX_EXP, GS(R_FILES_AUDIOBOX_EXP));
  1228.             DlgSetText(files, R_FILES_WARN, GS(R_FILES_WARN));
  1229.             DlgSetText(files, IDC_FILEBUTTON1, GS(1113));
  1230.             DlgSetText(files, IDC_FILEBUTTON2, GS(1113));
  1231.             // General
  1232.             DlgSetText(general, R_GENERAL_COMPTIME_TITLE  , GS(R_GENERAL_COMPTIME_TITLE ));
  1233.             DlgSetText(general, R_GENERAL_COMPTIME_SECONDSCOMPILE, GS(R_GENERAL_COMPTIME_SECONDSCOMPILE));
  1234.             DlgSetText(general, R_GENERAL_COMPTIME_FRAMESCOMPILE, GS(R_GENERAL_COMPTIME_FRAMESCOMPILE));
  1235.             DlgSetText(general, IDC_COMPILE_WHOLE  , GS(IDC_COMPILE_WHOLE ));
  1236.             DlgSetText(general, R_GENERAL_COMPTIME_COMPTIME_EXP1, GS(R_GENERAL_COMPTIME_COMPTIME_EXP1));
  1237.  
  1238.             // DlgSetText(general, R_GENERAL_COMPTIME_COMPTIME_EXP2, GS(R_GENERAL_COMPTIME_COMPTIME_EXP2));
  1239.             DlgSetText(general, R_GENERAL_SEARCHSIZE_TITLE, GS(R_GENERAL_SEARCHSIZE_TITLE));            
  1240.             DlgSetText(general, R_GENERAL_SEARCHSIZE_BOX, GS(R_GENERAL_SEARCHSIZE_BOX));
  1241.             DlgSetText(general, R_GENERAL_SEARCHSIZE_EXP, GS(R_GENERAL_SEARCHSIZE_EXP));
  1242.             DlgSetText(general, R_GENERAL_MISC_TITLEIDC_STATIC, GS(R_GENERAL_MISC_TITLEIDC_STATIC));
  1243.             DlgSetText(general, R_GENERAL_MISC_SHUTDOWN, GS(R_GENERAL_MISC_SHUTDOWN));            
  1244.  
  1245.  
  1246.             //Load from config
  1247.             //Audio output
  1248.             //If its not an AC3 disable DO_AUDIO
  1249. /*            if(!audio->isAC3){
  1250.                 DlgDisable(hDlg, IDC_DOAUDIO);
  1251.                 if(opt_run.prof.audioMode==DO_AUDIO) opt_run.prof.audioMode=DSC;
  1252.             }
  1253.             else{
  1254.                 DlgEnable(hDlg, IDC_DOAUDIO);
  1255.             }*/
  1256.  
  1257.  
  1258.             return TRUE;
  1259.         case WM_NOTIFY:
  1260.             switch(((LPNMHDR)lParam)->code){
  1261.                 case TCN_SELCHANGE:
  1262.                     /* is all data valid? */
  1263.                     if(pHdr->DlgTabCheck[opt_run.conf.selectedTab] &&
  1264.                         !pHdr->DlgTabCheck[opt_run.conf.selectedTab](pHdr->hwndDisplay)) {
  1265.                         /* there's a problem; set the focused tab back */
  1266.                         TabCtrl_SetCurSel(pHdr->hwndTab, opt_run.conf.selectedTab);
  1267.                         return FALSE;
  1268.                     }
  1269.  
  1270.                     /* we're OK */
  1271.                     OnSelChanged(hDlg);
  1272.  
  1273.                     break;
  1274.             }
  1275.             break;
  1276.         case WM_COMMAND:
  1277.             //Notifications
  1278.             switch(LOWORD(wParam))
  1279.             {
  1280.                 case IDOK:
  1281.                     /* is all data valid? */
  1282.                     if(pHdr->DlgTabCheck[opt_run.conf.selectedTab] &&
  1283.                         !pHdr->DlgTabCheck[opt_run.conf.selectedTab](pHdr->hwndDisplay)) {
  1284.                         /* there's a problem */
  1285.                         return FALSE;
  1286.                     }
  1287.  
  1288.           RetrieveProfile(hDlg);
  1289.  
  1290.           rs.profiler->AddNSelect( &opt_run.prof );
  1291.  
  1292.           // Set Global Run State profile from selected one
  1293.           rs.prof = *rs.profiler->GetSelected();
  1294.  
  1295.           // Save options
  1296.           memcpy( &rs.conf, &opt_run.conf, sizeof(TConfig));
  1297.  
  1298.           rs.conf.selected_profile = rs.profiler->GetSelectedIndex();
  1299.  
  1300.  
  1301.                     DeleteObject(myFont);
  1302.                     EndDialog(hDlg, LOWORD(wParam));
  1303.                     return TRUE;
  1304.                 break;
  1305.  
  1306.                 case R_OPT_NEWPROFILE_BUTTON:
  1307.                 //case R_OPT_SAVECURRENT_BUTTON:
  1308.  
  1309.                     // Changed by edwin van eggelen 12-05-2001
  1310.  
  1311.                     // Current settings are stored into profile
  1312.                     if (DialogBoxParam( hInst, 
  1313.                                         MAKEINTRESOURCE(IDD_OUTPUT_OPTIONS_PROFILE_NAME),
  1314.                                         hDlg, 
  1315.                                         (DLGPROC)OptionsProfileNameDlg,
  1316.                                         (LPARAM)szTemp) == IDOK)
  1317.                     {
  1318.                         //The string is in szTemp
  1319.                         RetrieveProfile(hDlg);
  1320.                         strcpy( opt_run.prof.profile_name, szTemp);
  1321.                         rs.profiler->AddProfile( &opt_run.prof );
  1322.  
  1323.                         rs.profiler->Select( rs.profiler->FindIndexWithName(szTemp));
  1324.                         RefreshOptionsDialog(hDlg);
  1325.                     }
  1326.                     break;
  1327.  
  1328.                 case R_OPT_SAVECURRENT_BUTTON:
  1329.  
  1330.                     {
  1331.  
  1332.                         int selected_item;
  1333.  
  1334.                         // Changed by edwin van eggelen 12-05-2001
  1335.  
  1336.                         // Current settings are stored into profile
  1337.  
  1338.                         RetrieveProfile(hDlg);
  1339.  
  1340.                         //memcpy( rs.profiler->GetSelected(), &opt_run.prof,sizeof(TProfile) );
  1341.  
  1342.                         selected_item=rs.profiler->GetSelectedIndex();
  1343.  
  1344.                         rs.profiler->DeleteProfile(rs.profiler->GetSelectedIndex());
  1345.  
  1346.                         rs.profiler->AddProfile(&opt_run.prof);
  1347.  
  1348.                         //select previous select profile
  1349.  
  1350.                         rs.profiler->Select(selected_item);
  1351.  
  1352.                         RefreshOptionsDialog(hDlg);
  1353.  
  1354.                     }                            
  1355.  
  1356.                         break;
  1357.  
  1358.  
  1359.                 case R_OPT_DELETEPROFILE_BUTTON:
  1360.                         //Delete selected profile
  1361.                         rs.profiler->DeleteProfile( ListGetCur(GetDlgItem(hDlg, IDC_PROFILES_LIST)) );
  1362.                         RefreshOptionsDialog(hDlg);
  1363.                         break;
  1364.  
  1365.  
  1366.                 case IDC_SHOWPAD:
  1367.                     /* is all data valid? */
  1368.                     if(pHdr->DlgTabCheck[opt_run.conf.selectedTab] &&
  1369.                         !pHdr->DlgTabCheck[opt_run.conf.selectedTab](pHdr->hwndDisplay)) {
  1370.                         /* there's a problem; set the focused tab back */
  1371.                         TabCtrl_SetCurSel(pHdr->hwndTab, opt_run.conf.selectedTab);
  1372.                         return FALSE;
  1373.                     }
  1374.           {
  1375.             COutputPadDlg obOutputPadDlg( hDlg, hDlg, hInst );
  1376.             //obOutputPadDlg.Show( &opt_run.pp );
  1377.             DlgProcessingStartUp(hDlg);
  1378.             DlgVideoStartUp(video);
  1379.           }
  1380.                     break;
  1381.  
  1382.                 case IDCANCEL:
  1383.                     EndDialog(hDlg, LOWORD(wParam));
  1384.                     return TRUE;
  1385.                 break;
  1386.                 
  1387.             }
  1388.             if(HIWORD(wParam)==CBN_SELCHANGE){
  1389.                 rs.profiler->Select( ListGetCur( GetDlgItem(hDlg, IDC_PROFILES_LIST)) );
  1390.                 RefreshOptionsDialog( hDlg );
  1391.  
  1392.                 return TRUE;
  1393.             }
  1394.             break;
  1395.     }
  1396.     return FALSE;
  1397. }
  1398.  
  1399. LRESULT CALLBACK OptionsProfileNameDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  1400. {
  1401.     static char  *string_buffer=NULL;
  1402.  
  1403.     switch (message)
  1404.     {
  1405.         case WM_INITDIALOG:
  1406.                 string_buffer = (char *) lParam;
  1407.                 return TRUE;
  1408.  
  1409.         case WM_COMMAND:
  1410.  
  1411.             DlgGetText(hDlg, IDC_EDITBOX, string_buffer );
  1412.  
  1413.             if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
  1414.             {
  1415.                 EndDialog(hDlg, LOWORD(wParam));
  1416.                 return TRUE;
  1417.             }
  1418.             break;
  1419.     }
  1420.     return FALSE;
  1421. }
  1422.