home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9303 / tv / browser.pas next >
Encoding:
Pascal/Delphi Source File  |  1993-05-04  |  4.2 KB  |  157 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      BROWSER.PAS                       *)
  3. (*          Objekt zum Darstellen von Dateien             *)
  4. (* ------------------------------------------------------ *)
  5. UNIT Browser;
  6.  
  7. {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+}
  8. {$M 16384,0,655360}
  9.  
  10. INTERFACE
  11.  
  12. USES Dos, Objects, Drivers, Memory, Views, MsgBox, App;
  13.  
  14. TYPE
  15.   pLineCollection = ^tLineCollection;
  16.   tLineCollection = OBJECT (tCollection)
  17.     PROCEDURE FreeItem(P : Pointer); VIRTUAL;
  18.   END;
  19.  
  20.   pFileViewer = ^tFileViewer;
  21.   tFileViewer = OBJECT (tScroller)
  22.     FileLines : pCollection;
  23.     IsValid   : BOOLEAN;
  24.  
  25.     CONSTRUCTOR Init(VAR Bounds                   : tRect;
  26.                          aHScrollBar, aVScrollBar : pScrollBar;
  27.                      VAR FileName                 : PathStr);
  28.     DESTRUCTOR  Done;  VIRTUAL;
  29.     PROCEDURE   Draw;  VIRTUAL;
  30.     FUNCTION    Valid(Command : WORD) : BOOLEAN;  VIRTUAL;
  31.   END;
  32.  
  33.   pFileWindow = ^tFileWindow;
  34.   tFileWindow = OBJECT (tWindow)
  35.     CONSTRUCTOR Init(Bounds : tRect;
  36.                      VAR FileName : PathStr);
  37.   END;
  38.  
  39. CONST
  40.   rLineCollection : tStreamRec = (
  41.     ObjType : 10100;
  42.     VmtLink : Ofs(TypeOf(tLineCollection)^);
  43.     Load    : @tLineCollection.Load;
  44.     Store   : @tLineCollection.Store);
  45.  
  46.   rFileViewer : tStreamRec = (
  47.     ObjType : 10110;
  48.     VmtLink : Ofs(TypeOf(tFileViewer)^);
  49.     Load    : @tFileViewer.Load;
  50.     Store   : @tFileViewer.Store);
  51.  
  52.   rFileWindow : tStreamRec = (
  53.     ObjType : 10120;
  54.     VmtLink : Ofs(TypeOf(tFileWindow)^);
  55.     Load    : @tFileWindow.Load;
  56.     Store   : @tFileViewer.Store);
  57.  
  58.   PROCEDURE RegisterBrowser;
  59.  
  60. IMPLEMENTATION
  61.  
  62.   PROCEDURE tLineCollection.FreeItem(P : Pointer);
  63.   BEGIN
  64.     DisposeStr(P);
  65.   END;
  66.  
  67.   CONSTRUCTOR tFileViewer.Init(VAR Bounds                   : tRect;
  68.                                    aHScrollBar, aVScrollBar : pScrollBar;
  69.                                VAR FileName                 : PathStr);
  70.   VAR
  71.     FileToView : Text;
  72.     Line       : STRING;
  73.     MaxWidth   : INTEGER;
  74.   BEGIN
  75.     inherited Init(Bounds, aHScrollBar, aVScrollBar);
  76.     IsValid := TRUE;
  77.     FileLines := New(pLineCollection, Init(5, 5));
  78.   {$I-}
  79.     Assign(FileToView, FileName);
  80.     Reset(FileToView);
  81.     IF IOResult <> 0 THEN BEGIN
  82.       MessageBox('Cannot open file ' + FileName + '.',
  83.                  NIL, mfError + mfOkButton);
  84.       IsValid := FALSE;
  85.     END ELSE BEGIN
  86.       MaxWidth := 0;
  87.       WHILE NOT EoF(FileToView) AND NOT LowMemory DO BEGIN
  88.         ReadLn(FileToView, Line);
  89.         IF Length(Line) > MaxWidth THEN
  90.           MaxWidth := Length(Line);
  91.         FileLines^.Insert(NewStr(Line));
  92.       END;
  93.       Close(FileToView);
  94.     END;
  95.   {$I+}
  96.     SetLimit(MaxWidth, FileLines^.Count);
  97.   END;
  98.  
  99.   DESTRUCTOR tFileViewer.Done;
  100.   BEGIN
  101.     Dispose(FileLines, Done);
  102.     inherited Done;
  103.   END;
  104.  
  105.   PROCEDURE tFileViewer.Draw;
  106.   VAR
  107.     B : tDrawBuffer;
  108.     C : BYTE;
  109.     I : INTEGER;
  110.     S : STRING;
  111.     P : pSTRING;
  112.   BEGIN
  113.     C := GetColor(1);
  114.     FOR i := 0 TO Size.y - 1 DO BEGIN
  115.       MoveChar(B, ' ', C, Size.X);
  116.       IF Delta.Y + i < FileLines^.Count THEN BEGIN
  117.         P := FileLines^.At(Delta.Y + i);
  118.         IF P <> NIL THEN
  119.           S := Copy(P^, Delta.X + 1, Size.X)
  120.         ELSE
  121.           S := '';
  122.         MoveStr(B, S, C);
  123.       END;
  124.       WriteLine(0, i, Size.X, 1, B);
  125.     END;
  126.   END;
  127.  
  128.   FUNCTION tFileViewer.Valid(Command : WORD) : BOOLEAN;
  129.   BEGIN
  130.     Valid := IsValid;
  131.   END;
  132.  
  133.   CONSTRUCTOR tFileWindow.Init(Bounds : tRect; VAR FileName : PathStr);
  134.   VAR
  135.     R : tRect;
  136.   BEGIN
  137.     inherited Init(Bounds, FileName, wnNoNumber);
  138.     Options := Options OR ofTileable;
  139.     GetExtent(R);
  140.     R.Grow(-1, -1);
  141.     Insert(New(pFileViewer, Init(R,
  142.       StandardScrollBar(sbHorizontal + sbHandleKeyboard),
  143.       StandardScrollBar(sbVertical   + sbHandleKeyboard),
  144.       FileName)));
  145.   END;
  146.  
  147.   PROCEDURE RegisterBrowser;
  148.   BEGIN
  149.     RegisterType(rLineCollection);
  150.     RegisterType(rFileViewer);
  151.     RegisterType(rFileWindow);
  152.   END;
  153.  
  154. END.
  155. (* ------------------------------------------------------ *)
  156. (*               Ende von  BROWSER.PAS                    *)
  157.