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 disksList 1007
#define mountDiskButton 1008 #define mountDiskButton 1008
#define searchButtonDefault (searchButton+50)
#define mountDiskButtonDefault (mountDiskButton+50)
#define searchErrorAlert 3000 #define searchErrorAlert 3000
Word resourceFileID; Word resourceFileID;
@ -55,6 +58,12 @@ Word myUserID;
GrafPortPtr window; GrafPortPtr window;
CtlRecHndl disksListHandle;
CtlRecHndl mountButtonHandle, mountButtonDefaultHandle;
CtlRecHndl searchButtonHandle, searchButtonDefaultHandle;
unsigned long lastTargetCtlID = 0;
Boolean resourceFileOpened, windowOpened; Boolean resourceFileOpened, windowOpened;
/* User preference */ /* User preference */
@ -336,29 +345,34 @@ void DoSearch(void) {
} }
processArray(docs, json_object, processDoc); 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; diskList[i].memFlag = 0;
} }
/* Update state of controls once disk list is available */ /* Update state of controls once disk list is available */
CtlRecHndl disksListHandle = GetCtlHandleFromID(window, disksList);
HiliteControl(noHilite, disksListHandle); HiliteControl(noHilite, disksListHandle);
NewList2(NULL, 1, (Ref) diskList, refIsPointer,
diskListPos, (Handle)disksListHandle);
SetCtlMoreFlags( SetCtlMoreFlags(
GetCtlMoreFlags(disksListHandle) | fCtlCanBeTarget | fCtlWantEvents, GetCtlMoreFlags(disksListHandle) | fCtlCanBeTarget | fCtlWantEvents,
disksListHandle); 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); free(searchURL);
EndTCPConnection(&sess); EndTCPConnection(&sess);
InitCursor(); InitCursor();
return; return;
errorReturn: errorReturn:
NewList2(NULL, 1, (Ref) diskList, refIsPointer, NewList2(NULL, 1, (Ref) diskList, refIsPointer, 0, (Handle)disksListHandle);
0, (Handle)GetCtlHandleFromID(window, disksList));
free(queryString); free(queryString);
free(searchURL); free(searchURL);
EndTCPConnection(&sess); EndTCPConnection(&sess);
@ -372,6 +386,7 @@ void HandleEvent(int eventCode, WmTaskRec *taskRec) {
case wInControl: case wInControl:
switch (taskRec->wmTaskData4) { switch (taskRec->wmTaskData4) {
case searchButton: case searchButton:
case searchButtonDefault:
DoSearch(); DoSearch();
break; break;
@ -383,6 +398,7 @@ void HandleEvent(int eventCode, WmTaskRec *taskRec) {
break; break;
case mountDiskButton: case mountDiskButton:
case mountDiskButtonDefault:
// TODO // TODO
break; break;
} }
@ -406,6 +422,36 @@ void HandleEvent(int eventCode, WmTaskRec *taskRec) {
} }
break; 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 */ /* NDA-style action routine for our window */
@ -493,8 +539,19 @@ void ShowBrowserWindow(void) {
sysWindRecord.memoryID = myUserID; sysWindRecord.memoryID = myUserID;
auxWindInfo->NDASysWindPtr = (Ptr)&sysWindRecord; auxWindInfo->NDASysWindPtr = (Ptr)&sysWindRecord;
HiliteCtlByID(inactiveHilite, window, disksList); disksListHandle = GetCtlHandleFromID(window, disksList);
HiliteCtlByID(inactiveHilite, window, mountDiskButton); 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: cleanup:
if (resourceFileOpened && !windowOpened) { if (resourceFileOpened && !windowOpened) {

View File

@ -10,6 +10,9 @@
#define disksList 1007 #define disksList 1007
#define mountDiskButton 1008 #define mountDiskButton 1008
#define searchButtonDefault (searchButton+50)
#define mountDiskButtonDefault (mountDiskButton+50)
resource rWindParam1 (winDiskBrowser) { resource rWindParam1 (winDiskBrowser) {
fTitle+fClose+fFlex+fMove+fVis, /* wFrameBits */ fTitle+fClose+fFlex+fMove+fVis, /* wFrameBits */
nil, /* wTitle */ nil, /* wTitle */
@ -30,12 +33,14 @@ resource rWindParam1 (winDiskBrowser) {
}; };
resource rControlList (winDiskBrowser) {{ resource rControlList (winDiskBrowser) {{
mountDiskButtonDefault,
mountDiskButton, mountDiskButton,
disksList, disksList,
findDisksForText, findDisksForText,
forIIGSRadio, forIIGSRadio,
forAnyAppleIIRadio, forAnyAppleIIRadio,
searchLine, searchLine,
searchButtonDefault,
searchButton searchButton
}}; }};
@ -54,8 +59,8 @@ resource rControlTemplate (searchLine) {
resource rPString (searchLine) { "" }; resource rPString (searchLine) { "" };
resource rControlTemplate (searchButton) { resource rControlTemplate (searchButtonDefault) {
searchButton, searchButtonDefault,
{10, 309, 0, 0}, {10, 309, 0, 0},
SimpleButtonControl {{ SimpleButtonControl {{
DefaultButton, 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" }; 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" }; resource rPString(mountDiskButton) { "Mount Disk" };