home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l044 / 2.ddi / INTRFACE.ZIP / VIEWS.INT < prev   
Encoding:
Text File  |  1990-10-23  |  14.5 KB  |  559 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Turbo Pascal Version 6.0                        }
  5. {       Turbo Vision Unit                               }
  6. {                                                       }
  7. {       Copyright (c) 1990 Borland International        }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit Views;
  12.  
  13. {$F+,O+,S-,X+}
  14.  
  15. interface
  16.  
  17. uses Objects, Drivers, Memory;
  18.  
  19. const
  20.  
  21. { TView State masks }
  22.  
  23.   sfVisible     = $0001;
  24.   sfCursorVis   = $0002;
  25.   sfCursorIns   = $0004;
  26.   sfShadow      = $0008;
  27.   sfActive      = $0010;
  28.   sfSelected    = $0020;
  29.   sfFocused     = $0040;
  30.   sfDragging    = $0080;
  31.   sfDisabled    = $0100;
  32.   sfModal       = $0200;
  33.   sfDefault     = $0400;
  34.   sfExposed     = $0800;
  35.  
  36. { TView Option masks }
  37.  
  38.   ofSelectable  = $0001;
  39.   ofTopSelect   = $0002;
  40.   ofFirstClick  = $0004;
  41.   ofFramed      = $0008;
  42.   ofPreProcess  = $0010;
  43.   ofPostProcess = $0020;
  44.   ofBuffered    = $0040;
  45.   ofTileable    = $0080;
  46.   ofCenterX     = $0100;
  47.   ofCenterY     = $0200;
  48.   ofCentered    = $0300;
  49.  
  50. { TView GrowMode masks }
  51.  
  52.   gfGrowLoX = $01;
  53.   gfGrowLoY = $02;
  54.   gfGrowHiX = $04;
  55.   gfGrowHiY = $08;
  56.   gfGrowAll = $0F;
  57.   gfGrowRel = $10;
  58.  
  59. { TView DragMode masks }
  60.  
  61.   dmDragMove = $01;
  62.   dmDragGrow = $02;
  63.   dmLimitLoX = $10;
  64.   dmLimitLoY = $20;
  65.   dmLimitHiX = $40;
  66.   dmLimitHiY = $80;
  67.   dmLimitAll = $F0;
  68.  
  69. { TView Help context codes }
  70.  
  71.   hcNoContext = 0;
  72.   hcDragging  = 1;
  73.  
  74. { TScrollBar part codes }
  75.  
  76.   sbLeftArrow  = 0;
  77.   sbRightArrow = 1;
  78.   sbPageLeft   = 2;
  79.   sbPageRight  = 3;
  80.   sbUpArrow    = 4;
  81.   sbDownArrow  = 5;
  82.   sbPageUp     = 6;
  83.   sbPageDown   = 7;
  84.   sbIndicator  = 8;
  85.  
  86. { TScrollBar options for TWindow.StandardScrollBar }
  87.  
  88.   sbHorizontal     = $0000;
  89.   sbVertical       = $0001;
  90.   sbHandleKeyboard = $0002;
  91.  
  92. { TWindow Flags masks }
  93.  
  94.   wfMove  = $01;
  95.   wfGrow  = $02;
  96.   wfClose = $04;
  97.   wfZoom  = $08;
  98.  
  99. { TWindow number constants }
  100.  
  101.   wnNoNumber = 0;
  102.  
  103. { TWindow palette entries }
  104.  
  105.   wpBlueWindow = 0;
  106.   wpCyanWindow = 1;
  107.   wpGrayWindow = 2;
  108.  
  109. { Standard command codes }
  110.  
  111.   cmValid   = 0;
  112.   cmQuit    = 1;
  113.   cmError   = 2;
  114.   cmMenu    = 3;
  115.   cmClose   = 4;
  116.   cmZoom    = 5;
  117.   cmResize  = 6;
  118.   cmNext    = 7;
  119.   cmPrev    = 8;
  120.   cmHelp    = 9;
  121.  
  122. { Application command codes }
  123.  
  124.   cmCut     = 20;
  125.   cmCopy    = 21;
  126.   cmPaste   = 22;
  127.   cmUndo    = 23;
  128.   cmClear   = 24;
  129.   cmTile    = 25;
  130.   cmCascade = 26;
  131.  
  132. { TDialog standard commands }
  133.  
  134.   cmOK      = 10;
  135.   cmCancel  = 11;
  136.   cmYes     = 12;
  137.   cmNo      = 13;
  138.   cmDefault = 14;
  139.  
  140. { Standard messages }
  141.  
  142.   cmReceivedFocus     = 50;
  143.   cmReleasedFocus     = 51;
  144.   cmCommandSetChanged = 52;
  145.  
  146. { TScrollBar messages }
  147.  
  148.   cmScrollBarChanged  = 53;
  149.   cmScrollBarClicked  = 54;
  150.  
  151. { TWindow select messages }
  152.  
  153.   cmSelectWindowNum   = 55;
  154.  
  155. { TListViewer messages }
  156.  
  157.   cmListItemSelected  = 56;
  158.  
  159. { Color palettes }
  160.  
  161.   CFrame      = #1#1#2#2#3;
  162.   CScrollBar  = #4#5#5;
  163.   CScroller   = #6#7;
  164.   CListViewer = #26#26#27#28#29;
  165.   CBlueWindow = #8#9#10#11#12#13#14#15;
  166.   CCyanWindow = #16#17#18#19#20#21#22#23;
  167.   CGrayWindow = #24#25#26#27#28#29#30#31;
  168.  
  169. { TDrawBuffer maximum view width }
  170.  
  171.   MaxViewWidth = 132;
  172.  
  173. type
  174.  
  175. { Command sets }
  176.  
  177.   PCommandSet = ^TCommandSet;
  178.   TCommandSet = set of Byte;
  179.  
  180. { Color palette type }
  181.  
  182.   PPalette = ^TPalette;
  183.   TPalette = String;
  184.  
  185. { TDrawBuffer, buffer used by draw methods }
  186.  
  187.   TDrawBuffer = array[0..MaxViewWidth - 1] of Word;
  188.  
  189. { TView object Pointer }
  190.  
  191.   PView = ^TView;
  192.  
  193. { TGroup object Pointer }
  194.  
  195.   PGroup = ^TGroup;
  196.  
  197. { TView object }
  198.  
  199.   TView = object(TObject)
  200.     Owner: PGroup;
  201.     Next: PView;
  202.     Origin: TPoint;
  203.     Size: TPoint;
  204.     Cursor: TPoint;
  205.     GrowMode: Byte;
  206.     DragMode: Byte;
  207.     HelpCtx: Word;
  208.     State: Word;
  209.     Options: Word;
  210.     EventMask: Word;
  211.     constructor Init(var Bounds: TRect);
  212.     constructor Load(var S: TStream);
  213.     destructor Done; virtual;
  214.     procedure BlockCursor;
  215.     procedure CalcBounds(var Bounds: TRect; Delta: TPoint); virtual;
  216.     procedure ChangeBounds(var Bounds: TRect); virtual;
  217.     procedure ClearEvent(var Event: TEvent);
  218.     function CommandEnabled(Command: Word): Boolean;
  219.     function DataSize: Word; virtual;
  220.     procedure DisableCommands(Commands: TCommandSet);
  221.     procedure DragView(Event: TEvent; Mode: Byte;
  222.       var Limits: TRect; MinSize, MaxSize: TPoint);
  223.     procedure Draw; virtual;
  224.     procedure DrawView;
  225.     procedure EnableCommands(Commands: TCommandSet);
  226.     procedure EndModal(Command: Word); virtual;
  227.     function EventAvail: Boolean;
  228.     function Execute: Word; virtual;
  229.     function Exposed: Boolean;
  230.     procedure GetBounds(var Bounds: TRect);
  231.     procedure GetClipRect(var Clip: TRect);
  232.     function GetColor(Color: Word): Word;
  233.     procedure GetCommands(var Commands: TCommandSet);
  234.     procedure GetData(var Rec); virtual;
  235.     procedure GetEvent(var Event: TEvent); virtual;
  236.     procedure GetExtent(var Extent: TRect);
  237.     function GetHelpCtx: Word; virtual;
  238.     function GetPalette: PPalette; virtual;
  239.     procedure GetPeerViewPtr(var S: TStream; var P);
  240.     function GetState(AState: Word): Boolean;
  241.     procedure GrowTo(X, Y: Integer);
  242.     procedure HandleEvent(var Event: TEvent); virtual;
  243.     procedure Hide;
  244.     procedure HideCursor;
  245.     procedure KeyEvent(var Event: TEvent);
  246.     procedure Locate(var Bounds: TRect);
  247.     procedure MakeFirst;
  248.     procedure MakeGlobal(Source: TPoint; var Dest: TPoint);
  249.     procedure MakeLocal(Source: TPoint; var Dest: TPoint);
  250.     function MouseEvent(var Event: TEvent; Mask: Word): Boolean;
  251.     function MouseInView(Mouse: TPoint): Boolean;
  252.     procedure MoveTo(X, Y: Integer);
  253.     function NextView: PView;
  254.     procedure NormalCursor;
  255.     function Prev: PView;
  256.     function PrevView: PView;
  257.     procedure PutEvent(var Event: TEvent); virtual;
  258.     procedure PutInFrontOf(Target: PView);
  259.     procedure PutPeerViewPtr(var S: TStream; P: PView);
  260.     procedure Select;
  261.     procedure SetBounds(var Bounds: TRect);
  262.     procedure SetCommands(Commands: TCommandSet);
  263.     procedure SetCursor(X, Y: Integer);
  264.     procedure SetData(var Rec); virtual;
  265.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  266.     procedure Show;
  267.     procedure ShowCursor;
  268.     procedure SizeLimits(var Min, Max: TPoint); virtual;
  269.     procedure Store(var S: TStream);
  270.     function TopView: PView;
  271.     function Valid(Command: Word): Boolean; virtual;
  272.     procedure WriteBuf(X, Y, W, H: Integer; var Buf);
  273.     procedure WriteChar(X, Y: Integer; C: Char; Color: Byte;
  274.       Count: Integer);
  275.     procedure WriteLine(X, Y, W, H: Integer; var Buf);
  276.     procedure WriteStr(X, Y: Integer; Str: String; Color: Byte);
  277.   end;
  278.  
  279. { TFrame types }
  280.  
  281.   TTitleStr = string[80];
  282.  
  283. { TFrame object }
  284.  
  285.   { Palette layout }
  286.   { 1 = Passive frame }
  287.   { 2 = Passive title }
  288.   { 3 = Active frame }
  289.   { 4 = Active title }
  290.   { 5 = Icons }
  291.  
  292.   PFrame = ^TFrame;
  293.   TFrame = object(TView)
  294.     constructor Init(var Bounds: TRect);
  295.     procedure Draw; virtual;
  296.     function GetPalette: PPalette; virtual;
  297.     procedure HandleEvent(var Event: TEvent); virtual;
  298.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  299.   end;
  300.  
  301. { ScrollBar characters }
  302.  
  303.   TScrollChars = array[0..4] of Char;
  304.  
  305. { TScrollBar object }
  306.  
  307.   { Palette layout }
  308.   { 1 = Page areas }
  309.   { 2 = Arrows }
  310.   { 3 = Indicator }
  311.  
  312.   PScrollBar = ^TScrollBar;
  313.   TScrollBar = object(TView)
  314.     Value: Integer;
  315.     Min: Integer;
  316.     Max: Integer;
  317.     PgStep: Integer;
  318.     ArStep: Integer;
  319.     constructor Init(var Bounds: TRect);
  320.     constructor Load(var S: TStream);
  321.     procedure Draw; virtual;
  322.     function GetPalette: PPalette; virtual;
  323.     procedure HandleEvent(var Event: TEvent); virtual;
  324.     procedure ScrollDraw; virtual;
  325.     function ScrollStep(Part: Integer): Integer; virtual;
  326.     procedure SetParams(AValue, AMin, AMax, APgStep, AArStep: Integer);
  327.     procedure SetRange(AMin, AMax: Integer);
  328.     procedure SetStep(APgStep, AArStep: Integer);
  329.     procedure SetValue(AValue: Integer);
  330.     procedure Store(var S: TStream);
  331.   end;
  332.  
  333. { TScroller object }
  334.  
  335.   { Palette layout }
  336.   { 1 = Normal text }
  337.   { 2 = Selected text }
  338.  
  339.   PScroller = ^TScroller;
  340.   TScroller = object(TView)
  341.     HScrollBar: PScrollBar;
  342.     VScrollBar: PScrollBar;
  343.     Delta: TPoint;
  344.     Limit: TPoint;
  345.     constructor Init(var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar);
  346.     constructor Load(var S: TStream);
  347.     procedure ChangeBounds(var Bounds: TRect); virtual;
  348.     function GetPalette: PPalette; virtual;
  349.     procedure HandleEvent(var Event: TEvent); virtual;
  350.     procedure ScrollDraw; virtual;
  351.     procedure ScrollTo(X, Y: Integer);
  352.     procedure SetLimit(X, Y: Integer);
  353.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  354.     procedure Store(var S: TStream);
  355.   end;
  356.  
  357. { TListViewer }
  358.  
  359.   { Palette layout }
  360.   { 1 = Active }
  361.   { 2 = Inactive }
  362.   { 3 = Focused }
  363.   { 4 = Selected }
  364.   { 5 = Divider }
  365.  
  366.   PListViewer = ^TListViewer;
  367.  
  368.   TListViewer = object(TView)
  369.     HScrollBar: PScrollBar;
  370.     VScrollBar: PScrollBar;
  371.     NumCols: Integer;
  372.     TopItem: Integer;
  373.     Focused: Integer;
  374.     Range: Integer;
  375.     constructor Init(var Bounds: TRect; ANumCols: Word;
  376.       AHScrollBar, AVScrollBar: PScrollBar);
  377.     constructor Load(var S: TStream);
  378.     procedure ChangeBounds(var Bounds: TRect); virtual;
  379.     procedure Draw; virtual;
  380.     procedure FocusItem(Item: Integer); virtual;
  381.     function GetPalette: PPalette; virtual;
  382.     function GetText(Item: Integer; MaxLen: Integer): String; virtual;
  383.     function IsSelected(Item: Integer): Boolean; virtual;
  384.     procedure HandleEvent(var Event: TEvent); virtual;
  385.     procedure SelectItem(Item: Integer); virtual;
  386.     procedure SetRange(ARange: Integer);
  387.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  388.     procedure Store(var S: TStream);
  389.   end;
  390.  
  391. { Video buffer }
  392.  
  393.   PVideoBuf = ^TVideoBuf;
  394.   TVideoBuf = array[0..3999] of Word;
  395.  
  396. { Selection modes }
  397.  
  398.   SelectMode = (NormalSelect, EnterSelect, LeaveSelect);
  399.  
  400. { TGroup object }
  401.  
  402.   TGroup = object(TView)
  403.     Last: PView;
  404.     Current: PView;
  405.     Phase: (phFocused, phPreProcess, phPostProcess);
  406.     Buffer: PVideoBuf;
  407.     constructor Init(var Bounds: TRect);
  408.     constructor Load(var S: TStream);
  409.     destructor Done; virtual;
  410.     procedure ChangeBounds(var Bounds: TRect); virtual;
  411.     function DataSize: Word; virtual;
  412.     procedure Delete(P: PView);
  413.     procedure Draw; virtual;
  414.     procedure EndModal(Command: Word); virtual;
  415.     procedure EventError(var Event: TEvent); virtual;
  416.     function ExecView(P: PView): Word;
  417.     function Execute: Word; virtual;
  418.     function First: PView;
  419.     function FirstThat(P: Pointer): PView;
  420.     procedure ForEach(P: Pointer);
  421.     procedure GetData(var Rec); virtual;
  422.     function GetHelpCtx: Word; virtual;
  423.     procedure GetSubViewPtr(var S: TStream; var P);
  424.     procedure HandleEvent(var Event: TEvent); virtual;
  425.     procedure Insert(P: PView);
  426.     procedure InsertBefore(P, Target: PView);
  427.     procedure Lock;
  428.     procedure PutSubViewPtr(var S: TStream; P: PView);
  429.     procedure Redraw;
  430.     procedure SelectNext(Forwards: Boolean);
  431.     procedure SetData(var Rec); virtual;
  432.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  433.     procedure Store(var S: TStream);
  434.     procedure Unlock;
  435.     function Valid(Command: Word): Boolean; virtual;
  436.   end;
  437.  
  438. { TWindow object }
  439.  
  440.   { Palette layout }
  441.   { 1 = Frame passive }
  442.   { 2 = Frame active }
  443.   { 3 = Frame icon }
  444.   { 4 = ScrollBar page area }
  445.   { 5 = ScrollBar controls }
  446.   { 6 = Scroller normal text }
  447.   { 7 = Scroller selected text }
  448.   { 8 = Reserved }
  449.  
  450.   PWindow = ^TWindow;
  451.   TWindow = object(TGroup)
  452.     Flags: Byte;
  453.     ZoomRect: TRect;
  454.     Number: Integer;
  455.     Palette: Integer;
  456.     Frame: PFrame;
  457.     Title: PString;
  458.     constructor Init(var Bounds: TRect; ATitle: TTitleStr; ANumber: Integer);
  459.     constructor Load(var S: TStream);
  460.     destructor Done; virtual;
  461.     procedure Close; virtual;
  462.     function GetPalette: PPalette; virtual;
  463.     function GetTitle(MaxSize: Integer): TTitleStr; virtual;
  464.     procedure HandleEvent(var Event: TEvent); virtual;
  465.     procedure InitFrame; virtual;
  466.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  467.     procedure SizeLimits(var Min, Max: TPoint); virtual;
  468.     function StandardScrollBar(AOptions: Word): PScrollBar;
  469.     procedure Store(var S: TStream);
  470.     procedure Zoom; virtual;
  471.   end;
  472.  
  473. { Message dispatch function }
  474.  
  475. function Message(Receiver: PView; What, Command: Word;
  476.   InfoPtr: Pointer): Pointer;
  477.  
  478. { Views registration procedure }
  479.  
  480. procedure RegisterViews;
  481.  
  482. const
  483.  
  484. { Event masks }
  485.  
  486.   PositionalEvents: Word = evMouse;
  487.   FocusedEvents: Word = evKeyboard + evCommand;
  488.  
  489. { Minimum window size }
  490.  
  491.   MinWinSize: TPoint = (X: 16; Y: 6);
  492.  
  493. { Shadow definitions }
  494.  
  495.   ShadowSize: TPoint = (X: 2; Y: 1);
  496.   ShadowAttr: Byte = $08;
  497.  
  498. { Markers control }
  499.  
  500.   ShowMarkers: Boolean = False;
  501.  
  502. { MapColor error return value }
  503.  
  504.   ErrorAttr: Byte = $CF;
  505.  
  506. { Stream Registration Records }
  507.  
  508.   RView: TStreamRec = (
  509.      ObjType: 1;
  510.      VmtLink: Ofs(TypeOf(TView)^);
  511.      Load:    @TView.Load;
  512.      Store:   @TView.Store
  513.   );
  514.   RFrame: TStreamRec = (
  515.      ObjType: 2;
  516.      VmtLink: Ofs(TypeOf(TFrame)^);
  517.      Load:    @TFrame.Load;
  518.      Store:   @TFrame.Store
  519.   );
  520.   RScrollBar: TStreamRec = (
  521.      ObjType: 3;
  522.      VmtLink: Ofs(TypeOf(TScrollBar)^);
  523.      Load:    @TScrollBar.Load;
  524.      Store:   @TScrollBar.Store
  525.   );
  526.   RScroller: TStreamRec = (
  527.      ObjType: 4;
  528.      VmtLink: Ofs(TypeOf(TScroller)^);
  529.      Load:    @TScroller.Load;
  530.      Store:   @TScroller.Store
  531.   );
  532.   RListViewer: TStreamRec = (
  533.      ObjType: 5;
  534.      VmtLink: Ofs(TypeOf(TListViewer)^);
  535.      Load:    @TListViewer.Load;
  536.      Store:   @TLIstViewer.Store
  537.   );
  538.   RGroup: TStreamRec = (
  539.      ObjType: 6;
  540.      VmtLink: Ofs(TypeOf(TGroup)^);
  541.      Load:    @TGroup.Load;
  542.      Store:   @TGroup.Store
  543.   );
  544.   RWindow: TStreamRec = (
  545.      ObjType: 7;
  546.      VmtLink: Ofs(TypeOf(TWindow)^);
  547.      Load:    @TWindow.Load;
  548.      Store:   @TWindow.Store
  549.   );
  550.  
  551. { Characters used for drawing selected and default items in  }
  552. { monochrome color sets                                      }
  553.  
  554.   SpecialChars: array[0..5] of Char = (#175, #174, #26, #27, ' ', ' ');
  555.  
  556. { True if the command set has changed since being set to false }
  557.  
  558.   CommandSetChanged: Boolean = False;
  559.