Diff for /np2/macosx/dialog/dialog.cpp between versions 1.2 and 1.8

version 1.2, 2003/11/03 10:19:43 version 1.8, 2004/01/31 19:45:26
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "resource.h"  #include        "resource.h"
 #include        "sysmng.h"  #include        "sysmng.h"
 #include        "dialog.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "fddfile.h"  #include        "dialog.h"
 #include        "diskdrv.h"  #include        "diskdrv.h"
 #if 0  
 #include        "newdisk.h"  
 #endif  
 #include        "font.h"  #include        "font.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "np2.h"  #include        "np2.h"
Line 17 Line 13
 #include        "menu.h"  #include        "menu.h"
 #include        "s98.h"  #include        "s98.h"
 #include        "fdefine.h"  #include        "fdefine.h"
 #include        "toolmac.h"  #include        "toolwin.h"
   
 static Handle GetDlgItem(DialogPtr hWnd, short pos) {  
   
         Handle  ret;  
         Rect    rct;  
         short   s;  
   
         GetDialogItem(hWnd, pos, &s, &ret, &rct);  
         return(ret);  
 }  
   
 void AboutDialogProc(void) {  
   
         DialogPtr       hDlg;  
         Str255          verstr;  
         int                     done;  
         short           item;  
   
         hDlg = GetNewDialog(IDD_ABOUT, NULL, (WindowPtr)-1);  
         if (!hDlg) {  
                 return;  
         }  
         mkstr255(verstr, np2version);  
         SetDialogItemText(GetDlgItem(hDlg, IDD_VERSION), verstr);  
         SetDialogDefaultItem(hDlg, IDOK);  
   
         done = 0;  
         while(!done) {  
                 ModalDialog(NULL, &item);  
                 switch(item) {  
                         case IDOK:  
                                 done = 1;  
                                 break;  
                 }  
         }  
         DisposeDialog(hDlg);  
 }  
   
   
 // ----  // ----
   
Line 111  void fsspec2path(FSSpec *fs, char *dst,  Line 69  void fsspec2path(FSSpec *fs, char *dst, 
         } while(cipbr.dirInfo.ioDrDirID != fsRtDirID);          } while(cipbr.dirInfo.ioDrDirID != fsRtDirID);
 }  }
   
 #if 1  
 static NavDialogRef navWin;  static NavDialogRef navWin;
   
 static pascal void dummyproc(NavEventCallbackMessage sel, NavCBRecPtr prm,  static pascal void dummyproc(NavEventCallbackMessage sel, NavCBRecPtr prm,
                                                                                                         NavCallBackUserData ud) {                                                                                                          NavCallBackUserData ud) {
         switch( sel )          switch( sel )
Line 130  static pascal void dummyproc(NavEventCal Line 88  static pascal void dummyproc(NavEventCal
         (void)ud;          (void)ud;
 }  }
   
 BOOL dialog_fileselect(char *name, int size, WindowRef parent) {  static pascal Boolean NavLaunchServicesFilterProc( AEDesc* theItem, void* info, NavCallBackUserData ioUserData, NavFilterModes filterMode)
   {
           #pragma unused( info )
           OSStatus        err                     = noErr;
           Boolean         showItem        = false;
       FSSpec              fsSpec;
       int                 ret;
       char                name[MAX_PATH];
           AEDesc          coerceDesc      = { NULL, NULL };
                   
           if ( filterMode == kNavFilteringBrowserList ) {
                   if ( theItem->descriptorType != typeFSS ) {
                           err = AECoerceDesc( theItem, typeFSS, &coerceDesc );
                           theItem = &coerceDesc;
                   }
                   if ( err == noErr ) {
                           err = AEGetDescData( theItem, &fsSpec, sizeof(fsSpec) );
           }
                   AEDisposeDesc( &coerceDesc );
           
           if (err == noErr) {
               fsspec2path(&fsSpec, name, MAX_PATH);
               if (file_attr(name) == FILEATTR_DIRECTORY) {
                   showItem = true;
               }
               else {
                   ret = file_getftype(name);
                   switch (*(int*)ioUserData) {
                       case OPEN_FDD:
                           if (ret == FTYPE_D88 || ret == FTYPE_BETA || ret == FTYPE_FDI) {
                               showItem = true;
                           }
                           break;
                       case OPEN_SASI:
                           if (ret == FTYPE_THD || ret == FTYPE_HDI || ret == FTYPE_NHD) {
                               showItem = true;
                           }
                           break;
                        case OPEN_SCSI:
                           if (ret == FTYPE_HDD) {
                               showItem = true;
                           }
                           break;
                      case OPEN_FONT:
                           if (ret == FTYPE_BMP || ret == FTYPE_SMIL) {
                               showItem = true;
                           }
                           break;
                       case OPEN_INI:
                           if (ret == FTYPE_INI) {
                               showItem = true;
                           }
                           break;
                   }
               }
           }
           }
           return( showItem );
   }
   
   BOOL dialog_fileselect(char *name, int size, WindowRef parent, int opentype) {
   
         BOOL                            ret;          BOOL                            ret;
         OSErr                           err;          OSErr                           err;
Line 140  BOOL dialog_fileselect(char *name, int s Line 158  BOOL dialog_fileselect(char *name, int s
         long                            count;          long                            count;
         long                            i;          long                            i;
         FSSpec                          fss;          FSSpec                          fss;
       NavObjectFilterUPP  navFilterProc;
   
         ret = FALSE;          ret = FALSE;
     NavGetDefaultDialogCreationOptions(&optNav);      NavGetDefaultDialogCreationOptions(&optNav);
       optNav.clientName = CFSTR("Neko Project IIx");
     optNav.modality=kWindowModalityWindowModal;      optNav.modality=kWindowModalityWindowModal;
     optNav.parentWindow=parent;      optNav.parentWindow=parent;
     optNav.optionFlags+=kNavNoTypePopup;      switch (opentype) {
           case OPEN_FONT:
               optNav.message = CFCopyLocalizedString(CFSTR("Choose font file."),"FontSelect Message");
               break;
           case OPEN_INI:
               optNav.message = CFCopyLocalizedString(CFSTR("Choose a skin file for Tool Window."),"SkinSelect Message");
               break;
           default:
               break;
       }
         proc = NewNavEventUPP(dummyproc);          proc = NewNavEventUPP(dummyproc);
     ret=NavCreateChooseFileDialog(&optNav,NULL,proc,NULL,NULL,NULL,&navWin);      navFilterProc = NewNavObjectFilterUPP( NavLaunchServicesFilterProc );
       ret=NavCreateGetFileDialog(&optNav,NULL,proc,NULL,navFilterProc,&opentype,&navWin);
     NavDialogRun(navWin);      NavDialogRun(navWin);
     RunAppModalLoopForWindow(NavDialogGetWindow(navWin));      RunAppModalLoopForWindow(NavDialogGetWindow(navWin));
     NavDialogGetReply(navWin, &reply);      NavDialogGetReply(navWin, &reply);
       if (optNav.message) CFRelease(optNav.message);
     NavDialogDispose(navWin);      NavDialogDispose(navWin);
         DisposeNavEventUPP(proc);          DisposeNavEventUPP(proc);
           
Line 175  BOOL dialog_fileselect(char *name, int s Line 206  BOOL dialog_fileselect(char *name, int s
 fsel_exit:  fsel_exit:
         return(ret);          return(ret);
 }  }
 #else  
 BOOL dialog_fileselect(char *name, int size, WindowRef parent) {  
   
         StandardFileReply       sfr;  BOOL dialog_filewriteselect(OSType type, char *title, FSSpec *fsc, WindowRef parentWindow)
   {       
           OSType                          sign='SMil';
           NavEventUPP                     eventUPP;
           NavReplyRecord          reply;
           DescType                        rtype;
           OSErr                           ret;
           AEKeyword                       key;
           Size                            len;
       FSRef                               parent;
       UniCharCount                ulen;
       UniChar*                    buffer = NULL;
       NavDialogCreationOptions    copt;
   
           InitCursor();
       NavGetDefaultDialogCreationOptions(&copt);
       copt.clientName = CFSTR("Neko Project IIx");
       copt.parentWindow = parentWindow;
       copt.saveFileName = CFStringCreateWithCString(NULL, title, CFStringGetSystemEncoding());
       copt.optionFlags += kNavPreserveSaveFileExtension;
       copt.modality = kWindowModalityWindowModal;
       switch (type) {
           case 'AIFF':
               copt.message = CFCopyLocalizedString(CFSTR("Record playing sound as AIFF file."),"SoundRecord Message");
               break;
           case 'BMP ':
               copt.message = CFCopyLocalizedString(CFSTR("Save the screen as BMP file."),"ScreenShot Message");
               break;
           case '.S98':
               copt.message = CFCopyLocalizedString(CFSTR("Log playing sound as S98 file."),"S98Log Message");
               break;
           default:
               break;
       }
           eventUPP=NewNavEventUPP( dummyproc );
       NavCreatePutFileDialog(&copt, type, sign, eventUPP, NULL, &navWin);
       
       NavDialogRun(navWin);
       RunAppModalLoopForWindow(NavDialogGetWindow(navWin));
       
       NavDialogGetReply(navWin, &reply);
       NavDialogDispose(navWin);
           DisposeNavEventUPP(eventUPP);
   
         StandardGetFile(NULL, -1, NULL, &sfr);          if( reply.validRecord)
         if (sfr.sfGood) {          {
                 fsspec2path(&sfr.sfFile, name, size);                  ret=AEGetNthPtr( &(reply.selection),1,typeFSRef,&key,&rtype,(Ptr)&parent,(long)sizeof(FSRef),&len );
                 return(TRUE);          ulen = (UniCharCount)CFStringGetLength(reply.saveFileName);
         }          buffer = (UniChar*)NewPtr(ulen);
         else {          CFStringGetCharacters(reply.saveFileName, CFRangeMake(0, ulen), buffer);
                 return(FALSE);          ret = FSCreateFileUnicode(&parent, ulen, buffer, kFSCatInfoNone, NULL, NULL, fsc);
           DisposePtr((Ptr)buffer);
                   NavDisposeReply( &reply );
           if (ret == noErr) {
               return true;
           }
         }          }
     (void)paret;          return( false );
 }  }
 #endif  
   
   // ----
   
 void dialog_changefdd(BYTE drv) {  void dialog_changefdd(BYTE drv) {
   
         char    fname[MAX_PATH];          char    fname[MAX_PATH];
   
         if (drv < 4) {          if (drv < 4) {
                 if (dialog_fileselect(fname, sizeof(fname), hWndMain)) {                  if (dialog_fileselect(fname, sizeof(fname), hWndMain, OPEN_FDD)) {
             if (file_getftype(fname)==FTYPE_D88 || file_getftype(fname)==FTYPE_BETA) {              if (file_getftype(fname)==FTYPE_D88 || file_getftype(fname)==FTYPE_BETA || file_getftype(fname)==FTYPE_FDI) {
                 diskdrv_setfdd(drv, fname, 0);                  diskdrv_setfdd(drv, fname, 0);
                 toolwin_setfdd(drv, fname);                  toolwin_setfdd(drv, fname);
             }              }
Line 211  void dialog_changehdd(BYTE drv) { Line 287  void dialog_changehdd(BYTE drv) {
   
         char    fname[MAX_PATH];          char    fname[MAX_PATH];
   
         if (drv < 2) {          if (!(drv & 0x20)) {            // SASI/IDE
                 if (dialog_fileselect(fname, sizeof(fname), hWndMain)) {                  if (drv < 2) {
             if (file_getftype(fname)==FTYPE_HDI || file_getftype(fname)==FTYPE_THD) {                          if (dialog_fileselect(fname, sizeof(fname), hWndMain, OPEN_SASI)) {
                 diskdrv_sethdd(drv, fname);                                  if (file_getftype(fname)==FTYPE_HDI || file_getftype(fname)==FTYPE_THD || file_getftype(fname)==FTYPE_NHD) {
             }                                          sysmng_update(SYS_UPDATEOSCFG);
                                           diskdrv_sethdd(drv, fname);
                                   }
                           }
                   }
           }
           else {                                          // SCSI
                   if ((drv & 0x0f) < 4) {
                           if (dialog_fileselect(fname, sizeof(fname), hWndMain, OPEN_SCSI)) {
                                   if (file_getftype(fname)==FTYPE_HDD) {
                                           sysmng_update(SYS_UPDATEOSCFG);
                                           diskdrv_sethdd(drv, fname);
                                   }
                           }
                 }                  }
         }          }
 }  }
Line 225  void dialog_font(void) { Line 314  void dialog_font(void) {
   
     char        name[1024];      char        name[1024];
   
         if (dialog_fileselect(name, 1024, hWndMain)) {          if (dialog_fileselect(name, sizeof(name), hWndMain, OPEN_FONT)) {
         if ((name != NULL) && (font_load(name, FALSE))) {          if ((name != NULL) && (font_load(name, FALSE))) {
             gdcs.textdisp |= GDCSCRN_ALLDRAW2;              gdcs.textdisp |= GDCSCRN_ALLDRAW2;
             milstr_ncpy(np2cfg.fontfile, name, sizeof(np2cfg.fontfile));              milstr_ncpy(np2cfg.fontfile, name, sizeof(np2cfg.fontfile));
Line 243  void dialog_writebmp(void) { Line 332  void dialog_writebmp(void) {
   
         bmp = scrnbmp();          bmp = scrnbmp();
         if (bmp) {          if (bmp) {
                 if (saveFile('BMP ', "np2.bmp", &fss)) {                  if (dialog_filewriteselect('BMP ', "Neko Project IIx ScreenShot.bmp", &fss, hWndMain)) {
             fsspec2path(&fss, path, MAX_PATH);              fsspec2path(&fss, path, MAX_PATH);
                         fh = file_create(path);                          fh = file_create(path);
                         if (fh != FILEH_INVALID) {                          if (fh != FILEH_INVALID) {
Line 266  void dialog_s98(void) { Line 355  void dialog_s98(void) {
     if (check) {      if (check) {
         check = FALSE;          check = FALSE;
     }      }
     else if (saveFile('.S98', "S98 log.s98", &fsc)) {      else if (dialog_filewriteselect('.S98', "S98 log.s98", &fsc, hWndMain)) {
         fsspec2path(&fsc, fname, MAX_PATH);          fsspec2path(&fsc, fname, MAX_PATH);
         if (S98_open(fname) == SUCCESS) {          if (S98_open(fname) == SUCCESS) {
             check = TRUE;              check = TRUE;

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


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