home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 22 / saa / saaitemd.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-01-04  |  8.0 KB  |  300 lines

  1. (* ----------------------------------------------------- *)
  2. (*                      SAAITEMD.PAS                     *)
  3. (*                                                       *)
  4. (* ■ SAAItem: Dient als Grundobjekt für "SAA-Einträge"   *)
  5. (*   wie Menüeinträge, "Radiobuttons" etc. Implementiert *)
  6. (*   die grundlegenden Methoden aller Nachkommen. -      *)
  7. (*   SetActive ruft Display automatisch auf, um die Dar- *)
  8. (*   stellung zu ändern; SetXYRel dient zum "Verschieben"*)
  9. (*   wenn schon angezeigt, SetXY nur dazu, x und y nach  *)
  10. (*   Init noch zu ändern; Save/RestoreConfiguration sind *)
  11. (*   hier Dummies, was gesichert wird, muss der Nachkomme*)
  12. (*   entscheiden. Koordinaten werden nicht geprüft. Geht *)
  13. (*   davon aus, dass Maus sichtbar, wenn keine vorhanden,*)
  14. (*   kann aber trotzdem gearbeitet werden.               *)
  15. (*                                                       *)
  16. (*           (c) 1991 by R.Reichert & toolbox            *)
  17. (* ----------------------------------------------------- *)
  18. UNIT SAAItemD;
  19.  
  20. INTERFACE
  21.  
  22. USES Stuff, MouKey, UBase, WinVSM;
  23.  
  24. CONST                       { Markierungszeichen im Namen }
  25.   HotKeyMarkChar  : CHAR = '#';
  26.   ItemColor       : BYTE = $70;          { Standardmässig }
  27.   HotKeyColor     : BYTE = $7f;      { benutzte Farbwerte }
  28.                                            { ReturnCodes: }
  29.   ItOk            = 0; { Alles in Ordnung                 }
  30.   ItEvNotMine     = 1; { Event passt mir nicht            }
  31.   ItEvAccepted    = 2; { Event angenommen, => weitermachen}
  32.   ItFinish        = 3; { beenden, Abbruch                 }
  33.   ItSelected      = 4; { wurde gewählt                    }
  34.  
  35. TYPE
  36.   SAAItemPtr = ^SAAItem;
  37.   SAAItem = OBJECT (Base)
  38.  
  39.     Col, HKCol,
  40.     x, y       : BYTE;
  41.     Name       : ^STRING;
  42.     HotKey     : CHAR;
  43.     Active,
  44.     Displayed,
  45.     HKDisplayed: BOOLEAN;
  46.     AltCode    : WORD;
  47.     ReturnCode : BYTE;
  48.     VSM        : WExtVSMPtr;
  49.  
  50.     CONSTRUCTOR Init (nx, ny : BYTE;
  51.                       N      : STRING;
  52.                       AltHKC : WORD;
  53.                       NewVSM : WExtVSMPtr);
  54.     PROCEDURE SetColors (NC, NHKC : BYTE);
  55.     PROCEDURE SetName (NewName : STRING);          VIRTUAL;
  56.     PROCEDURE SetAltCode (NewAltHKC : WORD);       VIRTUAL;
  57.     PROCEDURE Display;                             VIRTUAL;
  58.     PROCEDURE DisplayHotKey;                       VIRTUAL;
  59.     PROCEDURE SetDisplayedOff;                     VIRTUAL;
  60.     PROCEDURE SetActive;                           VIRTUAL;
  61.     PROCEDURE SetPassive;                          VIRTUAL;
  62.     PROCEDURE CheckEvent (VAR Ev : EventObj);      VIRTUAL;
  63.     PROCEDURE CheckMouEv (VAR Ev : EventObj);      VIRTUAL;
  64.     PROCEDURE CheckKeyEv (VAR Ev : EventObj);      VIRTUAL;
  65.     PROCEDURE SetXY (nx, ny : BYTE);               VIRTUAL;
  66.     PROCEDURE SetXYRel (dx, dy : INTEGER);         VIRTUAL;
  67.     PROCEDURE SaveConfiguration;                   VIRTUAL;
  68.     PROCEDURE RestoreConfiguration;                VIRTUAL;
  69.  
  70.     FUNCTION GetReturnCode : BYTE;                 VIRTUAL;
  71.     FUNCTION GetCol : BYTE;                        VIRTUAL;
  72.     FUNCTION GetHKCol : BYTE;                      VIRTUAL;
  73.     FUNCTION GetX : BYTE;                          VIRTUAL;
  74.     FUNCTION GetY : BYTE;                          VIRTUAL;
  75.     FUNCTION GetName : STRING;                     VIRTUAL;
  76.     FUNCTION GetHotKey : CHAR;                     VIRTUAL;
  77.     FUNCTION GetAltCode : WORD;                    VIRTUAL;
  78.     FUNCTION IsActive : BOOLEAN;                   VIRTUAL;
  79.     FUNCTION IsDisplayed : BOOLEAN;                VIRTUAL;
  80.     FUNCTION IsHKDisplayed :  BOOLEAN;             VIRTUAL;
  81.     DESTRUCTOR Done;                               VIRTUAL;
  82.   END;
  83.  
  84. IMPLEMENTATION
  85.  
  86. CONSTRUCTOR SAAItem.Init (nx, ny : BYTE;
  87.                           N      : STRING;
  88.                           AltHKC : WORD;
  89.                           NewVSM : WExtVSMPtr);
  90. BEGIN
  91.   IF NewVSM<>NIL THEN BEGIN
  92.     Col := ItemColor;  HKCol := HotKeyColor;
  93.     VSM := NewVSM; x := nx; y := ny;
  94.     Active := FALSE; HKDisplayed := FALSE;
  95.     ReturnCode := 0; Displayed   := FALSE;
  96.     AltCode := AltHKC;
  97.     Name := NIL;     SetName (N);
  98.     IF Name=NIL THEN
  99.       Fail;
  100.   END ELSE
  101.     Fail;
  102. END;
  103.  
  104. PROCEDURE SAAItem.SetColors (NC, NHKC : BYTE);
  105. BEGIN
  106.   Col := NC;  HKCol := NHKC;
  107. END;
  108.  
  109. PROCEDURE SAAItem.SetName (NewName : STRING);
  110.   VAR i : BYTE;
  111. BEGIN
  112.   IF Name<>NIL THEN
  113.     FreeMem (Name, Succ (Length (Name^)));
  114.   i := Pos (HotKeyMarkChar, NewName);
  115.   IF i>0 THEN BEGIN
  116.     Delete (NewName, i, 1);
  117.     HotKey := NewName [i];
  118.   END ELSE
  119.     HotKey := #0;
  120.   GetMem (Name, Succ (Length (NewName)));
  121.   IF Name<>NIL THEN
  122.     Name^ := NewName;
  123. END;
  124.  
  125. PROCEDURE SAAItem.SetAltCode (NewAltHKC : WORD);
  126. BEGIN
  127.   AltCode := NewAltHKC;
  128. END;
  129.  
  130. PROCEDURE SAAItem.Display;
  131. BEGIN
  132.   Mouse^.Hide;
  133.   VSM^.WriteStr (x, y, Col, Name^);
  134.   Mouse^.Show;
  135.   Displayed := TRUE;
  136.   IF HKDisplayed THEN
  137.     DisplayHotKey;
  138. END;
  139.  
  140. PROCEDURE SAAItem.DisplayHotKey;
  141. BEGIN
  142.   IF (HotKey<>#0) AND Displayed THEN BEGIN
  143.     Mouse^.Hide;
  144.     VSM^.WriteChr (Pred (x+Pos (HotKey, Name^)), y,
  145.                    HKCol, HotKey);
  146.     Mouse^.Show;  HKDisplayed := TRUE
  147.   END
  148. END;
  149.  
  150. PROCEDURE SAAItem.SetDisplayedOff;
  151. BEGIN
  152.   Displayed := FALSE;
  153. END;
  154.  
  155. PROCEDURE SAAItem.SetActive;
  156. BEGIN
  157.   Active := TRUE;
  158.   Display;
  159. END;
  160.  
  161. PROCEDURE SAAItem.SetPassive;
  162. BEGIN
  163.   Active := FALSE;
  164. END;
  165.  
  166. PROCEDURE SAAItem.CheckEvent (VAR Ev : EventObj);
  167. BEGIN
  168.   ReturnCode := ItEvNotMine;
  169.   IF Displayed THEN
  170.     IF (Ev.EventType AND EvMouAll)>0 THEN
  171.       CheckMouEv (Ev)
  172.     ELSE
  173.       CheckKeyEv (Ev);
  174. END;
  175.  
  176. PROCEDURE SAAItem.CheckMouEv (VAR Ev : EventObj);
  177.   FUNCTION EvInArea : BOOLEAN;
  178.   BEGIN
  179.     EvInArea := (Ev.X>=x) AND (Ev.Y=y) AND
  180.                 (Ev.X<x+Length (Name^))
  181.   END;
  182. BEGIN
  183.   IF EvInArea THEN
  184.     IF EvHand^.MouReleased (Ev) THEN
  185.       ReturnCode := ItSelected
  186.     ELSE
  187.       IF (EvHand^.MouPressed (Ev)) OR
  188.          (Ev.Buttons>0) THEN BEGIN
  189.         SetActive;
  190.         ReturnCode := ItEvAccepted;
  191.       END;
  192. END;
  193.  
  194. PROCEDURE SAAItem.CheckKeyEv (VAR Ev : EventObj);
  195.   VAR HK1, HK2 : BYTE;
  196. BEGIN
  197.   IF Ev.EventType=EvKeyPressed THEN BEGIN
  198.     IF (HKDisplayed) THEN BEGIN
  199.       HK1 := Ord (HotKey);  HK2 := 0;
  200.       IF (HK1>64) AND (HK2<91) THEN HK2 := HK1+32;
  201.       IF (HK1>96) AND (HK2<123) THEN HK2 := HK1-32;
  202.       IF (Ev.Key=HK1) OR
  203.          (Ev.Key=HK2) OR
  204.          (Ev.Key=AltCode) THEN BEGIN
  205.         SetActive;
  206.         ReturnCode := ItSelected;
  207.       END;
  208.     END;
  209.   END;
  210. END;
  211.  
  212. PROCEDURE SAAItem.SetXY (nx, ny : BYTE);
  213. BEGIN
  214.   x := nx;  y := ny;
  215.   IF Displayed THEN BEGIN
  216.     SetDisplayedOff;
  217.     Display;
  218.   END;
  219. END;
  220.  
  221. PROCEDURE SAAItem.SetXYRel (dx, dy : INTEGER);
  222. BEGIN
  223.   SetXY (x+dx, y+dy);
  224. END;
  225.  
  226. PROCEDURE SAAItem.SaveConfiguration;
  227. BEGIN
  228.   { SAAItem enthält keine konkreten Daten zum Retten }
  229. END;
  230.  
  231. PROCEDURE SAAItem.RestoreConfiguration;
  232. BEGIN
  233. END;
  234.  
  235. FUNCTION SAAItem.GetReturnCode : BYTE;
  236. BEGIN
  237.   GetReturnCode := ReturnCode;
  238.   ReturnCode    := 0;
  239. END;
  240.  
  241. FUNCTION SAAItem.GetCol : BYTE;
  242. BEGIN
  243.   GetCol := Col;
  244. END;
  245.  
  246. FUNCTION SAAItem.GetHKCol : BYTE;
  247. BEGIN
  248.   GetHKCol := HKCol;
  249. END;
  250.  
  251. FUNCTION SAAItem.GetX : BYTE;
  252. BEGIN
  253.   GetX := X;
  254. END;
  255.  
  256. FUNCTION SAAItem.GetY : BYTE;
  257. BEGIN
  258.   GetY := Y;
  259. END;
  260.  
  261. FUNCTION SAAItem.GetName : STRING;
  262. BEGIN
  263.   GetName := Name^;
  264. END;
  265.  
  266. FUNCTION SAAItem.GetHotKey : CHAR;
  267. BEGIN
  268.   GetHotKey := HotKey;
  269. END;
  270.  
  271. FUNCTION SAAItem.GetAltCode : WORD;
  272. BEGIN
  273.   GetAltCode := AltCode;
  274. END;
  275.  
  276. FUNCTION SAAItem.IsActive : BOOLEAN;
  277. BEGIN
  278.   IsActive := Active;
  279. END;
  280.  
  281. FUNCTION SAAItem.IsDisplayed : BOOLEAN;
  282. BEGIN
  283.   IsDisplayed := Displayed;
  284. END;
  285.  
  286. FUNCTION SAAItem.IsHKDisplayed : BOOLEAN;
  287. BEGIN
  288.   IsHKDisplayed := HKDisplayed;
  289. END;
  290.  
  291. DESTRUCTOR SAAItem.Done;
  292. BEGIN
  293.   FreeMem (Name, Succ (Length (Name^)));
  294. END;
  295.  
  296. END.
  297. (* ----------------------------------------------------- *)
  298. (*                Ende von SAAITEMD.PAS                  *)
  299. (* ----------------------------------------------------- *)
  300.