home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / tvision / ide / browser.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-05-03  |  4.2 KB  |  158 lines

  1. (* ------------------------------------------------------ *)
  2. (*                    BROWSER.PAS                         *)
  3. (*            (c) 1993 te-wi Verlag, München              *)
  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; VAR FileName : PathStr);
  36.   END;
  37.  
  38. CONST
  39.   rLineCollection : tStreamRec = (
  40.     ObjType : 10100;
  41.     VmtLink : Ofs(TypeOf(tLineCollection)^);
  42.     Load    : @tLineCollection.Load;
  43.     Store   : @tLineCollection.Store);
  44.  
  45.   rFileViewer : tStreamRec = (
  46.     ObjType : 10110;
  47.     VmtLink : Ofs(TypeOf(tFileViewer)^);
  48.     Load    : @tFileViewer.Load;
  49.     Store   : @tFileViewer.Store);
  50.  
  51.   rFileWindow : tStreamRec = (
  52.     ObjType : 10120;
  53.     VmtLink : Ofs(TypeOf(tFileWindow)^);
  54.     Load    : @tFileWindow.Load;
  55.     Store   : @tFileViewer.Store);
  56.  
  57.   PROCEDURE RegisterBrowser;
  58.  
  59. IMPLEMENTATION
  60.  
  61.   PROCEDURE tLineCollection.FreeItem(P : Pointer);
  62.   BEGIN
  63.     DisposeStr(P);
  64.   END;
  65.  
  66.   CONSTRUCTOR tFileViewer.Init(VAR Bounds                   : tRect;
  67.                                    aHScrollBar, aVScrollBar : pScrollBar;
  68.                                VAR FileName                 : PathStr);
  69.   VAR
  70.     FileToView : Text;
  71.     Line       : STRING;
  72.     MaxWidth   : INTEGER;
  73.   BEGIN
  74.     inherited Init(Bounds, aHScrollBar, aVScrollBar);
  75.     IsValid := TRUE;
  76.     FileLines := New(pLineCollection, Init(5, 5));
  77.   {$I-}
  78.     Assign(FileToView, FileName);
  79.     Reset(FileToView);
  80.     IF IOResult <> 0 THEN BEGIN
  81.       MessageBox('Cannot open file ' + FileName + '.',
  82.                  NIL, mfError + mfOkButton);
  83.       IsValid := FALSE;
  84.     END ELSE BEGIN
  85.       MaxWidth := 0;
  86.       WHILE NOT EoF(FileToView) AND NOT LowMemory DO BEGIN
  87.         ReadLn(FileToView, Line);
  88.         IF Length(Line) > MaxWidth THEN
  89.           MaxWidth := Length(Line);
  90.         FileLines^.Insert(NewStr(Line));
  91.       END;
  92.       Close(FileToView);
  93.     END;
  94.   {$I+}
  95.     SetLimit(MaxWidth, FileLines^.Count);
  96.   END;
  97.  
  98.   DESTRUCTOR tFileViewer.Done;
  99.   BEGIN
  100.     Dispose(FileLines, Done);
  101.     inherited Done;
  102.   END;
  103.  
  104.   PROCEDURE tFileViewer.Draw;
  105.   VAR
  106.     B : tDrawBuffer;
  107.     C : BYTE;
  108.     I : INTEGER;
  109.     S : STRING;
  110.     P : pSTRING;
  111.   BEGIN
  112.     C := GetColor(1);
  113.     FOR i := 0 TO Size.y - 1 DO BEGIN
  114.       MoveChar(B, ' ', C, Size.X);
  115.       IF Delta.Y + i < FileLines^.Count THEN BEGIN
  116.         P := FileLines^.At(Delta.Y + i);
  117.         IF P <> NIL THEN
  118.           S := Copy(P^, Delta.X + 1, Size.X)
  119.         ELSE
  120.           S := '';
  121.         MoveStr(B, S, C);
  122.       END;
  123.       WriteLine(0, i, Size.X, 1, B);
  124.     END;
  125.   END;
  126.  
  127.   FUNCTION tFileViewer.Valid(Command : WORD) : BOOLEAN;
  128.   BEGIN
  129.     Valid := IsValid;
  130.   END;
  131.  
  132.   CONSTRUCTOR tFileWindow.Init(Bounds : tRect; VAR FileName : PathStr);
  133.   VAR
  134.     R : tRect;
  135.   BEGIN
  136.     inherited Init(Bounds, FileName, wnNoNumber);
  137.     Options := Options OR ofTileable;
  138.     GetExtent(R);
  139.     R.Grow(-1, -1);
  140.     Insert(New(pFileViewer, Init(R,
  141.       StandardScrollBar(sbHorizontal + sbHandleKeyboard),
  142.       StandardScrollBar(sbVertical   + sbHandleKeyboard),
  143.       FileName)));
  144.   END;
  145.  
  146.   PROCEDURE RegisterBrowser;
  147.   BEGIN
  148.     RegisterType(rLineCollection);
  149.     RegisterType(rFileViewer);
  150.     RegisterType(rFileWindow);
  151.   END;
  152.  
  153. END.
  154. (* ------------------------------------------------------ *)
  155. (*               Ende von  BROWSER.PAS                    *)
  156.  
  157.  
  158.