home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-02-27 | 4.3 KB | 185 lines | [TEXT/MSET] |
- \ Dialog class.
-
- \ July 91 mrh Moved to a module, and migrated some methods from Dialog+.
- \ Jan 95 mrh Removed CALLER - can't bind to a word name any more
-
-
- \ Class Dialog handles modal dialogs. For modeless dialogs, use the
- \ subclass Dialog+.
-
- :class DIALOG super{ x-array }
- record
- { int RESID
- ptr DLGPTR
- var PROCPTR
- int BOLDITEM
- }
-
- :m DLGPTR:
- inline{ get: dlgPtr}
- get: dlgPtr ;m
-
- :m CLOSE:
- nil?: dlgPtr ?EXIT
- get: dlgPtr call DisposDialog
- clear: dlgPtr ;m
-
- :m OPEN?:
- nil?: dlgPtr ;m
-
- :m ITEMHANDLE: { item# -- hndl }
- get: dlgPtr item# makeInt
- addr: itemType addr: itemHandle addr: tempRect
- call GetDItem get: itemHandle ;m
-
- :m DRAWBOLD:
- nil?: dlgPtr ?EXIT
- get: boldItem ?dup 0EXIT
- savePort
- get: dlgPtr call setPort 3 3 pack call Pensize
- itemHandle: self drop \ Sets up tempRect
- -4 -4 inset: tempRect
- addr: tempRect 16 16 pack call FrameRoundRect call PenNormal
- restPort ;m
-
- :m GETNEW:
- 0 int: resid 0 -1 call GetNewDialog put: dlgPtr
- drawBold: self ;m
-
-
- :m SETPROC: \ ( xt -- ) set dialog proc
- put: procPtr ;m
-
- :m MODAL:
- BEGIN
- get: procPtr addr: theItem call ModalDialog
- get: theItem 1- exec: super
- rtm false -> rtm
- NUNTIL ;m
-
-
- :m PUTITEM: \ ( val item# -- )
- itemHandle: self swap makeint call SetCtlValue ;m
-
- :m GETITEM: \ ( item# -- val ) Gets value for an item#
- itemHandle: self >r word0 r>
- call GetCtlValue word0 ;m
-
- :m PUTRESID: \ ( resID -- )
- put: resID ;m
-
- :m INIT: \ ( xt1 ... xtN N resID -- )
- put: resID put: super ;m
-
- :m SETBOLD: \ ( item# -- ) Causes bold outline of the specified item
- put: boldItem ;m
-
- :m GETTEXT: \ ( item# -- addr len ) Returns a text item's text
- itemHandle: self buf255 get: ItemType 24 and
- IF call GetIText ELSE call GetCTitle THEN
- buf255 count ;m
-
- :m PUTTEXT: { addr len item# -- } \ Stores an item's text
- item# itemHandle: self
- addr len str255 get: ItemType 24 and
- IF call SetIText ELSE call SetCTitle THEN ;m
-
- :m SETSELECT: { start end item# -- }
- \ Sets the selection range for text item
- get: dlgPtr
- item# makeInt start end pack call SeliText ;m
-
- :m DRAW: \ Forces drawing of dialog before going to modal:
- get: dlgPtr call DrawDialog ;m
-
-
- \ ====== Extra methods for manipulating dialog items ======
-
-
- :m HIDEITEM: \ ( item# -- )
- get: dlgPtr swap makeInt call HideDItem ;m
-
- :m SHOWITEM: \ ( item# -- )
- get: dlgPtr swap makeInt call ShowDItem ;m
-
- :m DISABLEITEM: \ ( item# -- )
- itemHandle: self w 254 call HiliteControl ;m
-
- :m ENABLEITEM: \ ( item# -- )
- itemHandle: self word0 call HiliteControl ;m
-
- :m SETUSERPROC: { ^proc item# -- }
- get: dlgPtr item# makeint
- addr: itemType addr: itemHandle tempRect
- call GetDitem
- get: dlgPtr item# makeint word0 ^proc tempRect
- call SetDitem ;m
-
-
- :m HITBOLD:
- get: boldItem dup NIF drop EXIT THEN
- 1- exec: self ;m
-
- :m KEY: \ ( -- b )
- \ Called when a key down event occurs with this dialog's
- \ window active. Returns false if we've handled the key
- \ here, so no further action is required. Subclasses can
- \ have customized KEY: methods; here we just provide a
- \ hopefully sensible default action - namely, we treat a
- \ Return or Enter as a click on the bold item, and ignore
- \ all other keys.
-
- msg: fEvent $ FF and ( char typed )
- dup 3 = swap RET = or
- IF \ Return or Enter typed - treat as click on bold item
- hitBold: self false EXIT
- THEN
- true ;m
-
- :m TITLE: \ ( addr len -- )
- str255
- get: dlgPtr swap call SetWTitle ;m
-
- :m MAXX: \ ( -- x )
- get: dlgPtr maxX: window ;m
-
- :m MAXY:
- get: dlgPtr maxY: window ;m
-
- :m MOVE: \ ( x y -- )
- get: dlgPtr move: window ;m
-
- :m CENTER:
- get: dlgPtr center: window ;m
-
- \ =================
-
- :m SHOW:
- get: dlgPtr call ShowWindow ;m
-
- :m HIDE:
- get: dlgPtr call HideWindow ;m
-
- :m SELECT:
- get: dlgPtr call SelectWindow ;m
-
-
- :m CLASSINIT: \ Initializes default handlers to close the dialog box.
- ['] closer fill: self ;m
-
- ;class
-
-
- : TOGITEM \ Toggles the check box or radio button
- \ get: theItem 1 over caller getitem: [] - swap caller putitem: []
- get: theItem 1 over ^base getitem: [] - swap ^base putitem: []
- returnToModal ;
-
-
- : PARAMTEXT ( addr0 len0 addr1 len1 addr2 len2 addr3 len3 ) { \ p1 p2 p3 -- }
- \ Substitutes Dialog text.
- str255 dup -> p3 count +
- >str255 dup -> p2 count +
- >str255 dup -> p1 count +
- >str255 p1 p2 p3 call ParamText ;
-