mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-10-29 15:41:34 +01:00
LCL: TTreeView: mouse click without Shift/Ctrl: single select only if mouse up on mouse down node
git-svn-id: trunk@45971 -
This commit is contained in:
parent
162fe350f3
commit
0062df6edc
@ -3011,7 +3011,8 @@ type
|
|||||||
tvsTripleClicked,
|
tvsTripleClicked,
|
||||||
tvsQuadClicked,
|
tvsQuadClicked,
|
||||||
tvsSelectionChanged,
|
tvsSelectionChanged,
|
||||||
tvsEditOnMouseUp
|
tvsEditOnMouseUp, // if mouse up occurs on mouse down node: activate editing
|
||||||
|
tvsSingleSelectOnMouseUp // if mouse up occurs on mouse down node: single select this node
|
||||||
);
|
);
|
||||||
TTreeViewStates = set of TTreeViewState;
|
TTreeViewStates = set of TTreeViewState;
|
||||||
|
|
||||||
@ -3239,6 +3240,7 @@ type
|
|||||||
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
||||||
procedure MouseMove(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 MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
||||||
|
procedure MouseLeave; override;
|
||||||
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||||
procedure Paint; override;
|
procedure Paint; override;
|
||||||
procedure SetDragMode(Value: TDragMode); override;
|
procedure SetDragMode(Value: TDragMode); override;
|
||||||
|
|||||||
@ -5140,12 +5140,13 @@ procedure TCustomTreeView.MouseDown(Button: TMouseButton; Shift: TShiftState;
|
|||||||
var
|
var
|
||||||
CursorNode: TTreeNode;
|
CursorNode: TTreeNode;
|
||||||
LogicalX: Integer;
|
LogicalX: Integer;
|
||||||
|
CursorNodeSelected: Boolean;
|
||||||
begin
|
begin
|
||||||
{$IFDEF VerboseDrag}
|
{$IFDEF VerboseDrag}
|
||||||
DebugLn('TCustomTreeView.MouseDown A ',Name,':',ClassName,' ');
|
DebugLn('TCustomTreeView.MouseDown A ',Name,':',ClassName,' ');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
fMouseDownPos := Point(X,Y);
|
fMouseDownPos := Point(X,Y);
|
||||||
Exclude(FStates,tvsEditOnMouseUp);
|
FStates:=FStates-[tvsEditOnMouseUp,tvsSingleSelectOnMouseUp];
|
||||||
if Button=mbRight then begin
|
if Button=mbRight then begin
|
||||||
if RightClickSelect then begin
|
if RightClickSelect then begin
|
||||||
Selected:=GetNodeAt(X,Y);
|
Selected:=GetNodeAt(X,Y);
|
||||||
@ -5158,6 +5159,9 @@ begin
|
|||||||
inherited MouseDown(Button, Shift, X, Y);
|
inherited MouseDown(Button, Shift, X, Y);
|
||||||
|
|
||||||
CursorNode := GetNodeAt(X, Y);
|
CursorNode := GetNodeAt(X, Y);
|
||||||
|
CursorNodeSelected := (CursorNode<>nil)
|
||||||
|
and (CursorNode.Selected
|
||||||
|
or ((tvoAllowMultiselect in Options) and CursorNode.MultiSelected));
|
||||||
LogicalX:=X;
|
LogicalX:=X;
|
||||||
if ([ssDouble, ssTriple, ssQuad] * Shift) = [] then
|
if ([ssDouble, ssTriple, ssQuad] * Shift) = [] then
|
||||||
begin
|
begin
|
||||||
@ -5202,8 +5206,10 @@ begin
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
if (Selected <> CursorNode) or Items.IsMultiSelection then
|
if not CursorNodeSelected then
|
||||||
Items.SelectOnlyThis(CursorNode);
|
Items.SelectOnlyThis(CursorNode)
|
||||||
|
else
|
||||||
|
Include(FStates, tvsSingleSelectOnMouseUp);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -5223,6 +5229,8 @@ end;
|
|||||||
|
|
||||||
procedure TCustomTreeView.MouseUp(Button: TMouseButton; Shift: TShiftState;
|
procedure TCustomTreeView.MouseUp(Button: TMouseButton; Shift: TShiftState;
|
||||||
X, Y: Integer);
|
X, Y: Integer);
|
||||||
|
var
|
||||||
|
aMouseDownNode, aMouseUpNode: TTreeNode;
|
||||||
begin
|
begin
|
||||||
inherited MouseUp(Button, Shift, X, Y);
|
inherited MouseUp(Button, Shift, X, Y);
|
||||||
if (Button = mbRight) and (Shift = [ssRight]) and Assigned(PopupMenu) then
|
if (Button = mbRight) and (Shift = [ssRight]) and Assigned(PopupMenu) then
|
||||||
@ -5233,12 +5241,27 @@ begin
|
|||||||
and (FStates * [tvsDblClicked, tvsTripleClicked, tvsQuadClicked] = [])
|
and (FStates * [tvsDblClicked, tvsTripleClicked, tvsQuadClicked] = [])
|
||||||
then begin
|
then begin
|
||||||
//AquirePrimarySelection;
|
//AquirePrimarySelection;
|
||||||
if (tvsEditOnMouseUp in FStates) and (not ReadOnly)
|
aMouseDownNode:=GetNodeAt(fMouseDownPos.X,fMouseDownPos.Y);
|
||||||
and (abs(fMouseDownPos.X-X)+abs(fMouseDownPos.Y-Y)<10)
|
aMouseUpNode:=GetNodeAt(X,Y);
|
||||||
and (GetNodeAt(fMouseDownPos.X,fMouseDownPos.Y)=GetNodeAt(X,Y)) then
|
if (abs(fMouseDownPos.X-X)+abs(fMouseDownPos.Y-Y)<10)
|
||||||
BeginEditing(Selected);
|
and (aMouseDownNode=aMouseUpNode) then
|
||||||
|
begin
|
||||||
|
// mouse up on mouse-down node
|
||||||
|
if (tvsEditOnMouseUp in FStates) and (not ReadOnly) then
|
||||||
|
BeginEditing(Selected)
|
||||||
|
else if (tvsSingleSelectOnMouseUp in FStates) then
|
||||||
|
Items.SelectOnlyThis(aMouseUpNode);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
FStates:=FStates-[tvsDblClicked,tvsTripleClicked,tvsQuadClicked,tvsEditOnMouseUp];
|
FStates:=FStates-[tvsDblClicked,tvsTripleClicked,tvsQuadClicked,
|
||||||
|
tvsEditOnMouseUp,tvsSingleSelectOnMouseUp];
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCustomTreeView.MouseLeave;
|
||||||
|
begin
|
||||||
|
FStates:=FStates-[tvsDblClicked,tvsTripleClicked,tvsQuadClicked,
|
||||||
|
tvsEditOnMouseUp,tvsSingleSelectOnMouseUp];
|
||||||
|
inherited MouseLeave;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomTreeView.Notification(AComponent: TComponent; Operation: TOperation);
|
procedure TCustomTreeView.Notification(AComponent: TComponent; Operation: TOperation);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user