home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sibylft1.zip / DOC.DAT / DOC / SPCC / OUTLINE.PAS < prev    next >
Pascal/Delphi Source File  |  1997-04-07  |  13KB  |  311 lines

  1.  
  2. {╔══════════════════════════════════════════════════════════════════════════╗
  3.  ║                                                                          ║
  4.  ║     Sibyl Portable Component Classes                                     ║
  5.  ║                                                                          ║
  6.  ║     Copyright (c) 1995,97 SpeedSoft Germany,   All rights reserved.      ║
  7.  ║                                                                          ║
  8.  ╚══════════════════════════════════════════════════════════════════════════╝}
  9.  
  10. UNIT Outline;
  11.  
  12.  
  13. INTERFACE
  14.  
  15. {$IFDEF OS2}
  16. USES OS2Def,PmWin,PmStdDlg;
  17. {$ENDIF}
  18.  
  19. {$IFDEF Win95}
  20. USES WinDef,WinUser,WinGDI,CommCtrl;
  21. {$ENDIF}
  22.  
  23. USES Messages,SysUtils,Classes,Forms,Graphics;
  24.  
  25.  
  26. CONST
  27.     InvalidIndex = {MaxLongInt;} -1;
  28.     TAB = chr(9);
  29.  
  30. TYPE
  31.     TAttachMode = (oaAdd, oaAddChild, oaInsert);
  32.  
  33.  
  34. TYPE
  35.     EOutlineError=CLASS(Exception);
  36.     EOutlineNodeError=CLASS(EOutlineError);
  37.     EOutlineIndexError=CLASS(EOutlineError);
  38.  
  39.     TOutline=CLASS;
  40.     TOutlineNode=CLASS;
  41.  
  42.     POutlineRecord=^TOutlineRecord;
  43.     TOutlineRecord=RECORD
  44.          {$IFDEF OS2}
  45.          RecordCore:RECORDCORE;
  46.          {$ENDIF}
  47.          {$IFDEF Win95}
  48.          RecordCore:TV_ITEM;
  49.          {$ENDIF}
  50.          Node:TOutlineNode;  {extra data}
  51.     END;
  52.  
  53.  
  54.     TOutlineNode=CLASS
  55.       PRIVATE
  56.          FTreeRec:POutlineRecord;
  57.          FCaption:PChar;
  58.          FData:POINTER;
  59.          FIndex:LONGINT;
  60.          FExpanded:BOOLEAN;
  61.          FParent:TOutlineNode;
  62.          FOutline:TOutline;
  63.          FSubNodes:TList;
  64.          FPictureLeaf:TBitmap;
  65.          FPictureOpen:TBitmap;
  66.          FPictureClosed:TBitmap;
  67.          FUNCTION GetCaption:STRING;
  68.          PROCEDURE SetCaption(NewCaption:STRING);
  69.          FUNCTION Index2Node(idx:LONGINT):TOutlineNode;
  70.          FUNCTION GetNode(idx:LONGINT):TOutlineNode;
  71.          FUNCTION GetNodeCount:LONGINT;
  72.          FUNCTION InsertNode(OldNode,NewNode:TOutlineNode):LONGINT;
  73.          FUNCTION AddNode(NewNode:TOutlineNode):LONGINT;
  74.          PROCEDURE Setup(RecordOrder:POINTER);
  75.          FUNCTION HasChildren:BOOLEAN;
  76.          FUNCTION GetLastIndex:LONGINT;
  77.          FUNCTION GetTopItem:LONGINT;
  78.          FUNCTION ReIndex(idx,max:LONGINT):LONGINT;
  79.          FUNCTION HasVisibleParent:BOOLEAN;
  80.          FUNCTION GetVisibleParent:TOutlineNode;
  81.          FUNCTION GetFullPath:STRING;
  82.          FUNCTION GetLevel:LONGINT;
  83.          FUNCTION GetList:TList;
  84.          PROCEDURE SetLastValidIndex;
  85.          FUNCTION GetDataItem(Value:POINTER):LONGINT;
  86.          FUNCTION GetTextItem(CONST Value:STRING):LONGINT;
  87.          PROCEDURE ClearSubNodes;
  88.          PROCEDURE SetExpanded(Value:BOOLEAN);
  89.          PROCEDURE UpdatePicture;
  90.          PROCEDURE UpdateChildPictures;
  91.          PROCEDURE SetPictureLeaf(NewBitmap:TBitmap);
  92.          PROCEDURE SetPictureOpen(NewBitmap:TBitmap);
  93.          PROCEDURE SetPictureClosed(NewBitmap:TBitmap);
  94.       PROTECTED
  95.          CONSTRUCTOR Create(Owner:TOutline);
  96.          PROPERTY Outline:TOutline read FOutline;
  97.          PROPERTY List:TList read GetList;
  98.          PROPERTY Items[Index:LONGINT]:TOutlineNode read GetNode;
  99.          PROPERTY ItemCount:LONGINT read GetNodeCount;
  100.       PUBLIC
  101.          DESTRUCTOR Destroy;OVERRIDE;
  102.          PROCEDURE FullExpand;
  103.          PROCEDURE FullCollapse;
  104.          PROCEDURE Expand;
  105.          PROCEDURE Collapse;
  106.          PROCEDURE Clear;
  107.          FUNCTION GetFirstChild:LONGINT;
  108.          FUNCTION GetLastChild:LONGINT;
  109.          FUNCTION GetNextChild(Value:LONGINT):LONGINT;
  110.          FUNCTION GetPrevChild(Value:LONGINT):LONGINT;
  111.          PROPERTY Text:STRING read GetCaption write SetCaption;
  112.          PROPERTY Data:POINTER read FData write FData;
  113.          PROPERTY Parent:TOutlineNode read FParent;
  114.          PROPERTY Index:LONGINT read FIndex;
  115.          PROPERTY IsVisible:BOOLEAN read HasVisibleParent;
  116.          PROPERTY HasItems:BOOLEAN read HasChildren;
  117.          PROPERTY Level:LONGINT read GetLevel;
  118.          PROPERTY Expanded:BOOLEAN read FExpanded write SetExpanded;
  119.          PROPERTY FullPath:STRING read GetFullPath;
  120.          PROPERTY TopItem:LONGINT read GetTopItem;
  121.          PROPERTY PictureLeaf:TBitmap read FPictureLeaf write SetPictureLeaf;
  122.          PROPERTY PictureClosed:TBitmap read FPictureClosed write SetPictureClosed;
  123.          PROPERTY PictureOpen:TBitmap read FPictureOpen write SetPictureOpen;
  124.     END;
  125.     TOutlineNodeClass = CLASS OF TOutlineNode;
  126.  
  127.  
  128. {$M+}
  129.     TOutLineItemFocusEvent=PROCEDURE(Sender:TObject;Index:LONGINT) OF OBJECT;
  130.     TOutLineItemSelectEvent=PROCEDURE(Sender:TObject;Index:LONGINT) OF OBJECT;
  131.     TOutlineChangeEvent=PROCEDURE(Sender:TObject;Index:LONGINT) OF OBJECT;
  132. {$M-}
  133.  
  134.     TOutline=CLASS(TControl)
  135.       PRIVATE
  136.          FLines:TStrings;
  137.          FInitLines:TStringList;
  138.          FNodeClass:TOutlineNodeClass;
  139.          FRootNode:TOutlineNode;
  140.          FGoodNode:TOutlineNode;
  141.          FUpdateCount:LONGINT;
  142.          FSeparator:STRING;
  143.          FCurItem:TOutlineNode;
  144.          FStrings:TStrings;
  145.          FBorderStyle:TBorderStyle;
  146.          FPictureList:TBitmapList;
  147.          FPictureOpen:TBitmap;
  148.          FPictureClosed:TBitmap;
  149.          FPictureLeaf:TBitmap;
  150.          FInitNodes:TList;
  151.          FPlusMinusSize:TSize;
  152.          FPictureSize:TSize;
  153.          FShowTreeLines:BOOLEAN;
  154.          FShowPlusMinus:BOOLEAN;
  155.          FTreeLineWidth:LONGINT;
  156.          FTreeIndent:LONGINT;
  157.          FLineSpacing:LONGINT;
  158.          FIndexInsert:BOOLEAN;
  159.          FDragging:BOOLEAN;
  160.          FFocusNode:TOutlineNode;
  161.          FPopupPos:TPoint;
  162.          {$IFDEF Win95}
  163.          FHim:HIMAGELIST;
  164.          FSelItem:POINTER;
  165.          {$ENDIF}
  166.          FOnExpand:TOutlineChangeEvent;
  167.          FOnCollapse:TOutlineChangeEvent;
  168.          FOnItemFocus:TOutlineItemFocusEvent;
  169.          FOnItemSelect:TOutlineItemSelectEvent;
  170.          {$IFDEF OS2}
  171.          PROCEDURE WMPaint(VAR Msg:TMessage);message WM_PAINT;
  172.          {$ENDIF}
  173.          FUNCTION AddPicture(NewBitmap:TBitmap):TBitmap;
  174.          PROCEDURE SetBorderStyle(NewBorder:TBorderStyle);
  175.          PROCEDURE SetPlusMinusSize(NewSize:TSize);
  176.          PROCEDURE SetPictureSize(NewSize:TSize);
  177.          PROCEDURE UpdateNode(Node:TOutlineNode);
  178.          PROCEDURE SetCnrInfo;
  179.          PROCEDURE SetShowTreeLines(NewValue:BOOLEAN);
  180.          PROCEDURE SetShowPlusMinus(NewValue:BOOLEAN);
  181.          PROCEDURE SetTreeLineWidth(NewValue:LONGINT);
  182.          PROCEDURE SetTreeIndent(Value:LONGINT);
  183.          PROCEDURE SetLineSpacing(Value:LONGINT);
  184.          PROCEDURE SetupTree;
  185.          PROCEDURE SetupImageList;
  186.          PROCEDURE SetupSubNodes(Node:TOutlineNode);
  187.          FUNCTION GetSelectedNode:TOutlineNode;
  188.          PROCEDURE SetSelectedNode(NewSelected:TOutlineNode);
  189.          FUNCTION GetSelectedItem:LONGINT;
  190.          PROCEDURE SetSelectedItem(NewSelected:LONGINT);
  191.          FUNCTION GetPictureClosed:TBitmap;
  192.          PROCEDURE SetPictureClosed(NewBitmap:TBitmap);
  193.          FUNCTION GetPictureOpen:TBitmap;
  194.          PROCEDURE SetPictureOpen(NewBitmap:TBitmap);
  195.          FUNCTION GetPictureLeaf:TBitmap;
  196.          PROCEDURE SetPictureLeaf(NewBitmap:TBitmap);
  197.          FUNCTION Attach(idx:LONGINT;CONST Text:STRING;Data:POINTER;Mode:TAttachMode):LONGINT;
  198.          FUNCTION Get(idx:LONGINT):TOutlineNode;
  199.          FUNCTION GetItemCount:LONGINT;
  200.          PROCEDURE SetGoodNode(Node:TOutlineNode);
  201.          FUNCTION GetLines:TStrings;
  202.          PROCEDURE SetLines(AStrings:TStrings);
  203.       PROTECTED
  204.          PROCEDURE GetClassData(VAR ClassData:TClassData);OVERRIDE;
  205.          PROCEDURE CreateParams(VAR Params:TCreateParams);OVERRIDE;
  206.          PROCEDURE SetupComponent;OVERRIDE;
  207.          {$IFDEF OS2}
  208.          PROCEDURE SetupShow;OVERRIDE;
  209.          {$ENDIF}
  210.          PROCEDURE DestroyWnd;OVERRIDE;
  211.          PROCEDURE ParentNotification(VAR Msg:TMessage);OVERRIDE;
  212.          PROCEDURE ItemFocus(Index:LONGINT);VIRTUAL;
  213.          PROCEDURE ItemSelect(Index:LONGINT);VIRTUAL;
  214.          PROCEDURE ScanEvent(VAR Msg:TWMChar;VAR KeyCode:TKeyCode;RepeatCount:BYTE);OVERRIDE;
  215.          PROCEDURE MouseDown(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
  216.          PROCEDURE MouseMove(ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
  217.          PROCEDURE MouseUp(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
  218.          PROCEDURE MouseClick(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
  219.          FUNCTION AttachNode(Node:TOutlineNode;CONST Text:STRING;Data:POINTER;Mode:TAttachMode):TOutlineNode;
  220.          PROCEDURE IndexError;VIRTUAL;
  221.          PROCEDURE NodeError;VIRTUAL;
  222.          PROCEDURE ItemChanged(VAR Msg:TMessage;Expanded:BOOLEAN);VIRTUAL;
  223.       PUBLIC
  224.          DESTRUCTOR Destroy;OVERRIDE;
  225.          PROCEDURE BeginUpdate;
  226.          PROCEDURE EndUpdate;
  227.          FUNCTION Add(Index:LONGINT;CONST Text:STRING):LONGINT;
  228.          FUNCTION AddObject(Index:LONGINT;CONST Text:STRING;Data:POINTER):LONGINT;
  229.          FUNCTION AddChild(Index:LONGINT;CONST Text:STRING):LONGINT;
  230.          FUNCTION AddChildObject(Index:LONGINT;CONST Text:STRING;Data:POINTER):LONGINT;
  231.          FUNCTION Insert(Index:LONGINT;CONST Text:STRING):LONGINT;
  232.          FUNCTION InsertObject(Index:LONGINT;CONST Text:STRING;Data:POINTER):LONGINT;
  233.          PROCEDURE Delete(Index:LONGINT);
  234.          PROCEDURE FullExpand;
  235.          PROCEDURE FullCollapse;
  236.          FUNCTION GetDataItem(Value:POINTER):LONGINT;
  237.          FUNCTION GetTextItem(CONST Value:STRING):LONGINT;
  238.          PROCEDURE Clear;
  239.          PROCEDURE ReadSCUResource(CONST ResName:TResourceName;VAR Data;DataLen:LONGINT);OVERRIDE;
  240.          FUNCTION WriteSCUResource(Stream:TResourceStream):BOOLEAN;OVERRIDE;
  241.          PROPERTY NodeClass:TOutlineNodeClass read FNodeClass write FNodeClass;
  242.          PROPERTY SelectedNode:TOutlineNode read GetSelectedNode write SetSelectedNode;
  243.          PROPERTY SelectedItem:LONGINT read GetSelectedItem write SetSelectedItem;
  244.          PROPERTY Items[Index:LONGINT]:TOutlineNode read Get; default;
  245.          PROPERTY ItemCount:LONGINT read GetItemCount;
  246.          PROPERTY ItemSeparator:STRING read FSeparator write FSeparator;
  247.          PROPERTY XAlign;
  248.          PROPERTY XStretch;
  249.          PROPERTY YAlign;
  250.          PROPERTY YStretch;
  251.       PUBLISHED
  252.          PROPERTY Align;
  253.          PROPERTY Color;
  254.          PROPERTY BorderStyle:TBorderStyle read FBorderStyle write SetBorderStyle;
  255.          PROPERTY PenColor;
  256.          PROPERTY DragCursor;
  257.          PROPERTY DragMode;
  258.          PROPERTY Enabled;
  259.          PROPERTY Font;
  260.          PROPERTY Lines:TStrings read GetLines write SetLines;
  261.          PROPERTY LineSpacing:LONGINT read FLineSpacing write SetLineSpacing;
  262.          PROPERTY ParentColor;
  263.          PROPERTY ParentPenColor;
  264.          PROPERTY ParentFont;
  265.          PROPERTY ParentShowHint;
  266.          PROPERTY PictureClosed:TBitmap read GetPictureClosed write SetPictureClosed;
  267.          PROPERTY PictureLeaf:TBitmap read GetPictureLeaf write SetPictureLeaf;
  268.          PROPERTY PictureOpen:TBitmap read GetPictureOpen write SetPictureOpen;
  269.          PROPERTY PictureSize:TSize read FPictureSize write SetPictureSize;
  270.          PROPERTY PlusMinusSize:TSize read FPlusMinusSize write SetPlusMinusSize;
  271.          {Rene}
  272.          PROPERTY PopupMenu;
  273.          PROPERTY ShowHint;
  274.          PROPERTY ShowPlusMinus:BOOLEAN read FShowPlusMinus write SetShowPlusMinus;
  275.          PROPERTY ShowTreeLines:BOOLEAN read FShowTreeLines write SetShowTreeLines;
  276.          PROPERTY TabOrder;
  277.          PROPERTY TabStop;
  278.          PROPERTY TreeIndent:LONGINT read FTreeIndent write SetTreeIndent;
  279.          PROPERTY TreeLineWidth:LONGINT read FTreeLineWidth write SetTreeLineWidth;
  280.          PROPERTY Visible;
  281.          PROPERTY ZOrder;
  282.  
  283.          PROPERTY OnCanDrag;
  284.          PROPERTY OnCollapse:TOutlineChangeEvent read FOnCollapse write FOnCollapse;
  285.          {Rene}
  286.          PROPERTY OnDblClick;
  287.          PROPERTY OnDragDrop;
  288.          PROPERTY OnDragOver;
  289.          PROPERTY OnEndDrag;
  290.          PROPERTY OnEnter;
  291.          PROPERTY OnExit;
  292.          PROPERTY OnExpand:TOutlineChangeEvent read FOnExpand write FOnExpand;
  293.          PROPERTY OnFontChange;
  294.          PROPERTY OnItemFocus:TOutlineItemFocusEvent read FOnItemFocus write FOnItemFocus;
  295.          PROPERTY OnItemSelect:TOutlineItemSelectEvent read FOnItemSelect write FOnItemSelect;
  296.          PROPERTY OnMouseClick;
  297.          PROPERTY OnMouseDblClick;
  298.          PROPERTY OnMouseDown;
  299.          PROPERTY OnMouseMove;
  300.          PROPERTY OnMouseUp;
  301.          PROPERTY OnSetupShow;
  302.          PROPERTY OnStartDrag;
  303.     END;
  304.  
  305.  
  306. FUNCTION InsertOutline(Parent:TControl;Left,Bottom,Width,Height:LONGINT;Hint:STRING):TOutline;
  307.  
  308.  
  309. IMPLEMENTATION
  310.  
  311.