synedit: fixed moving selection by mouse dragging, from Martin Friebe

git-svn-id: trunk@15760 -
This commit is contained in:
mattias 2008-07-13 10:37:18 +00:00
parent cadf49eda8
commit 4fdf213191
3 changed files with 57 additions and 21 deletions

View File

@ -163,7 +163,7 @@ type
{$IFDEF SYN_LAZARUS}
sfTripleClicked, sfQuadClicked, sfPainting,
{$ENDIF}
sfWaitForDragging, sfInsideRedo
sfWaitForDragging,{$IFDEF SYN_LAZARUS} sfIsDragging,{$ENDIF} sfInsideRedo
); //mh 2000-10-30
TSynStateFlags = set of TSynStateFlag;
@ -456,6 +456,9 @@ type
fOnReplaceText: TReplaceTextEvent;
fOnSpecialLineColors: TSpecialLineColorsEvent;
fOnStatusChange: TStatusChangeEvent;
{$IFDEF SYN_LAZARUS}
FOnCtrlLeftMouseUp: TMouseEvent;
{$ENDIF}
{$IFDEF SYN_LAZARUS}
procedure AquirePrimarySelection;
@ -988,6 +991,7 @@ protected
property OnMouseMove;
property OnMouseUp;
{$IFDEF SYN_LAZARUS}
property OnCtrlLeftMouseUp : TMouseEvent read FOnCtrlLeftMouseUp write FOnCtrlLeftMouseUp;
property OnMouseEnter;
property OnMouseLeave;
{$ENDIF}
@ -2423,6 +2427,9 @@ begin
or (Abs(fMouseDownY - Y) >= GetSystemMetrics(SM_CYDRAG))
then begin
Exclude(fStateFlags, sfWaitForDragging);
{$IFDEF SYN_LAZARUS}
Include(fStateFlags, sfIsDragging);
{$ENDIF}
//debugln('TCustomSynEdit.MouseMove BeginDrag');
BeginDrag({$IFDEF SYN_LAZARUS}true{$ELSE}false{$ENDIF});
end;
@ -2436,6 +2443,10 @@ begin
and (Y < ClientHeight{$IFDEF SYN_LAZARUS}-ScrollBarWidth{$ENDIF})
then
ComputeCaret(X, Y);
{$IFDEF SYN_LAZARUS}
if (not(sfIsDragging in fStateFlags))
then
{$ENDIF}
SetBlockEnd({$IFDEF SYN_LAZARUS}PhysicalToLogicalPos(CaretXY)
{$ELSE}CaretXY{$ENDIF});
// should we begin scrolling?
@ -2466,7 +2477,9 @@ begin
end;
fScrollTimer.Enabled := (fScrollDeltaX <> 0) or (fScrollDeltaY <> 0);
{$IFDEF SYN_LAZARUS}
end else if MouseCapture then begin
end else if MouseCapture
and (not(sfIsDragging in fStateFlags))
then begin
MouseCapture:=false;
fScrollTimer.Enabled := False;
{$ENDIF}
@ -2528,6 +2541,10 @@ begin
if fScrollDeltaX > 0 then // scrolling right?
Inc(X, CharsInWindow);
CaretXY := Point(X, C.Y);
{$IFDEF SYN_LAZARUS}
if (not(sfIsDragging in fStateFlags))
then
{$ENDIF}
SetBlockEnd({$IFDEF SYN_LAZARUS}PhysicalToLogicalPos(CaretXY)
{$ELSE}CaretXY{$ENDIF});
end;
@ -2540,6 +2557,10 @@ begin
if fScrollDeltaY > 0 then // scrolling down?
Inc(Y, LinesInWindow - 1);
CaretXY := Point(C.X, Y);
{$IFDEF SYN_LAZARUS}
if (not(sfIsDragging in fStateFlags))
then
{$ENDIF}
SetBlockEnd({$IFDEF SYN_LAZARUS}PhysicalToLogicalPos(CaretXY)
{$ELSE}CaretXY{$ENDIF});
end;
@ -2550,9 +2571,18 @@ end;
procedure TCustomSynEdit.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
{$IFDEF SYN_LAZARUS}
var
wasDragging : Boolean;
{$ENDIF}
begin
//DebugLn('TCustomSynEdit.MouseUp Mouse=',X,',',Y,' Caret=',CaretX,',',CaretY,', BlockBegin=',BlockBegin.X,',',BlockBegin.Y,' BlockEnd=',BlockEnd.X,',',BlockEnd.Y);
{$IFDEF SYN_LAZARUS}
wasDragging := (sfIsDragging in fStateFlags);
Exclude(fStateFlags, sfIsDragging);
{$ENDIF}
inherited MouseUp(Button, Shift, X, Y);
fScrollTimer.Enabled := False;
{$IFDEF SYN_LAZARUS}
MouseCapture := False;
@ -2603,6 +2633,14 @@ begin
Exclude(fStateFlags, sfDblClicked);
Exclude(fStateFlags, sfPossibleGutterClick);
{$ENDIF}
{$IFDEF SYN_LAZARUS}
if (eoShowCtrlMouseLinks in Options)
and not(wasDragging)
and (Button=mbLeft) and (Shift=[ssCtrl])
and assigned(FOnCtrlLeftMouseUp)
then FOnCtrlLeftMouseUp(Self, Button, Shift, X,Y);;
{$ENDIF}
//DebugLn('TCustomSynEdit.MouseUp END Mouse=',X,',',Y,' Caret=',CaretX,',',CaretY,', BlockBegin=',BlockBegin.X,',',BlockBegin.Y,' BlockEnd=',BlockEnd.X,',',BlockEnd.Y);
end;

View File

@ -1669,7 +1669,7 @@ begin
SourceNotebook.OnActivate := @OnSrcNoteBookActivated;
SourceNotebook.OnAddJumpPoint := @OnSrcNoteBookAddJumpPoint;
SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose;
SourceNotebook.OnCtrlMouseUp := @OnSrcNoteBookCtrlMouseUp;
SourceNotebook.OnCtrlLeftMouseUp := @OnSrcNoteBookCtrlMouseUp;
SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged;
SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint;
SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged;

View File

@ -136,7 +136,7 @@ type
FVisible: Boolean;
FOnMouseMove: TMouseMoveEvent;
FOnMouseDown: TMouseEvent;
FOnMouseUp: TMouseEvent;
FOnCtrlLeftMouseUp: TMouseEvent;
FOnMouseWheel : tMouseWheelEvent;
FOnKeyDown: TKeyEvent;
@ -145,7 +145,7 @@ type
Procedure EditorMouseMoved(Sender: TObject; Shift: TShiftState; X,Y:Integer);
Procedure EditorMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X,Y: Integer);
Procedure EditorMouseUp(Sender: TObject; Button: TMouseButton;
Procedure EditorCtrlLeftMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X,Y: Integer);
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
@ -361,7 +361,7 @@ type
write FOnEditorChange;
property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove;
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
property OnMouseUp: TMouseEvent read FOnMouseUp write FOnMouseUp;
property OnCtrlLeftMouseUp: TMouseEvent read FOnCtrlLeftMouseUp write FOnCtrlLeftMouseUp;
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
property Owner: TComponent read FAOwner;
@ -476,7 +476,7 @@ type
FOnAddJumpPoint: TOnAddJumpPoint;
FOnAddWatchAtCursor: TOnAddWatch;
FOnCloseClicked: TOnCloseSrcEditor;
FOnCtrlMouseUp: TMouseEvent;
FOnCtrlLeftMouseUp: TMouseEvent;
FOnCurrentCodeBufferChanged: TNotifyEvent;
FOnDeleteLastJumpPoint: TNotifyEvent;
FOnEditorChanged: TNotifyEvent;
@ -576,7 +576,7 @@ type
X,Y: Integer);
procedure EditorMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftstate; X,Y: Integer);
procedure EditorMouseUp(Sender: TObject; Button: TMouseButton;
procedure EditorCtrlLeftMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftstate; X,Y: Integer);
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
@ -755,8 +755,8 @@ type
read FOnAddJumpPoint write FOnAddJumpPoint;
property OnCloseClicked: TOnCloseSrcEditor
read FOnCloseClicked write FOnCloseClicked;
property OnCtrlMouseUp: TMouseEvent
read FOnCtrlMouseUp write FOnCtrlMouseUp;
property OnCtrlLeftMouseUp: TMouseEvent
read FOnCtrlLeftMouseUp write FOnCtrlLeftMouseUp;
property OnDeleteLastJumpPoint: TNotifyEvent
read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint;
property OnEditorVisibleChanged: TNotifyEvent
@ -2260,7 +2260,7 @@ Begin
OnMouseMove := @EditorMouseMoved;
OnMouseWheel := @EditorMouseWheel;
OnMouseDown := @EditorMouseDown;
OnMouseUp := @EditorMouseUp;
OnCtrlLeftMouseUp := @EditorCtrlLeftMouseUp;
OnKeyDown := @EditorKeyDown;
end;
if FCodeTemplates<>nil then
@ -2665,11 +2665,11 @@ begin
OnMouseDown(Sender, Button, Shift, X,Y);
end;
procedure TSourceEditor.EditorMouseUp(Sender: TObject; Button: TMouseButton;
procedure TSourceEditor.EditorCtrlLeftMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Assigned(OnMouseUp) then
OnMouseUp(Sender, Button, Shift, X,Y);
if Assigned(OnCtrlLeftMouseUp) then
OnCtrlLeftMouseUp(Sender, Button, Shift, X,Y);
end;
Procedure TSourceEditor.EditorKeyDown(Sender: TObject; var Key: Word; Shift :
@ -4388,7 +4388,7 @@ Begin
Result.OnMouseMove := @EditorMouseMove;
Result.OnMouseDown := @EditorMouseDown;
Result.OnMouseWheel := @EditorMouseWheel;
Result.OnMouseUp := @EditorMouseUp;
Result.OnCtrlLeftMouseUp := @EditorCtrlLeftMouseUp;
Result.OnKeyDown :=@EditorKeyDown;
Result.EditorComponent.EndUpdate;
@ -6231,15 +6231,13 @@ begin
HideHint;
end;
procedure TSourceNotebook.EditorMouseUp(Sender: TObject; Button: TMouseButton;
procedure TSourceNotebook.EditorCtrlLeftMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftstate; X, Y: Integer);
begin
if EditorOpts.CtrlMouseLinks and (GetKeyShiftState=[ssCtrl]) then begin
// Control+MouseUp = Find Declaration
if Assigned(FOnCtrlMouseUp) then begin
FOnCtrlMouseUp(Sender,Button,Shift,X,Y);
// CtrlLeftMouseUp = Find Declaration
if Assigned(FOnCtrlLeftMouseUp) then begin
FOnCtrlLeftMouseUp(Sender,Button,Shift,X,Y);
end;
end;
end;
procedure TSourceNotebook.EditorKeyDown(Sender: TObject; var Key: Word;