home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-01-24 | 2.5 KB | 120 lines | [TEXT/CWIE] |
- unit Modal2;
-
- interface
-
- uses
- Types, MixedMode, QuickDraw, Windows, Dialogs, OSUtils, TransSkel, ButtonGlobals;
-
-
- procedure DoModal2;
-
- implementation
-
- const
-
- findItem = 1;
- cancelItem = 2;
- staticTextItem = 3;
- editTextItem = 4;
- outlineItem = 5;
-
-
- var
-
- defaultButton: Integer;
-
- drawProc: UserItemUPP;
-
- {--------------------------------------------------------------------}
- { Dialog 2 procedures }
- {--------------------------------------------------------------------}
-
- procedure OutlineButton (dlog: DialogPtr; item: Integer);
- begin
- SkelDrawButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
- end;
-
-
- procedure SetDefaultButton (dlog: DialogPtr; item: Integer);
- var
- r: Rect;
- begin
- defaultButton := item;
- SkelGetDlogRect(dlog, defaultButton, r); { get button rect }
- InsetRect(r, -4, -4); { expand it }
- SkelSetDlogRect(dlog, outlineItem, r); { use for outline item }
- SkelSetDlogProc(dlog, outlineItem, drawProc);
- SkelDrawButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
- end;
-
-
- procedure DoModal2;
- var
- filter: ModalFilterProcPtr;
- dlog: DialogPtr;
- savePort: GrafPtr;
- item: Integer;
- newDefault: Integer;
- str: Str255;
- loop: Boolean;
- begin
- dlog := GetNewDialog(modal2Res, nil, WindowPtr(-1));
- if (dlog = DialogPtr(nil)) then
- begin
- SysBeep(1);
- exit(DoModal2);
- end;
-
- SkelPositionWindow(dlog, skelPositionOnMainDevice, horizRatio, vertRatio);
-
- GetPort(savePort);
- SetPort(dlog);
-
- {
- Set up a variable to point to the outline drawing procedure. For 68K code
- this is just a direct pointer to OutlineButton(). For PowerPC code it is a
- routine descriptor into which the address of OutlineButton() is stuffed.
- }
-
- drawProc := NewUserItemProc (@OutlineButton);
-
- { should really check whether or not drawProc is nil! }
-
- SetDefaultButton(dlog, cancelItem);
-
- ShowWindow(dlog);
-
- loop := true;
- while (loop) do
- begin
- filter := SkelDlogFilter(nil, true);
- SkelDlogDefaultItem(defaultButton);
- SkelDlogCancelItem(cancelItem);
- SkelDlogTracksCursor(true);
- ModalDialog(filter, item);
- SkelRmveDlogFilter;
- if ((item = findItem) or (item = cancelItem)) then
- loop := false
- else
- begin
- SkelGetDlogStr(dlog, editTextItem, str);
- if (length(str) > 0) then
- newDefault := findItem
- else
- newDefault := cancelItem;
- if (newDefault <> defaultButton) then
- begin
- SkelEraseButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
- SetDefaultButton(dlog, newDefault);
- end;
- end;
- end;
-
-
- DisposeRoutineDescriptor (drawProc);
- DisposeDialog(dlog);
- SetPort(savePort);
-
- end;
-
- end.