home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Doc / OUTLINE.INT < prev    next >
Text File  |  1999-08-11  |  10KB  |  268 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {                                                       }
  6. {       Copyright (c) 1995,99 Inprise Corporation       }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit Outline;
  11.  
  12. {$R-,H+,X+}
  13.  
  14. interface
  15.  
  16. {$R OUTLINE}
  17.  
  18. uses Windows, Messages, Forms, Classes, Graphics, Menus, StdCtrls, Grids,
  19.   Controls, SysUtils;
  20.  
  21. type
  22.   OutlineError = class(TObject); { Raised by GetNodeAtIndex }
  23.   EOutlineError = class(Exception);
  24.   TOutlineNodeCompare = (ocLess, ocSame, ocGreater, ocInvalid);
  25.   TAttachMode = (oaAdd, oaAddChild, oaInsert);
  26.   TChangeRange = -1..1;
  27.   TCustomOutline = class;
  28.  
  29. { TOutlineNode }
  30.  
  31. { The TOutlineNode is an encapsulation of an outliner item.  Access
  32.   to a TOutlineNode is via the container class TOutline.  Each
  33.   TOutlineNode contains user defined text and data.
  34.   An item is also capable of containing up to 16368 sub-items.
  35.   TOutlineNodes are also persistent.
  36.  
  37.   A TOutlineNode item can be interrogated about its current state :
  38.     Expanded
  39.       Whether the node is open or closed.
  40.     Index
  41.       The current Index of the node.  This changes as items are inserted and
  42.       deleted.  The index will range from 1..n
  43.     Level
  44.       The current depth of the node with 1 being the top level
  45.     HasItems
  46.       Whether the item contains items
  47.     IsVisible
  48.       Whether the item is capable of being displayed. This value is only
  49.       True if all its parent items are visible
  50.     TopItem
  51.       Obtains the parent of the item that resides at level 1
  52.     FullPath
  53.       Returns the fully qualified name of the item starting from its
  54.       level 1 parent.  Each item is separated by the separator string
  55.       specified in the TOutline Container
  56.     Text
  57.       Used to set and get the items text value
  58.     Data
  59.       Used to get and set the items data }
  60.  
  61.   TOutlineNode = class(TPersistent)
  62.   protected
  63.     function GetVisibleNode(TargetCount: LongInt): TOutlineNode;
  64.     function AddNode(Value: TOutlineNode): LongInt;
  65.     function InsertNode(Index: LongInt; Value: TOutlineNode): LongInt;
  66.     function GetNodeAtIndex(TargetIndex: LongInt): TOutlineNode;
  67.     function GetDataItem(Value: Pointer): LongInt;
  68.     function GetTextItem(const Value: string): LongInt;
  69.     function HasAsParent(Value: TOutlineNode): Boolean;
  70.     function GetRowOfNode(TargetNode: TOutlineNode;
  71.       var RowCount: Longint): Boolean;
  72.     procedure InternalRemove(Value: TOutlineNode; Index: Integer);
  73.     procedure Remove(Value: TOutlineNode);
  74.     procedure WriteNode(Buffer: PChar; Stream: TStream);
  75.     property Outline: TCustomOutline;
  76.     property List: TList;
  77.     property ExpandCount: LongInt;
  78.     property Items[Index: LongInt]: TOutlineNode; default;
  79.   public
  80.     constructor Create(AOwner: TCustomOutline);
  81.     destructor Destroy; override;
  82.     procedure ChangeLevelBy(Value: TChangeRange);
  83.     procedure Collapse;
  84.     procedure Expand;
  85.     procedure FullExpand;
  86.     function GetDisplayWidth: Integer;
  87.     function getFirstChild: LongInt;
  88.     function GetLastChild: LongInt;
  89.     function GetNextChild(Value: LongInt): LongInt;
  90.     function GetPrevChild(Value: LongInt): LongInt;
  91.     procedure MoveTo(Destination: LongInt; AttachMode: TAttachMode);
  92.     property Parent: TOutlineNode;
  93.     property Expanded: Boolean;
  94.     property Text: string;
  95.     property Data: Pointer;
  96.     property Index: LongInt;
  97.     property Level: Cardinal;
  98.     property HasItems: Boolean;
  99.     property IsVisible: Boolean;
  100.     property TopItem: Longint;
  101.     property FullPath: string;
  102.   end;
  103.  
  104. { TCustomOutline }
  105.  
  106. { The TCustomOutline object is a container class for TOutlineNodes.
  107.   All TOutlineNodes contained within a TOutline are presented
  108.   to the user as a flat array of TOutlineNodes, with a parent
  109.   TOutlineNode containing an index value that is one less than
  110.   its first child (if it has any children).
  111.  
  112.   Interaction with a TOutlineNode is typically accomplished through
  113.   the TCustomOutline using the following properties:
  114.     CurItem
  115.       Reads and writes the current item
  116.     ItemCount
  117.       Returns the total number of TOutlineNodes with the TCustomOutline.
  118.       Note this can be computationally expensive as all indexes will
  119.       be forced to be updated!!
  120.     Items
  121.       Allows Linear indexing into the hierarchical list of TOutlineNodes
  122.     SelectedItem
  123.       Returns the Index of the TOutlineNode which has the focus or 0 if
  124.       no TOutlineNode has been selected
  125.  
  126.   The TCustomOutline has a number of properties which will affect all
  127.   TOutlineNodes owned by the TCustomOutline:
  128.     OutlineStyle
  129.       Sets the visual style of the outliner
  130.     ItemSeparator
  131.       Sets the delimiting string for all TOutlineNodes
  132.     PicturePlus, PictureMinus, PictureOpen, PictureClosed, PictureLeaf
  133.       Sets custom bitmaps for these items }
  134.  
  135.   TBitmapArrayRange = 0..4;
  136.   EOutlineChange = procedure (Sender: TObject; Index: LongInt) of object;
  137.   TOutlineStyle = (osText, osPlusMinusText, osPictureText,
  138.     osPlusMinusPictureText, osTreeText, osTreePictureText);
  139.   TOutlineBitmap = (obPlus, obMinus, obOpen, obClose, obLeaf);
  140.   TOutlineBitmaps = set of TOutlineBitmap;
  141.   TBitmapArray = array[TBitmapArrayRange] of TBitmap;
  142.   TOutlineType = (otStandard, otOwnerDraw);
  143.   TOutlineOption = (ooDrawTreeRoot, ooDrawFocusRect, ooStretchBitmaps);
  144.   TOutlineOptions = set of TOutlineOption;
  145.  
  146.  
  147.   TCustomOutline = class(TCustomGrid)
  148.   protected
  149.     procedure Loaded; override;
  150.     procedure Click; override;
  151.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  152.     procedure KeyPress(var Key: Char); override;
  153.     function SetGoodIndex(Value: TOutlineNode): TOutlineNode;
  154.     procedure DrawCell(ACol, ARow: Longint; ARect: TRect;
  155.       AState: TGridDrawState); override;
  156.     procedure DblClick; override;
  157.     procedure SetLevel(Node: TOutlineNode; CurLevel, NewLevel: Cardinal);
  158.     function BadIndex(Value: TOutlineNode): Boolean;
  159.     procedure DeleteNode(Node: TOutlineNode; CurIndex: LongInt);
  160.     procedure Expand(Index: LongInt); dynamic;
  161.     procedure Collapse(Index: LongInt); dynamic;
  162.     procedure DefineProperties(Filer: TFiler); override;
  163.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  164.       X, Y: Integer); override;
  165.     procedure Move(Destination, Source: LongInt; AttachMode: TAttachMode);
  166.     procedure SetDisplayWidth(Value: Integer);
  167.     property Lines: TStrings;
  168.     property OutlineStyle: TOutlineStyle default osTreePictureText;
  169.     property OnExpand: EOutlineChange;
  170.     property OnCollapse: EOutlineChange;
  171.     property Options: TOutlineOptions default [ooDrawTreeRoot, ooDrawFocusRect];
  172.     property Style: TOutlineType default otStandard;
  173.     property ItemHeight: Integer;
  174.     property OnDrawItem: TDrawItemEvent;
  175.     property ItemSeparator: string;
  176.     property PicturePlus: TBitmap index 0;
  177.     property PictureMinus: TBitmap index 1;
  178.     property PictureOpen: TBitmap index 2;
  179.     property PictureClosed: TBitmap index 3;
  180.     property PictureLeaf: TBitmap index 4;
  181.   public
  182.     constructor Create(AOwner: TComponent); override;
  183.     destructor Destroy; override;
  184.     function Add(Index: LongInt; const Text: string): LongInt;
  185.     function AddChild(Index: LongInt; const Text: string): LongInt;
  186.     function AddChildObject(Index: LongInt; const Text: string; const Data: Pointer): LongInt;
  187.     function AddObject(Index: LongInt; const Text: string; const Data: Pointer): LongInt;
  188.     function Insert(Index: LongInt; const Text: string): LongInt;
  189.     function InsertObject(Index: LongInt; const Text: string; const Data: Pointer): LongInt;
  190.     procedure Delete(Index: LongInt);
  191.     function GetDataItem(Value: Pointer): Longint;
  192.     function GetItem(X, Y: Integer): LongInt;
  193.     function GetNodeDisplayWidth(Node: TOutlineNode): Integer;
  194.     function GetTextItem(const Value: string): Longint;
  195.     function GetVisibleNode(Index: LongInt): TOutlineNode;
  196.     procedure FullExpand;
  197.     procedure FullCollapse;
  198.     procedure LoadFromFile(const FileName: string);
  199.     procedure LoadFromStream(Stream: TStream);
  200.     procedure SaveToFile(const FileName: string);
  201.     procedure SaveToStream(Stream: TStream);
  202.     procedure BeginUpdate;
  203.     procedure EndUpdate;
  204.     procedure SetUpdateState(Value: Boolean);
  205.     procedure Clear;
  206.     property ItemCount: LongInt;
  207.     property Items[Index: LongInt]: TOutlineNode; default;
  208.     property SelectedItem: Longint;
  209.     property Row;
  210.     property Canvas;
  211.   end;
  212.  
  213.   TOutline = class(TCustomOutline)
  214.   published
  215.     property Lines;
  216.     property OutlineStyle;
  217.     property OnExpand;
  218.     property OnCollapse;
  219.     property Options;
  220.     property Style;
  221.     property ItemHeight;
  222.     property OnDrawItem;
  223.     property Align;
  224.     property Enabled;
  225.     property Font;
  226.     property Color;
  227.     property ParentColor;
  228.     property ParentCtl3D;
  229.     property Ctl3D;
  230.     property TabOrder;
  231.     property TabStop;
  232.     property Visible;
  233.     property OnClick;
  234.     property DragMode;
  235.     property DragKind;
  236.     property DragCursor;
  237.     property OnDragDrop;
  238.     property OnDragOver;
  239.     property OnEndDock;
  240.     property OnEndDrag;
  241.     property OnStartDock;
  242.     property OnStartDrag;
  243.     property OnEnter;
  244.     property OnExit;
  245.     property OnMouseDown;
  246.     property OnMouseMove;
  247.     property OnMouseUp;
  248.     property OnDblClick;
  249.     property OnKeyDown;
  250.     property OnKeyPress;
  251.     property OnKeyUp;
  252.     property BorderStyle;
  253.     property ItemSeparator;
  254.     property PicturePlus;
  255.     property PictureMinus;
  256.     property PictureOpen;
  257.     property PictureClosed;
  258.     property PictureLeaf;
  259.     property ParentFont;
  260.     property ParentShowHint;
  261.     property ShowHint;
  262.     property PopupMenu;
  263.     property ScrollBars;
  264.     property OnContextPopup;
  265.   end;
  266.  
  267. implementation
  268.