home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / system1 / dialogcircles.mod (.txt) < prev    next >
Oberon Text  |  1977-12-31  |  3KB  |  97 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10i.Scn.Fnt
  3. StampElems
  4. Alloc
  5. 25 Apr 95
  6. Syntax10b.Scn.Fnt
  7. MODULE DialogCircles;
  8.     (** Markus Knasm
  9. ller 29 Aug 94 - 
  10.     IMPORT DialogFrames, Dialogs, DialogTexts, Display, Display1, In, Input, Oberon, Printer, TextFrames, Texts, Viewers;
  11.     CONST MM = 1; W* = 30; H* = 30; black = 15;
  12.     TYPE
  13.         Item* = POINTER TO ItemDesc;
  14.         ItemDesc* = RECORD (Dialogs.ObjectDesc)
  15.         END;
  16.     PROCEDURE Min (x, y: INTEGER): INTEGER;
  17.     BEGIN IF x < y THEN RETURN x ELSE RETURN y END
  18.     END Min;
  19.     PROCEDURE (c: Item) Draw* (x, y: INTEGER; f: Display.Frame);
  20.     (** displays the object at (x, y) in frame f *)
  21.         VAR mode, w, h, bx, by: INTEGER;
  22.     BEGIN
  23.         c.GetDim (bx, by, w, h); w := Min (w, h);
  24.         IF c.selected THEN mode := Display.invert ELSE mode := Display.replace END;
  25.         INC (x, w DIV 2); INC (y, w DIV 2);
  26.         Display1.Circle (f, black, x, y, w DIV 2 - 1, mode);
  27.         IF (w DIV 2 - 1) <= 0 THEN Display.DotC (f, black, x, y, mode) END
  28.     END Draw;
  29.     PROCEDURE (l: Item) Print* (x, y: INTEGER);
  30.     (** prints the object at printer coordinates (x, y)  *)
  31.         VAR w, h, bx, by: INTEGER;
  32.     BEGIN
  33.         l.GetPDim (bx, by, w, h); w := Min (w, h);
  34.         INC (x, w DIV 2); INC (y, w DIV 2);
  35.         Printer.Circle (x, y, w DIV 2 - 1)
  36.     END Print;
  37.     PROCEDURE (c: Item) Copy* (VAR dup: Dialogs.Object);
  38.     (** allocates dup and makes a deep copy of o. Before calling this methode dup should be equal NIL *)
  39.         VAR x: Item;
  40.     BEGIN
  41.         IF dup = NIL THEN NEW (x); dup := x ELSE x := dup(Item) END;
  42.         c.Copy^ (dup);
  43.     END Copy;
  44.     PROCEDURE (c: Item) Track (x, y: INTEGER; keys: SET; f: Display.Frame; p: Dialogs.Panel);
  45.         VAR keysum: SET; t: Texts.Text;
  46.     BEGIN
  47.         IF keys = {MM} THEN 
  48.             keysum := keys;
  49.             REPEAT 
  50.                 Input.Mouse(keys, x, y); keysum := keysum + keys;
  51.                 Oberon.DrawCursor(Oberon.Mouse, Oberon.Arrow, x, y)
  52.             UNTIL keys = {};
  53.             IF keysum = {MM} THEN 
  54.                 IF c.cmd[0] # 0X THEN
  55.                     DialogTexts.GetParText (c.par, c.panel, t); 
  56.                     c.CallCmd (f, Viewers.This (x, y), t)
  57.                 END
  58.             END
  59.         ELSE Oberon.DrawCursor (Oberon.Mouse, Oberon.Arrow, x, y)
  60.         END
  61.     END Track;
  62.     PROCEDURE (c: Item) Handle* (f: Display.Frame; VAR m: Display.FrameMsg);
  63.     (** handles messages which were sent to frame f *)
  64.     BEGIN
  65.         c.Handle^ (f, m);
  66.         WITH f: DialogFrames.Frame DO
  67.             WITH m: Oberon.InputMsg DO
  68.                 IF m.id = Oberon.track THEN c.Track (m.X, m.Y, m.keys, f, f.panel) END
  69.             ELSE
  70.             END
  71.         ELSE
  72.         END
  73.     END Handle;
  74.     PROCEDURE Insert*;
  75.     (** Insert ([name] [x y w h] | ^ ) inserts a circle - item in the panel containing the caret position *)
  76.         VAR x, y, x1, y1, w, h: INTEGER; l: Item; p: Dialogs.Panel; name: ARRAY 64 OF CHAR; 
  77.     BEGIN 
  78.         NEW (l);  
  79.         DialogFrames.GetCaretPosition (p, x, y); 
  80.         IF (p # NIL) THEN 
  81.             l.Init; In.Open; In.Name (name);
  82.             IF ~In.Done THEN COPY ("", name); In.Open END;
  83.             l.SetName (name); 
  84.             In.Int (x1); In.Int (y1); In.Int (w); In.Int (h);
  85.             IF ~In.Done THEN x1 := x; y1 := y; w := W; h := H 
  86.             ELSE
  87.                 IF w < 0 THEN w := W END;
  88.                 IF h < 0 THEN h := H END
  89.             END;
  90.             l.SetDim (x1, y1, w, h, FALSE); p.Insert (l, TRUE) 
  91.         ELSE
  92.             Dialogs.res := Dialogs.noPanelSelected
  93.         END;
  94.         IF Dialogs.res # 0 THEN Dialogs.Error ("DialogCircles") END;
  95.     END Insert;
  96. END DialogCircles.
  97.