home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* ACTDWIN.PAS *)
- (* ('ACTiveDataWINdow') *)
- (* *)
- (* ■ ActiveDataWindow: Reagiert, wie ActiveStandWin, auf *)
- (* Ereignisse; erweitert um die Abfrage der Scroll- *)
- (* balken und der neu hinzugekommenen Symbole. Denn *)
- (* ActiveDataWindow unterscheidet nicht nur zwischen *)
- (* zwei Zuständen (aktiv und passiv), sondern auch *)
- (* zwischen drei weiteren: Iconized, Normal, Maximized,*)
- (* die Grösse angeben und unterschiedliche Symbole be- *)
- (* sitzen wie zum vergrössern, verkleinern ... - Dafür *)
- (* ist ActiveDataWindow eigensinnig: Bestimmte Werte *)
- (* wie Zooming und Moving gleich TRUE werden verlangt, *)
- (* etwas anderes nicht zugelassen. *)
- (* *)
- (* (c) 1991 by R.Reichert & toolbox *)
- (* ----------------------------------------------------- *)
- UNIT ActDWin;
-
- INTERFACE
-
- USES Stuff, UMouse, MouKey, DiskBuf,
- WinVSM, SB,
- FrameWin, ActStWi, DataWin;
-
- CONST
- ADWIconSetPassive = 40; { IconSymbol => Passiv gesetzt }
- ADWScrolledBuf = 41; { gescrollt }
- ADWSwitchedNormal = 42; { in Normalzustand "geschaltet"}
- ADWSwitchedIcon = 43; { in Icongrösse }
- ADWSwitchedMax = 44; { in Maximale Grösse gegangen }
- ADWSetCursor = 45; { Cursor neu gesetzt }
-
- TYPE
- WindowStates = (Maximized, Normal, Iconized);
-
- ActiveDataWindowPtr = ^ActiveDataWindow;
- ActiveDataWindow =
- OBJECT (DataWindow)
-
- CtrlCodes, { ControlCodes berücksichtigen ? }
- SaveByIcon : BOOLEAN; { Auslagern bei Icon ? }
- IconTL : STRING [18]; { String für Icon }
- Number : BYTE; { Fensternummer }
- State : WindowStates; { "Zustand" }
- StMaxX1, StMaxY1, StMaxX2, StMaxY2, { Koordinaten }
- StNorX1, StNorY1, StNorX2, StNorY2, { der "Zustände"}
- StIcoX1, StIcoY1, StIcoX2, StIcoY2 : BYTE;
-
- CONSTRUCTOR Init (MaxColumns,MaxLines,FreeHeap: WORD;
- NewVSM : WExtVSMPtr);
- CONSTRUCTOR Copy (Win : ActiveDataWindow);
- PROCEDURE Open; VIRTUAL;
- PROCEDURE SetSaveBack (Save : BOOLEAN); VIRTUAL;
- PROCEDURE SetClearWin (Clear : BOOLEAN); VIRTUAL;
- PROCEDURE SetMoving (Moving : BOOLEAN); VIRTUAL;
- PROCEDURE SetZooming (Zooming : BOOLEAN); VIRTUAL;
- PROCEDURE Close; VIRTUAL;
- PROCEDURE CheckMouEvent (Ev : EventObj); VIRTUAL;
- {--------------- *** INTERN: *** -------------------}
- PROCEDURE CheckMouSBVertic (Ev : EventObj); VIRTUAL;
- PROCEDURE CheckMouSBHoriz (Ev : EventObj); VIRTUAL;
- PROCEDURE CheckMouStates (Ev : EventObj); VIRTUAL;
- PROCEDURE CheckMouDoubleC (Ev : EventObj); VIRTUAL;
- PROCEDURE CheckMouZooming (Ev : EventObj); VIRTUAL;
- {---------------------------------------------------}
- PROCEDURE CheckKeyEvent (Ev : EventObj); VIRTUAL;
- PROCEDURE SwitchState (NewSt:WindowStates); VIRTUAL;
- PROCEDURE DrawTitles; VIRTUAL;
- PROCEDURE DrawFrame; VIRTUAL;
- PROCEDURE SetNumber (N : BYTE); VIRTUAL;
- PROCEDURE SetIconTitle (IT : STRING); VIRTUAL;
- PROCEDURE SetIconXY (ix1,iy1 : BYTE); VIRTUAL;
- PROCEDURE SetMaxXY (mx1,my1,mx2,my2 :BYTE); VIRTUAL;
- PROCEDURE SetSaveByIcon (Save : BOOLEAN); VIRTUAL;
- PROCEDURE CheckControlCodes (CC : BOOLEAN); VIRTUAL;
-
- FUNCTION CtrlCodesChecked : BOOLEAN; VIRTUAL;
- FUNCTION GetSaveByIcon : BOOLEAN; VIRTUAL;
- FUNCTION GetState : WindowStates; VIRTUAL;
- FUNCTION GetNumber : BYTE; VIRTUAL;
- FUNCTION GetIconTitle : STRING; VIRTUAL;
- END;
-
- IMPLEMENTATION
-
- (* ----------------------------------------------------- *)
- (* Der neue Konstruktor ruft zuerst seinen Vorgänger auf,*)
- (* belegt dann die eigenen Variablen mit Standardwerten. *)
- (* ----------------------------------------------------- *)
- CONSTRUCTOR ActiveDataWindow.Init
- (MaxColumns, MaxLines, FreeHeap : WORD;
- NewVSM : WExtVSMPtr);
- BEGIN
- IF DataWindow.Init (MaxColumns, MaxLines,
- FreeHeap, NewVSM) THEN BEGIN
- State := Normal; IconTL := ''; Number := 0;
- StMaxX1 := 1; StMaxY1 := 2;
- SaveByIcon := TRUE; CtrlCodes := TRUE;
- StMaxX2 := VSM^.GetXLength-2;
- StMaxY2 := VSM^.GetYLength-2;
- StIcoX1 := VSM^.GetXLength-25;
- StIcoY1 := VSM^.GetYLength-4;
- StIcoX2 := VSM^.GetXLength-6;
- StIcoY2 := VSM^.GetYLength-2;
- SetZooming (On);
- SetKeys (CtrlF5, AltF3);
- END ELSE
- Fail;
- END;
-
- CONSTRUCTOR ActiveDataWindow.Copy (Win : ActiveDataWindow);
- BEGIN
- IF DataWindow.Copy (Win) THEN
- Self := Win
- ELSE
- Fail
- END;
-
- (* ----------------------------------------------------- *)
- (* Öffnen des Fensters. Befindet es sich im "Icon"-Zu- *)
- (* stand, so muss das Öffnen eigenhändig erfolgen, wegen *)
- (* Schatten etc. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.Open;
- VAR MouVis : BOOLEAN;
- BEGIN
- IF State=Iconized THEN BEGIN
- MouVis := Mouse^.GetVisible;
- Mouse^.Hide;
- VSM^.GetPart (x1, y1, x2, y2, BackGround);
- BackSaved := TRUE; Opened := TRUE;
- DrawFrame;
- DrawTitles;
- IF MouVis THEN Mouse^.Show;
- VSM^.GotoXY (Succ (x1), Succ (y1));
- END ELSE
- DataWindow.Open;
- END;
-
- (* ----------------------------------------------------- *)
- (* ActiveDataWindow pocht auf die folgenden Werte, daher *)
- (* wird nicht anderes zugelassen. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.SetSaveBack (Save : BOOLEAN);
- BEGIN
- SaveBack := TRUE; { wird NICHT akzeptiert }
- END;
-
- PROCEDURE ActiveDataWindow.SetClearWin (Clear : BOOLEAN);
- BEGIN
- ClearWin := FALSE; { item }
- END;
-
- PROCEDURE ActiveDataWindow.SetMoving (Moving : BOOLEAN);
- BEGIN
- MoveAllowed := TRUE;
- END;
-
- PROCEDURE ActiveDataWindow.SetZooming (Zooming : BOOLEAN);
- BEGIN
- ZoomAllowed := TRUE;
- END;
-
- (* ----------------------------------------------------- *)
- (* Schliessen des Fensters. Auch hier wird bei "Iconized"*)
- (* eine Ausnahme gemacht. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.Close;
- VAR MouVis : BOOLEAN;
- BEGIN
- IF State=Iconized THEN BEGIN
- MouVis := Mouse^.GetVisible;
- Mouse^.Hide;
- VSM^.PutPart (x1, y1, x2, y2, TRUE, BackGround);
- BackGround := NIL; BackSaved := FALSE; Opened := FALSE;
- IF MouVis THEN
- Mouse^.Show;
- END ELSE
- DataWindow.Close;
- END;
-
- PROCEDURE ActiveDataWindow.CheckMouEvent (Ev : EventObj);
- BEGIN
- IF NOT Opened OR NOT Active OR
- NOT Mouse^.GetVisible THEN BEGIN
- SetReturnCode (CantWork);
- Exit;
- END;
- SetReturnCode (EvNotExpr);
- CheckMouSBVertic (Ev); { kann auch ohne Speicher }
- IF ReturnCode=EvNotExpr THEN
- CheckMouSBHoriz (Ev); { gescrollt werden }
- IF (EnoughMemory) AND
- (ReturnCode=EvNotExpr) THEN BEGIN
-
- { da hier aber eventuell gezoomt wird, besteht
- CheckMouEv auf der Speichermenge }
-
- IF (Ev.Y=y1) AND (Ev.X>=x1) AND (Ev.X<=x2) THEN BEGIN
- CheckMouStates (Ev); { Zustand ändern ? }
- IF ReturnCode=EvNotExpr THEN
- CheckMouDoubleC (Ev); { Doppelklick erfolgt ? }
- END;
- IF ReturnCode=EvNotExpr THEN
- CheckMouSBVertic (Ev); { vertikaler Balken ? }
- IF ReturnCode=EvNotExpr THEN
- CheckMouSBHoriz (Ev); { horizontaler ? }
- IF ReturnCode=EvNotExpr THEN
- CheckMouZooming (Ev); { zoomen ? }
-
- { wenn immer noch nicht ausgewertet, dann soll sich
- der Vorgänger an dem Event versuchen. }
-
- IF ReturnCode=EvNotExpr THEN
- DataWindow.CheckMouEvent (Ev);
- END;
- END;
-
- (* ----------------------------------------------------- *)
- (* Prüft, ob ein Mausereignis den vertikalen Scrollbalken*)
- (* betrifft; stellt keine Vorbedingungen. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.CheckMouSBVertic (Ev:EventObj);
- VAR ScrY : INTEGER;
- Answer: BYTE;
-
- PROCEDURE ScrollBufMouse (Dx, Dy : INTEGER);
- VAR MVCur : BOOLEAN;
- BEGIN
- MVCur := GetMoveCur;
- SetMoveCur (FALSE);
- ScrollBuf (Dx, Dy);
- SetMoveCur (MVCur);
- END;
-
- BEGIN
- IF EvHand^.MouPressed (Ev) THEN BEGIN
- ScrY := 0;
- SBVertic^.CheckMouEv (Ev);
- Answer := SBVertic^.GetReturnCode;
- CASE Answer OF { scrollen ? }
- SBScrollUp : ScrY := -1;
- SBScrollDown: ScrY := 1;
- SBScrollPgUp: ScrY := -Pred (WinBufYLength);
- SBScrollPgDn: ScrY := Pred (WinBufYLength);
- END;
- IF ScrY<>0 THEN BEGIN
- REPEAT
- EvHand^.PeekEvent (Ev);
- IF Ev.Time=MaxLongInt THEN BEGIN
- IF Abs (ScrY)>1 THEN
- VSM^.Delay (MouseDelay*3)
- ELSE
- VSM^.Delay (MouseDelay);
- ScrollBufMouse (0, ScrY);
- END;
- UNTIL (EvHand^.MouReleased (Ev)) OR
- (Ev.EventType=EvMouMove);
- LastEv := Ev;
- SetReturnCode (ADWScrolledBuf);
- END;
- { nein, Positionierung }
- IF (Answer=SBGotoPos) THEN BEGIN
- ScrollBufMouse
- (0,INTEGER (SBVertic^.GetPos-
- (BufY2-BufY1) DIV 2-BufY1));
- LastEv := Ev;
- SetReturnCode (ADWScrolledBuf);
- END;
- END;
- END;
-
- (* ----------------------------------------------------- *)
- (* Analog zu CheckMouSBVertic, hier für den horizontalen *)
- (* Scrollbalken. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.CheckMouSBHoriz (Ev:EventObj);
- VAR ScrX : INTEGER;
- Answer: BYTE;
-
- PROCEDURE ScrollBufMouse (Dx, Dy : INTEGER);
- VAR MVCur : BOOLEAN;
- BEGIN
- MVCur := GetMoveCur;
- SetMoveCur (FALSE);
- ScrollBuf (Dx, Dy);
- SetMoveCur (MVCur);
- END;
-
- BEGIN
- IF EvHand^.MouPressed (Ev) THEN BEGIN
- ScrX := 0;
- SBHoriz^.CheckMouEv (Ev);
- Answer := SBHoriz^.GetReturnCode;
- CASE Answer OF { scrollen ? }
- SBScrollUp : ScrX := -1;
- SBScrollDown: ScrX := 1;
- SBScrollPgUp: ScrX := -Pred (WinBufXLength);
- SBScrollPgDn: ScrX := Pred (WinBufXLength);
- END;
- IF ScrX<>0 THEN BEGIN
- REPEAT
- EvHand^.PeekEvent (Ev);
- IF Ev.Time=MaxLongInt THEN BEGIN
- IF Abs (ScrX)>1 THEN
- VSM^.Delay (MouseDelay*3)
- ELSE
- VSM^.Delay (MouseDelay);
- ScrollBufMouse (ScrX, 0);
- END
- UNTIL (EvHand^.MouReleased (Ev)) OR
- (Ev.EventType=EvMouMove);
- LastEv := Ev;
- SetReturnCode (ADWScrolledBuf);
- END;
- { Direktpositionierung }
- IF (Answer=SBGotoPos) THEN BEGIN
- ScrollBufMouse
- (INTEGER (SBHoriz^.GetPos-
- (BufX2-BufX1) DIV 2-BufX1), 0);
- LastEv := Ev;
- SetReturnCode (ADWScrolledBuf);
- END;
- END;
- END;
-
- (* ----------------------------------------------------- *)
- (* Geht davon aus, dass Ev.X>=x1, Ev.X<=x2, Ev.Y=y1 ist *)
- (* (Maus sich also in Titelzeile befindet), dass Ev ein *)
- (* Mausevent ist. Prüft, ob eines der "StatesChanging"- *)
- (* Symbole angeklickt wurde. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.CheckMouStates (Ev : EventObj);
- VAR Switch : BOOLEAN;
- BEGIN
- {------------ "Maximized" oder "Iconized" ? ------------}
- { Dann ist das Symbol zum Umschalten nach "Normal" von
- beiden am gleichen Ort, beide schalten in den gleichen
- Zustand um, also gemeinsame Abfrage möglich. }
-
- IF (State<>Normal) AND
- (Ev.X>=x2-4) AND (Ev.X<=x2-2) THEN BEGIN
- Switch := FALSE;
- IF EvHand^.MouReleased (Ev) THEN
- Switch := TRUE
- ELSE BEGIN
- REPEAT
- EvHand^.WaitForEvent (EvMouAll, Ev);
- UNTIL EvHand^.MouReleased (Ev);
- IF (Ev.X>=x2-4) AND (Ev.X<=x2-2) THEN
- Switch := TRUE;
- END;
- IF Switch THEN BEGIN
- LastEv := Ev;
- SwitchState (Normal);
- END;
- END ELSE
- {---------- "Minimieren" oder "iconisieren" ? ---------}
- { Hier muss zwischen zwei Symbolen unterschieden werden}
- IF (State=Normal) AND
- (Ev.X>=x2-7) AND (Ev.X<=x2-2) THEN BEGIN
- Switch := FALSE;
- IF Evhand^.MouReleased (Ev) THEN Switch := TRUE
- ELSE BEGIN
- REPEAT
- EvHand^.WaitForEvent (EvMouAll, Ev)
- UNTIL Evhand^.MouReleased (Ev);
- IF (Ev.X>=x2-7) AND (Ev.X<=x2-2) THEN
- Switch := TRUE;
- END;
- IF Switch THEN
- IF (Ev.X>=x2-4) AND
- (Ev.X<=x2-2) THEN BEGIN { zu "Icon" machen }
- SwitchState (Iconized);
- IF ReturnCode<>DWCantSaveBuf THEN
- SetReturnCode (ADWSwitchedIcon);
- END ELSE BEGIN { oder volle Grösse }
- SwitchState (Maximized);
- SetReturnCode (ADWSwitchedMax);
- END;
- LastEv := Ev;
- END;
- END;
-
- (* ----------------------------------------------------- *)
- (* Prüft, ob ein Doppelklick in Titelzeile erfolgte. *)
- (* Bedingungen: Siehe CheckMouStates. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.CheckMouDoubleC (Ev : EventObj);
- BEGIN
- IF EvHand^.MouPressed (Ev) THEN
- IF EvHand^.MouReleased (LastEv) AND
- (LastEv.Y=Ev.Y) AND (LastEv.X=Ev.X) AND
- (LastEv.Time+DoubleClickTime>=Ev.Time) THEN BEGIN
- REPEAT
- EvHand^.WaitForEvent (EvMouAll, Ev)
- UNTIL (Ev.EventType=EvMouMove) OR
- (EvHand^.MouReleased (Ev));
- LastEv := Ev;
- IF Ev.EventType<>EvMouMove THEN
- IF State=Maximized THEN BEGIN
- SwitchState (Normal);
- SetReturnCode (ADWSwitchedNormal);
- END ELSE BEGIN
- SwitchState (Maximized);
- SetReturnCode (ADWSwitchedMax);
- END;
- END;
- END;
-
- (* ----------------------------------------------------- *)
- (* CheckMouZooming prüft, ob das Zooming-Symbol ange- *)
- (* klickt wurde. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.CheckMouZooming (Ev : EventObj);
- VAR DifX : BYTE;
- BEGIN
- IF EvHand^.MouPressed (Ev) AND
- (Ev.X>=Pred (x2)) AND
- (Ev.X<=x2) AND (Ev.Y=y2) THEN BEGIN
- DifX := x2-Ev.X;
- StartChange;
- REPEAT
- EvHand^.WaitForEvent (EvMouAll, Ev);
- IF Ev.EventType=EvMouMove THEN
- ZoomAbs (Ev.X-DifX, Ev.Y)
- UNTIL EvHand^.MouReleased (Ev);
- EndChange;
- LastEv := Ev;
- SetReturnCode (ZoomedWin);
- END;
- END;
-
- PROCEDURE ActiveDataWindow.CheckKeyEvent (Ev : EventObj);
- VAR NewX, NewY : INTEGER;
- Key : WORD;
- KeyExpr : BOOLEAN;
- BEGIN
- SetReturnCode (EvNotExpr);
- IF Ev.EventType=EvKeyPressed THEN BEGIN
- {---------------- für alle Zustände ------------------}
- CASE Ev.Key OF
- 362 : BEGIN { Alt-F3, schliessen }
- Close;
- SetReturnCode (ClosedWin);
- END;
- 319 : BEGIN { F5, Zustand ändern }
- IF State=Normal THEN BEGIN
- SwitchState (Maximized);
- SetReturnCode (ADWSwitchedMax);
- END ELSE BEGIN
- SwitchState (Normal);
- SetReturnCode (ADWSwitchedNormal);
- END;
- END;
- END;
- {----------- nur für "Maximized" und "Normal" --------}
- IF (State<>Iconized) AND
- (ReturnCode=EvNotExpr) THEN BEGIN
- Key := Ev.Key; KeyExpr := TRUE;
- IF CtrlCodes THEN
- CASE Key OF { umwandeln der Ctrl-Codes }
- CtrlS : Key := CurLeft;
- CtrlD : Key := CurRight;
- CtrlE : Key := CurUp;
- CtrlX : Key := CurDown;
- CtrlR : Key := CurPgUp;
- CtrlC : Key := CurPgDn;
- END;
- NewX := Buf^.GetX; NewY := Buf^.GetY;
- CASE Key OF
- CurUp : IF NewY>1 THEN Dec (NewY);
- CurDown : IF NewY<Buf^.GetLines THEN Inc (NewY);
- CurPgUp : IF NewY>Pred (WinBufYLength) THEN
- Dec (NewY, Pred (WinBufYLength))
- ELSE
- NewY := 1;
- CurPgDn : BEGIN
- Inc (NewY, Pred (WinBufYLength));
- IF NewY>Buf^.GetLines THEN
- NewY := Buf^.GetLines;
- END;
- CtrlHome: BEGIN NewX := 1; NewY := 1 END;
- CtrlEnd : BEGIN
- NewX := 1; NewY := Buf^.GetLines;
- END;
- CurLeft : Dec (NewX);
- CurRight: Inc (NewX);
- CurHome : NewX := 1;
- CurEnd : NewX := Buf^.GetColumns
- ELSE
- KeyExpr := FALSE;
- END;
- IF (NewX<>Buf^.GetX) OR
- (NewY<>Buf^.GetY) OR
- (KeyExpr) THEN BEGIN
- GotoXY (NewX, NewY);
- SetReturnCode (ADWSetCursor);
- END;
- END;
- END;
- {----- falls bis hierhin nicht ausgewertet, kann das
- der Vorgänger eventuell übernehmen --------------}
- IF (ReturnCode=EvNotExpr) THEN
- IF State=Iconized THEN BEGIN
- ZoomAllowed := FALSE; SaveWinContent := TRUE;
- DataWindow.CheckKeyEvent (Ev);
- ZoomAllowed := TRUE; SaveWinContent := FALSE;
- END ELSE
- DataWindow.CheckKeyEvent (Ev);
- END;
-
- (* ----------------------------------------------------- *)
- (* Zustand wechseln. Dazu wird zunächst das Fenster ge- *)
- (* schlossen, falls von Normal ausgehend die aktuellen *)
- (* Koordinaten in StNor.. gesichert, dann die neuen Daten*)
- (* gesetzt und das Fenster neu geöffnet. Besonderheit ist*)
- (* dabei das Wechseln nach "Iconized": Das Fenster wird *)
- (* gleichzeitig "passiv" gesetzt, der ReturnCode lautet *)
- (* "ADWIconSetPassive". *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.SwitchState(NewSt:WindowStates);
- VAR i1, i2 : WORD;
- BEGIN
- IF (Opened) AND (NewSt<>State) THEN BEGIN
- IF State=Normal THEN BEGIN
- StNorX1 := x1; StNorY1 := y1;
- StNorX2 := x2; StNorY2 := y2;
- END;
- Close;
- IF NewSt=Maximized THEN BEGIN
- x1 := StMaxX1; y1 := StMaxY1;
- x2 := StMaxX2; y2 := StMaxY2
- END ELSE IF NewSt=Iconized THEN BEGIN
- x1 := StIcoX1; y1 := StIcoY1;
- x2 := StIcoX2; y2 := StIcoY2;
- IF SaveByIcon THEN SaveBuffer;
- IF ReturnCode=DWCantSaveBuf THEN
- NewSt := State
- ELSE BEGIN
- SetReturnCode (ADWIconSetPassive);
- SetPassive;
- END;
- END;
- IF NewSt=Normal THEN BEGIN
- x1 := StNorX1; y1 := StNorY1;
- x2 := StNorX2; y2 := StNorY2
- END;
- IF (NewSt<>Iconized) AND { von Icon ausgehend, }
- (State=Iconized) AND { ganzer Puffer ausgelagert ?}
- (SaveByIcon) THEN BEGIN
- i1 := Succ (Buf^.GetMaxColumns)*2;
- { ^^^ Speicherbedarf einer Zeile }
- IF MemAvail>Buf^.GetFreeHeap THEN
- i2 := ((MemAvail-Buf^.GetFreeHeap) DIV i1) DIV 2;
- { soviele Zeilen können geladen werden, geteilt
- durch 2 }
- i1 := i2;
- IF BufY2+i2>Buf^.Lines THEN BEGIN
- i2 := Buf^.GetLines-BufY2; Inc (i1, i2);
- { einschränken, über GetLines hinaus kann nicht
- geladen werden }
- END;
- IF INTEGER (BufY1-i1)<0 THEN BEGIN
- Inc (i2, i1-BufY1); i1 := Pred (BufY1);
- { einschränken, unter 1 kann nicht geladen
- werden }
- END;
- DiskBufferPtr (Buf)^.LoadPart (BufY1-i1, BufY2+i2);
- { diese ganzen Berechnungen sind dazu da, dass
- maximal viel auf einmal wieder in den Speicher
- geladen wird }
- END;
- State := NewSt;
- Open;
- END;
- END;
-
- (* ----------------------------------------------------- *)
- (* "Kopfzeile" schreiben: Symbole, Nummer und Titel. *)
- (* Je nach Zustand anders. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.DrawTitles;
- VAR s : STRING;
- BEGIN
- System.Str (Number, s);
- IF State=Iconized THEN BEGIN
- VSM^.FillPart (Succ (x1), Succ (y1),
- Pred (x2), Succ (y1), 7, ' ');
- VSM^.WriteStr (x1+(x2-x1) DIV 2, y1, FrCol, s);
- VSM^.WriteStr (Succ (x1), Succ (y1), FrCol, IconTL);
- IF Active THEN BEGIN
- VSM^.WriteStr (x1+2, y1, FrCol, '[■]');
- VSM^.WriteStr (x2-4, y1, FrCol, '['+Chr (24)+']');
- END;
- END ELSE BEGIN
- IF Length (TL)<(x2-x1-16) THEN
- VSM^.WriteStr ((x1+x2+4+Length (TL)) DIV 2, y1,
- TLCol, TL);
- VSM^.WriteStr (x1+2, y1, FrCol, '[■]');
- IF State=Maximized THEN
- VSM^.WriteStr (x2-4-Succ(Length(s)), y1, FrCol,
- s+Frames [Frame, 5]+'['+Chr (18)+']')
- ELSE
- VSM^.WriteStr (x2-7-Succ(Length(s)), y1, FrCol,
- s+Frames[Frame,5]+
- '['+Chr(24)+']['+Chr(25)+']');
- END;
- END;
-
- (* ----------------------------------------------------- *)
- (* Den Rahmen zeichnen, falls nicht "Iconized" wird das *)
- (* "ZoomingSymbol" hinzugefügt. *)
- (* ----------------------------------------------------- *)
- PROCEDURE ActiveDataWindow.DrawFrame;
- VAR MouVis : BOOLEAN;
- BEGIN
- MouVis := Mouse^.GetVisible;
- Mouse^.Hide;
- DataWindow.DrawFrame;
- IF (State<>Iconized) AND Active THEN
- VSM^.WriteStr (Pred (x2), y2, 15, '─┘');
- IF MouVis THEN
- Mouse^.Show;
- END;
-
- PROCEDURE ActiveDataWindow.SetNumber (N : BYTE);
- BEGIN
- IF NOT Opened THEN Number := N;
- END;
-
- PROCEDURE ActiveDataWindow.SetIconTitle (IT : STRING);
- BEGIN
- IF (State<>Iconized) OR NOT Opened THEN BEGIN
- IF Length (IT)>18 THEN
- IT [0] := Chr (18);
- IconTL := IT;
- END;
- END;
-
- PROCEDURE ActiveDataWindow.SetIconXY (ix1, iy1 : BYTE);
- BEGIN
- IF NOT Opened OR (State<>Iconized) THEN BEGIN
- StIcoX1 := ix1; StIcoY1 := iy1;
- StIcoX2 := StIcoX1+19; StIcoY2 := StIcoY1+2;
- END;
- END;
-
- PROCEDURE ActiveDataWindow.SetMaxXY (mx1,my1,mx2,my2:BYTE);
- BEGIN
- IF NOT Opened OR (State<>Maximized) THEN BEGIN
- StMaxX1 := mx1; StMaxY1 := my1;
- StMaxX2 := mx2; StMaxY2 := my2;
- END;
- END;
-
- PROCEDURE ActiveDataWindow.SetSaveByIcon (Save : BOOLEAN);
- BEGIN
- SaveByIcon := Save;
- END;
-
- PROCEDURE ActiveDataWindow.CheckControlCodes (CC : BOOLEAN);
- BEGIN
- CtrlCodes := CC;
- END;
-
- FUNCTION ActiveDataWindow.CtrlCodesChecked : BOOLEAN;
- BEGIN
- CtrlCodesChecked := CtrlCodes;
- END;
-
- FUNCTION ActiveDataWindow.GetSaveByIcon : BOOLEAN;
- BEGIN
- GetSaveByIcon := SaveByIcon;
- END;
-
- FUNCTION ActiveDataWindow.GetState : WindowStates;
- BEGIN
- GetState := State;
- END;
-
- FUNCTION ActiveDataWindow.GetNumber : BYTE;
- BEGIN
- GetNumber := Number;
- END;
-
- FUNCTION ActiveDataWindow.GetIconTitle : STRING;
- BEGIN
- GetIconTitle := IconTL;
- END;
-
- END.
- (* ----------------------------------------------------- *)
- (* Ende von ACTDWIN.PAS *)
- (* ----------------------------------------------------- *)