MG: added TTreeView

git-svn-id: trunk@575 -
This commit is contained in:
lazarus 2002-01-04 21:07:49 +00:00
parent f05d96f51a
commit a435b0f6b0
7 changed files with 744 additions and 21 deletions

View File

@ -304,7 +304,7 @@ begin
RegisterComponents('Additional','Buttons',[TBitBtn,TSpeedButton]);
RegisterComponents('Additional','ExtCtrls',[TNoteBook,TPaintBox
,TBevel,TRadioGroup,TImage]);
RegisterComponents('Additional','ComCtrls',[TStatusBar,TListView
RegisterComponents('Additional','ComCtrls',[TStatusBar,TListView,TTreeView
,TProgressBar,TToolBar,TTrackbar]);
RegisterComponents('Misc','Calendar',[TCalendar]);

View File

@ -1288,3 +1288,17 @@
+'" @ ",'#10'"# # # # # # # ",'#10'"# # # # #'
+' # # "};'#10
);
LazarusResources.Add('ttreeview','XPM',
'/* XPM */'#10'static char * ttreeview_xpm[] = {'#10'"21 21 9 1",'#10'" '#9
+'c None",'#10'".'#9'c #808080",'#10'"+'#9'c #000000",'#10'"@'#9'c #FFFFFF'
+'",'#10'"#'#9'c #C0C0C0",'#10'"$'#9'c #F9D51D",'#10'"%'#9'c #AF910A",'#10
+'"&'#9'c #8E8E8E",'#10'"*'#9'c #595959",'#10'".....................",'#10
+'".+++++++++++++++++++@",'#10'".+@@@@@@@@@@@@@@@@@#@",'#10'".+@$%%@@@@@@@'
+'@@@@@@#@",'#10'".+@%$%@@@&**&*@@@@@#@",'#10'".+@@&@@@@@@@@@@@@@@#@",'#10
+'".+@@&&$%%@@@@@@@@@@#@",'#10'".+@@@@%$%@@**&&@@@@#@",'#10'".+@@@@@&@@@@@'
+'@@@@@@#@",'#10'".+@@@@@&&$%%@@@@@@@#@",'#10'".+@@@@@&@%$%@@&**@@#@",'#10
+'".+@@@@@&@@@@@@@@@@@#@",'#10'".+@@@@$%%@@@@@@@@@@#@",'#10'".+@@@@%$%@@&*'
+'**@@@@#@",'#10'".+@@@@@&@@@@@@@@@@@#@",'#10'".+@@@@@&&%%%@@@@@@@#@",'#10
+'".+@@@@@@@%$%@@&*&@@#@",'#10'".+@@@@@@@@@@@@@@@@@#@",'#10'".+@@@@@@@@@@@'
+'@@@@@@#@",'#10'".+##################@",'#10'".@@@@@@@@@@@@@@@@@@@@"};'#10
);

View File

@ -32,8 +32,8 @@ unit ComCtrls;
interface
uses
SysUtils, Classes, Controls,LclLinux, stdCtrls, vclGlobals, lMessages,
Menus, ImgList, Graphics, Toolwin;
SysUtils, Classes, Controls, LclLinux, StdCtrls, ExtCtrls, vclGlobals,
lMessages, Menus, ImgList, Graphics, ToolWin;
const
@ -370,13 +370,21 @@ type
property SimpleText : String read FSimpleText write SetSimpleText;
property SimplePanel : Boolean read FSimplePanel write SetSimplePanel;
property Visible;
end;
end;
{ Custom draw }
TCustomDrawTarget = (dtControl, dtItem, dtSubItem);
TCustomDrawStage = (cdPrePaint, cdPostPaint, cdPreErase, cdPostErase);
TCustomDrawState = set of (cdsSelected, cdsGrayed, cdsDisabled, cdsChecked,
cdsFocused, cdsDefault, cdsHot, cdsMarked, cdsIndeterminate);
TListItems = class; //forward declaration!
TCustomListView = class; //forward declaration!
TListItem = class(TPersistent)
TListItems = class; //forward declaration!
TCustomListView = class; //forward declaration!
TListItem = class(TPersistent)
private
FOwner : TListItems;
FSubItems: TStrings;
@ -978,11 +986,681 @@ type
end;
{ TTreeNode }
type
TCustomTreeView = class;
TTreeNodes = class;
TTreeNode = class;
TNodeState = (nsCut, nsDropHilited, nsFocused, nsSelected, nsExpanded,
nsHasChildren);
TNodeStates = set of TNodeState;
TNodeAttachMode = (naAdd, naAddFirst, naAddChild, naAddChildFirst, naInsert);
TAddMode = (taAddFirst, taAdd, taInsert);
TSortType = (stNone, stData, stText, stBoth);
TTreeNodeArray = ^TTreeNode;
ETreeNodeError = class(Exception);
ETreeViewError = class(ETreeNodeError);
const
NodeAttachModeNames: array[TNodeAttachMode] of string =
('naAdd', 'naAddFirst', 'naAddChild', 'naAddChildFirst', 'naInsert');
AddModeNames: array[TAddMode] of string =
('taAddFirst', 'taAdd', 'taInsert');
type
TTVChangingEvent = procedure(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean) of object;
TTVChangedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;
TTVEditingEvent = procedure(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean) of object;
TTVEditedEvent = procedure(Sender: TObject; Node: TTreeNode;
var S: string) of object;
TTVExpandingEvent = procedure(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean) of object;
TTVCollapsingEvent = procedure(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean) of object;
TTVExpandedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;
TTVCompareEvent = procedure(Sender: TObject; Node1, Node2: TTreeNode;
var Compare: Integer) of object;
TTVCustomDrawEvent = procedure(Sender: TCustomTreeView; const ARect: TRect;
var DefaultDraw: Boolean) of object;
TTVCustomDrawItemEvent = procedure(Sender: TCustomTreeView; Node: TTreeNode;
State: TCustomDrawState; var DefaultDraw: Boolean) of object;
TTVAdvancedCustomDrawEvent = procedure(Sender: TCustomTreeView;
const ARect: TRect; Stage: TCustomDrawStage;
var DefaultDraw: Boolean) of object;
TTVAdvancedCustomDrawItemEvent = procedure(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean) of object;
THitTest = (htAbove, htBelow, htNowhere, htOnItem, htOnButton, htOnIcon,
htOnIndent, htOnLabel, htOnRight, htOnStateIcon, htToLeft, htToRight);
THitTests = set of THitTest;
TTreeNodeCompare = function(Node1, Node2: TTreeNode): integer of object;
PTreeNodeInfo = ^TTreeNodeInfo;
TTreeNodeInfo = packed record
ImageIndex: Integer;
SelectedIndex: Integer;
StateIndex: Integer;
OverlayIndex: Integer;
Data: Pointer;
Count: Integer;
Height: integer;
Expanded: boolean;
TextLen: integer;
// here follows the text
end;
// this is the delphi node stream record
PDelphiNodeInfo = ^TDelphiNodeInfo;
TDelphiNodeInfo = packed record
ImageIndex: Integer;
SelectedIndex: Integer;
StateIndex: Integer;
OverlayIndex: Integer;
Data: Pointer;
Count: Integer;
Text: string[255];
end;
TTreeNode = class(TPersistent)
private
FOwner: TTreeNodes; // the object, which contains all nodes of the tree
FCapacity: integer; // size of FItems
FCount: integer; // # of first level childs in FItems
FData: Pointer; // custom data
FDeleting: Boolean;
FHeight: integer; // height in pixels
FInTree: Boolean;
FImageIndex: integer;
//FItemId: HTreeItem;
FItems: TTreeNodeArray; // first level child nodes
FNextBrother: TTreeNode; // next sibling
FOverlayIndex: Integer;
FParent: TTreeNode;
FPrevBrother: TTreeNode; // previous sibling
FSelectedIndex: Integer;
FStateIndex: Integer;
FStates: TNodeStates;
FSubTreeCount: integer;// total of all child nodes and self
FText: string;
FTop: integer; // top coordinate
function AreParentsExpanded: Boolean;
function CompareCount(CompareMe: Integer): Boolean;
function DoCanExpand(ExpandIt: Boolean): Boolean;
procedure DoExpand(ExpandIt: Boolean);
procedure ExpandItem(ExpandIt: Boolean; Recurse: Boolean);
function GetAbsoluteIndex: Integer;
function GetHasChildren: Boolean;
function GetCount: Integer;
function GetCut: boolean;
//function GetDropTarget: Boolean;
function GetExpanded: Boolean;
function GetFocused: Boolean;
function GetHeight: integer;
function GetIndex: Integer;
function GetItems(AnIndex: Integer): TTreeNode;
function GetLevel: Integer;
function GetSelected: Boolean;
function GetState(NodeState: TNodeState): Boolean;
function GetTreeNodes: TTreeNodes;
function GetTreeView: TCustomTreeView;
function GetTop: integer;
procedure InternalMove(ANode: TTreeNode; AddMode: TAddMode);
function IsEqual(Node: TTreeNode): Boolean;
function IsNodeVisible: Boolean;
procedure ReadData(Stream: TStream; StreamVersion: integer;
Info: PTreeNodeInfo);
procedure ReadDelphiData(Stream: TStream; Info: PDelphiNodeInfo);
procedure SetCut(AValue: Boolean);
procedure SetData(AValue: Pointer);
//procedure SetDropTarget(Value: Boolean);
procedure SetExpanded(AValue: Boolean);
procedure SetFocused(AValue: Boolean);
procedure SetHasChildren(AValue: Boolean);
procedure SetHeight(AValue: integer);
procedure SetImageIndex(AValue: integer);
procedure SetItems(AnIndex: Integer; AValue: TTreeNode);
procedure SetOverlayIndex(AValue: Integer);
procedure SetSelected(AValue: Boolean);
procedure SetSelectedIndex(AValue: Integer);
procedure SetStateIndex(AValue: Integer);
procedure SetText(const S: string);
procedure Unbind;
procedure WriteData(Stream: TStream; Info: PTreeNodeInfo);
procedure WriteDelphiData(Stream: TStream; Info: PDelphiNodeInfo);
public
constructor Create(AnOwner: TTreeNodes);
function AlphaSort: Boolean;
procedure Assign(Source: TPersistent); override;
procedure Collapse(Recurse: Boolean);
function CustomSort(SortProc: TTreeNodeCompare): Boolean;
function DefaultTreeViewSort(Node1, Node2: TTreeNode): Integer;
procedure Delete;
procedure DeleteChildren;
destructor Destroy; override;
function DisplayExpandSignLeft: integer;
function DisplayExpandSignRect: TRect;
function DisplayExpandSignRight: integer;
function DisplayIconLeft: integer;
function DisplayRect(TextOnly: Boolean): TRect;
function DisplayStateIconLeft: integer;
function DisplayTextLeft: integer;
function DisplayTextRight: integer;
function EditText: Boolean;
procedure EndEdit(Cancel: Boolean);
procedure Expand(Recurse: Boolean);
procedure ExpandParents;
function Bottom: integer;
function BottomExpanded: integer;
function GetFirstChild: TTreeNode;
function GetHandle: THandle;
function GetLastSibling: TTreeNode;
function GetLastChild: TTreeNode;
function GetLastSubChild: TTreeNode;
function GetNext: TTreeNode;
function GetNextChild(AValue: TTreeNode): TTreeNode;
function GetNextSibling: TTreeNode;
function GetNextVisible: TTreeNode;
function GetPrev: TTreeNode;
function GetPrevChild(AValue: TTreeNode): TTreeNode;
function GetPrevSibling: TTreeNode;
function GetPrevVisible: TTreeNode;
function HasAsParent(AValue: TTreeNode): Boolean;
function IndexOf(AValue: TTreeNode): Integer;
procedure MakeVisible;
procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode); virtual;
procedure Update;
function ConsistencyCheck: integer;
procedure WriteDebugReport(const Prefix: string; Recurse: boolean);
property AbsoluteIndex: Integer read GetAbsoluteIndex;
property Count: Integer read GetCount;
property Cut: Boolean read GetCut write SetCut;
property Data: Pointer read FData write SetData;
property Deleting: Boolean read FDeleting;
property Focused: Boolean read GetFocused write SetFocused;
//property DropTarget: Boolean read GetDropTarget write SetDropTarget;
property Expanded: Boolean read GetExpanded write SetExpanded;
property Handle: THandle read GetHandle;
property HasChildren: Boolean read GetHasChildren write SetHasChildren;
property Height: integer read GetHeight write SetHeight;
property ImageIndex: integer read FImageIndex write SetImageIndex;
property Index: Integer read GetIndex;
property IsVisible: Boolean read IsNodeVisible;
property Items[Index: Integer]: TTreeNode read GetItems write SetItems; default;
//property ItemId: HTreeItem read FItemId;
property Level: Integer read GetLevel;
property OverlayIndex: Integer read FOverlayIndex write SetOverlayIndex;
property Owner: TTreeNodes read FOwner;
property Parent: TTreeNode read FParent;
property Selected: Boolean read GetSelected write SetSelected;
property SelectedIndex: Integer read FSelectedIndex write SetSelectedIndex;
property SubTreeCount: integer read FSubTreeCount;
property StateIndex: Integer read FStateIndex write SetStateIndex;
property Text: string read FText write SetText;
property TreeNodes: TTreeNodes read GetTreeNodes;
property TreeView: TCustomTreeView read GetTreeView;
property Top: integer read GetTop;
end;
{ TTreeNodes }
PNodeCache = ^TNodeCache;
TNodeCache = record
CacheNode: TTreeNode;
CacheIndex: Integer;
end;
TTreeNodes = class(TPersistent)
private
FCount: integer;
FNodeCache: TNodeCache;
FOwner: TCustomTreeView;
FTopLvlCapacity: integer;
FTopLvlCount: integer;
FTopLvlItems: TTreeNodeArray; // root and root siblings
FUpdateCount: Integer;
FKeepCollapsedNodes: boolean;
procedure AddedNode(AValue: TTreeNode);
procedure ClearCache;
function GetHandle: THandle;
function GetNodeFromIndex(Index: Integer): TTreeNode;
function GetTopLvlItems(Index: integer): TTreeNode;
procedure GrowTopLvlItems;
function IndexOfTopLvlItem(Node: TTreeNode): integer;
procedure MoveTopLvlNode(TopLvlFromIndex, TopLvlToIndex: integer;
Node: TTreeNode);
procedure ReadData(Stream: TStream);
procedure ReadExpandedState(Stream: TStream);
procedure Repaint(ANode: TTreeNode);
procedure ShrinkTopLvlItems;
procedure SetTopLvlItems(Index: integer; AValue: TTreeNode);
procedure WriteData(Stream: TStream);
procedure WriteExpandedState(Stream: TStream);
protected
//function AddItem(Parent, Target: HTreeItem; const Item: TTVItem;
// AddMode: TAddMode): HTreeItem;
function InternalAddObject(Node: TTreeNode; const S: string;
Data: Pointer; AddMode: TAddMode): TTreeNode;
procedure DefineProperties(Filer: TFiler); override;
//function CreateItem(Node: TTreeNode): TTVItem;
function GetCount: Integer;
procedure SetItem(Index: Integer; AValue: TTreeNode);
procedure SetUpdateState(Updating: Boolean);
public
constructor Create(AnOwner: TCustomTreeView);
destructor Destroy; override;
function Add(Node: TTreeNode; const S: string): TTreeNode;
function AddChild(Node: TTreeNode; const S: string): TTreeNode;
function AddChildFirst(Node: TTreeNode; const S: string): TTreeNode;
function AddChildObject(Node: TTreeNode; const S: string;
Data: Pointer): TTreeNode;
function AddChildObjectFirst(Node: TTreeNode; const S: string;
Data: Pointer): TTreeNode;
function AddFirst(Node: TTreeNode; const S: string): TTreeNode;
function AddObject(Node: TTreeNode; const S: string;
Data: Pointer): TTreeNode;
function AddObjectFirst(Node: TTreeNode; const S: string;
Data: Pointer): TTreeNode;
procedure Assign(Source: TPersistent); override;
procedure BeginUpdate;
procedure Clear;
procedure Delete(Node: TTreeNode);
procedure EndUpdate;
function GetFirstNode: TTreeNode;
//function GetNode(ItemId: HTreeItem): TTreeNode;
function GetLastNode: TTreeNode; // last top level node
function GetLastSubNode: TTreeNode; // absolute last node
function GetLastExpandedSubNode: TTreeNode; // absolute last node
function Insert(Node: TTreeNode; const S: string): TTreeNode;
function InsertObject(NextNode: TTreeNode; const S: string;
Data: Pointer): TTreeNode;
function ConsistencyCheck: integer;
procedure WriteDebugReport(const Prefix: string; AllNodes: boolean);
property Count: Integer read GetCount;
//property Handle: HWND read GetHandle;
property Items[Index: Integer]: TTreeNode read GetNodeFromIndex; default;
property KeepCollapsedNodes: boolean
read FKeepCollapsedNodes write FKeepCollapsedNodes;
property Owner: TCustomTreeView read FOwner;
property TopLvlCount: integer read FTopLvlCount;
property TopLvlItems[Index: integer]: TTreeNode
read GetTopLvlItems write SetTopLvlItems;
end;
{ TCustomTreeView }
TTreeViewState = (tvsScrollbarChanged, tvsMaxRightNeedsUpdate,
tvsTopsNeedsUpdate, tvsMaxLvlNeedsUpdate, tvsTopItemNeedsUpdate,
tvsBottomItemNeedsUpdate, tvsCanvasChanged, tvsDragged, tvsIsEditing,
tvsStateChanging, tvsManualNotify, tvsUpdating, tvsMouseCapture,
tvsWaitForDragging, tvsDblClicked);
TTreeViewStates = set of TTreeViewState;
TTreeViewOption = (tvoAutoExpand, tvoHideSelection, tvoHotTrack,
tvoRightClickSelect, tvoReadOnly, tvoShowButtons, tvoShowRoot, tvoShowLines,
tvoToolTips, tvoRowSelect, tvoKeepCollapsedNodes, tvoShowSeparators);
TTreeViewOptions = set of TTreeViewOption;
TTreeViewExpandSignType = (tvestPlusMinus, tvestArrow);
TCustomTreeView = class(TCustomControl)
private
FBackgroundColor: TColor;
FBorderStyle: TBorderStyle;
FBottomItem: TTreeNode;
FCanvas: TCanvas;
FExpandSignType: TTreeViewExpandSignType;
FExpandSignSize: integer;
FDefEditProc: Pointer;
FDefItemHeight: integer;
FDragImage: TDragImageList;
FDragNode: TTreeNode;
FEditHandle: THandle;
FIndent: integer;
FImageChangeLink: TChangeLink;
FImages: TCustomImageList;
FLastDropTarget: TTreeNode;
FLastHorzScrollInfo: TScrollInfo;
FLastVertScrollInfo: TScrollInfo;
FMaxLvl: integer; // maximum level of all nodes
FMaxRight: integer; // maximum text width of all nodes (needed for horizontal scrolling)
//FMemStream: TMemoryStream;
fMouseDownX: integer;
fMouseDownY: integer;
FOnAdvancedCustomDraw: TTVAdvancedCustomDrawEvent;
FOnAdvancedCustomDrawItem: TTVAdvancedCustomDrawItemEvent;
FOnChange: TTVChangedEvent;
FOnChanging: TTVChangingEvent;
FOnCollapsed: TTVExpandedEvent;
FOnCollapsing: TTVCollapsingEvent;
FOnCompare: TTVCompareEvent;
FOnCustomDraw: TTVCustomDrawEvent;
FOnCustomDrawItem: TTVCustomDrawItemEvent;
FOnDeletion: TTVExpandedEvent;
FOnEditing: TTVEditingEvent;
FOnEdited: TTVEditedEvent;
FOnExpanded: TTVExpandedEvent;
FOnExpanding: TTVExpandingEvent;
FOnGetImageIndex: TTVExpandedEvent;
FOnGetSelectedIndex: TTVExpandedEvent;
FOptions: TTreeViewOptions;
FRClickNode: TTreeNode;
//FSaveIndex: Integer;
FSaveItems: TStringList;
//FSaveTopIndex: Integer;
FScrollBars: TScrollStyle;
FScrolledLeft: integer; // horizontal scrolled pixels (hidden pixels at top)
FScrolledTop: integer; // vertical scrolled pixels (hidden pixels at top)
FSelectedColor: TColor;
FSelectedNode: TTreeNode;
FSortType: TSortType;
FStateChangeLink: TChangeLink;
FStateImages: TCustomImageList;
FStates: TTreeViewStates;
FTopItem: TTreeNode;
FTreeLineColor: TColor;
FTreeNodes: TTreeNodes;
FUpdateCount: integer;
//FWideText: WideString;
procedure CanvasChanged(Sender: TObject);
//procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
//procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
//procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
//procedure CMDrag(var Message: TCMDrag); message CM_DRAG;
//procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
procedure EditWndProc(var Message: TLMessage);
//procedure DoDragOver(Source: TDragObject; X, Y: Integer; CanDrop: Boolean);
function GetAutoExpand: boolean;
function GetBottomItem: TTreeNode;
function GetChangeDelay: Integer;
//function GetDropTarget: TTreeNode;
function GetHideSelection: boolean;
function GetHotTrack: boolean;
function GetKeepCollapsedNodes: boolean;
//function GetNodeFromItem(const Item: TTVItem): TTreeNode;
function GetReadOnly: boolean;
function GetRightClickSelect: boolean;
function GetRowSelect: boolean;
function GetSelection: TTreeNode;
function GetShowButtons: boolean;
function GetShowLines: boolean;
function GetShowRoot: boolean;
function GetShowSeparators: boolean;
function GetToolTips: boolean;
function GetTopItem: TTreeNode;
procedure ImageListChange(Sender: TObject);
procedure OnChangeTimer(Sender: TObject);
procedure SetAutoExpand(Value: Boolean);
procedure SetBackgroundColor(Value: TColor);
procedure SetBorderStyle(Value: TBorderStyle);
procedure SetBottomItem(Value: TTreeNode);
procedure SetChangeDelay(Value: Integer);
procedure SetDefaultItemHeight(Value: integer);
procedure SetExpandSignType(Value: TTreeViewExpandSignType);
//procedure SetDropTarget(Value: TTreeNode);
procedure SetHideSelection(Value: Boolean);
procedure SetHotTrack(Value: Boolean);
//procedure SetImageList(Value: HImageList; Flags: Integer);
procedure SetIndent(Value: Integer);
procedure SetImages(Value: TCustomImageList);
procedure SetKeepCollapsedNodes(Value: Boolean);
procedure SetReadOnly(Value: Boolean);
procedure SetRightClickSelect(Value: Boolean);
procedure SetRowSelect(Value: Boolean);
procedure SetScrollBars(const Value: TScrollStyle);
procedure SetScrolledLeft(AValue: integer);
procedure SetScrolledTop(AValue: integer);
procedure SetSelection(Value: TTreeNode);
procedure SetShowButton(Value: Boolean);
procedure SetShowLines(Value: Boolean);
procedure SetShowRoot(Value: Boolean);
procedure SetShowSeparators(Value: Boolean);
procedure SetSortType(Value: TSortType);
procedure SetStateImages(Value: TCustomImageList);
procedure SetToolTips(Value: Boolean);
procedure SetTreeLineColor(Value: TColor);
procedure SetTreeNodes(Value: TTreeNodes);
procedure SetTopItem(Value: TTreeNode);
procedure UpdateAllTops;
procedure UpdateBottomItem;
procedure UpdateMaxLvl;
procedure UpdateMaxRight;
procedure UpdateTopItem;
procedure UpdateScrollbars;
procedure WMHScroll(var Msg: TLMScroll); message LM_HSCROLL;
procedure WMVScroll(var Msg: TLMScroll); message LM_VSCROLL;
procedure WMLButtonDown(var Message: TLMLButtonDown); message LM_LBUTTONDOWN;
procedure WMNotify(var Message: TLMNotify); message LM_NOTIFY;
//procedure WMContextMenu(var Message: TLMContextMenu); message LM_CONTEXTMENU;
//procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE;
protected
FChangeTimer: TTimer;
function CanEdit(Node: TTreeNode): Boolean; dynamic;
function CanChange(Node: TTreeNode): Boolean; dynamic;
function CanCollapse(Node: TTreeNode): Boolean; dynamic;
function CanExpand(Node: TTreeNode): Boolean; dynamic;
procedure Change(Node: TTreeNode); dynamic;
procedure Collapse(Node: TTreeNode); dynamic;
function CreateNode: TTreeNode; virtual;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
function CustomDraw(const ARect: TRect;
Stage: TCustomDrawStage): Boolean; virtual;
function CustomDrawItem(Node: TTreeNode; State: TCustomDrawState;
Stage: TCustomDrawStage; var PaintImages: Boolean): Boolean; virtual;
procedure Delete(Node: TTreeNode); dynamic;
procedure DestroyWnd; override;
procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
procedure DoPaint; virtual;
procedure DoPaintNode(Node: TTreeNode); virtual;
procedure DoStartDrag(var DragObject: TDragObject); override;
//procedure Edit(const Item: TTVItem); dynamic;
procedure EndEditing;
procedure EnsureNodeIsVisible(ANode: TTreeNode);
procedure Expand(Node: TTreeNode); dynamic;
//function GetDragImages: TDragImageList; override;
procedure GetImageIndex(Node: TTreeNode); virtual;
function GetMaxLvl: integer;
function GetMaxScrollLeft: integer;
function GetMaxScrollTop: integer;
function GetNodeAtInternalY(Y: Integer): TTreeNode;
function GetNodeAtY(Y: Integer): TTreeNode;
procedure GetSelectedIndex(Node: TTreeNode); virtual;
function IsCustomDrawn(Target: TCustomDrawTarget;
Stage: TCustomDrawStage): Boolean;
function IsNodeVisible(ANode: TTreeNode): Boolean;
procedure Loaded; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:
Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure Paint; override;
procedure SetDragMode(Value: TDragMode); override;
procedure SetOptions(NewOptions: TTreeViewOptions);
procedure WndProc(var Message: TLMessage); override;
property AutoExpand: Boolean read GetAutoExpand write SetAutoExpand default False;
property BorderStyle: TBorderStyle
read FBorderStyle write SetBorderStyle default bsSingle;
property ChangeDelay: Integer read GetChangeDelay write SetChangeDelay default 0;
property HideSelection: Boolean
read GetHideSelection write SetHideSelection default True;
property HotTrack: Boolean read GetHotTrack write SetHotTrack default False;
property Images: TCustomImageList read FImages write SetImages;
property Indent: Integer read fIndent write SetIndent;
property Items: TTreeNodes read FTreeNodes write SetTreeNodes;
property OnAdvancedCustomDraw: TTVAdvancedCustomDrawEvent
read FOnAdvancedCustomDraw write FOnAdvancedCustomDraw;
property OnAdvancedCustomDrawItem: TTVAdvancedCustomDrawItemEvent
read FOnAdvancedCustomDrawItem write FOnAdvancedCustomDrawItem;
property OnChange: TTVChangedEvent read FOnChange write FOnChange;
property OnChanging: TTVChangingEvent read FOnChanging write FOnChanging;
property OnCollapsed: TTVExpandedEvent read FOnCollapsed write FOnCollapsed;
property OnCollapsing: TTVCollapsingEvent read FOnCollapsing write FOnCollapsing;
property OnCompare: TTVCompareEvent read FOnCompare write FOnCompare;
property OnCustomDraw: TTVCustomDrawEvent read FOnCustomDraw write FOnCustomDraw;
property OnCustomDrawItem: TTVCustomDrawItemEvent
read FOnCustomDrawItem write FOnCustomDrawItem;
property OnDeletion: TTVExpandedEvent read FOnDeletion write FOnDeletion;
property OnEditing: TTVEditingEvent read FOnEditing write FOnEditing;
property OnEdited: TTVEditedEvent read FOnEdited write FOnEdited;
property OnExpanding: TTVExpandingEvent read FOnExpanding write FOnExpanding;
property OnExpanded: TTVExpandedEvent read FOnExpanded write FOnExpanded;
property OnGetImageIndex: TTVExpandedEvent
read FOnGetImageIndex write FOnGetImageIndex;
property OnGetSelectedIndex: TTVExpandedEvent
read FOnGetSelectedIndex write FOnGetSelectedIndex;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
property RightClickSelect: Boolean
read GetRightClickSelect write SetRightClickSelect default False;
property RowSelect: Boolean read GetRowSelect write SetRowSelect default False;
property ScrolledLeft: integer read FScrolledLeft write SetScrolledLeft;
property ScrolledTop: integer read FScrolledTop write SetScrolledTop;
property ShowButtons: Boolean read GetShowButtons write SetShowButton default True;
property ShowLines: Boolean read GetShowLines write SetShowLines default True;
property ShowRoot: Boolean read GetShowRoot write SetShowRoot default True;
property ShowSeparators: Boolean read GetShowSeparators write SetShowSeparators default True;
property SortType: TSortType read FSortType write SetSortType default stNone;
property StateImages: TCustomImageList read FStateImages write SetStateImages;
property ToolTips: Boolean read GetToolTips write SetToolTips default True;
public
constructor Create(AnOwner: TComponent); override;
destructor Destroy; override;
function AlphaSort: Boolean;
procedure BeginUpdate;
function CustomSort(SortProc: TTreeNodeCompare): Boolean;
procedure EndUpdate;
procedure FullCollapse;
procedure FullExpand;
function GetHitTestInfoAt(X, Y: Integer): THitTests;
function GetNodeAt(X, Y: Integer): TTreeNode;
function IsEditing: Boolean;
procedure LoadFromFile(const FileName: string);
procedure LoadFromStream(Stream: TStream);
procedure SaveToFile(const FileName: string);
procedure SaveToStream(Stream: TStream);
function ConsistencyCheck: integer;
procedure WriteDebugReport(const Prefix: string; AllNodes: boolean);
property BackgroundColor: TColor
read FBackgroundColor write SetBackgroundColor;
property BorderWidth;
property BottomItem: TTreeNode read GetBottomItem write SetBottomItem;
property Canvas: TCanvas read FCanvas;
//property DropTarget: TTreeNode read GetDropTarget write SetDropTarget;
property DefaultItemHeight: integer
read FDefItemHeight write SetDefaultItemHeight;
property ExpandSignType: TTreeViewExpandSignType
read FExpandSignType write SetExpandSignType;
property KeepCollapsedNodes: boolean
read GetKeepCollapsedNodes write SetKeepCollapsedNodes;
property Options: TTreeViewOptions read FOptions write SetOptions;
property ScrollBars: TScrollStyle
read FScrollBars write SetScrollBars default ssBoth;
property Selected: TTreeNode read GetSelection write SetSelection;
property TopItem: TTreeNode read GetTopItem write SetTopItem;
property TreeLineColor: TColor read FTreeLineColor write FTreeLineColor;
end;
TTreeView = class(TCustomTreeView)
published
property Align;
property Anchors;
property AutoExpand;
//property BiDiMode;
property BorderStyle;
property BorderWidth;
property ChangeDelay;
property Color;
property Ctl3D;
//property Constraints;
property DefaultItemHeight;
property DragKind;
property DragCursor;
property DragMode;
property Enabled;
property ExpandSignType;
property Font;
property HideSelection;
property HotTrack;
property Images;
property Indent;
//property ParentBiDiMode;
property ParentColor default False;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly;
property RightClickSelect;
property RowSelect;
property ScrollBars;
property ShowButtons;
property ShowHint;
property ShowLines;
property ShowRoot;
property SortType;
property StateImages;
property TabOrder;
property TabStop default True;
property ToolTips;
property Visible;
property OnAdvancedCustomDraw;
property OnAdvancedCustomDrawItem;
property OnChange;
property OnChanging;
property OnClick;
property OnCollapsed;
property OnCollapsing;
property OnCompare;
//property OnContextPopup;
property OnCustomDraw;
property OnCustomDrawItem;
property OnDblClick;
property OnDeletion;
property OnDragDrop;
property OnDragOver;
property OnEdited;
property OnEditing;
//property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnExpanding;
property OnExpanded;
property OnGetImageIndex;
property OnGetSelectedIndex;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property Options;
//property OnStartDock;
property OnStartDrag;
property Items;
end;
function InitCommonControl(CC: Integer): Boolean;
procedure CheckCommonControl(CC: Integer);
Implementation
uses Forms,Interfaces;
const
@ -1009,7 +1687,7 @@ var
function InitCommonControl(CC: Integer): Boolean;
begin
Result := True;
Result := True;
end;
procedure CheckCommonControl(CC: Integer);
@ -1028,6 +1706,7 @@ end;
{$I toolbutton.inc}
{$I toolbar.inc}
{$I trackbar.inc}
{$I treeview.inc}
{$I viewcolumns.inc}
{$I viewcolumn.inc}
@ -1037,6 +1716,9 @@ end.
{ =============================================================================
$Log$
Revision 1.15 2002/01/04 21:07:49 lazarus
MG: added TTreeView
Revision 1.14 2002/01/04 20:29:04 lazarus
Added images to TListView.
Shane

View File

@ -215,6 +215,9 @@ TCMDialogKey = TLMKEY;
TCaption = String;
TCursor = -32768..32767;
TFormStyle = (fsNormal, fsMDIChild, fsMDIFORM, fsStayOnTop);
TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin);
TBorderStyle = bsNone..bsSingle;
TMouseButton = (mbLeft, mbRight, mbMiddle);
@ -1148,6 +1151,9 @@ end.
{ =============================================================================
$Log$
Revision 1.30 2002/01/04 21:07:49 lazarus
MG: added TTreeView
Revision 1.29 2002/01/01 18:38:36 lazarus
MG: more wmsize messages :(

View File

@ -37,10 +37,6 @@ interface
uses classes, controls, vclglobals, sysutils,graphics,Menus, LCLLinux,LMessages;
type
TFormStyle = (fsNormal, fsMDIChild, fsMDIFORM, fsStayOnTop);
TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin);
TBorderStyle = bsNone..bsSingle;
TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter);
TWindowState = (wsNormal, wsMinimized, wsMaximized);

View File

@ -1,3 +1,5 @@
// included by comctrls.pp
{******************************************************************************
TTrackBar
******************************************************************************}
@ -381,6 +383,9 @@ end;
{
$Log$
Revision 1.3 2002/01/04 21:07:49 lazarus
MG: added TTreeView
Revision 1.2 2000/07/23 19:03:10 lazarus
changed some comments, stoppok

View File

@ -3824,7 +3824,8 @@ end;
------------------------------------------------------------------------------}
function TgtkObject.SetScrollInfo(Handle : HWND; SBStyle : Integer; ScrollInfo: TScrollInfo; bRedraw : Boolean): Integer;
function TgtkObject.SetScrollInfo(Handle : HWND; SBStyle : Integer;
ScrollInfo: TScrollInfo; bRedraw : Boolean): Integer;
const
POLICY: array[BOOLEAN] of TGTKPolicyType = (GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
var
@ -3837,23 +3838,37 @@ begin
if (Handle <> 0)
then begin
case SBStyle of
SB_HORZ:
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)), gtk_scrolled_window_get_type) then
Adjustment := gtk_scrolled_window_get_hadjustment(PGTKScrolledWindow(Handle))
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)),
gtk_scrolled_window_get_type)
then
Adjustment := gtk_scrolled_window_get_hadjustment(
PGTKScrolledWindow(Handle))
else
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)), gtk_hscrollbar_get_type) then
Adjustment := PgtkhScrollBar(handle)^.Scrollbar.Range.Adjustment;
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)),
gtk_hscrollbar_get_type)
then
Adjustment := PgtkhScrollBar(handle)^.Scrollbar.Range.Adjustment;
SB_VERT:
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)), gtk_scrolled_window_get_type) then
Adjustment := gtk_scrolled_window_get_vadjustment(PGTKScrolledWindow(Handle))
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)),
gtk_scrolled_window_get_type)
then
Adjustment := gtk_scrolled_window_get_vadjustment(
PGTKScrolledWindow(Handle))
else
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)), gtk_vscrollbar_get_type) then
Adjustment := PgtkvScrollBar(handle)^.Scrollbar.Range.Adjustment;
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)),
gtk_vscrollbar_get_type)
then
Adjustment := PgtkvScrollBar(handle)^.Scrollbar.Range.Adjustment;
SB_CTL:
if gtk_type_is_a(gtk_object_type(PGTKObject(Handle)), gtk_range_get_type)
then begin
Adjustment := gtk_range_get_adjustment(PGTKRange(Handle));
end;
else
Adjustment := nil;
end;
@ -3872,6 +3887,8 @@ begin
Page_Size := nPage;
Page_Increment := nPage;
end;
//writeln('[TgtkObject.SetScrollInfo] Result=',Result,' Lower=',round(Lower),' Upper=',round(Upper),' Page_Size=',round(Page_Size),' Page_Increment=',round(Page_Increment),' bRedraw=',bRedraw,' Handle=',Handle);
// do we have to set this allways ?
if bRedraw then
@ -4300,6 +4317,9 @@ end;
{ =============================================================================
$Log$
Revision 1.56 2002/01/04 21:07:49 lazarus
MG: added TTreeView
Revision 1.55 2002/01/02 15:24:58 lazarus
MG: added TCanvas.Polygon and TCanvas.Polyline