{*******************************************************}
{ }
{ Turbo Pascal Version 7.0 }
{ Turbo Vision Unit }
{ }
{ Copyright (c) 1992 Borland International }
{ }
{*******************************************************}
{$PureInt+}
unit Outline;
{$X+,I-,S-,R-,Cdecl-}
interface
uses Objects, Drivers, Views, Use32;
const
ovExpanded = $01;
ovChildren = $02;
ovLast = $04;
const
cmOutlineItemSelected = 301;
const
COutlineViewer = CScroller + #8#8;
type
{ TOutlineViewer object }
{ Palette layout }
{ 1 = Normal color }
{ 2 = Focus color }
{ 3 = Select color }
{ 4 = Not expanded color }
POutlineViewer = ^TOutlineViewer;
TOutlineViewer = object(TScroller)
Foc: Integer;
constructor Init(var Bounds: TRect; AHScrollBar,
AVScrollBar: PScrollBar);
constructor Load(var S: TStream);
procedure Adjust(Node: Pointer; Expand: Boolean); virtual;
function CreateGraph(Level: Integer; Lines: LongInt; Flags: Word;
LevWidth, EndWidth: Integer; const Chars: String): String;
procedure Draw; virtual;
procedure ExpandAll(Node: Pointer);
function FirstThat(Test: Pointer): Pointer;
procedure Focused(I: Integer); virtual;
function ForEach(Action: Pointer): Pointer;
function GetChild(Node: Pointer; I: Integer): Pointer; virtual;
function GetGraph(Level: Integer; Lines: LongInt; Flags: Word): String; virtual;
function GetNumChildren(Node: Pointer): Integer; virtual;
function GetNode(I: Integer): Pointer;
function GetPalette: PPalette; virtual;
function GetRoot: Pointer; virtual;
function GetText(Node: Pointer): String; virtual;
procedure HandleEvent(var Event: TEvent); virtual;
function HasChildren(Node: Pointer): Boolean; virtual;
function IsExpanded(Node: Pointer): Boolean; virtual;
function IsSelected(I: Integer): Boolean; virtual;
procedure Selected(I: Integer); virtual;
procedure SetState(AState: Word; Enable: Boolean); virtual;
procedure Store(var S: TStream);
procedure Update;
private
procedure AdjustFocus(NewFocus: Integer);
function Iterate(Action: Pointer; CallerFrame: Word;
CheckRslt: Boolean): Pointer;
end;
{ TNode }
PNode = ^TNode;
TNode = record
Next: PNode;
Text: PString;
ChildList: PNode;
Expanded: Boolean;
end;
{ TOutline object }
{ Palette layout }
{ 1 = Normal color }
{ 2 = Focus color }
{ 3 = Select color }
POutline = ^TOutline;
TOutline = object(TOutlineViewer)
Root: PNode;
constructor Init(var Bounds: TRect; AHScrollBar,
AVScrollBar: PScrollBar; ARoot: PNode);
constructor Load(var S: TStream);
destructor Done; virtual;
procedure Adjust(Node: Pointer; Expand: Boolean); virtual;
function GetRoot: Pointer; virtual;
function GetNumChildren(Node: Pointer): Integer; virtual;
function GetChild(Node: Pointer; I: Integer): Pointer; virtual;
function GetText(Node: Pointer): String; virtual;
function IsExpanded(Node: Pointer): Boolean; virtual;
function HasChildren(Node: Pointer): Boolean; virtual;
procedure Store(var S: TStream);
end;
const
ROutline: TStreamRec = (
ObjType: 91;
VmtLink: Ofs(TypeOf(TOutline)^);
Load: @TOutline.Load;
Store: @TOutline.Store
);
procedure RegisterOutline;
function NewNode(const AText: String; AChildren, ANext: PNode): PNode;
procedure DisposeNode(Node: PNode);
implementation
end.