home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-11-07 | 5.8 KB | 263 lines | [TEXT/CWIE] |
- unit ICText;
-
- interface
-
- uses
- Dialogs;
-
- function TextCreate (var data: univ ptr; window: DialogPtr; item: integer; font: integer; size: integer; locked: boolean): OSErr;
- procedure TextDestroy (var data: univ ptr);
- procedure TextDraw (data: univ ptr);
- procedure TextActivate (data: univ ptr; activate: boolean);
- procedure TextClick (data: univ ptr; er: eventRecord);
- procedure TextIdle (data: univ ptr);
- procedure TextKey (data: univ ptr; er: EventRecord);
- procedure TextSetSelect (data: univ ptr; selStart, selEnd: integer);
- procedure TextGetSelect (data: univ ptr; var selStart, selEnd: integer);
- procedure TextGetSize (data: univ ptr; var text_size: longint);
- procedure TextInsert (data: univ ptr; h: Handle);
- procedure TextGet (data: univ ptr; h: Handle);
- procedure TextMove (data: univ ptr; r: Rect);
-
- procedure TextCut (data: univ ptr);
- procedure TextCopy (data: univ ptr);
- procedure TextPaste (data: univ ptr);
- procedure TextClear (data: univ ptr);
-
- procedure NopCaretHook; { asm }
-
- implementation
-
- uses
- ICDialogs, Scrap;
-
- type
- ItemData = record
- window: DialogPtr;
- item: integer;
- te: TEHandle;
- fi: FontInfo;
- lineheight: integer;
- active: boolean;
- end;
- ItemDataPtr = ^ItemData;
-
- function TextCreate (var data: univ ptr; window: DialogPtr; item: integer; font: integer; size: integer; locked: boolean): OSErr;
- var
- err: OSErr;
- idp: ItemDataPtr;
- view, dest: rect;
- saved: SavedWindowInfo;
- begin
- data := NewPtr(SizeOf(ItemData));
- err := MemError;
- if err = noErr then begin
- idp := ItemDataPtr(data);
- idp^.window := window;
- idp^.item := item;
- idp^.te := nil;
- idp^.active := true;
- EnterWindow(window, font, size, [], saved);
- with idp^ do begin
- GetDItemRect(window, item, dest);
- view := dest;
- GetFontInfo(fi);
- lineheight := fi.leading + fi.ascent + fi.descent;
- dest.bottom := dest.top + (dest.bottom - dest.top) div lineheight * lineheight;
- te := TENew(dest, view);
- if locked then begin
- te^^.caretHook := @NopCaretHook; { Disable the caret }
- end;
- TEAutoView(true, te);
- end;
- ExitWindow(saved);
- if err <> nOErr then begin
- TextDestroy(data);
- end;
- end;
- TextCreate := err;
- end;
-
- procedure TextDestroy (var data: univ ptr);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- if data <> nil then begin
- if idp^.te <> nil then begin
- TEDispose(idp^.te);
- end;
- DisposePtr(data);
- data := nil;
- end;
- end;
-
- procedure TextDraw (data: univ ptr);
- var
- idp: ItemDataPtr;
- r: rect;
- begin
- idp := ItemDataPtr(data);
- GetDItemRect(idp^.window, idp^.item, r);
- EraseRect(r);
- TEUpdate(idp^.te^^.viewRect, idp^.te);
- end;
-
- procedure TextActivate (data: univ ptr; activate: boolean);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- idp^.active := activate;
- if idp^.active then begin
- TEActivate(idp^.te);
- end else begin
- TEDeactivate(idp^.te);
- end;
- end;
-
- procedure TextClick (data: univ ptr; er: EventRecord);
- var
- idp: ItemDataPtr;
- control: controlHandle;
- part: integer;
- begin
- idp := ItemDataPtr(data);
- with idp^ do begin
- SetPort(window);
- GlobalToLocal(er.where);
- part := FindControl(er.where, window, control);
- if part = 0 then begin
- if PtInRect(er.where, te^^.viewRect) then begin
- TEClick(er.where, BAND(er.modifiers, shiftKey) <> 0, te);
- end;
- end else begin
- end;
- end;
- end;
-
- procedure TextIdle (data: univ ptr);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- TEIdle(idp^.te);
- end;
-
- procedure TextKey (data: univ ptr; er: EventRecord);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- if BAND(er.modifiers, cmdKey) = 0 then begin
- TEKey(chr(BAND(er.message, $FF)), idp^.te);
- end;
- { Adjust;}
- end;
-
- procedure TextSetSelect (data: univ ptr; selStart, selEnd: integer);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- TESetSelect(selStart, selEnd, idp^.te);
- end; (* TextSetSelect *)
-
- procedure TextGetSelect (data: univ ptr; var selStart, selEnd: integer);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- selStart := idp^.te^^.selStart;
- selEnd := idp^.te^^.selEnd;
- end;
-
- procedure TextGetSize (data: univ ptr; var text_size: longint);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- text_size := GetHandleSize(idp^.te^^.hText);
- end;
-
- procedure TextInsert (data: univ ptr; h: Handle);
- var
- idp: ItemDataPtr;
- s: signedByte;
- begin
- idp := ItemDataPtr(data);
- s := HGetState(h);
- HLock(h);
- TEInsert(h^, GetHandleSize(h), idp^.te);
- HSetState(h, s);
- end; (* TextInsert *)
-
- procedure TextGet (data: univ ptr; h: Handle);
- var
- idp: ItemDataPtr;
- source_size: longint;
- source: Handle;
- begin
- idp := ItemDataPtr(data);
- source := Handle(TEGetText(idp^.te));
- source_size := GetHandleSize(source);
- SetHandleSize(h, source_size);
- if MemError = noErr then begin
- BlockMove(source^, h^, source_size);
- end else begin
- SetHandleSize(h, 0);
- end; (* if *)
- end; (* TextGet *)
-
- procedure TextMove (data: univ ptr; r: Rect);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- idp^.te^^.viewRect := r;
- idp^.te^^.destRect := r;
- TECalText(idp^.te);
- end;
-
- procedure TextCut (data: univ ptr);
- var
- idp: ItemDataPtr;
- junk: longint;
- begin
- idp := ItemDataPtr(data);
- TECut(idp^.te);
- junk := ZeroScrap;
- junk := TEToScrap;
- end;
-
- procedure TextCopy (data: univ ptr);
- var
- idp: ItemDataPtr;
- junk: longint;
- begin
- idp := ItemDataPtr(data);
- TECopy(idp^.te);
- junk := ZeroScrap;
- junk := TEToScrap;
- end;
-
- procedure TextPaste (data: univ ptr);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- if TEFromScrap = noErr then begin
- TEPaste(idp^.te);
- end; (* if *)
- end;
-
- procedure TextClear (data: univ ptr);
- var
- idp: ItemDataPtr;
- begin
- idp := ItemDataPtr(data);
- TEDelete(idp^.te);
- end;
-
- end.
-