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 >
Wrap
Pascal/Delphi Source File
|
1997-04-07
|
13KB
|
311 lines
{╔══════════════════════════════════════════════════════════════════════════╗
║ ║
║ Sibyl Portable Component Classes ║
║ ║
║ Copyright (c) 1995,97 SpeedSoft Germany, All rights reserved. ║
║ ║
╚══════════════════════════════════════════════════════════════════════════╝}
UNIT Outline;
INTERFACE
{$IFDEF OS2}
USES OS2Def,PmWin,PmStdDlg;
{$ENDIF}
{$IFDEF Win95}
USES WinDef,WinUser,WinGDI,CommCtrl;
{$ENDIF}
USES Messages,SysUtils,Classes,Forms,Graphics;
CONST
InvalidIndex = {MaxLongInt;} -1;
TAB = chr(9);
TYPE
TAttachMode = (oaAdd, oaAddChild, oaInsert);
TYPE
EOutlineError=CLASS(Exception);
EOutlineNodeError=CLASS(EOutlineError);
EOutlineIndexError=CLASS(EOutlineError);
TOutline=CLASS;
TOutlineNode=CLASS;
POutlineRecord=^TOutlineRecord;
TOutlineRecord=RECORD
{$IFDEF OS2}
RecordCore:RECORDCORE;
{$ENDIF}
{$IFDEF Win95}
RecordCore:TV_ITEM;
{$ENDIF}
Node:TOutlineNode; {extra data}
END;
TOutlineNode=CLASS
PRIVATE
FTreeRec:POutlineRecord;
FCaption:PChar;
FData:POINTER;
FIndex:LONGINT;
FExpanded:BOOLEAN;
FParent:TOutlineNode;
FOutline:TOutline;
FSubNodes:TList;
FPictureLeaf:TBitmap;
FPictureOpen:TBitmap;
FPictureClosed:TBitmap;
FUNCTION GetCaption:STRING;
PROCEDURE SetCaption(NewCaption:STRING);
FUNCTION Index2Node(idx:LONGINT):TOutlineNode;
FUNCTION GetNode(idx:LONGINT):TOutlineNode;
FUNCTION GetNodeCount:LONGINT;
FUNCTION InsertNode(OldNode,NewNode:TOutlineNode):LONGINT;
FUNCTION AddNode(NewNode:TOutlineNode):LONGINT;
PROCEDURE Setup(RecordOrder:POINTER);
FUNCTION HasChildren:BOOLEAN;
FUNCTION GetLastIndex:LONGINT;
FUNCTION GetTopItem:LONGINT;
FUNCTION ReIndex(idx,max:LONGINT):LONGINT;
FUNCTION HasVisibleParent:BOOLEAN;
FUNCTION GetVisibleParent:TOutlineNode;
FUNCTION GetFullPath:STRING;
FUNCTION GetLevel:LONGINT;
FUNCTION GetList:TList;
PROCEDURE SetLastValidIndex;
FUNCTION GetDataItem(Value:POINTER):LONGINT;
FUNCTION GetTextItem(CONST Value:STRING):LONGINT;
PROCEDURE ClearSubNodes;
PROCEDURE SetExpanded(Value:BOOLEAN);
PROCEDURE UpdatePicture;
PROCEDURE UpdateChildPictures;
PROCEDURE SetPictureLeaf(NewBitmap:TBitmap);
PROCEDURE SetPictureOpen(NewBitmap:TBitmap);
PROCEDURE SetPictureClosed(NewBitmap:TBitmap);
PROTECTED
CONSTRUCTOR Create(Owner:TOutline);
PROPERTY Outline:TOutline read FOutline;
PROPERTY List:TList read GetList;
PROPERTY Items[Index:LONGINT]:TOutlineNode read GetNode;
PROPERTY ItemCount:LONGINT read GetNodeCount;
PUBLIC
DESTRUCTOR Destroy;OVERRIDE;
PROCEDURE FullExpand;
PROCEDURE FullCollapse;
PROCEDURE Expand;
PROCEDURE Collapse;
PROCEDURE Clear;
FUNCTION GetFirstChild:LONGINT;
FUNCTION GetLastChild:LONGINT;
FUNCTION GetNextChild(Value:LONGINT):LONGINT;
FUNCTION GetPrevChild(Value:LONGINT):LONGINT;
PROPERTY Text:STRING read GetCaption write SetCaption;
PROPERTY Data:POINTER read FData write FData;
PROPERTY Parent:TOutlineNode read FParent;
PROPERTY Index:LONGINT read FIndex;
PROPERTY IsVisible:BOOLEAN read HasVisibleParent;
PROPERTY HasItems:BOOLEAN read HasChildren;
PROPERTY Level:LONGINT read GetLevel;
PROPERTY Expanded:BOOLEAN read FExpanded write SetExpanded;
PROPERTY FullPath:STRING read GetFullPath;
PROPERTY TopItem:LONGINT read GetTopItem;
PROPERTY PictureLeaf:TBitmap read FPictureLeaf write SetPictureLeaf;
PROPERTY PictureClosed:TBitmap read FPictureClosed write SetPictureClosed;
PROPERTY PictureOpen:TBitmap read FPictureOpen write SetPictureOpen;
END;
TOutlineNodeClass = CLASS OF TOutlineNode;
{$M+}
TOutLineItemFocusEvent=PROCEDURE(Sender:TObject;Index:LONGINT) OF OBJECT;
TOutLineItemSelectEvent=PROCEDURE(Sender:TObject;Index:LONGINT) OF OBJECT;
TOutlineChangeEvent=PROCEDURE(Sender:TObject;Index:LONGINT) OF OBJECT;
{$M-}
TOutline=CLASS(TControl)
PRIVATE
FLines:TStrings;
FInitLines:TStringList;
FNodeClass:TOutlineNodeClass;
FRootNode:TOutlineNode;
FGoodNode:TOutlineNode;
FUpdateCount:LONGINT;
FSeparator:STRING;
FCurItem:TOutlineNode;
FStrings:TStrings;
FBorderStyle:TBorderStyle;
FPictureList:TBitmapList;
FPictureOpen:TBitmap;
FPictureClosed:TBitmap;
FPictureLeaf:TBitmap;
FInitNodes:TList;
FPlusMinusSize:TSize;
FPictureSize:TSize;
FShowTreeLines:BOOLEAN;
FShowPlusMinus:BOOLEAN;
FTreeLineWidth:LONGINT;
FTreeIndent:LONGINT;
FLineSpacing:LONGINT;
FIndexInsert:BOOLEAN;
FDragging:BOOLEAN;
FFocusNode:TOutlineNode;
FPopupPos:TPoint;
{$IFDEF Win95}
FHim:HIMAGELIST;
FSelItem:POINTER;
{$ENDIF}
FOnExpand:TOutlineChangeEvent;
FOnCollapse:TOutlineChangeEvent;
FOnItemFocus:TOutlineItemFocusEvent;
FOnItemSelect:TOutlineItemSelectEvent;
{$IFDEF OS2}
PROCEDURE WMPaint(VAR Msg:TMessage);message WM_PAINT;
{$ENDIF}
FUNCTION AddPicture(NewBitmap:TBitmap):TBitmap;
PROCEDURE SetBorderStyle(NewBorder:TBorderStyle);
PROCEDURE SetPlusMinusSize(NewSize:TSize);
PROCEDURE SetPictureSize(NewSize:TSize);
PROCEDURE UpdateNode(Node:TOutlineNode);
PROCEDURE SetCnrInfo;
PROCEDURE SetShowTreeLines(NewValue:BOOLEAN);
PROCEDURE SetShowPlusMinus(NewValue:BOOLEAN);
PROCEDURE SetTreeLineWidth(NewValue:LONGINT);
PROCEDURE SetTreeIndent(Value:LONGINT);
PROCEDURE SetLineSpacing(Value:LONGINT);
PROCEDURE SetupTree;
PROCEDURE SetupImageList;
PROCEDURE SetupSubNodes(Node:TOutlineNode);
FUNCTION GetSelectedNode:TOutlineNode;
PROCEDURE SetSelectedNode(NewSelected:TOutlineNode);
FUNCTION GetSelectedItem:LONGINT;
PROCEDURE SetSelectedItem(NewSelected:LONGINT);
FUNCTION GetPictureClosed:TBitmap;
PROCEDURE SetPictureClosed(NewBitmap:TBitmap);
FUNCTION GetPictureOpen:TBitmap;
PROCEDURE SetPictureOpen(NewBitmap:TBitmap);
FUNCTION GetPictureLeaf:TBitmap;
PROCEDURE SetPictureLeaf(NewBitmap:TBitmap);
FUNCTION Attach(idx:LONGINT;CONST Text:STRING;Data:POINTER;Mode:TAttachMode):LONGINT;
FUNCTION Get(idx:LONGINT):TOutlineNode;
FUNCTION GetItemCount:LONGINT;
PROCEDURE SetGoodNode(Node:TOutlineNode);
FUNCTION GetLines:TStrings;
PROCEDURE SetLines(AStrings:TStrings);
PROTECTED
PROCEDURE GetClassData(VAR ClassData:TClassData);OVERRIDE;
PROCEDURE CreateParams(VAR Params:TCreateParams);OVERRIDE;
PROCEDURE SetupComponent;OVERRIDE;
{$IFDEF OS2}
PROCEDURE SetupShow;OVERRIDE;
{$ENDIF}
PROCEDURE DestroyWnd;OVERRIDE;
PROCEDURE ParentNotification(VAR Msg:TMessage);OVERRIDE;
PROCEDURE ItemFocus(Index:LONGINT);VIRTUAL;
PROCEDURE ItemSelect(Index:LONGINT);VIRTUAL;
PROCEDURE ScanEvent(VAR Msg:TWMChar;VAR KeyCode:TKeyCode;RepeatCount:BYTE);OVERRIDE;
PROCEDURE MouseDown(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
PROCEDURE MouseMove(ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
PROCEDURE MouseUp(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
PROCEDURE MouseClick(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
FUNCTION AttachNode(Node:TOutlineNode;CONST Text:STRING;Data:POINTER;Mode:TAttachMode):TOutlineNode;
PROCEDURE IndexError;VIRTUAL;
PROCEDURE NodeError;VIRTUAL;
PROCEDURE ItemChanged(VAR Msg:TMessage;Expanded:BOOLEAN);VIRTUAL;
PUBLIC
DESTRUCTOR Destroy;OVERRIDE;
PROCEDURE BeginUpdate;
PROCEDURE EndUpdate;
FUNCTION Add(Index:LONGINT;CONST Text:STRING):LONGINT;
FUNCTION AddObject(Index:LONGINT;CONST Text:STRING;Data:POINTER):LONGINT;
FUNCTION AddChild(Index:LONGINT;CONST Text:STRING):LONGINT;
FUNCTION AddChildObject(Index:LONGINT;CONST Text:STRING;Data:POINTER):LONGINT;
FUNCTION Insert(Index:LONGINT;CONST Text:STRING):LONGINT;
FUNCTION InsertObject(Index:LONGINT;CONST Text:STRING;Data:POINTER):LONGINT;
PROCEDURE Delete(Index:LONGINT);
PROCEDURE FullExpand;
PROCEDURE FullCollapse;
FUNCTION GetDataItem(Value:POINTER):LONGINT;
FUNCTION GetTextItem(CONST Value:STRING):LONGINT;
PROCEDURE Clear;
PROCEDURE ReadSCUResource(CONST ResName:TResourceName;VAR Data;DataLen:LONGINT);OVERRIDE;
FUNCTION WriteSCUResource(Stream:TResourceStream):BOOLEAN;OVERRIDE;
PROPERTY NodeClass:TOutlineNodeClass read FNodeClass write FNodeClass;
PROPERTY SelectedNode:TOutlineNode read GetSelectedNode write SetSelectedNode;
PROPERTY SelectedItem:LONGINT read GetSelectedItem write SetSelectedItem;
PROPERTY Items[Index:LONGINT]:TOutlineNode read Get; default;
PROPERTY ItemCount:LONGINT read GetItemCount;
PROPERTY ItemSeparator:STRING read FSeparator write FSeparator;
PROPERTY XAlign;
PROPERTY XStretch;
PROPERTY YAlign;
PROPERTY YStretch;
PUBLISHED
PROPERTY Align;
PROPERTY Color;
PROPERTY BorderStyle:TBorderStyle read FBorderStyle write SetBorderStyle;
PROPERTY PenColor;
PROPERTY DragCursor;
PROPERTY DragMode;
PROPERTY Enabled;
PROPERTY Font;
PROPERTY Lines:TStrings read GetLines write SetLines;
PROPERTY LineSpacing:LONGINT read FLineSpacing write SetLineSpacing;
PROPERTY ParentColor;
PROPERTY ParentPenColor;
PROPERTY ParentFont;
PROPERTY ParentShowHint;
PROPERTY PictureClosed:TBitmap read GetPictureClosed write SetPictureClosed;
PROPERTY PictureLeaf:TBitmap read GetPictureLeaf write SetPictureLeaf;
PROPERTY PictureOpen:TBitmap read GetPictureOpen write SetPictureOpen;
PROPERTY PictureSize:TSize read FPictureSize write SetPictureSize;
PROPERTY PlusMinusSize:TSize read FPlusMinusSize write SetPlusMinusSize;
{Rene}
PROPERTY PopupMenu;
PROPERTY ShowHint;
PROPERTY ShowPlusMinus:BOOLEAN read FShowPlusMinus write SetShowPlusMinus;
PROPERTY ShowTreeLines:BOOLEAN read FShowTreeLines write SetShowTreeLines;
PROPERTY TabOrder;
PROPERTY TabStop;
PROPERTY TreeIndent:LONGINT read FTreeIndent write SetTreeIndent;
PROPERTY TreeLineWidth:LONGINT read FTreeLineWidth write SetTreeLineWidth;
PROPERTY Visible;
PROPERTY ZOrder;
PROPERTY OnCanDrag;
PROPERTY OnCollapse:TOutlineChangeEvent read FOnCollapse write FOnCollapse;
{Rene}
PROPERTY OnDblClick;
PROPERTY OnDragDrop;
PROPERTY OnDragOver;
PROPERTY OnEndDrag;
PROPERTY OnEnter;
PROPERTY OnExit;
PROPERTY OnExpand:TOutlineChangeEvent read FOnExpand write FOnExpand;
PROPERTY OnFontChange;
PROPERTY OnItemFocus:TOutlineItemFocusEvent read FOnItemFocus write FOnItemFocus;
PROPERTY OnItemSelect:TOutlineItemSelectEvent read FOnItemSelect write FOnItemSelect;
PROPERTY OnMouseClick;
PROPERTY OnMouseDblClick;
PROPERTY OnMouseDown;
PROPERTY OnMouseMove;
PROPERTY OnMouseUp;
PROPERTY OnSetupShow;
PROPERTY OnStartDrag;
END;
FUNCTION InsertOutline(Parent:TControl;Left,Bottom,Width,Height:LONGINT;Hint:STRING):TOutline;
IMPLEMENTATION