home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / ide / browser.pas next >
Encoding:
Pascal/Delphi Source File  |  1992-01-30  |  3.6 KB  |  135 lines

  1. (* ------------------------------------------------- *)
  2. (*                   BROWSER.PAS                     *)
  3. (*             Modifizierter File-Viewer             *)
  4. (*     Auszüge aus dem Turbo-Vision-Demoprogramm     *)
  5. (*    Portions Copyright (c) Borland International   *)
  6. (* ------------------------------------------------- *)
  7. {$X+,S-}
  8.  
  9. UNIT Browser;
  10.  
  11. INTERFACE
  12.  
  13. USES Dos, Objects, Drivers, Memory, Views, MsgBox, App;
  14.  
  15. TYPE
  16.   pLineCollection = ^tLineCollection;
  17.   tLineCollection = OBJECT (tCollection)
  18.     PROCEDURE FreeItem(P : Pointer);           VIRTUAL;
  19.   END;
  20.  
  21.   pFileViewer = ^tFileViewer;
  22.   tFileViewer = OBJECT (tScroller)
  23.     FileLines : pCollection;
  24.     IsValid   : BOOLEAN;
  25.  
  26.     CONSTRUCTOR Init(VAR Bounds      : tRect;
  27.                          aHScrollBar,
  28.                          aVScrollBar : pScrollBar;
  29.                      VAR FileName    : PathStr);
  30.     DESTRUCTOR  Done;  VIRTUAL;
  31.     PROCEDURE   Draw;  VIRTUAL;
  32.     FUNCTION    Valid(Command : WORD) : BOOLEAN;
  33.                                                VIRTUAL;
  34.   END;
  35.  
  36.   pFileWindow = ^tFileWindow;
  37.   tFileWindow = OBJECT (tWindow)
  38.     CONSTRUCTOR Init(    Bounds   : tRect;
  39.                      VAR FileName : PathStr);
  40.   END;
  41.  
  42. IMPLEMENTATION
  43.  
  44.   PROCEDURE tLineCollection.FreeItem(P : Pointer);
  45.   BEGIN
  46.     DisposeStr(P);
  47.   END;
  48.  
  49.   CONSTRUCTOR tFileViewer.Init(VAR Bounds : tRect;
  50.                                aHScrollBar,
  51.                                aVScrollBar: pScrollBar;
  52.                              VAR FileName : PathStr);
  53.   VAR
  54.     FileToView : TEXT;
  55.     Line       : STRING;
  56.     MaxWidth   : INTEGER;
  57.   BEGIN
  58.     tScroller.Init(Bounds, aHScrollBar, aVScrollBar);
  59.     IsValid := TRUE;
  60.     FileLines := New(pLineCollection, Init(5, 5));
  61.     {$I-}
  62.     Assign(FileToView, FileName);
  63.     Reset(FileToView);
  64.     IF IOResult <> 0 THEN BEGIN
  65.       MessageBox('Cannot open file ' + FileName + '.',
  66.                  NIL, mfError + mfOkButton);
  67.       IsValid := FALSE;
  68.     END ELSE BEGIN
  69.       MaxWidth := 0;
  70.       WHILE NOT EoF(FileToView) AND
  71.             NOT LowMemory DO BEGIN
  72.         ReadLn(FileToView, Line);
  73.         IF Length(Line) > MaxWidth THEN
  74.           MaxWidth := Length(Line);
  75.         FileLines^.Insert(NewStr(Line));
  76.       END;
  77.       Close(FileToView);
  78.     END;
  79.     {$I+}
  80.     SetLimit(MaxWidth, FileLines^.Count);
  81.   END;
  82.  
  83.   DESTRUCTOR tFileViewer.Done;
  84.   BEGIN
  85.     Dispose(FileLines, Done);
  86.     tScroller.Done;
  87.   END;
  88.  
  89.   PROCEDURE tFileViewer.Draw;
  90.   VAR
  91.     B : tDrawBuffer;
  92.     C : BYTE;
  93.     I : INTEGER;
  94.     S : STRING;
  95.     P : pString;
  96.   BEGIN
  97.     C := GetColor(1);
  98.     FOR i := 0 TO Size.Y - 1 DO BEGIN
  99.       MoveChar(B, ' ', C, Size.X);
  100.       IF Delta.Y + i < FileLines^.Count THEN BEGIN
  101.         P := FileLines^.At(Delta.Y + i);
  102.         IF P <> NIL THEN
  103.           S := Copy(P^, Delta.X + 1, Size.X)
  104.         ELSE
  105.           S := '';
  106.         MoveStr(B, S, C);
  107.       END;
  108.       WriteLine(0, i, Size.X, 1, B);
  109.     END;
  110.   END;
  111.  
  112.   FUNCTION tFileViewer.Valid(Command : WORD) : BOOLEAN;
  113.   BEGIN
  114.     Valid := IsValid;
  115.   END;
  116.  
  117.   CONSTRUCTOR tFileWindow.Init(Bounds : tRect;
  118.                                VAR FileName : PathStr);
  119.   VAR
  120.     R : tRect;
  121.   BEGIN
  122.     tWindow.Init(Bounds, FileName, wnNoNumber);
  123.     Options := Options OR ofTileable;
  124.     GetExtent(R);
  125.     R.Grow(-1,-1);
  126.     Insert(New(pFileViewer, Init(R,
  127.       StandardScrollBar(sbHorizontal + sbHandleKeyboard),
  128.       StandardScrollBar(sbVertical + sbHandleKeyboard),
  129.                         FileName)));
  130.   END;
  131.  
  132. END.
  133. (* ------------------------------------------------- *)
  134. (*               Ende von BROWSER.PAS                *)
  135.