Diff for /xmil/MacOSX/dialog/d_config.cpp between versions 1.1 and 1.2

version 1.1, 2004/08/10 14:38:57 version 1.2, 2005/02/07 16:09:19
Line 9 Line 9
 #include        "palettes.h"  #include        "palettes.h"
   
   
 static void setrate(ControlHandle *btn, UINT rate) {  enum {kTabMasterSig = 'PRTT',kTabMasterID = 1000,kTabPaneSig= 'PRTB',kPrefControlsSig = 'PREF'};
   enum {kDummyValue = 0,kMaxNumTabs= 3};
   
         SetControlValue(btn[0], (rate == 11025)?1:0);  static void setupJoyConfig(OSType type, WindowRef win);
         SetControlValue(btn[1], (rate == 22050)?1:0);  static void setTitle(OSType type, char* elementName, WindowRef win);
         SetControlValue(btn[2], (rate == 44100)?1:0);  static pascal OSStatus PrefsTabEventHandlerProc( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData );
 }  static void SetInitialTabState(WindowRef theWindow);
   
   static void setConfig(WindowRef win) {
 void ConfigDialogProc(void) {      UInt32      dval;
       UInt16      wval;
         DialogPtr               hDlg;      UInt8       mval;
         ControlHandle   ratebtn[3];      bool        bval;
         ControlHandle   skipbtn;          UINT    update = 0;
         char                    work[32];          UINT    renewal = 0;
         Str255                  workstr;      
         UINT                    rate;      dval=GetControlValue(getControlRefByID('Rate', 0, win));
         UINT                    ms;      if (dval==1) {
         UINT                    skipline;          wval = 11025;
         UINT                    val;      }
         int                             done;      else if (dval==2) {
         SInt16                  item;          wval = 22050;
         UINT                    update;      }
         UINT                    renewal;      else {
           wval = 44100;
         hDlg = GetNewDialog(IDD_CONFIGURE, NULL, (WindowPtr)-1);      }
         if (!hDlg) {          if (xmilcfg.samplingrate != wval) {
                 return;                  xmilcfg.samplingrate = wval;
                   update |= SYS_UPDATECFG;
                   corestat.soundrenewal = 1;
         }          }
         ratebtn[0] = (ControlHandle)GetDlgItem(hDlg, IDC_RATE11);      
         ratebtn[1] = (ControlHandle)GetDlgItem(hDlg, IDC_RATE22);      dval = getFieldValue('Bufr', win);
         ratebtn[2] = (ControlHandle)GetDlgItem(hDlg, IDC_RATE44);          if (dval < 50) {
         skipbtn = (ControlHandle)GetDlgItem(hDlg, IDC_SKIPLINE);                  dval = 50;
   
         rate = xmilcfg.samplingrate;  
         if ((rate != 0) && (rate != 11025) && (rate != 44100)) {  
                 rate = 22050;  
         }          }
         setrate(ratebtn, rate);          else if (dval > 1000) {
         ms = xmilcfg.delayms;                  dval = 1000;
         if (ms < 50) {  
                 ms = 50;  
         }          }
         else if (ms > 1000) {      if (dval != xmilcfg.delayms) {
                 ms = 1000;                  xmilcfg.delayms = dval;
                   update |= SYS_UPDATECFG;
                   corestat.soundrenewal = 1;
       }
   //    dval = getFieldValue('seek');
   //    if (dval != xmilcfg.MOTORVOL) {
   //      INIT_RENEWAL xmilcfg.MOTORVOL = dval;
   //    }
       dval = getFieldValue('slte', win);
           if (dval > 255) {
                   dval = 255;
         }          }
         SPRINTF(work, str_u, ms);      if (dval != xmilcfg.skiplight) {
         mkstr255(workstr, work);                  xmilcfg.skiplight = dval;
         SetDialogItemText(GetDlgItem(hDlg, IDC_SOUNDBUF), workstr);                  renewal = 1;
       }
         skipline = (xmilcfg.skipline)?1:0;      bval=GetControlValue(getControlRefByID('slin', 0, win));
         SetControlValue(skipbtn, skipline);      if (bval != xmilcfg.skipline) {
         SPRINTF(work, str_u, xmilcfg.skiplight);                  xmilcfg.skipline = bval;
         mkstr255(workstr, work);                  renewal = 1;
         SetDialogItemText(GetDlgItem(hDlg, IDC_SKIPLIGHT), workstr);      }
           if (renewal) {
         SetDialogDefaultItem(hDlg, IDOK);                  pal_reset();
         SetDialogCancelItem(hDlg, IDCANCEL);                  update |= SYS_UPDATECFG;
   
         done = 0;  
         while(!done) {  
                 ModalDialog(NULL, &item);  
                 switch(item) {  
                         case IDOK:  
                                 update = 0;  
                                 if (xmilcfg.samplingrate != rate) {  
                                         xmilcfg.samplingrate = rate;  
                                         update |= SYS_UPDATECFG;  
                                         corestat.soundrenewal = 1;  
                                 }  
                                 GetDialogItemText(GetDlgItem(hDlg, IDC_SOUNDBUF), workstr);  
                                 mkcstr(work, sizeof(work), workstr);  
                                 ms = milstr_solveINT(work);  
                                 if (ms < 50) {  
                                         ms = 50;  
                                 }  
                                 else if (ms > 1000) {  
                                         ms = 1000;  
                                 }  
                                 if (xmilcfg.delayms != ms) {  
                                         xmilcfg.delayms = ms;  
                                         corestat.soundrenewal = 1;  
                                         update |= SYS_UPDATECFG;  
                                 }  
   
                                 renewal = 0;  
                                 if (xmilcfg.skipline != skipline) {  
                                         xmilcfg.skipline = skipline;  
                                         renewal = 1;  
                                 }  
                                 GetDialogItemText(GetDlgItem(hDlg, IDC_SKIPLIGHT), workstr);  
                                 mkcstr(work, sizeof(work), workstr);  
                                 val = milstr_solveINT(work);  
                                 if (val > 256) {  
                                         val = 256;  
                                 }  
                                 if (xmilcfg.skiplight != (UINT16)val) {  
                                         xmilcfg.skiplight = (UINT16)val;  
                                         renewal = 1;  
                                 }  
                                 if (renewal) {  
                                         pal_reset();  
                                         update |= SYS_UPDATECFG;  
                                 }  
                                 sysmng_update(update);  
                                 done = IDOK;  
                                 break;  
   
                         case IDCANCEL:  
                                 done = IDCANCEL;  
                                 break;  
   
                         case IDC_RATE11:  
                                 rate = 11025;  
                                 setrate(ratebtn, rate);  
                                 break;  
   
                         case IDC_RATE22:  
                                 rate = 22050;  
                                 setrate(ratebtn, rate);  
                                 break;  
   
                         case IDC_RATE44:  
                                 rate = 44100;  
                                 setrate(ratebtn, rate);  
                                 break;  
   
                         case IDC_SKIPLINE:  
                                 skipline ^= 1;  
                                 SetControlValue(skipbtn, skipline);  
                                 break;  
                 }  
         }          }
         DisposeDialog(hDlg);          sysmng_update(update);
   }
   
   #define setCheckBox(a,b)        SetControlValue(getControlRefByID(b,0,win), a)
   #define setValue(a,b)           setCheckBox(a,b)
   
   static void setControlText(long data, OSType sign, WindowRef win) {
       Str255      title;
   
       NumToString(data, title);
       SetControlData(getControlRefByID(sign, 0, win), kControlNoPart, kControlStaticTextTextTag, *title, title+1);
   }
   
   static void setName (OSType type, WindowRef win) {
       char elementName[256] = "----";
   //    if (getJoypadName(type, elementName)) {
           if (elementName) {
               setTitle(type, elementName, win);
           }
   //    }
   }
   
   static void initPrefWindow(WindowRef win) {
       int data;
   
       if (xmilcfg.samplingrate == 11025) {
           data=1;
       }
       else if (xmilcfg.samplingrate == 22050) {
           data=2;
       }
       else {
           data=3;
       }
       setValue(data, 'Rate');
       setControlText(xmilcfg.delayms, 'Bufr', win);
   //    setControlText(xmilcfg.MOTORVOL, 'seek');
       setControlText(xmilcfg.skiplight, 'slte', win);
           setValue(xmilcfg.skipline, 'slin');
   
   //    setName(JOYPAD_UP, win);
   //    setName(JOYPAD_DOWN, win);
   //    setName(JOYPAD_LEFT, win);
   //    setName(JOYPAD_RIGHT, win);
   //    setName(JOYPAD_ABUTTON, win);
   //    setName(JOYPAD_BBUTTON, win);
   
   //    initTemporal();
   }
   
   static pascal OSStatus joyWinproc(EventHandlerCallRef myHandler, EventRef event, void* userData) {
       OSStatus    err = eventNotHandledErr;
       HICommand   cmd;
   
       if (GetEventClass(event)==kEventClassCommand && GetEventKind(event)==kEventCommandProcess ) {
           GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd);
           switch (cmd.commandID)
           {
               case 'notJ':
                   HideSheetWindow((WindowRef)userData);
                   DisposeWindow((WindowRef)userData);
                   err = noErr;
                   break;
               default:
                   break;
           }
       }
   
       return err;
   }
   
   static OSErr pushJoy (OSType type, WindowRef win) {
       setupJoyConfig(type, win);
       return noErr;
   }
   
   static pascal OSStatus pfWinproc(EventHandlerCallRef myHandler, EventRef event, void* userData) {
       OSStatus    err = eventNotHandledErr;
       HICommand   cmd;
       
       if (GetEventClass(event)==kEventClassCommand && GetEventKind(event)==kEventCommandProcess ) {
           GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd);
           switch (cmd.commandID)
           {
               case kHICommandCancel:
                   QuitAppModalLoopForWindow((WindowRef)userData);
                   err=noErr;
                   break;
                   
               case kHICommandOK:
                   setConfig((WindowRef)userData);
   //                changeJoyPadSetup();                
                   QuitAppModalLoopForWindow((WindowRef)userData);
                   err=noErr;
                   break;
   
   //            case JOYPAD_UP:
   //            case JOYPAD_DOWN:
   //            case JOYPAD_LEFT:
   //            case JOYPAD_RIGHT:
   //            case JOYPAD_ABUTTON:
   //            case JOYPAD_BBUTTON:
                           case 'jpup':
                   err=pushJoy(cmd.commandID, (WindowRef)userData);
                   break;
   
               default :
                   break;
           }
       }
   
       return err;
   }
       
   static  IBNibRef        nibRef;
   
   static void makeNibWindow (IBNibRef nibRef) {
       OSStatus    err;
           WindowRef       prefWin;
   
       err = CreateWindowFromNib(nibRef, CFSTR("PreferenceWindow"), &prefWin);
       if (err == noErr) {
           initPrefWindow(prefWin);
           SetInitialTabState(prefWin);
           EventTypeSpec   tabControlEvents[] ={ { kEventClassControl, kEventControlHit } };
           InstallControlEventHandler( getControlRefByID(kTabMasterSig,kTabMasterID,prefWin),  PrefsTabEventHandlerProc , GetEventTypeCount(tabControlEvents), tabControlEvents, prefWin, NULL );
           EventTypeSpec   list[]={ { kEventClassCommand, kEventCommandProcess } };
           EventHandlerRef ref;
           EventHandlerUPP winhandler = NewEventHandlerUPP(pfWinproc);
           InstallWindowEventHandler (prefWin, winhandler, 1, list, (void *)prefWin, &ref);
           ShowWindow(prefWin);
           err=RunAppModalLoopForWindow(prefWin);
           RemoveEventHandler (ref);
           DisposeEventHandlerUPP (winhandler);
           HideWindow(prefWin);
           DisposeWindow(prefWin);
       }
   }
   
   void ConfigDialogProc( void ) {
       OSStatus    err;
   
       err = CreateNibReference(CFSTR("main"), &nibRef);
       if (err ==noErr ) {
           makeNibWindow (nibRef);
           DisposeNibReference ( nibRef);
       }
 }  }
   
   static void setupJoyConfig (OSType type, WindowRef win) {
       OSStatus    err;
           WindowRef       joyWin;
       char elementName[256] = "----";
   
       err = CreateWindowFromNib(nibRef, CFSTR("InputWindow"), &joyWin);
       if (err == noErr) {
           EventTypeSpec   list[]={ { kEventClassCommand, kEventCommandProcess } };
           EventHandlerRef ref;
           InstallWindowEventHandler (joyWin, NewEventHandlerUPP(joyWinproc), 1, list, (void *)joyWin, &ref);
           ShowSheetWindow(joyWin, win);
   
   //        if (setJoypad(type, elementName)) {
   //            setTitle(type, elementName);
   //        }
   
           HideSheetWindow(joyWin);
           DisposeWindow(joyWin);
       }
   }
   
   static void setTitle(OSType type, char* elementName, WindowRef win) {
       Str255 str;
       mkstr255(str, elementName);
       SetControlTitle(getControlRefByID(type, 0, win), str);
   }
   
   static UInt16 lastPaneSelected = 1;     // static, to keep track of it long term (in a more complex application
                                           // you might store this in a data structure in the window refCon)                                            
   
   static void SetInitialTabState(WindowRef theWindow)
   {
       int tabList[] = {kDummyValue, kTabMasterID,kTabMasterID+1,kTabMasterID+2};
       short qq=0;
       for(qq=0;qq<kMaxNumTabs+1;qq++)
       SetControlVisibility( getControlRefByID(  kTabPaneSig,  tabList[qq], theWindow), false, true );  
       SetControlValue(getControlRefByID(kTabMasterSig,kTabMasterID,theWindow),lastPaneSelected );
       SetControlVisibility( getControlRefByID(  kTabPaneSig,  tabList[lastPaneSelected], theWindow), true, true );
   }
   
   static pascal OSStatus PrefsTabEventHandlerProc( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData )
   {
       WindowRef theWindow = (WindowRef)inUserData;  // get the windowRef, passed around as userData    
       short controlValue = 1;
       controlValue = GetControlValue( getControlRefByID(kTabMasterSig,kTabMasterID,theWindow) );
       if ( controlValue != lastPaneSelected )
       {
           int tabList[] = {kDummyValue, kTabMasterID,kTabMasterID+1,kTabMasterID+2,kTabMasterID+3};
           SetControlVisibility( getControlRefByID(  kTabPaneSig,  tabList[lastPaneSelected], theWindow), false, true );
           SetControlVisibility( getControlRefByID(  kTabPaneSig,  tabList[controlValue], theWindow), true, true );    
           Draw1Control( getControlRefByID(kTabMasterSig,kTabMasterID,theWindow) );                
           lastPaneSelected= controlValue;    
       }
       return( eventNotHandledErr );
   }

Removed from v.1.1  
changed lines
  Added in v.1.2


RetroPC.NET-CVS <cvs@retropc.net>