summaryrefslogtreecommitdiff
path: root/packages/fv/src/gadgets.pas
diff options
context:
space:
mode:
Diffstat (limited to 'packages/fv/src/gadgets.pas')
-rw-r--r--packages/fv/src/gadgets.pas306
1 files changed, 306 insertions, 0 deletions
diff --git a/packages/fv/src/gadgets.pas b/packages/fv/src/gadgets.pas
new file mode 100644
index 0000000000..b802f4f888
--- /dev/null
+++ b/packages/fv/src/gadgets.pas
@@ -0,0 +1,306 @@
+{********[ SOURCE FILE OF GRAPHICAL FREE VISION ]**********}
+{ }
+{ System independent GRAPHICAL clone of GADGETS.PAS }
+{ }
+{ Interface Copyright (c) 1992 Borland International }
+{ }
+{ Copyright (c) 1999 by Leon de Boer }
+{ ldeboer@attglobal.net - primary e-mail address }
+{ ldeboer@starwon.com.au - backup e-mail address }
+{ }
+{****************[ THIS CODE IS FREEWARE ]*****************}
+{ }
+{ This sourcecode is released for the purpose to }
+{ promote the pascal language on all platforms. You may }
+{ redistribute it and/or modify with the following }
+{ DISCLAIMER. }
+{ }
+{ This SOURCE CODE is distributed "AS IS" WITHOUT }
+{ WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR }
+{ ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED. }
+{ }
+{*****************[ SUPPORTED PLATFORMS ]******************}
+{ 16 and 32 Bit compilers }
+{ DOS - Turbo Pascal 7.0 + (16 Bit) }
+{ DPMI - Turbo Pascal 7.0 + (16 Bit) }
+{ - FPC 0.9912+ (GO32V2) (32 Bit) }
+{ WINDOWS - Turbo Pascal 7.0 + (16 Bit) }
+{ - Delphi 1.0+ (16 Bit) }
+{ WIN95/NT - Delphi 2.0+ (32 Bit) }
+{ - Virtual Pascal 2.0+ (32 Bit) }
+{ - Speedsoft Sybil 2.0+ (32 Bit) }
+{ - FPC 0.9912+ (32 Bit) }
+{ OS2 - Virtual Pascal 1.0+ (32 Bit) }
+{ }
+{*******************[ DOCUMENTATION ]**********************}
+{ }
+{ This unit had to be for GFV due to some problems with }
+{ the original Borland International implementation. }
+{ }
+{ First it used the DOS unit for it's time calls in the }
+{ TClockView object. Since this unit can not be compiled }
+{ under WIN/NT/OS2 we use a new unit TIME.PAS which was }
+{ created and works under these O/S. }
+{ }
+{ Second the HeapView object accessed MemAvail from in }
+{ the Draw call. As GFV uses heap memory during the Draw }
+{ call the OldMem value always met the test condition in }
+{ the update procedure. The consequence was the view }
+{ would continually redraw. By moving the memavail call }
+{ the update procedure this eliminates this problem. }
+{ }
+{ Finally the original object relied on the font char }
+{ blocks being square to erase it's entire view area as }
+{ it used a simple writeline call in the Draw method. }
+{ Under GFV font blocks are not necessarily square and }
+{ so both objects had their Draw routines rewritten. As }
+{ the Draw had to be redone it was done in the GFV split }
+{ drawing method to accelerate the graphical speed. }
+{ }
+{******************[ REVISION HISTORY ]********************}
+{ Version Date Fix }
+{ ------- --------- --------------------------------- }
+{ 1.00 12 Nov 99 First multi platform release }
+{**********************************************************}
+
+UNIT Gadgets;
+
+{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
+ INTERFACE
+{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
+
+{====Include file to sort compiler platform out =====================}
+{$I Platform.inc}
+{====================================================================}
+
+{==== Compiler directives ===========================================}
+
+{$IFNDEF PPC_FPC}{ FPC doesn't support these switches }
+ {$F-} { Near calls are okay }
+ {$A+} { Word Align Data }
+ {$B-} { Allow short circuit boolean evaluations }
+ {$O+} { This unit may be overlaid }
+ {$G+} { 286 Code optimization - if you're on an 8088 get a real computer }
+ {$P-} { Normal string variables }
+ {$N-} { No 80x87 code generation }
+ {$E+} { Emulation is on }
+{$ENDIF}
+
+{$X+} { Extended syntax is ok }
+{$R-} { Disable range checking }
+{$S-} { Disable Stack Checking }
+{$I-} { Disable IO Checking }
+{$Q-} { Disable Overflow Checking }
+{$V-} { Turn off strict VAR strings }
+{====================================================================}
+
+USES FVConsts, Time, Objects, Drivers, Views, App; { Standard GFV units }
+
+{***************************************************************************}
+{ PUBLIC OBJECT DEFINITIONS }
+{***************************************************************************}
+
+{---------------------------------------------------------------------------}
+{ THeapView OBJECT - ANCESTOR VIEW OBJECT }
+{---------------------------------------------------------------------------}
+TYPE
+ THeapViewMode=(HVNormal,HVComma,HVKb,HVMb);
+
+ THeapView = OBJECT (TView)
+ Mode : THeapViewMode;
+ OldMem: LongInt; { Last memory count }
+ constructor Init(var Bounds: TRect);
+ constructor InitComma(var Bounds: TRect);
+ constructor InitKb(var Bounds: TRect);
+ constructor InitMb(var Bounds: TRect);
+ PROCEDURE Update;
+ PROCEDURE Draw; Virtual;
+ Function Comma ( N : LongInt ) : String;
+ END;
+ PHeapView = ^THeapView; { Heapview pointer }
+
+{---------------------------------------------------------------------------}
+{ TClockView OBJECT - ANCESTOR VIEW OBJECT }
+{---------------------------------------------------------------------------}
+TYPE
+ TClockView = OBJECT (TView)
+ am : Char;
+ Refresh : Byte; { Refresh rate }
+ LastTime: Longint; { Last time displayed }
+ TimeStr : String[10]; { Time string }
+ CONSTRUCTOR Init (Var Bounds: TRect);
+ FUNCTION FormatTimeStr (H, M, S: Word): String; Virtual;
+ PROCEDURE Update; Virtual;
+ PROCEDURE Draw; Virtual;
+ END;
+ PClockView = ^TClockView; { Clockview ptr }
+
+{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
+ IMPLEMENTATION
+{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
+
+{***************************************************************************}
+{ OBJECT METHODS }
+{***************************************************************************}
+
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{ THeapView OBJECT METHODS }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
+constructor THeapView.Init(var Bounds: TRect);
+begin
+ inherited Init(Bounds);
+ mode:=HVNormal;
+ OldMem := 0;
+end;
+
+constructor THeapView.InitComma(var Bounds: TRect);
+begin
+ inherited Init(Bounds);
+ mode:=HVComma;
+ OldMem := 0;
+end;
+
+constructor THeapView.InitKb(var Bounds: TRect);
+begin
+ inherited Init(Bounds);
+ mode:=HVKb;
+ OldMem := 0;
+end;
+
+constructor THeapView.InitMb(var Bounds: TRect);
+begin
+ inherited Init(Bounds);
+ mode:=HVMb;
+ OldMem := 0;
+end;
+
+{--THeapView----------------------------------------------------------------}
+{ Update -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Nov99 LdB }
+{---------------------------------------------------------------------------}
+PROCEDURE THeapView.Update;
+var
+ status : TFPCHeapStatus;
+BEGIN
+ status:=GetFPCHeapStatus;
+ If (OldMem <> status.CurrHeapUsed) Then Begin { Memory differs }
+ OldMem := status.CurrHeapUsed; { Hold memory avail }
+ DrawView; { Now redraw }
+ End;
+END;
+
+{--THeapView----------------------------------------------------------------}
+{ Draw -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Nov99 LdB }
+{---------------------------------------------------------------------------}
+PROCEDURE THeapView.Draw;
+VAR
+ C : Byte;
+ S : String;
+ B : TDrawBuffer;
+begin
+ case mode of
+ HVNormal :
+ Str(OldMem:Size.X, S);
+ HVComma :
+ S:=Comma(OldMem);
+ HVKb :
+ begin
+ Str(OldMem shr 10:Size.X-1, S);
+ S:=S+'K';
+ end;
+ HVMb :
+ begin
+ Str(OldMem shr 20:Size.X-1, S);
+ S:=S+'M';
+ end;
+ end;
+ C:=GetColor(2);
+ MoveChar(B,' ',C,Size.X);
+ MoveStr(B,S,C);
+ WriteLine(0,0,Size.X,1,B);
+END;
+
+Function THeapView.Comma ( n : LongInt) : String;
+Var
+ num, loc : Byte;
+ s : String;
+ t : String;
+Begin
+ Str (n,s);
+ Str (n:Size.X,t);
+
+ num := length(s) div 3;
+ if (length(s) mod 3) = 0 then dec (num);
+
+ delete (t,1,num);
+ loc := length(t)-2;
+
+ while num > 0 do
+ Begin
+ Insert (',',t,loc);
+ dec (num);
+ dec (loc,3);
+ End;
+
+ Comma := t;
+End;
+
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{ TClockView OBJECT METHODS }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
+{--TClockView---------------------------------------------------------------}
+{ Init -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Nov99 LdB }
+{---------------------------------------------------------------------------}
+CONSTRUCTOR TClockView.Init (Var Bounds: TRect);
+BEGIN
+ Inherited Init(Bounds); { Call ancestor }
+ FillChar(LastTime, SizeOf(LastTime), #$FF); { Fill last time }
+ TimeStr := ''; { Empty time string }
+ Refresh := 1; { Refresh per second }
+END;
+
+{--TClockView---------------------------------------------------------------}
+{ FormatStr -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Nov99 LdB }
+{---------------------------------------------------------------------------}
+FUNCTION TClockView.FormatTimeStr (H, M, S: Word): String;
+VAR Hs, Ms, Ss: String;
+BEGIN
+ Str(H, Hs); { Convert hour string }
+ While (Length(Hs) < 2) Do Hs := '0' + Hs; { Add lead zero's }
+ Str(M, Ms); { Convert min string }
+ While (Length(Ms) < 2) Do Ms := '0' + Ms; { Add lead zero's }
+ Str(S, Ss); { Convert sec string }
+ While (Length(Ss) < 2) Do Ss := '0' + Ss; { Add lead zero's }
+ FormatTimeStr := Hs + ':'+ Ms + ':' + Ss; { Return string }
+END;
+
+{--TClockView---------------------------------------------------------------}
+{ Update -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Nov99 LdB }
+{---------------------------------------------------------------------------}
+PROCEDURE TClockView.Update;
+VAR Hour, Min, Sec, Sec100: Word;
+BEGIN
+ GetTime(Hour, Min, Sec, Sec100); { Get current time }
+ If (Abs(Sec - LastTime) >= Refresh) Then Begin { Refresh time elapsed }
+ LastTime := Sec; { Hold second }
+ TimeStr := FormatTimeStr(Hour, Min, Sec); { Create time string }
+ DrawView; { Now redraw }
+ End;
+END;
+
+{--TClockView---------------------------------------------------------------}
+{ DrawBackGround -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Nov99 LdB }
+{---------------------------------------------------------------------------}
+PROCEDURE TClockView.Draw;
+VAR
+ C : Byte;
+ B : TDrawBuffer;
+BEGIN
+ C:=GetColor(2);
+ MoveChar(B,' ',C,Size.X);
+ MoveStr(B,TimeStr,C);
+ WriteLine(0,0,Size.X,1,B);
+END;
+
+END.