mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 21:59:14 +02:00
implemented insert marks for TTreeView
git-svn-id: trunk@4508 -
This commit is contained in:
parent
710904b03c
commit
ce91561698
@ -131,7 +131,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure CheckIfFileIsExecutable(const AFilename: string);
|
procedure CheckIfFileIsExecutable(const AFilename: string);
|
||||||
|
{$IFNDEF win32}
|
||||||
var AText: string;
|
var AText: string;
|
||||||
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
// TProcess does not report, if a program can not be executed
|
// TProcess does not report, if a program can not be executed
|
||||||
// to get good error messages consider the OS
|
// to get good error messages consider the OS
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<SaveOnlyProjectUnits Value="True"/>
|
<SaveOnlyProjectUnits Value="True"/>
|
||||||
</Flags>
|
</Flags>
|
||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<ActiveEditorIndexAtStart Value="1"/>
|
<ActiveEditorIndexAtStart Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=""/>
|
<TargetFileExt Value=""/>
|
||||||
<Title Value="holyday"/>
|
<Title Value="holyday"/>
|
||||||
@ -26,7 +26,7 @@
|
|||||||
<UsageCount Value="23"/>
|
<UsageCount Value="23"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
<CursorPos X="14" Y="103"/>
|
<CursorPos X="11" Y="111"/>
|
||||||
<EditorIndex Value="0"/>
|
<EditorIndex Value="0"/>
|
||||||
<Filename Value="main.pas"/>
|
<Filename Value="main.pas"/>
|
||||||
<ComponentName Value="Form1"/>
|
<ComponentName Value="Form1"/>
|
||||||
|
@ -1541,6 +1541,11 @@ type
|
|||||||
TTreeViewOptions = set of TTreeViewOption;
|
TTreeViewOptions = set of TTreeViewOption;
|
||||||
|
|
||||||
TTreeViewExpandSignType = (tvestPlusMinus, tvestArrow);
|
TTreeViewExpandSignType = (tvestPlusMinus, tvestArrow);
|
||||||
|
TTreeViewInsertMarkType = (
|
||||||
|
tvimNone,
|
||||||
|
tvimAsFirstChild, // or as root
|
||||||
|
tvimAsNextSibling,
|
||||||
|
tvimAsPrevSibling);
|
||||||
|
|
||||||
TCustomTreeView = class(TCustomControl)
|
TCustomTreeView = class(TCustomControl)
|
||||||
private
|
private
|
||||||
@ -1558,6 +1563,8 @@ type
|
|||||||
FIndent: integer;
|
FIndent: integer;
|
||||||
FImageChangeLink: TChangeLink;
|
FImageChangeLink: TChangeLink;
|
||||||
FImages: TCustomImageList;
|
FImages: TCustomImageList;
|
||||||
|
FInsertMarkNode: TTreeNode;
|
||||||
|
FInsertMarkType: TTreeViewInsertMarkType;
|
||||||
FLastDropTarget: TTreeNode;
|
FLastDropTarget: TTreeNode;
|
||||||
FLastHorzScrollInfo: TScrollInfo;
|
FLastHorzScrollInfo: TScrollInfo;
|
||||||
FLastVertScrollInfo: TScrollInfo;
|
FLastVertScrollInfo: TScrollInfo;
|
||||||
@ -1594,6 +1601,7 @@ type
|
|||||||
FSelectedColor: TColor;
|
FSelectedColor: TColor;
|
||||||
FSelectedNode: TTreeNode;
|
FSelectedNode: TTreeNode;
|
||||||
FSortType: TSortType;
|
FSortType: TSortType;
|
||||||
|
FStartDragNode: TTreeNode;
|
||||||
FStateChangeLink: TChangeLink;
|
FStateChangeLink: TChangeLink;
|
||||||
FStateImages: TCustomImageList;
|
FStateImages: TCustomImageList;
|
||||||
FStates: TTreeViewStates;
|
FStates: TTreeViewStates;
|
||||||
@ -1644,6 +1652,8 @@ type
|
|||||||
//procedure SetImageList(Value: HImageList; Flags: Integer);
|
//procedure SetImageList(Value: HImageList; Flags: Integer);
|
||||||
procedure SetIndent(Value: Integer);
|
procedure SetIndent(Value: Integer);
|
||||||
procedure SetImages(Value: TCustomImageList);
|
procedure SetImages(Value: TCustomImageList);
|
||||||
|
procedure SetInsertMarkNode(const AValue: TTreeNode);
|
||||||
|
procedure SetInsertMarkType(const AValue: TTreeViewInsertMarkType);
|
||||||
procedure SetKeepCollapsedNodes(Value: Boolean);
|
procedure SetKeepCollapsedNodes(Value: Boolean);
|
||||||
procedure SetReadOnly(Value: Boolean);
|
procedure SetReadOnly(Value: Boolean);
|
||||||
procedure SetRightClickSelect(Value: Boolean);
|
procedure SetRightClickSelect(Value: Boolean);
|
||||||
@ -1700,6 +1710,7 @@ type
|
|||||||
function IsCustomDrawn(Target: TCustomDrawTarget;
|
function IsCustomDrawn(Target: TCustomDrawTarget;
|
||||||
Stage: TCustomDrawStage): Boolean;
|
Stage: TCustomDrawStage): Boolean;
|
||||||
function IsNodeVisible(ANode: TTreeNode): Boolean;
|
function IsNodeVisible(ANode: TTreeNode): Boolean;
|
||||||
|
function IsInsertMarkVisible: boolean; virtual;
|
||||||
procedure Change(Node: TTreeNode); dynamic;
|
procedure Change(Node: TTreeNode); dynamic;
|
||||||
procedure Collapse(Node: TTreeNode); dynamic;
|
procedure Collapse(Node: TTreeNode); dynamic;
|
||||||
procedure CreateParams(var Params: TCreateParams); override;
|
procedure CreateParams(var Params: TCreateParams); override;
|
||||||
@ -1786,6 +1797,10 @@ type
|
|||||||
function CustomSort(SortProc: TTreeNodeCompare): Boolean;
|
function CustomSort(SortProc: TTreeNodeCompare): Boolean;
|
||||||
function GetHitTestInfoAt(X, Y: Integer): THitTests;
|
function GetHitTestInfoAt(X, Y: Integer): THitTests;
|
||||||
function GetNodeAt(X, Y: Integer): TTreeNode;
|
function GetNodeAt(X, Y: Integer): TTreeNode;
|
||||||
|
procedure GetInsertMarkAt(X, Y: Integer; var AnInsertMarkNode: TTreeNode;
|
||||||
|
var AnInsertMarkType: TTreeViewInsertMarkType);
|
||||||
|
procedure SetInsertMark(var AnInsertMarkNode: TTreeNode;
|
||||||
|
var AnInsertMarkType: TTreeViewInsertMarkType);
|
||||||
function IsEditing: Boolean;
|
function IsEditing: Boolean;
|
||||||
procedure BeginUpdate;
|
procedure BeginUpdate;
|
||||||
procedure EndUpdate;
|
procedure EndUpdate;
|
||||||
@ -1807,6 +1822,8 @@ type
|
|||||||
property DropTarget: TTreeNode read GetDropTarget write SetDropTarget;
|
property DropTarget: TTreeNode read GetDropTarget write SetDropTarget;
|
||||||
property ExpandSignType: TTreeViewExpandSignType
|
property ExpandSignType: TTreeViewExpandSignType
|
||||||
read FExpandSignType write SetExpandSignType;
|
read FExpandSignType write SetExpandSignType;
|
||||||
|
property InsertMarkNode: TTreeNode read FInsertMarkNode write SetInsertMarkNode;
|
||||||
|
property InsertMarkType: TTreeViewInsertMarkType read FInsertMarkType write SetInsertMarkType;
|
||||||
property KeepCollapsedNodes: boolean
|
property KeepCollapsedNodes: boolean
|
||||||
read GetKeepCollapsedNodes write SetKeepCollapsedNodes;
|
read GetKeepCollapsedNodes write SetKeepCollapsedNodes;
|
||||||
property Options: TTreeViewOptions read FOptions write SetOptions;
|
property Options: TTreeViewOptions read FOptions write SetOptions;
|
||||||
@ -1818,6 +1835,9 @@ type
|
|||||||
property TopItem: TTreeNode read GetTopItem write SetTopItem;
|
property TopItem: TTreeNode read GetTopItem write SetTopItem;
|
||||||
property TreeLineColor: TColor read FTreeLineColor write FTreeLineColor;
|
property TreeLineColor: TColor read FTreeLineColor write FTreeLineColor;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TTreeView }
|
||||||
|
|
||||||
TTreeView = class(TCustomTreeView)
|
TTreeView = class(TCustomTreeView)
|
||||||
published
|
published
|
||||||
@ -2007,6 +2027,9 @@ end.
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.82 2003/08/21 13:04:10 mattias
|
||||||
|
implemented insert marks for TTreeView
|
||||||
|
|
||||||
Revision 1.81 2003/08/14 15:31:42 mattias
|
Revision 1.81 2003/08/14 15:31:42 mattias
|
||||||
started TTabSheet and TPageControl
|
started TTabSheet and TPageControl
|
||||||
|
|
||||||
|
@ -1237,7 +1237,7 @@ var
|
|||||||
|
|
||||||
DragCapture : HWND;
|
DragCapture : HWND;
|
||||||
DragControl : TControl;
|
DragControl : TControl;
|
||||||
DragFreeObject : Boolean;
|
DragObjectAutoFree : Boolean;
|
||||||
DragObject : TDragObject;
|
DragObject : TDragObject;
|
||||||
//DragSaveCursor : HCURSOR;
|
//DragSaveCursor : HCURSOR;
|
||||||
DragStartPos : TPoint;
|
DragStartPos : TPoint;
|
||||||
@ -1318,11 +1318,11 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
{DragIntit}
|
{DragIntit}
|
||||||
Procedure DragInit(aDragObject : TDragObject; Immediate : Boolean;
|
Procedure DragInit(aDragObject: TDragObject; Immediate: Boolean;
|
||||||
Threshold : Integer);
|
Threshold: Integer);
|
||||||
Begin
|
Begin
|
||||||
DragObject := ADragObject;
|
DragObject := ADragObject;
|
||||||
DragObject.Dragtarget := nil;
|
DragObject.DragTarget := nil;
|
||||||
GetCursorPos(DragStartPos);
|
GetCursorPos(DragStartPos);
|
||||||
DragObject.DragPos := DragStartPos;
|
DragObject.DragPos := DragStartPos;
|
||||||
DragCapture := DragObject.Capture;
|
DragCapture := DragObject.Capture;
|
||||||
@ -1341,7 +1341,7 @@ begin
|
|||||||
ok:=false;
|
ok:=false;
|
||||||
try
|
try
|
||||||
DragObject := nil;
|
DragObject := nil;
|
||||||
DragFreeObject := False;
|
DragObjectAutoFree := False;
|
||||||
if Control.fDragKind = dkDrag then
|
if Control.fDragKind = dkDrag then
|
||||||
begin
|
begin
|
||||||
Control.DoStartDrag(DragObject);
|
Control.DoStartDrag(DragObject);
|
||||||
@ -1349,7 +1349,7 @@ begin
|
|||||||
if DragObject = nil then
|
if DragObject = nil then
|
||||||
Begin
|
Begin
|
||||||
DragObject := TDragControlObject.Create(Control);
|
DragObject := TDragControlObject.Create(Control);
|
||||||
DragFreeObject := True;
|
DragObjectAutoFree := True;
|
||||||
End;
|
End;
|
||||||
end;
|
end;
|
||||||
DragInit(DragObject,Immediate,Threshold);
|
DragInit(DragObject,Immediate,Threshold);
|
||||||
@ -1360,7 +1360,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
Procedure DragTo(P : TPoint);
|
Procedure DragTo(P : TPoint);
|
||||||
Begin
|
Begin
|
||||||
Assert(False, 'Trace:********************************************');
|
Assert(False, 'Trace:********************************************');
|
||||||
@ -1424,8 +1423,8 @@ Begin
|
|||||||
DragControl := nil;
|
DragControl := nil;
|
||||||
end;
|
end;
|
||||||
DragObject := nil;
|
DragObject := nil;
|
||||||
if DragFreeObject then DragSave.Free;
|
if DragObjectAutoFree then DragSave.Free;
|
||||||
DragFreeObject := False;
|
DragObjectAutoFree := False;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
@ -1636,6 +1635,9 @@ end.
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.141 2003/08/21 13:04:10 mattias
|
||||||
|
implemented insert marks for TTreeView
|
||||||
|
|
||||||
Revision 1.140 2003/08/14 15:31:42 mattias
|
Revision 1.140 2003/08/14 15:31:42 mattias
|
||||||
started TTabSheet and TPageControl
|
started TTabSheet and TPageControl
|
||||||
|
|
||||||
|
@ -43,8 +43,8 @@ end;
|
|||||||
Threshold: default -1, distance to move before dragging starts
|
Threshold: default -1, distance to move before dragging starts
|
||||||
Returns: Nothing
|
Returns: Nothing
|
||||||
|
|
||||||
Starts the dragging of a control. If the Immidiate flag is set, dragging
|
Starts the dragging of a control. If the Immediate flag is set, dragging
|
||||||
starts immediate.
|
starts immediately.
|
||||||
------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
procedure TControl.BeginDrag(Immediate: Boolean; Threshold: Integer);
|
procedure TControl.BeginDrag(Immediate: Boolean; Threshold: Integer);
|
||||||
var
|
var
|
||||||
@ -649,27 +649,23 @@ procedure TControl.DragCanceled;
|
|||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{------------------------------------------------------------------------------
|
||||||
|
TControl.DoStartDrag
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
{ TControl.DoStartDrag
|
|
||||||
}
|
|
||||||
{------------------------------------------------------------------------------}
|
|
||||||
procedure TControl.DoStartDrag(var DragObject: TDragObject);
|
procedure TControl.DoStartDrag(var DragObject: TDragObject);
|
||||||
begin
|
begin
|
||||||
if Assigned(FOnStartDrag) then FOnStartDrag(Self, DragObject);
|
if Assigned(FOnStartDrag) then FOnStartDrag(Self, DragObject);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------
|
||||||
{ TControl.DoStartDrag
|
TControl.DoEndDrag
|
||||||
}
|
------------------------------------------------------------------------------}
|
||||||
{------------------------------------------------------------------------------}
|
Procedure TControl.DoEndDrag(Target: TObject; X,Y: Integer);
|
||||||
Procedure TControl.DoEndDrag(Target: TObject; X,Y : Integer);
|
|
||||||
Begin
|
Begin
|
||||||
|
if Assigned(FOnEndDrag) then FOnEndDrag(Self,Target,X,Y);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
TControl.Perform
|
TControl.Perform
|
||||||
|
|
||||||
@ -2472,6 +2468,9 @@ end;
|
|||||||
|
|
||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.147 2003/08/21 13:04:10 mattias
|
||||||
|
implemented insert marks for TTreeView
|
||||||
|
|
||||||
Revision 1.146 2003/08/14 15:31:42 mattias
|
Revision 1.146 2003/08/14 15:31:42 mattias
|
||||||
started TTabSheet and TPageControl
|
started TTabSheet and TPageControl
|
||||||
|
|
||||||
|
@ -1001,6 +1001,7 @@ procedure TTreeNode.Unbind;
|
|||||||
// unbind from parent and neighbor siblings
|
// unbind from parent and neighbor siblings
|
||||||
var OldIndex, i: integer;
|
var OldIndex, i: integer;
|
||||||
HigherNode: TTreeNode;
|
HigherNode: TTreeNode;
|
||||||
|
TheTreeView: TCustomTreeView;
|
||||||
begin
|
begin
|
||||||
{$IFDEF TREEVIEW_DEBUG}
|
{$IFDEF TREEVIEW_DEBUG}
|
||||||
writeln('[TTreeNode.Unbind] Self=',HexStr(Cardinal(Self),8),' Self.Text=',Text);
|
writeln('[TTreeNode.Unbind] Self=',HexStr(Cardinal(Self),8),' Self.Text=',Text);
|
||||||
@ -1010,11 +1011,14 @@ begin
|
|||||||
Owner.ClearCache;
|
Owner.ClearCache;
|
||||||
if FParent=nil then
|
if FParent=nil then
|
||||||
Owner.MoveTopLvlNode(Owner.IndexOfTopLvlItem(Self),-1,Self);
|
Owner.MoveTopLvlNode(Owner.IndexOfTopLvlItem(Self),-1,Self);
|
||||||
if Owner.Owner<>nil then begin
|
TheTreeView:=Owner.Owner;
|
||||||
Owner.Owner.FStates:=Owner.Owner.FStates+[tvsMaxRightNeedsUpdate,
|
if TheTreeView<>nil then begin
|
||||||
|
TheTreeView.FStates:=TheTreeView.FStates+[tvsMaxRightNeedsUpdate,
|
||||||
tvsTopsNeedsUpdate,tvsTopItemNeedsUpdate,tvsBottomItemNeedsUpdate];
|
tvsTopsNeedsUpdate,tvsTopItemNeedsUpdate,tvsBottomItemNeedsUpdate];
|
||||||
if Owner.Owner.FLastDropTarget=Self then
|
if TheTreeView.FLastDropTarget=Self then
|
||||||
Owner.Owner.FLastDropTarget:=nil;
|
TheTreeView.FLastDropTarget:=nil;
|
||||||
|
if TheTreeView.FInsertMarkNode=Self then
|
||||||
|
TheTreeView.FInsertMarkNode:=nil;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
UnbindFromMultiSelected;
|
UnbindFromMultiSelected;
|
||||||
@ -3260,6 +3264,76 @@ begin
|
|||||||
end;}
|
end;}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomTreeView.GetInsertMarkAt(X, Y: Integer;
|
||||||
|
var AnInsertMarkNode: TTreeNode; var AnInsertMarkType: TTreeViewInsertMarkType
|
||||||
|
);
|
||||||
|
var
|
||||||
|
ANode: TTreeNode;
|
||||||
|
NodeRect: TRect;
|
||||||
|
NodeMidY: integer;
|
||||||
|
begin
|
||||||
|
ANode:=GetNodeAtY(Y);
|
||||||
|
if ANode<>nil then begin
|
||||||
|
AnInsertMarkNode:=ANode;
|
||||||
|
if (X>AnInsertMarkNode.DisplayExpandSignRight) then
|
||||||
|
// insert as first child of pointed node
|
||||||
|
AnInsertMarkType:=tvimAsFirstChild
|
||||||
|
else begin
|
||||||
|
NodeRect:=ANode.DisplayRect(false);
|
||||||
|
NodeMidY:=(NodeRect.Top+NodeRect.Bottom) div 2;
|
||||||
|
if Y>=NodeMidY then begin
|
||||||
|
if ANode.Expanded and ANode.HasChildren then begin
|
||||||
|
// insert as first child of pointed node
|
||||||
|
AnInsertMarkType:=tvimAsFirstChild;
|
||||||
|
end else begin
|
||||||
|
// insert as next sibling of pointed node
|
||||||
|
AnInsertMarkType:=tvimAsNextSibling;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
AnInsertMarkType:=tvimAsPrevSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
// insert behind all nodes
|
||||||
|
ANode:=Items.GetLastExpandedSubNode;
|
||||||
|
if ANode<>nil then begin
|
||||||
|
AnInsertMarkNode:=ANode;
|
||||||
|
if X>AnInsertMarkNode.DisplayExpandSignRight then
|
||||||
|
// insert as first child of last visible node
|
||||||
|
AnInsertMarkType:=tvimAsFirstChild
|
||||||
|
else
|
||||||
|
// insert as next sibling of last visible node
|
||||||
|
AnInsertMarkType:=tvimAsNextSibling;
|
||||||
|
end else begin
|
||||||
|
// insert as new root
|
||||||
|
AnInsertMarkNode:=nil;
|
||||||
|
AnInsertMarkType:=tvimAsFirstChild;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// normalize
|
||||||
|
if (AnInsertMarkType=tvimAsPrevSibling) and (AnInsertMarkNode<>nil) then begin
|
||||||
|
if (AnInsertMarkNode.GetPrevSibling<>nil) then begin
|
||||||
|
if (AnInsertMarkNode.GetPrevSibling.Expanded=false)
|
||||||
|
and (AnInsertMarkNode.GetPrevSibling.IsVisible) then begin
|
||||||
|
AnInsertMarkNode:=AnInsertMarkNode.GetPrevSibling;
|
||||||
|
AnInsertMarkType:=tvimAsNextSibling;
|
||||||
|
end;
|
||||||
|
end else if (AnInsertMarkNode.Parent<>nil)
|
||||||
|
and (AnInsertMarkNode.IsVisible) then begin
|
||||||
|
AnInsertMarkNode:=AnInsertMarkNode.Parent;
|
||||||
|
AnInsertMarkType:=tvimAsFirstChild;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCustomTreeView.SetInsertMark(var AnInsertMarkNode: TTreeNode;
|
||||||
|
var AnInsertMarkType: TTreeViewInsertMarkType);
|
||||||
|
begin
|
||||||
|
InsertMarkNode:=AnInsertMarkNode;
|
||||||
|
InsertMarkType:=AnInsertMarkType;
|
||||||
|
end;
|
||||||
|
|
||||||
function TCustomTreeView.GetHitTestInfoAt(X, Y: Integer): THitTests;
|
function TCustomTreeView.GetHitTestInfoAt(X, Y: Integer): THitTests;
|
||||||
//var HitTest: TTVHitTestInfo;
|
//var HitTest: TTVHitTestInfo;
|
||||||
var Node: TTreeNode;
|
var Node: TTreeNode;
|
||||||
@ -3927,6 +4001,12 @@ begin
|
|||||||
inherited WndProc(Message);
|
inherited WndProc(Message);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCustomTreeView.IsInsertMarkVisible: boolean;
|
||||||
|
begin
|
||||||
|
Result:=(FInsertMarkType<>tvimNone) and (FInsertMarkNode<>nil)
|
||||||
|
and (FInsertMarkNode.IsVisible);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomTreeView.DoStartDrag(var DragObject: TDragObject);
|
procedure TCustomTreeView.DoStartDrag(var DragObject: TDragObject);
|
||||||
{var
|
{var
|
||||||
ImageHandle: HImageList;
|
ImageHandle: HImageList;
|
||||||
@ -4005,6 +4085,7 @@ var
|
|||||||
a,HalfBorderWidth:integer;
|
a,HalfBorderWidth:integer;
|
||||||
SpaceRect, DrawRect: TRect;
|
SpaceRect, DrawRect: TRect;
|
||||||
Node: TTreeNode;
|
Node: TTreeNode;
|
||||||
|
InsertMarkRect: TRect;
|
||||||
begin
|
begin
|
||||||
if [tvsUpdating,tvsPainting]*FStates<>[] then exit;
|
if [tvsUpdating,tvsPainting]*FStates<>[] then exit;
|
||||||
Include(FStates,tvsPainting);
|
Include(FStates,tvsPainting);
|
||||||
@ -4026,6 +4107,14 @@ begin
|
|||||||
//write('[TCustomTreeView.DoPaint] B Node=',HexStr(Cardinal(Node),8));
|
//write('[TCustomTreeView.DoPaint] B Node=',HexStr(Cardinal(Node),8));
|
||||||
//if Node<>nil then writeln(' Node.Text=',Node.Text) else writeln('');
|
//if Node<>nil then writeln(' Node.Text=',Node.Text) else writeln('');
|
||||||
end;
|
end;
|
||||||
|
// draw insert mark for new root node
|
||||||
|
if (InsertMarkType=tvimAsFirstChild)
|
||||||
|
and (Items.Count=0) then begin
|
||||||
|
Pen.Color:=FTreeLineColor;
|
||||||
|
Brush.Color:=FSelectedColor;
|
||||||
|
InsertMarkRect:=Rect(0,0,ClientWidth,2);
|
||||||
|
Rectangle(InsertMarkRect);
|
||||||
|
end;
|
||||||
// draw unused space below nodes
|
// draw unused space below nodes
|
||||||
SpaceRect:=Rect(BorderWidth,BorderWidth,
|
SpaceRect:=Rect(BorderWidth,BorderWidth,
|
||||||
(ClientWidth-ScrollBarWidth)-BorderWidth,
|
(ClientWidth-ScrollBarWidth)-BorderWidth,
|
||||||
@ -4098,14 +4187,17 @@ var
|
|||||||
Canvas.MoveTo(CurMid,VertMid);
|
Canvas.MoveTo(CurMid,VertMid);
|
||||||
Canvas.LineTo(Result+Indent,VertMid);
|
Canvas.LineTo(Result+Indent,VertMid);
|
||||||
end;
|
end;
|
||||||
if CurNode.GetNextSibling<>nil then begin
|
if (CurNode.GetNextSibling<>nil) then begin
|
||||||
// draw vertical line to next brother
|
// draw vertical line to next brother
|
||||||
Canvas.MoveTo(CurMid,NodeRect.Top);
|
Canvas.MoveTo(CurMid,NodeRect.Top);
|
||||||
Canvas.LineTo(CurMid,NodeRect.Bottom);
|
Canvas.LineTo(CurMid,NodeRect.Bottom);
|
||||||
end else if CurNode=Node then begin
|
end else if CurNode=Node then begin
|
||||||
// draw vertical line from top to horizontal line
|
// draw vertical line from top to horizontal line
|
||||||
Canvas.MoveTo(CurMid,NodeRect.Top);
|
Canvas.MoveTo(CurMid,NodeRect.Top);
|
||||||
Canvas.LineTo(CurMid,VertMid);
|
if ((InsertMarkNode=Node) and (InsertMarkType=tvimAsNextSibling)) then
|
||||||
|
Canvas.LineTo(CurMid,NodeRect.Bottom-1)
|
||||||
|
else
|
||||||
|
Canvas.LineTo(CurMid,VertMid);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
inc(Result,Indent);
|
inc(Result,Indent);
|
||||||
@ -4162,7 +4254,84 @@ var
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure DrawInsertMark;
|
||||||
|
var
|
||||||
|
InsertMarkRect: TRect;
|
||||||
|
x: Integer;
|
||||||
|
begin
|
||||||
|
case InsertMarkType of
|
||||||
|
|
||||||
|
tvimAsFirstChild:
|
||||||
|
if InsertMarkNode=Node then begin
|
||||||
|
// draw insert mark for new first child
|
||||||
|
with Canvas do begin
|
||||||
|
// draw virtual tree line
|
||||||
|
Pen.Color:=TreeLineColor;
|
||||||
|
Pen.Style:=psDot;
|
||||||
|
x:=Node.DisplayExpandSignRight+Indent div 2;
|
||||||
|
MoveTo(x,NodeRect.Bottom-3);
|
||||||
|
LineTo(x,NodeRect.Bottom-2);
|
||||||
|
x:=Node.DisplayExpandSignRight+Indent;
|
||||||
|
LineTo(x,NodeRect.Bottom-2);
|
||||||
|
Pen.Style:=psSolid;
|
||||||
|
|
||||||
|
// draw virtual rectangle
|
||||||
|
Pen.Color:=TreeLineColor;
|
||||||
|
Brush.Color:=FSelectedColor;
|
||||||
|
InsertMarkRect:=Rect(x,NodeRect.Bottom-3,
|
||||||
|
NodeRect.Right,NodeRect.Bottom-1);
|
||||||
|
Rectangle(InsertMarkRect);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
tvimAsPrevSibling:
|
||||||
|
if InsertMarkNode=Node then begin
|
||||||
|
// draw insert mark for new previous sibling
|
||||||
|
with Canvas do begin
|
||||||
|
// draw virtual tree line
|
||||||
|
Pen.Color:=TreeLineColor;
|
||||||
|
Pen.Style:=psDot;
|
||||||
|
x:=Node.DisplayExpandSignLeft+Indent div 2;
|
||||||
|
MoveTo(x,NodeRect.Top+1);
|
||||||
|
x:=Node.DisplayExpandSignRight;
|
||||||
|
LineTo(x,NodeRect.Top+1);
|
||||||
|
Pen.Style:=psSolid;
|
||||||
|
|
||||||
|
// draw virtual rectangle
|
||||||
|
Pen.Color:=TreeLineColor;
|
||||||
|
Brush.Color:=FSelectedColor;
|
||||||
|
InsertMarkRect:=Rect(x,NodeRect.Top,
|
||||||
|
NodeRect.Right,NodeRect.Top+2);
|
||||||
|
Rectangle(InsertMarkRect);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
tvimAsNextSibling:
|
||||||
|
if InsertMarkNode=Node then begin
|
||||||
|
// draw insert mark for new next sibling
|
||||||
|
with Canvas do begin
|
||||||
|
// draw virtual tree line
|
||||||
|
Pen.Color:=TreeLineColor;
|
||||||
|
Pen.Style:=psDot;
|
||||||
|
x:=Node.DisplayExpandSignLeft+Indent div 2;
|
||||||
|
MoveTo(x,NodeRect.Bottom-3);
|
||||||
|
LineTo(x,NodeRect.Bottom-2);
|
||||||
|
x:=Node.DisplayExpandSignRight;
|
||||||
|
LineTo(x,NodeRect.Bottom-2);
|
||||||
|
Pen.Style:=psSolid;
|
||||||
|
|
||||||
|
// draw virtual rectangle
|
||||||
|
Pen.Color:=TreeLineColor;
|
||||||
|
Brush.Color:=FSelectedColor;
|
||||||
|
InsertMarkRect:=Rect(x,NodeRect.Bottom-3,
|
||||||
|
NodeRect.Right,NodeRect.Bottom-1);
|
||||||
|
Rectangle(InsertMarkRect);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
var x, ImgIndex: integer;
|
var x, ImgIndex: integer;
|
||||||
CurBackgroundColor, OldFontColor: TColor;
|
CurBackgroundColor, OldFontColor: TColor;
|
||||||
@ -4248,6 +4417,8 @@ begin
|
|||||||
MoveTo(NodeRect.Left,NodeRect.Bottom-1);
|
MoveTo(NodeRect.Left,NodeRect.Bottom-1);
|
||||||
LineTo(NodeRect.Right,NodeRect.Bottom-1);
|
LineTo(NodeRect.Right,NodeRect.Bottom-1);
|
||||||
end;
|
end;
|
||||||
|
// draw insert mark
|
||||||
|
DrawInsertMark;
|
||||||
end;
|
end;
|
||||||
if Assigned(OnCustomDrawItem) or Assigned(FOnAdvancedCustomDrawItem) then
|
if Assigned(OnCustomDrawItem) or Assigned(FOnAdvancedCustomDrawItem) then
|
||||||
begin
|
begin
|
||||||
@ -4435,8 +4606,10 @@ begin
|
|||||||
bStartDrag := true;
|
bStartDrag := true;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if (bStartDrag) then
|
if (bStartDrag) then begin
|
||||||
|
FStartDragNode:=CursorNode;
|
||||||
Include(fStates, tvsWaitForDragging);
|
Include(fStates, tvsWaitForDragging);
|
||||||
|
end;
|
||||||
if Button=mbMiddle then begin
|
if Button=mbMiddle then begin
|
||||||
// insert primary selection text
|
// insert primary selection text
|
||||||
|
|
||||||
@ -4452,6 +4625,9 @@ begin
|
|||||||
if (Abs(fMouseDownX - X) >= GetSystemMetrics(SM_CXDRAG))
|
if (Abs(fMouseDownX - X) >= GetSystemMetrics(SM_CXDRAG))
|
||||||
or (Abs(fMouseDownY - Y) >= GetSystemMetrics(SM_CYDRAG))
|
or (Abs(fMouseDownY - Y) >= GetSystemMetrics(SM_CYDRAG))
|
||||||
then begin
|
then begin
|
||||||
|
{$IFDEF VerboseDrag}
|
||||||
|
writeln('TCustomTreeView.MouseMove A Begindrag ',Name,':',ClassName,' ');
|
||||||
|
{$ENDIF}
|
||||||
Exclude(fStates, tvsWaitForDragging);
|
Exclude(fStates, tvsWaitForDragging);
|
||||||
BeginDrag(false);
|
BeginDrag(false);
|
||||||
end;
|
end;
|
||||||
@ -4502,6 +4678,29 @@ begin
|
|||||||
Invalidate;
|
Invalidate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomTreeView.SetInsertMarkNode(const AValue: TTreeNode);
|
||||||
|
var
|
||||||
|
InvalidateNeeded: Boolean;
|
||||||
|
begin
|
||||||
|
if FInsertMarkNode=AValue then exit;
|
||||||
|
InvalidateNeeded:=IsInsertMarkVisible;
|
||||||
|
FInsertMarkNode:=AValue;
|
||||||
|
InvalidateNeeded:=InvalidateNeeded or IsInsertMarkVisible;
|
||||||
|
if InvalidateNeeded then Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCustomTreeView.SetInsertMarkType(
|
||||||
|
const AValue: TTreeViewInsertMarkType);
|
||||||
|
var
|
||||||
|
InvalidateNeeded: Boolean;
|
||||||
|
begin
|
||||||
|
if FInsertMarkType=AValue then exit;
|
||||||
|
InvalidateNeeded:=IsInsertMarkVisible;
|
||||||
|
FInsertMarkType:=AValue;
|
||||||
|
InvalidateNeeded:=InvalidateNeeded or IsInsertMarkVisible;
|
||||||
|
if InvalidateNeeded then Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomTreeView.SetStateImages(Value: TCustomImageList);
|
procedure TCustomTreeView.SetStateImages(Value: TCustomImageList);
|
||||||
begin
|
begin
|
||||||
if FStateImages=Value then exit;
|
if FStateImages=Value then exit;
|
||||||
|
@ -776,7 +776,6 @@ function TWinControl.GetClientRect: TRect;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
//r: TRect;
|
|
||||||
InterfaceWidth, InterfaceHeight: integer;
|
InterfaceWidth, InterfaceHeight: integer;
|
||||||
begin
|
begin
|
||||||
if not HandleAllocated then begin
|
if not HandleAllocated then begin
|
||||||
@ -2948,6 +2947,9 @@ end;
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.160 2003/08/21 13:04:10 mattias
|
||||||
|
implemented insert marks for TTreeView
|
||||||
|
|
||||||
Revision 1.159 2003/08/12 16:12:42 mattias
|
Revision 1.159 2003/08/12 16:12:42 mattias
|
||||||
reduced output
|
reduced output
|
||||||
|
|
||||||
|
@ -1462,7 +1462,7 @@ begin
|
|||||||
dec(LeftTop.X,2);
|
dec(LeftTop.X,2);
|
||||||
ReleaseDC(ParentHandle, DC);
|
ReleaseDC(ParentHandle, DC);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
Left:=LeftTop.X;
|
Left:=LeftTop.X;
|
||||||
Top:=LeftTop.Y;
|
Top:=LeftTop.Y;
|
||||||
@ -2419,6 +2419,9 @@ end;
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.55 2003/08/21 13:04:10 mattias
|
||||||
|
implemented insert marks for TTreeView
|
||||||
|
|
||||||
Revision 1.54 2003/08/21 06:52:47 mattias
|
Revision 1.54 2003/08/21 06:52:47 mattias
|
||||||
size fixes from Karl
|
size fixes from Karl
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user