- short buttonType;
- Handle buttonHandle;
- Rect buttonRect;
- short textWidth;
- Handle labelHandle;
- Handle nameHandle;
- Str15 keyStr;
- Str255 labelStr;
- OSErr err;
-
- nameHandle = nil;
- labelHandle = nil;
-
- // get the details of the button from the dialog
-
- GetDialogItem(theDlgPtr, buttonID, &buttonType, &buttonHandle, &buttonRect);
-
- // get the string for the select button label, "Select ^0" or "Select Ò^0Ó"
-
- GetLabelString(labelStr, (quoteFlag == kUseQuotes) ? kSelectStrNum : kSelectNoQuoteStrNum);
-
- // make string handles containing the select button label and the
- // file name to be stuffed into the button
-
- err = PtrToHand(&labelStr[1], &labelHandle, labelStr[0]);
- if (err != noErr) goto Bail;
-
- // cut out the middle of the file name to fit the button
- //
- // we'll temporarily use labelStr here to hold the modified button name
- // since we don't own the buttonName string storage space
-
- textWidth = (buttonRect.right - buttonRect.left) - StringWidth(labelStr);
-
- CopyPStr(buttonName, labelStr);
- (void) TruncString(textWidth, labelStr, smTruncMiddle);
-
- err = PtrToHand(&labelStr[1], &nameHandle, labelStr[0]);
- if (err != noErr) goto Bail;
-
- // replace the ^0 in the Select string with the file name
-
- CopyPStr("\p^0", keyStr);
-
- (void) ReplaceText(labelHandle, nameHandle, keyStr);
-
- labelStr[0] = (unsigned char) GetHandleSize(labelHandle);
- BlockMoveData(*labelHandle, &labelStr[1], labelStr[0]);
-
- // now set the control title, and re-validate the area
- // above the control to avoid a needless redraw
-
- SetControlTitle((ControlHandle) buttonHandle, labelStr);
-
- ValidRect(&buttonRect);
-
-Bail:
- if (nameHandle) DisposeHandle(nameHandle);
- if (labelHandle) DisposeHandle(labelHandle);
-
-}
-
-// FlashButton briefly highlights the dialog button
-// as feedback for key equivalents
-
-static void FlashButton(DialogPtr theDlgPtr, short buttonID)
-{
- short buttonType;
- Handle buttonHandle;
- Rect buttonRect;
- unsigned long finalTicks;
-
- GetDialogItem(theDlgPtr, buttonID, &buttonType, &buttonHandle, &buttonRect);
- HiliteControl((ControlHandle) buttonHandle, kControlButtonPart);
- Delay(10, &finalTicks);
- HiliteControl((ControlHandle) buttonHandle, 0);
-}
-
-static Boolean SameFSSpec(FSSpecPtr spec1, FSSpecPtr spec2)
-{
- return (spec1->vRefNum == spec2->vRefNum
- && spec1->parID == spec2->parID
- && EqualString(spec1->name, spec2->name, false, false));