mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-30 05:58:13 +02:00
IDE: using find declaration for source editor hyperlinks, from Martin Friebe and Alexander Klenin
git-svn-id: trunk@17816 -
This commit is contained in:
parent
ff17c1142f
commit
4ec7c62a72
@ -306,6 +306,9 @@ type
|
|||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
|
TSynMouseLinkEvent = procedure (
|
||||||
|
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean) of object;
|
||||||
|
|
||||||
{ TCustomSynEdit }
|
{ TCustomSynEdit }
|
||||||
|
|
||||||
TCustomSynEdit = class(TSynEditBase)
|
TCustomSynEdit = class(TSynEditBase)
|
||||||
@ -437,6 +440,7 @@ type
|
|||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
FOnSpecialLineMarkup: TSpecialLineMarkupEvent;// needed, because bug fpc 11926
|
FOnSpecialLineMarkup: TSpecialLineMarkupEvent;// needed, because bug fpc 11926
|
||||||
FOnClickLink: TMouseEvent;
|
FOnClickLink: TMouseEvent;
|
||||||
|
FOnMouseLink: TSynMouseLinkEvent;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
@ -753,6 +757,7 @@ type
|
|||||||
var Attri: TSynHighlighterAttributes): boolean; //L505
|
var Attri: TSynHighlighterAttributes): boolean; //L505
|
||||||
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
function IsLinkable(Y, X1, X2: Integer): Boolean;
|
||||||
procedure GetWordBoundsAtRowCol(const XY: TPoint; var StartX, EndX: integer);
|
procedure GetWordBoundsAtRowCol(const XY: TPoint; var StartX, EndX: integer);
|
||||||
function GetLineIndentProposal(Line: integer;
|
function GetLineIndentProposal(Line: integer;
|
||||||
IgnoreCurrentLineText: boolean): integer;
|
IgnoreCurrentLineText: boolean): integer;
|
||||||
@ -1039,6 +1044,7 @@ type
|
|||||||
property OnMouseUp;
|
property OnMouseUp;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
property OnClickLink : TMouseEvent read FOnClickLink write FOnClickLink;
|
property OnClickLink : TMouseEvent read FOnClickLink write FOnClickLink;
|
||||||
|
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
||||||
property OnMouseEnter;
|
property OnMouseEnter;
|
||||||
property OnMouseLeave;
|
property OnMouseLeave;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -3270,7 +3276,10 @@ var
|
|||||||
exit;
|
exit;
|
||||||
GetWordBoundsAtRowCol(PhysicalToLogicalPos(fLastMouseCaret),
|
GetWordBoundsAtRowCol(PhysicalToLogicalPos(fLastMouseCaret),
|
||||||
fLastCtrlMouseLinkX1,fLastCtrlMouseLinkX2);
|
fLastCtrlMouseLinkX1,fLastCtrlMouseLinkX2);
|
||||||
if fLastCtrlMouseLinkX1=fLastCtrlMouseLinkX2 then
|
if
|
||||||
|
not IsLinkable(
|
||||||
|
fLastMouseCaret.Y, fLastCtrlMouseLinkX1, fLastCtrlMouseLinkX2)
|
||||||
|
then
|
||||||
exit;
|
exit;
|
||||||
fLastCtrlMouseLinkY:=fLastMouseCaret.Y;
|
fLastCtrlMouseLinkY:=fLastMouseCaret.Y;
|
||||||
with fMarkupCtrlMouse do begin
|
with fMarkupCtrlMouse do begin
|
||||||
@ -5998,7 +6007,7 @@ procedure TCustomSynEdit.UpdateCtrlMouse;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
NewY, NewX1, NewX2: integer;
|
NewY, NewX1, NewX2: Integer;
|
||||||
begin
|
begin
|
||||||
fLastControlIsPressed:=(GetKeyShiftState=[SYNEDIT_LINK_MODIFIER]);
|
fLastControlIsPressed:=(GetKeyShiftState=[SYNEDIT_LINK_MODIFIER]);
|
||||||
if (eoShowCtrlMouseLinks in Options) and fLastControlIsPressed
|
if (eoShowCtrlMouseLinks in Options) and fLastControlIsPressed
|
||||||
@ -6006,7 +6015,7 @@ begin
|
|||||||
// show link
|
// show link
|
||||||
NewY:=fLastMouseCaret.Y;
|
NewY:=fLastMouseCaret.Y;
|
||||||
GetWordBoundsAtRowCol(PhysicalToLogicalPos(fLastMouseCaret),NewX1,NewX2);
|
GetWordBoundsAtRowCol(PhysicalToLogicalPos(fLastMouseCaret),NewX1,NewX2);
|
||||||
if NewX1<>NewX2 then begin
|
if IsLinkable(NewY, NewX1, NewX2) then begin
|
||||||
// there is a word to underline as link
|
// there is a word to underline as link
|
||||||
if (NewY<>fLastCtrlMouseLinkY)
|
if (NewY<>fLastCtrlMouseLinkY)
|
||||||
or (NewX1<>fLastCtrlMouseLinkX1)
|
or (NewX1<>fLastCtrlMouseLinkX1)
|
||||||
@ -6075,6 +6084,14 @@ function TCustomSynEdit.IsIdentChar(const c: TUTF8Char): boolean;
|
|||||||
begin
|
begin
|
||||||
Result:=(length(c)=1) and (c[1] in IdentChars);
|
Result:=(length(c)=1) and (c[1] in IdentChars);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCustomSynEdit.IsLinkable(Y, X1, X2: Integer): Boolean;
|
||||||
|
begin
|
||||||
|
Result := X1 <> X2;
|
||||||
|
if Result and Assigned(FOnMouseLink) then
|
||||||
|
FOnMouseLink(Self, X1, Y, Result);
|
||||||
|
end;
|
||||||
|
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
procedure TCustomSynEdit.SetBookMark(BookMark: Integer; X: Integer; Y: Integer);
|
procedure TCustomSynEdit.SetBookMark(BookMark: Integer; X: Integer; Y: Integer);
|
||||||
|
16
ide/main.pp
16
ide/main.pp
@ -353,6 +353,8 @@ type
|
|||||||
APageIndex: integer; DeleteForwardHistory: boolean);
|
APageIndex: integer; DeleteForwardHistory: boolean);
|
||||||
procedure OnSrcNoteBookClickLink(Sender: TObject;
|
procedure OnSrcNoteBookClickLink(Sender: TObject;
|
||||||
Button: TMouseButton; Shift: TShiftstate; X, Y: Integer);
|
Button: TMouseButton; Shift: TShiftstate; X, Y: Integer);
|
||||||
|
procedure OnSrcNoteBookMouseLink(
|
||||||
|
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean);
|
||||||
procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject);
|
procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject);
|
||||||
procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject);
|
procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject);
|
||||||
procedure OnSrcNotebookEditorChanged(Sender: TObject);
|
procedure OnSrcNotebookEditorChanged(Sender: TObject);
|
||||||
@ -1776,6 +1778,7 @@ begin
|
|||||||
SourceNotebook.OnAddJumpPoint := @OnSrcNoteBookAddJumpPoint;
|
SourceNotebook.OnAddJumpPoint := @OnSrcNoteBookAddJumpPoint;
|
||||||
SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose;
|
SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose;
|
||||||
SourceNotebook.OnClickLink := @OnSrcNoteBookClickLink;
|
SourceNotebook.OnClickLink := @OnSrcNoteBookClickLink;
|
||||||
|
SourceNotebook.OnMouseLink := @OnSrcNoteBookMouseLink;
|
||||||
SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged;
|
SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged;
|
||||||
SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint;
|
SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint;
|
||||||
SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged;
|
SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged;
|
||||||
@ -13675,6 +13678,19 @@ begin
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMainIDE.OnSrcNoteBookMouseLink(
|
||||||
|
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean);
|
||||||
|
var
|
||||||
|
ActiveSrcEdit: TSourceEditor;
|
||||||
|
ActiveUnitInfo: TUnitInfo;
|
||||||
|
NewSource: TCodeBuffer;
|
||||||
|
NewX, NewY, NewTopLine: integer;
|
||||||
|
begin
|
||||||
|
if not BeginCodeTool(ActiveSrcEdit,ActiveUnitInfo,[]) then exit;
|
||||||
|
AllowMouseLink := CodeToolBoss.FindDeclaration(
|
||||||
|
ActiveUnitInfo.Source,X,Y,NewSource,NewX,NewY,NewTopLine);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.OnSrcNotebookMovingPage(Sender: TObject; OldPageIndex,
|
procedure TMainIDE.OnSrcNotebookMovingPage(Sender: TObject; OldPageIndex,
|
||||||
NewPageIndex: integer);
|
NewPageIndex: integer);
|
||||||
begin
|
begin
|
||||||
|
@ -137,6 +137,7 @@ type
|
|||||||
FOnMouseMove: TMouseMoveEvent;
|
FOnMouseMove: TMouseMoveEvent;
|
||||||
FOnMouseDown: TMouseEvent;
|
FOnMouseDown: TMouseEvent;
|
||||||
FOnClickLink: TMouseEvent;
|
FOnClickLink: TMouseEvent;
|
||||||
|
FOnMouseLink: TSynMouseLinkEvent;
|
||||||
FOnMouseWheel : tMouseWheelEvent;
|
FOnMouseWheel : tMouseWheelEvent;
|
||||||
FOnKeyDown: TKeyEvent;
|
FOnKeyDown: TKeyEvent;
|
||||||
|
|
||||||
@ -147,6 +148,8 @@ type
|
|||||||
Shift: TShiftState; X,Y: Integer);
|
Shift: TShiftState; X,Y: Integer);
|
||||||
procedure EditorClickLink(Sender: TObject; Button: TMouseButton;
|
procedure EditorClickLink(Sender: TObject; Button: TMouseButton;
|
||||||
Shift: TShiftState; X,Y: Integer);
|
Shift: TShiftState; X,Y: Integer);
|
||||||
|
procedure EditorMouseLink(
|
||||||
|
Sender: TObject; X,Y: Integer; var AllowMouseLink: Boolean);
|
||||||
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
||||||
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
||||||
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
@ -361,6 +364,7 @@ type
|
|||||||
property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove;
|
property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove;
|
||||||
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
|
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
|
||||||
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
|
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
|
||||||
|
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
||||||
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
|
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
|
||||||
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
|
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
|
||||||
property Owner: TComponent read FAOwner;
|
property Owner: TComponent read FAOwner;
|
||||||
@ -475,6 +479,7 @@ type
|
|||||||
FOnAddWatchAtCursor: TOnAddWatch;
|
FOnAddWatchAtCursor: TOnAddWatch;
|
||||||
FOnCloseClicked: TOnCloseSrcEditor;
|
FOnCloseClicked: TOnCloseSrcEditor;
|
||||||
FOnClickLink: TMouseEvent;
|
FOnClickLink: TMouseEvent;
|
||||||
|
FOnMouseLink: TSynMouseLinkEvent;
|
||||||
FOnCurrentCodeBufferChanged: TNotifyEvent;
|
FOnCurrentCodeBufferChanged: TNotifyEvent;
|
||||||
FOnDeleteLastJumpPoint: TNotifyEvent;
|
FOnDeleteLastJumpPoint: TNotifyEvent;
|
||||||
FOnEditorChanged: TNotifyEvent;
|
FOnEditorChanged: TNotifyEvent;
|
||||||
@ -571,6 +576,8 @@ type
|
|||||||
Shift: TShiftstate; X,Y: Integer);
|
Shift: TShiftstate; X,Y: Integer);
|
||||||
procedure EditorClickLink(Sender: TObject; Button: TMouseButton;
|
procedure EditorClickLink(Sender: TObject; Button: TMouseButton;
|
||||||
Shift: TShiftstate; X,Y: Integer);
|
Shift: TShiftstate; X,Y: Integer);
|
||||||
|
procedure EditorMouseLink(
|
||||||
|
Sender: TObject; X,Y: Integer; var AllowMouseLink: Boolean);
|
||||||
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
||||||
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
||||||
@ -750,6 +757,7 @@ type
|
|||||||
property OnCloseClicked: TOnCloseSrcEditor
|
property OnCloseClicked: TOnCloseSrcEditor
|
||||||
read FOnCloseClicked write FOnCloseClicked;
|
read FOnCloseClicked write FOnCloseClicked;
|
||||||
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
|
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
|
||||||
|
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
||||||
property OnDeleteLastJumpPoint: TNotifyEvent
|
property OnDeleteLastJumpPoint: TNotifyEvent
|
||||||
read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint;
|
read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint;
|
||||||
property OnEditorVisibleChanged: TNotifyEvent
|
property OnEditorVisibleChanged: TNotifyEvent
|
||||||
@ -2257,6 +2265,7 @@ Begin
|
|||||||
OnMouseWheel := @EditorMouseWheel;
|
OnMouseWheel := @EditorMouseWheel;
|
||||||
OnMouseDown := @EditorMouseDown;
|
OnMouseDown := @EditorMouseDown;
|
||||||
OnClickLink := @EditorClickLink;
|
OnClickLink := @EditorClickLink;
|
||||||
|
OnMouseLink := @EditorMouseLink;
|
||||||
OnKeyDown := @EditorKeyDown;
|
OnKeyDown := @EditorKeyDown;
|
||||||
end;
|
end;
|
||||||
if FCodeTemplates<>nil then
|
if FCodeTemplates<>nil then
|
||||||
@ -2669,10 +2678,18 @@ begin
|
|||||||
OnMouseDown(Sender, Button, Shift, X,Y);
|
OnMouseDown(Sender, Button, Shift, X,Y);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSourceEditor.EditorMouseLink(
|
||||||
|
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean);
|
||||||
|
begin
|
||||||
|
//DebugLn(['TSourceEditor.EditorMouseLink ',X,',',Y]);
|
||||||
|
if Assigned(OnMouseLink) then
|
||||||
|
OnMouseLink(Sender, X, Y, AllowMouseLink);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSourceEditor.EditorClickLink(Sender: TObject; Button: TMouseButton;
|
procedure TSourceEditor.EditorClickLink(Sender: TObject; Button: TMouseButton;
|
||||||
Shift: TShiftState; X, Y: Integer);
|
Shift: TShiftState; X, Y: Integer);
|
||||||
begin
|
begin
|
||||||
DebugLn(['TSourceEditor.EditorClickLink ',X,',',Y]);
|
//DebugLn(['TSourceEditor.EditorClickLink ',X,',',Y]);
|
||||||
if Assigned(OnClickLink) then
|
if Assigned(OnClickLink) then
|
||||||
OnClickLink(Sender, Button, Shift, X,Y);
|
OnClickLink(Sender, Button, Shift, X,Y);
|
||||||
end;
|
end;
|
||||||
@ -4409,6 +4426,7 @@ Begin
|
|||||||
Result.OnMouseDown := @EditorMouseDown;
|
Result.OnMouseDown := @EditorMouseDown;
|
||||||
Result.OnMouseWheel := @EditorMouseWheel;
|
Result.OnMouseWheel := @EditorMouseWheel;
|
||||||
Result.OnClickLink := @EditorClickLink;
|
Result.OnClickLink := @EditorClickLink;
|
||||||
|
Result.OnMouseLink := @EditorMouseLink;
|
||||||
Result.OnKeyDown :=@EditorKeyDown;
|
Result.OnKeyDown :=@EditorKeyDown;
|
||||||
|
|
||||||
Result.EditorComponent.EndUpdate;
|
Result.EditorComponent.EndUpdate;
|
||||||
@ -6232,6 +6250,13 @@ begin
|
|||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSourceNotebook.EditorMouseLink(
|
||||||
|
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean);
|
||||||
|
begin
|
||||||
|
if Assigned(OnMouseLink) then
|
||||||
|
OnMouseLink(Sender, X, Y, AllowMouseLink);
|
||||||
|
end;
|
||||||
|
|
||||||
Procedure TSourceNotebook.HintTimer(sender: TObject);
|
Procedure TSourceNotebook.HintTimer(sender: TObject);
|
||||||
var
|
var
|
||||||
MousePos: TPoint;
|
MousePos: TPoint;
|
||||||
|
Loading…
Reference in New Issue
Block a user