Switch the default button based on the target control.

This currently works by actually having two different controls for each button.
This commit is contained in:
Stephen Heumann 2019-04-16 22:58:46 -05:00
parent 048f421af2
commit ec309557b5
2 changed files with 100 additions and 12 deletions

View File

@ -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) {

View File

@ -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" };