| version 1.8, 2003/11/08 17:54:26 | version 1.12, 2003/11/21 16:01:41 | 
| Line 11 | Line 11 | 
 | #include        "dialog.h" | #include        "dialog.h" | 
 | #include        "soundmng.h" | #include        "soundmng.h" | 
 | #include        "fdefine.h" | #include        "fdefine.h" | 
 |  | #include        "mackbd.h" | 
 |  | #include        "mousemng.h" | 
 |  | #include        "pccore.h" | 
 |  | #include        "iocore.h" | 
 |  |  | 
 |  |  | 
 | enum { | enum { | 
| Line 107  static const OSType subcommand[11] ={ '- | Line 111  static const OSType subcommand[11] ={ '- | 
 | 'exit', | 'exit', | 
 | }; | }; | 
 |  |  | 
 |  | #define BASENUMBER      4 | 
 | static const ControlID popup[2] = { {'pop1', 1}, {'pop2', 2} }; | static const ControlID popup[2] = { {'pop1', 1}, {'pop2', 2} }; | 
 |  |  | 
 | static DragReceiveHandlerUPP    dr; | static DragReceiveHandlerUPP    dr; | 
 | static bool     isPUMA; | static bool     isPUMA; | 
 |  |  | 
 | static void openpopup(HIPoint location); | static void openpopup(HIPoint location); | 
| static void skinchange(void); | static void skinchange(bool remake); | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
 | static void checkOSVersion(void) { | static void checkOSVersion(void) { | 
| long        res; | static      long    res = 0; | 
| Gestalt(gestaltSystemVersion, &res); | if (!res) { | 
| if (res<0x1020) { | Gestalt(gestaltSystemVersion, &res); | 
| isPUMA = true; | if (res<0x1020) { | 
| } | isPUMA = true; | 
| else { | } | 
| isPUMA = false; | else { | 
|  | isPUMA = false; | 
|  | } | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 165  static PicHandle skinload(const char *pa | Line 172  static PicHandle skinload(const char *pa | 
 | return(ret); | return(ret); | 
 | } | } | 
 | } | } | 
| return(getBMPfromResource("np2tool", bounds)); | return(getBMPfromResource("np2tool.bmp", bounds)); | 
 | } | } | 
 |  |  | 
 | // ---- | // ---- | 
| Line 522  static pascal OSStatus cfWinproc(EventHa | Line 529  static pascal OSStatus cfWinproc(EventHa | 
 | Draw1Control(sub); | Draw1Control(sub); | 
 | } | } | 
 | } | } | 
 |  | err=noErr; | 
 | break; | break; | 
 |  |  | 
 | case kEventWindowFocusAcquired: | case kEventWindowFocusAcquired: | 
| SelectWindow(hWndMain); | BringToFront(hWndMain); | 
|  | err = noErr; | 
 | break; | break; | 
 |  |  | 
 |  |  | 
| Line 533  static pascal OSStatus cfWinproc(EventHa | Line 542  static pascal OSStatus cfWinproc(EventHa | 
 | break; | break; | 
 | } | } | 
 | } | } | 
 |  | else if (GetEventClass(event)==kEventClassKeyboard) { | 
 |  | static  UInt32  backup = 0; | 
 |  | UInt32  whatHappened = GetEventKind(event); | 
 |  | UInt32 key; | 
 |  | GetEventParameter (event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &key); | 
 |  | UInt32 modif; | 
 |  | GetEventParameter (event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modif); | 
 |  | switch (whatHappened) | 
 |  | { | 
 |  | case kEventRawKeyUp: | 
 |  | mackbd_keyup(key); | 
 |  | err = noErr; | 
 |  | break; | 
 |  | case kEventRawKeyRepeat: | 
 |  | mackbd_keydown(key); | 
 |  | err = noErr; | 
 |  | break; | 
 |  | case kEventRawKeyDown: | 
 |  | if (modif & cmdKey) { | 
 |  | EventRecord eve; | 
 |  | ConvertEventRefToEventRecord( event,&eve ); | 
 |  | mousemng_disable(MOUSEPROC_MACUI); | 
 |  | recieveCommand(MenuEvent(&eve)); | 
 |  | mousemng_enable(MOUSEPROC_MACUI); | 
 |  | } | 
 |  | else { | 
 |  | mackbd_keydown(key); | 
 |  | } | 
 |  | err = noErr; | 
 |  | break; | 
 |  | case kEventRawKeyModifiersChanged: | 
 |  | if (modif & shiftKey) keystat_senddata(0x70); | 
 |  | else keystat_senddata(0x70 | 0x80); | 
 |  | if (modif & optionKey) keystat_senddata(0x73); | 
 |  | else keystat_senddata(0x73 | 0x80); | 
 |  | if (modif & controlKey) keystat_senddata(0x74); | 
 |  | else keystat_senddata(0x74 | 0x80); | 
 |  | if ((modif & alphaLock) != (backup & alphaLock)) { | 
 |  | keystat_senddata(0x71); | 
 |  | backup = modif; | 
 |  | } | 
 |  | err = noErr; | 
 |  | break; | 
 |  | default: | 
 |  | break; | 
 |  | } | 
 |  | } | 
 |  |  | 
 | (void)myHandler; | (void)myHandler; | 
 | return err; | return err; | 
| Line 556  OSErr setDropFile(FSSpec spec, int drv) | Line 612  OSErr setDropFile(FSSpec spec, int drv) | 
 |  |  | 
 | case FTYPE_TEXT: | case FTYPE_TEXT: | 
 | strcpy(np2tool.skin, fname); | strcpy(np2tool.skin, fname); | 
| skinchange(); | skinchange(true); | 
 | break; | break; | 
 |  |  | 
 | case FTYPE_THD: | case FTYPE_THD: | 
| Line 628  static WindowRef makeNibWindow (IBNibRef | Line 684  static WindowRef makeNibWindow (IBNibRef | 
 | if (err == noErr) { | if (err == noErr) { | 
 | InstallStandardEventHandler(GetWindowEventTarget(win)); | InstallStandardEventHandler(GetWindowEventTarget(win)); | 
 | EventTypeSpec   list[]={ | EventTypeSpec   list[]={ | 
| { kEventClassCommand, kEventCommandProcess }, | { kEventClassCommand,       kEventCommandProcess }, | 
| { kEventClassWindow, kEventWindowClose }, | { kEventClassWindow,        kEventWindowClose }, | 
| { kEventClassWindow, kEventWindowShown }, | { kEventClassWindow,        kEventWindowShown }, | 
| { kEventClassWindow, kEventWindowDrawContent }, | { kEventClassWindow,        kEventWindowDrawContent }, | 
| { kEventClassWindow, kEventWindowFocusAcquired }, | { kEventClassWindow,        kEventWindowFocusAcquired }, | 
|  | { kEventClassKeyboard,      kEventRawKeyDown}, | 
 | }; | }; | 
 | EventHandlerRef ref; | EventHandlerRef ref; | 
 | InstallWindowEventHandler (win, NewEventHandlerUPP(cfWinproc), GetEventTypeCount(list), list, (void *)win, &ref); | InstallWindowEventHandler (win, NewEventHandlerUPP(cfWinproc), GetEventTypeCount(list), list, (void *)win, &ref); | 
| Line 662  static void createskinmenu(MenuRef ret) | Line 719  static void createskinmenu(MenuRef ret) | 
 | const char      *base; | const char      *base; | 
 | char    *p; | char    *p; | 
 | UINT    i; | UINT    i; | 
 | UINT    j; |  | 
 | UINT    id[SKINMRU_MAX]; |  | 
 | const char      *file[SKINMRU_MAX]; |  | 
 | char        longname[256]; | char        longname[256]; | 
 |  |  | 
 | AppendMenuItemTextWithCFString(ret, CFCopyLocalizedString(CFSTR("Select Skin..."),"Slect Skin"), kMenuItemAttrIconDisabled, NULL,NULL); | AppendMenuItemTextWithCFString(ret, CFCopyLocalizedString(CFSTR("Select Skin..."),"Slect Skin"), kMenuItemAttrIconDisabled, NULL,NULL); | 
 | AppendMenu(ret, "\p-"); | AppendMenu(ret, "\p-"); | 
 |  |  | 
 | base = np2tool.skin; | base = np2tool.skin; | 
| AppendMenuItemTextWithCFString(ret, CFCopyLocalizedString(CFSTR("Base Skin"),"Base Skin"), kMenuItemAttrIconDisabled, NULL,NULL); | AppendMenuItemTextWithCFString(ret, CFCopyLocalizedString(CFSTR("<Base Skin>"),"Base Skin"), kMenuItemAttrIconDisabled, NULL,NULL); | 
 | if (base[0] == '\0') { | if (base[0] == '\0') { | 
| DisableMenuItem(ret, 3); | CheckMenuItem(ret, BASENUMBER-1, true); | 
 | } | } | 
 | for (cnt=0; cnt<SKINMRU_MAX; cnt++) { | for (cnt=0; cnt<SKINMRU_MAX; cnt++) { | 
 | p = np2tool.skinmru[cnt]; | p = np2tool.skinmru[cnt]; | 
 | if (p[0] == '\0') { | if (p[0] == '\0') { | 
 | break; | break; | 
 | } | } | 
| getLongFileName(longname, p); | UInt32  attr = kMenuItemAttrIconDisabled; | 
| p = longname; | if (file_attr(p) != FILEATTR_ARCHIVE) { | 
| for (i=0; i<cnt; i++) { | attr |= kMenuItemAttrDisabled; | 
| if (file_cmpname(p, file[id[i]]) < 0) { | } | 
| break; | ZeroMemory(longname, sizeof(longname)); | 
| } | if (!getLongFileName(longname, p)) { | 
| } | strcpy(longname, file_getname(p)); | 
| for (j=cnt; j>i; j--) { | } | 
| id[j] = id[j-1]; | AppendMenuItemTextWithCFString(ret, CFStringCreateWithCString(NULL, longname, kCFStringEncodingUTF8), attr, NULL, NULL); | 
| } |  | 
| id[i] = cnt; |  | 
| file[cnt] = p; |  | 
 | } | } | 
 | for (i=0; i<cnt; i++) { | for (i=0; i<cnt; i++) { | 
| j = id[i]; | if (!file_cmpname(base, np2tool.skinmru[i])) { | 
| if (file[j][0] != '\0') { | CheckMenuItem(ret, i+BASENUMBER, true); | 
| UInt32      attr = kMenuItemAttrIconDisabled; | break; | 
| if (!file_cmpname(base, np2tool.skinmru[j])) { |  | 
| attr |= kMenuItemAttrDisabled; |  | 
| } |  | 
| else if (file_attr(np2tool.skinmru[j]) == -1) { |  | 
| attr |= kMenuItemAttrDisabled; |  | 
| } |  | 
| AppendMenuItemTextWithCFString(ret, CFStringCreateWithCString(NULL, file[j], kCFStringEncodingUTF8), attr, NULL, NULL); |  | 
 | } | } | 
 | } | } | 
 | return; | return; | 
 | } | } | 
 |  |  | 
| static void skinchange(void) { | static void skinchange(bool remake) { | 
 |  |  | 
 | const char              *p; | const char              *p; | 
 | UINT            i; | UINT            i; | 
 |  |  | 
 | toolwin_close(); | toolwin_close(); | 
 | p = np2tool.skin; | p = np2tool.skin; | 
| if (p[0]) { | if (p[0] && remake) { | 
 | for (i=0; i<(SKINMRU_MAX - 1); i++) { | for (i=0; i<(SKINMRU_MAX - 1); i++) { | 
 | if (!file_cmpname(p, np2tool.skinmru[i])) { | if (!file_cmpname(p, np2tool.skinmru[i])) { | 
 | break; | break; | 
| Line 747  static void openpopup(HIPoint location) | Line 791  static void openpopup(HIPoint location) | 
 | createskinmenu(hMenu); | createskinmenu(hMenu); | 
 | AppendMenu(hMenu, "\p-"); | AppendMenu(hMenu, "\p-"); | 
 | AppendMenuItemTextWithCFString(hMenu, CFCopyLocalizedString(CFSTR("Close"),"ToolWin Close"), kMenuItemAttrIconDisabled, NULL, NULL); | AppendMenuItemTextWithCFString(hMenu, CFCopyLocalizedString(CFSTR("Close"),"ToolWin Close"), kMenuItemAttrIconDisabled, NULL, NULL); | 
 |  |  | 
 | DeleteMenu(222); | DeleteMenu(222); | 
 | selectclose = CountMenuItems(hMenu); | selectclose = CountMenuItems(hMenu); | 
 | sel = LoWord(PopUpMenuSelect(hMenu, (short)location.y, (short)location.x, 0)); | sel = LoWord(PopUpMenuSelect(hMenu, (short)location.y, (short)location.x, 0)); | 
| Line 758  static void openpopup(HIPoint location) | Line 801  static void openpopup(HIPoint location) | 
 | else { | else { | 
 | switch (sel) { | switch (sel) { | 
 | case 1: | case 1: | 
| if(dialog_fileselect(fname, sizeof(fname), hWndMain)) { | if(dialog_fileselect(fname, sizeof(fname), hWndMain, OPEN_INI)) { | 
 | if (file_getftype(fname)==FTYPE_TEXT) { | if (file_getftype(fname)==FTYPE_TEXT) { | 
 | strcpy(np2tool.skin, fname); | strcpy(np2tool.skin, fname); | 
| skinchange(); | skinchange(true); | 
 | } | } | 
 | } | } | 
 | break; | break; | 
 | case 3: | case 3: | 
| np2tool.skin[0] = '\0'; | if (np2tool.skin[0]) { | 
| skinchange(); | np2tool.skin[0] = '\0'; | 
|  | skinchange(false); | 
|  | } | 
 | break; | break; | 
 | case 4: | case 4: | 
 | case 5: | case 5: | 
 | case 6: | case 6: | 
 | case 7: | case 7: | 
| file_cpyname(np2tool.skin, np2tool.skinmru[sel - 4], sizeof(np2tool.skin)); | if (file_cmpname(np2tool.skin, np2tool.skinmru[sel - BASENUMBER])) { | 
| skinchange(); | file_cpyname(np2tool.skin, np2tool.skinmru[sel - BASENUMBER], sizeof(np2tool.skin)); | 
|  | skinchange(false); | 
|  | } | 
 | break; | break; | 
 | default: | default: | 
 | break; | break; | 
| Line 838  void toolwin_open(void) { | Line 885  void toolwin_open(void) { | 
 | ShowWindow(hWnd); | ShowWindow(hWnd); | 
 | } | } | 
 | else { | else { | 
 |  | Rect    mainbounds; | 
 |  | int             width; | 
 | SetDrawerParent(hWnd, hWndMain); | SetDrawerParent(hWnd, hWndMain); | 
| SetDrawerOffsets(hWnd, (640-(bounds.right-bounds.left))/2-11, (640-(bounds.right-bounds.left))/2-11); | GetWindowBounds(hWndMain, kWindowContentRgn, &mainbounds); | 
|  | width = (mainbounds.right-mainbounds.left)-(bounds.right-bounds.left); | 
|  | if (width/2-11<0) { | 
|  | toolwin_close(); | 
|  | return; | 
|  | } | 
|  | SetDrawerOffsets(hWnd, width/2-11, width/2-11); | 
 | SetDrawerPreferredEdge(hWnd, kWindowEdgeTop); | SetDrawerPreferredEdge(hWnd, kWindowEdgeTop); | 
 | OpenDrawer(hWnd, kWindowEdgeDefault, 1); | OpenDrawer(hWnd, kWindowEdgeDefault, 1); | 
 | } | } | 
 | #endif | #endif | 
 |  |  | 
 |  | np2oscfg.toolwin = 1; | 
 | return; | return; | 
 |  |  | 
 | twope_err2: | twope_err2: | 
| Line 872  void toolwin_close(void) { | Line 928  void toolwin_close(void) { | 
 | toolwindestroy(); | toolwindestroy(); | 
 | DisposeWindow(toolwin.hwnd); | DisposeWindow(toolwin.hwnd); | 
 | toolwin.hwnd = NULL; | toolwin.hwnd = NULL; | 
 |  | np2oscfg.toolwin = 0; | 
 | } | } | 
 | } | } | 
 |  |  |