mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 03:21:28 +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; | ||||||
|   FStates:=FStates-[tvsDblClicked,tvsTripleClicked,tvsQuadClicked,tvsEditOnMouseUp]; |   end; | ||||||
|  |   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
	 mattias
						mattias