--- np2/macosx/toolwin.cpp 2003/11/03 17:36:24 1.2 +++ np2/macosx/toolwin.cpp 2004/03/15 05:06:01 1.19 @@ -11,6 +11,12 @@ #include "dialog.h" #include "soundmng.h" #include "fdefine.h" +#include "mackbd.h" +#include "mousemng.h" +#include "pccore.h" +#include "iocore.h" + +extern void HandleMenuChoice(long wParam); enum { IDC_TOOLHDDACC = 0, @@ -106,14 +112,39 @@ static const OSType subcommand[11] ={ '- 'exit', }; +#define BASENUMBER 4 static const ControlID popup[2] = { {'pop1', 1}, {'pop2', 2} }; +static const ControlID imageid = {'back', 0}; -static void openpopup(HIPoint location); -static void skinchange(void); static DragReceiveHandlerUPP dr; +static DragTrackingHandlerUPP tr; +static bool isPUMA, isJaguar; + +static void openpopup(Point location); +static void skinchange(bool remake); // ---- +static void checkOSVersion(void) { + static long res = 0; + if (!res) { + Gestalt(gestaltSystemVersion, &res); + if (res<0x1020) { + isPUMA = true; + isJaguar = false; + } + else if (res<0x1030) { + isPUMA = false; + isJaguar = true; + } + else { + isPUMA = false; + isJaguar = false; + } + } +} + + static PicHandle skinload(const char *path, Rect* bounds) { char fname[MAX_PATH]; @@ -150,7 +181,7 @@ static PicHandle skinload(const char *pa return(ret); } } - return(getBMPfromResource("np2tool", bounds)); + return(getBMPfromResource("np2tool.bmp", bounds)); } // ---- @@ -159,37 +190,47 @@ static void setlist(ControlRef hwnd, con #if 0 Rect rc; int width; -#endif - char basedir[MAX_PATH]; - UINT i; -const char *p; char dir[MAX_PATH]; -const char *q; - char cfname[512]; + char basedir[MAX_PATH]; +#endif MenuHandle menu; + UINT i; + char cfname[512]; +const char *q; +const char *p; + CFStringRef str; + Str255 pname; + bool success = false; GetBevelButtonMenuHandle(hwnd, &menu); - while (MenuHasEnabledItems(menu)) { - DeleteMenuItem(menu, 1); - }; + DeleteMenuItems(menu, 1, fdd->cnt); #if 0 GetControlBounds(hwnd, &rc); width = rc.right - rc.left - 6; // border size? -#endif basedir[0] = '\0'; if (sel < fdd->cnt) { milstr_ncpy(basedir, fdd->name[fdd->pos[sel]], sizeof(basedir)); file_cutname(basedir); } +#endif for (i=0; icnt; i++) { + SInt32 attr = kMenuItemAttrIconDisabled; p = fdd->name[fdd->pos[i]]; - if (getLongFileName(cfname, p)) { - q = cfname; + success = getLongFileName(cfname, p); + str = CFStringCreateWithCString(NULL, cfname, CFStringGetSystemEncoding()); + if (str) { + if (success) { + if (file_attr(p) != FILEATTR_ARCHIVE) { + attr |= kMenuItemAttrDisabled; + } + AppendMenuItemTextWithCFString(menu, str, attr, NULL, NULL); + } + CFRelease(str); } else { +#if 0 milstr_ncpy(dir, p, sizeof(dir)); file_cutname(dir); -#if 0 if (!file_cmpname(basedir, dir)) { q = file_getname((char *)p); } @@ -198,13 +239,16 @@ const char *q; q = dir; } #else - q = file_getname((char *)p); + q = file_getname((char *)p); #endif - } - AppendMenu(menu, "\pNot Available"); - SetMenuItemTextWithCFString(menu, i+1, CFStringCreateWithCString(NULL,q,kCFStringEncodingUTF8)); - if (file_attr(p)==FILEATTR_ARCHIVE) { - EnableMenuItem(menu, i+1); + mkstr255(pname, q); + AppendMenu(menu, pname); + if (file_attr(p)==FILEATTR_ARCHIVE) { + EnableMenuItem(menu, i+1); + } + else { + DisableMenuItem(menu, i+1); + } } p += sizeof(fdd->name[0]); } @@ -212,10 +256,16 @@ const char *q; CFStringRef title; SetBevelButtonMenuValue(hwnd, sel+1); CopyMenuItemTextAsCFString(menu, sel+1, &title); - SetControlTitleWithCFString(hwnd, title); + if (title) { + SetControlTitleWithCFString(hwnd, title); + CFRelease(title); + } } else { SetControlTitleWithCFString(hwnd, CFSTR(" ")); + for (i=0; icnt; i++) { + CheckMenuItem(menu, i+1, 0); + } } } @@ -314,9 +364,21 @@ static pascal OSStatus cfControlproc(Eve } else if (GetEventClass(event)==kEventClassControl && GetEventKind(event)==kEventControlContextualMenuClick) { HIPoint location; + Point point; + soundmng_stop(); GetEventParameter (event, kEventParamMouseLocation, typeHIPoint, NULL, sizeof(HIPoint), NULL, &location); - openpopup(location); + point.h = (short)location.x; + point.v = (short)location.y; + if (!isJaguar && !isPUMA) { + GrafPtr port, dst; + bool portchanged; + dst = GetWindowPort(toolwin.hwnd); + portchanged = QDSwapPort(dst, &port); + LocalToGlobal(&point); + if (portchanged) QDSwapPort(port, NULL); + } + openpopup(point); soundmng_play(); } @@ -325,6 +387,22 @@ static pascal OSStatus cfControlproc(Eve return err; } +static PixPatHandle portpat; + +static void setDragColor(GrafPtr window) { + GrafPtr port; + RGBColor color; + bool portchanged; + + portchanged = QDSwapPort(window, &port); + GetThemeBrushAsColor(kThemeBrushDragHilite, 32, true, &color); + portpat = NewPixPat(); + MakeRGBPat(portpat, &color); + PenPixPat(portpat); + PenSize(3, 3); + if (portchanged) QDSwapPort(port, NULL); +} + static void toolwincreate(WindowRef hWnd) { const SUBITEM *p; @@ -333,6 +411,8 @@ const SUBITEM *p; const char *cls; UInt32 style; + setDragColor(GetWindowPort(hWnd)); + ControlButtonContentInfo info; info.contentType = kControlContentPictHandle; info.u.picture = NULL; @@ -432,6 +512,7 @@ static void toolwindestroy(void) { DisposePixPat(toolwin.access[1]); KillPicture(toolwin.hbmp); toolwin.hbmp = NULL; + DisposePixPat(portpat); } } @@ -441,13 +522,15 @@ static void toolwindestroy(void) { static pascal OSStatus cfWinproc(EventHandlerCallRef myHandler, EventRef event, void* userData) { OSStatus err = eventNotHandledErr; HICommand cmd; + ControlRef sub; + int i; if (GetEventClass(event)==kEventClassCommand && GetEventKind(event)==kEventCommandProcess ) { GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd); switch (cmd.commandID) { case 'rset': - recieveCommand(IDM_RESET); + HandleMenuChoice(IDM_RESET); err=noErr; break; @@ -457,12 +540,12 @@ static pascal OSStatus cfWinproc(EventHa break; case 'opn1': - recieveCommand(IDM_FDD1OPEN); + HandleMenuChoice(IDM_FDD1OPEN); err=noErr; break; case 'ejt1': - recieveCommand(IDM_FDD1EJECT); + HandleMenuChoice(IDM_FDD1EJECT); err=noErr; break; @@ -472,17 +555,17 @@ static pascal OSStatus cfWinproc(EventHa break; case 'opn2': - recieveCommand(IDM_FDD2OPEN); + HandleMenuChoice(IDM_FDD2OPEN); err=noErr; break; case 'ejt2': - recieveCommand(IDM_FDD2EJECT); + HandleMenuChoice(IDM_FDD2EJECT); err=noErr; break; case 'exit': - recieveCommand(IDM_EXIT); + HandleMenuChoice(IDM_EXIT); err=noErr; break; @@ -493,26 +576,79 @@ static pascal OSStatus cfWinproc(EventHa else if (GetEventClass(event)==kEventClassWindow) { switch (GetEventKind(event)) { case kEventWindowClose: +#ifdef AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER + case kEventWindowDrawerClosed: +#endif toolwin_close(); err=noErr; break; + case kEventWindowDrawContent: + case kEventWindowShown: + for (i=0; i"),"Base Skin"), kMenuItemAttrIconDisabled, NULL,NULL); + if (base[0] == '\0') { + CheckMenuItem(ret, BASENUMBER-1, true); } for (cnt=0; cnti; j--) { - id[j] = id[j-1]; - } - id[i] = cnt; - file[cnt] = p; - } - for (i=0; i