home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* SAAITEMD.PAS *)
- (* *)
- (* ■ SAAItem: Dient als Grundobjekt für "SAA-Einträge" *)
- (* wie Menüeinträge, "Radiobuttons" etc. Implementiert *)
- (* die grundlegenden Methoden aller Nachkommen. - *)
- (* SetActive ruft Display automatisch auf, um die Dar- *)
- (* stellung zu ändern; SetXYRel dient zum "Verschieben"*)
- (* wenn schon angezeigt, SetXY nur dazu, x und y nach *)
- (* Init noch zu ändern; Save/RestoreConfiguration sind *)
- (* hier Dummies, was gesichert wird, muss der Nachkomme*)
- (* entscheiden. Koordinaten werden nicht geprüft. Geht *)
- (* davon aus, dass Maus sichtbar, wenn keine vorhanden,*)
- (* kann aber trotzdem gearbeitet werden. *)
- (* *)
- (* (c) 1991 by R.Reichert & toolbox *)
- (* ----------------------------------------------------- *)
- UNIT SAAItemD;
-
- INTERFACE
-
- USES Stuff, MouKey, UBase, WinVSM;
-
- CONST { Markierungszeichen im Namen }
- HotKeyMarkChar : CHAR = '#';
- ItemColor : BYTE = $70; { Standardmässig }
- HotKeyColor : BYTE = $7f; { benutzte Farbwerte }
- { ReturnCodes: }
- ItOk = 0; { Alles in Ordnung }
- ItEvNotMine = 1; { Event passt mir nicht }
- ItEvAccepted = 2; { Event angenommen, => weitermachen}
- ItFinish = 3; { beenden, Abbruch }
- ItSelected = 4; { wurde gewählt }
-
- TYPE
- SAAItemPtr = ^SAAItem;
- SAAItem = OBJECT (Base)
-
- Col, HKCol,
- x, y : BYTE;
- Name : ^STRING;
- HotKey : CHAR;
- Active,
- Displayed,
- HKDisplayed: BOOLEAN;
- AltCode : WORD;
- ReturnCode : BYTE;
- VSM : WExtVSMPtr;
-
- CONSTRUCTOR Init (nx, ny : BYTE;
- N : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- PROCEDURE SetColors (NC, NHKC : BYTE);
- PROCEDURE SetName (NewName : STRING); VIRTUAL;
- PROCEDURE SetAltCode (NewAltHKC : WORD); VIRTUAL;
- PROCEDURE Display; VIRTUAL;
- PROCEDURE DisplayHotKey; VIRTUAL;
- PROCEDURE SetDisplayedOff; VIRTUAL;
- PROCEDURE SetActive; VIRTUAL;
- PROCEDURE SetPassive; VIRTUAL;
- PROCEDURE CheckEvent (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE CheckMouEv (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE CheckKeyEv (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE SetXY (nx, ny : BYTE); VIRTUAL;
- PROCEDURE SetXYRel (dx, dy : INTEGER); VIRTUAL;
- PROCEDURE SaveConfiguration; VIRTUAL;
- PROCEDURE RestoreConfiguration; VIRTUAL;
-
- FUNCTION GetReturnCode : BYTE; VIRTUAL;
- FUNCTION GetCol : BYTE; VIRTUAL;
- FUNCTION GetHKCol : BYTE; VIRTUAL;
- FUNCTION GetX : BYTE; VIRTUAL;
- FUNCTION GetY : BYTE; VIRTUAL;
- FUNCTION GetName : STRING; VIRTUAL;
- FUNCTION GetHotKey : CHAR; VIRTUAL;
- FUNCTION GetAltCode : WORD; VIRTUAL;
- FUNCTION IsActive : BOOLEAN; VIRTUAL;
- FUNCTION IsDisplayed : BOOLEAN; VIRTUAL;
- FUNCTION IsHKDisplayed : BOOLEAN; VIRTUAL;
- DESTRUCTOR Done; VIRTUAL;
- END;
-
- IMPLEMENTATION
-
- CONSTRUCTOR SAAItem.Init (nx, ny : BYTE;
- N : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- BEGIN
- IF NewVSM<>NIL THEN BEGIN
- Col := ItemColor; HKCol := HotKeyColor;
- VSM := NewVSM; x := nx; y := ny;
- Active := FALSE; HKDisplayed := FALSE;
- ReturnCode := 0; Displayed := FALSE;
- AltCode := AltHKC;
- Name := NIL; SetName (N);
- IF Name=NIL THEN
- Fail;
- END ELSE
- Fail;
- END;
-
- PROCEDURE SAAItem.SetColors (NC, NHKC : BYTE);
- BEGIN
- Col := NC; HKCol := NHKC;
- END;
-
- PROCEDURE SAAItem.SetName (NewName : STRING);
- VAR i : BYTE;
- BEGIN
- IF Name<>NIL THEN
- FreeMem (Name, Succ (Length (Name^)));
- i := Pos (HotKeyMarkChar, NewName);
- IF i>0 THEN BEGIN
- Delete (NewName, i, 1);
- HotKey := NewName [i];
- END ELSE
- HotKey := #0;
- GetMem (Name, Succ (Length (NewName)));
- IF Name<>NIL THEN
- Name^ := NewName;
- END;
-
- PROCEDURE SAAItem.SetAltCode (NewAltHKC : WORD);
- BEGIN
- AltCode := NewAltHKC;
- END;
-
- PROCEDURE SAAItem.Display;
- BEGIN
- Mouse^.Hide;
- VSM^.WriteStr (x, y, Col, Name^);
- Mouse^.Show;
- Displayed := TRUE;
- IF HKDisplayed THEN
- DisplayHotKey;
- END;
-
- PROCEDURE SAAItem.DisplayHotKey;
- BEGIN
- IF (HotKey<>#0) AND Displayed THEN BEGIN
- Mouse^.Hide;
- VSM^.WriteChr (Pred (x+Pos (HotKey, Name^)), y,
- HKCol, HotKey);
- Mouse^.Show; HKDisplayed := TRUE
- END
- END;
-
- PROCEDURE SAAItem.SetDisplayedOff;
- BEGIN
- Displayed := FALSE;
- END;
-
- PROCEDURE SAAItem.SetActive;
- BEGIN
- Active := TRUE;
- Display;
- END;
-
- PROCEDURE SAAItem.SetPassive;
- BEGIN
- Active := FALSE;
- END;
-
- PROCEDURE SAAItem.CheckEvent (VAR Ev : EventObj);
- BEGIN
- ReturnCode := ItEvNotMine;
- IF Displayed THEN
- IF (Ev.EventType AND EvMouAll)>0 THEN
- CheckMouEv (Ev)
- ELSE
- CheckKeyEv (Ev);
- END;
-
- PROCEDURE SAAItem.CheckMouEv (VAR Ev : EventObj);
- FUNCTION EvInArea : BOOLEAN;
- BEGIN
- EvInArea := (Ev.X>=x) AND (Ev.Y=y) AND
- (Ev.X<x+Length (Name^))
- END;
- BEGIN
- IF EvInArea THEN
- IF EvHand^.MouReleased (Ev) THEN
- ReturnCode := ItSelected
- ELSE
- IF (EvHand^.MouPressed (Ev)) OR
- (Ev.Buttons>0) THEN BEGIN
- SetActive;
- ReturnCode := ItEvAccepted;
- END;
- END;
-
- PROCEDURE SAAItem.CheckKeyEv (VAR Ev : EventObj);
- VAR HK1, HK2 : BYTE;
- BEGIN
- IF Ev.EventType=EvKeyPressed THEN BEGIN
- IF (HKDisplayed) THEN BEGIN
- HK1 := Ord (HotKey); HK2 := 0;
- IF (HK1>64) AND (HK2<91) THEN HK2 := HK1+32;
- IF (HK1>96) AND (HK2<123) THEN HK2 := HK1-32;
- IF (Ev.Key=HK1) OR
- (Ev.Key=HK2) OR
- (Ev.Key=AltCode) THEN BEGIN
- SetActive;
- ReturnCode := ItSelected;
- END;
- END;
- END;
- END;
-
- PROCEDURE SAAItem.SetXY (nx, ny : BYTE);
- BEGIN
- x := nx; y := ny;
- IF Displayed THEN BEGIN
- SetDisplayedOff;
- Display;
- END;
- END;
-
- PROCEDURE SAAItem.SetXYRel (dx, dy : INTEGER);
- BEGIN
- SetXY (x+dx, y+dy);
- END;
-
- PROCEDURE SAAItem.SaveConfiguration;
- BEGIN
- { SAAItem enthält keine konkreten Daten zum Retten }
- END;
-
- PROCEDURE SAAItem.RestoreConfiguration;
- BEGIN
- END;
-
- FUNCTION SAAItem.GetReturnCode : BYTE;
- BEGIN
- GetReturnCode := ReturnCode;
- ReturnCode := 0;
- END;
-
- FUNCTION SAAItem.GetCol : BYTE;
- BEGIN
- GetCol := Col;
- END;
-
- FUNCTION SAAItem.GetHKCol : BYTE;
- BEGIN
- GetHKCol := HKCol;
- END;
-
- FUNCTION SAAItem.GetX : BYTE;
- BEGIN
- GetX := X;
- END;
-
- FUNCTION SAAItem.GetY : BYTE;
- BEGIN
- GetY := Y;
- END;
-
- FUNCTION SAAItem.GetName : STRING;
- BEGIN
- GetName := Name^;
- END;
-
- FUNCTION SAAItem.GetHotKey : CHAR;
- BEGIN
- GetHotKey := HotKey;
- END;
-
- FUNCTION SAAItem.GetAltCode : WORD;
- BEGIN
- GetAltCode := AltCode;
- END;
-
- FUNCTION SAAItem.IsActive : BOOLEAN;
- BEGIN
- IsActive := Active;
- END;
-
- FUNCTION SAAItem.IsDisplayed : BOOLEAN;
- BEGIN
- IsDisplayed := Displayed;
- END;
-
- FUNCTION SAAItem.IsHKDisplayed : BOOLEAN;
- BEGIN
- IsHKDisplayed := HKDisplayed;
- END;
-
- DESTRUCTOR SAAItem.Done;
- BEGIN
- FreeMem (Name, Succ (Length (Name^)));
- END;
-
- END.
- (* ----------------------------------------------------- *)
- (* Ende von SAAITEMD.PAS *)
- (* ----------------------------------------------------- *)