From ec309557b567cd0c43494c9e0dffe878962df409 Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Tue, 16 Apr 2019 22:58:46 -0500 Subject: [PATCH] Switch the default button based on the target control. This currently works by actually having two different controls for each button. --- diskbrowser.c | 77 ++++++++++++++++++++++++++++++++++++++++++------- diskbrowser.rez | 35 ++++++++++++++++++++-- 2 files changed, 100 insertions(+), 12 deletions(-) diff --git a/diskbrowser.c b/diskbrowser.c index 329864e..d9220ae 100644 --- a/diskbrowser.c +++ b/diskbrowser.c @@ -44,6 +44,9 @@ char finderRequestName[] = "\pApple~Finder~"; #define disksList 1007 #define mountDiskButton 1008 +#define searchButtonDefault (searchButton+50) +#define mountDiskButtonDefault (mountDiskButton+50) + #define searchErrorAlert 3000 Word resourceFileID; @@ -55,6 +58,12 @@ Word myUserID; GrafPortPtr window; +CtlRecHndl disksListHandle; +CtlRecHndl mountButtonHandle, mountButtonDefaultHandle; +CtlRecHndl searchButtonHandle, searchButtonDefaultHandle; + +unsigned long lastTargetCtlID = 0; + Boolean resourceFileOpened, windowOpened; /* User preference */ @@ -336,29 +345,34 @@ void DoSearch(void) { } processArray(docs, json_object, processDoc); - for (int i = 0; i < DISK_LIST_LENGTH; i++) { + diskList[0].memFlag = 0x80; + for (int i = 1; i < DISK_LIST_LENGTH; i++) { diskList[i].memFlag = 0; } /* Update state of controls once disk list is available */ - CtlRecHndl disksListHandle = GetCtlHandleFromID(window, disksList); HiliteControl(noHilite, disksListHandle); - NewList2(NULL, 1, (Ref) diskList, refIsPointer, - diskListPos, (Handle)disksListHandle); - SetCtlMoreFlags( GetCtlMoreFlags(disksListHandle) | fCtlCanBeTarget | fCtlWantEvents, disksListHandle); - HiliteCtlByID(noHilite, window, mountDiskButton); + NewList2(NULL, 1, (Ref) diskList, refIsPointer, + diskListPos, (Handle)disksListHandle); + + if (diskListPos > 0) { + if (FindTargetCtl() != disksListHandle) { + MakeThisCtlTarget(disksListHandle); + CallCtlDefProc(disksListHandle, ctlChangeTarget, 0); + } + } + free(searchURL); EndTCPConnection(&sess); InitCursor(); return; errorReturn: - NewList2(NULL, 1, (Ref) diskList, refIsPointer, - 0, (Handle)GetCtlHandleFromID(window, disksList)); + NewList2(NULL, 1, (Ref) diskList, refIsPointer, 0, (Handle)disksListHandle); free(queryString); free(searchURL); EndTCPConnection(&sess); @@ -372,6 +386,7 @@ void HandleEvent(int eventCode, WmTaskRec *taskRec) { case wInControl: switch (taskRec->wmTaskData4) { case searchButton: + case searchButtonDefault: DoSearch(); break; @@ -383,6 +398,7 @@ void HandleEvent(int eventCode, WmTaskRec *taskRec) { break; case mountDiskButton: + case mountDiskButtonDefault: // TODO break; } @@ -406,6 +422,36 @@ void HandleEvent(int eventCode, WmTaskRec *taskRec) { } break; } + + unsigned long targetCtlID = GetCtlID(FindTargetCtl()); + if (targetCtlID != lastTargetCtlID) { + /* Make button corresponding to target control the default */ + lastTargetCtlID = targetCtlID; + if (targetCtlID == searchLine) { + SetCtlMoreFlags(GetCtlMoreFlags(mountButtonDefaultHandle) & 0x1FFF, + mountButtonDefaultHandle); + SetCtlMoreFlags(GetCtlMoreFlags(searchButtonDefaultHandle) | 0x3000, + searchButtonDefaultHandle); + ShowControl(searchButtonDefaultHandle); + HideControl(mountButtonDefaultHandle); + } else if (targetCtlID == disksList) { + SetCtlMoreFlags(GetCtlMoreFlags(searchButtonDefaultHandle) & 0x1FFF, + searchButtonDefaultHandle); + SetCtlMoreFlags(GetCtlMoreFlags(mountButtonDefaultHandle) | 0x3000, + mountButtonDefaultHandle); + ShowControl(mountButtonDefaultHandle); + HideControl(searchButtonDefaultHandle); + } + } + + /* Only allow "Mount Disk" to be clicked if there is a disk selected */ + if (NextMember2(0, (Handle)disksListHandle) != 0) { + HiliteControl(noHilite, mountButtonHandle); + HiliteControl(noHilite, mountButtonDefaultHandle); + } else { + HiliteControl(inactiveHilite, mountButtonHandle); + HiliteControl(inactiveHilite, mountButtonDefaultHandle); + } } /* NDA-style action routine for our window */ @@ -493,8 +539,19 @@ void ShowBrowserWindow(void) { sysWindRecord.memoryID = myUserID; auxWindInfo->NDASysWindPtr = (Ptr)&sysWindRecord; - HiliteCtlByID(inactiveHilite, window, disksList); - HiliteCtlByID(inactiveHilite, window, mountDiskButton); + disksListHandle = GetCtlHandleFromID(window, disksList); + mountButtonDefaultHandle = GetCtlHandleFromID(window, mountDiskButtonDefault); + searchButtonDefaultHandle = GetCtlHandleFromID(window, searchButtonDefault); + mountButtonHandle = GetCtlHandleFromID(window, mountDiskButton); + searchButtonHandle = GetCtlHandleFromID(window, searchButton); + + HideControl(GetCtlHandleFromID(window, mountDiskButtonDefault)); + + HiliteControl(inactiveHilite, disksListHandle); + HiliteControl(inactiveHilite, mountButtonHandle); + HiliteControl(inactiveHilite, mountButtonDefaultHandle); + + lastTargetCtlID = 0; cleanup: if (resourceFileOpened && !windowOpened) { diff --git a/diskbrowser.rez b/diskbrowser.rez index cb7a1ba..15e11dc 100644 --- a/diskbrowser.rez +++ b/diskbrowser.rez @@ -10,6 +10,9 @@ #define disksList 1007 #define mountDiskButton 1008 +#define searchButtonDefault (searchButton+50) +#define mountDiskButtonDefault (mountDiskButton+50) + resource rWindParam1 (winDiskBrowser) { fTitle+fClose+fFlex+fMove+fVis, /* wFrameBits */ nil, /* wTitle */ @@ -30,12 +33,14 @@ resource rWindParam1 (winDiskBrowser) { }; resource rControlList (winDiskBrowser) {{ + mountDiskButtonDefault, mountDiskButton, disksList, findDisksForText, forIIGSRadio, forAnyAppleIIRadio, searchLine, + searchButtonDefault, searchButton }}; @@ -54,8 +59,8 @@ resource rControlTemplate (searchLine) { resource rPString (searchLine) { "" }; -resource rControlTemplate (searchButton) { - searchButton, +resource rControlTemplate (searchButtonDefault) { + searchButtonDefault, {10, 309, 0, 0}, SimpleButtonControl {{ DefaultButton, @@ -67,6 +72,19 @@ resource rControlTemplate (searchButton) { }}; }; +resource rControlTemplate (searchButton) { + searchButton, + {10, 309, 0, 0}, + SimpleButtonControl {{ + 0, + $1000+RefIsResource, + 0, + searchButton, + 0, /* color table ref */ + {"","",0,0} /* key equivalent = Return */ + }}; +}; + resource rPString(searchButton) { "Find Disks" }; @@ -142,6 +160,19 @@ resource rControlTemplate (mountDiskButton) { }}; }; +resource rControlTemplate (mountDiskButtonDefault) { + mountDiskButtonDefault, + {152, 305, 0, 0}, + SimpleButtonControl {{ + DefaultButton, + $3000+RefIsResource, + 0, + mountDiskButton, + 0, /* color table ref */ + {"\$0D","\$0D",0,0} /* key equivalent */ + }}; +}; + resource rPString(mountDiskButton) { "Mount Disk" };