mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-10 06:08:17 +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;
|
||||
{$ENDIF}
|
||||
|
||||
TSynMouseLinkEvent = procedure (
|
||||
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean) of object;
|
||||
|
||||
{ TCustomSynEdit }
|
||||
|
||||
TCustomSynEdit = class(TSynEditBase)
|
||||
@ -437,6 +440,7 @@ type
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
FOnSpecialLineMarkup: TSpecialLineMarkupEvent;// needed, because bug fpc 11926
|
||||
FOnClickLink: TMouseEvent;
|
||||
FOnMouseLink: TSynMouseLinkEvent;
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
@ -753,6 +757,7 @@ type
|
||||
var Attri: TSynHighlighterAttributes): boolean; //L505
|
||||
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
function IsLinkable(Y, X1, X2: Integer): Boolean;
|
||||
procedure GetWordBoundsAtRowCol(const XY: TPoint; var StartX, EndX: integer);
|
||||
function GetLineIndentProposal(Line: integer;
|
||||
IgnoreCurrentLineText: boolean): integer;
|
||||
@ -1039,6 +1044,7 @@ type
|
||||
property OnMouseUp;
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
property OnClickLink : TMouseEvent read FOnClickLink write FOnClickLink;
|
||||
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
||||
property OnMouseEnter;
|
||||
property OnMouseLeave;
|
||||
{$ENDIF}
|
||||
@ -3270,7 +3276,10 @@ var
|
||||
exit;
|
||||
GetWordBoundsAtRowCol(PhysicalToLogicalPos(fLastMouseCaret),
|
||||
fLastCtrlMouseLinkX1,fLastCtrlMouseLinkX2);
|
||||
if fLastCtrlMouseLinkX1=fLastCtrlMouseLinkX2 then
|
||||
if
|
||||
not IsLinkable(
|
||||
fLastMouseCaret.Y, fLastCtrlMouseLinkX1, fLastCtrlMouseLinkX2)
|
||||
then
|
||||
exit;
|
||||
fLastCtrlMouseLinkY:=fLastMouseCaret.Y;
|
||||
with fMarkupCtrlMouse do begin
|
||||
@ -5998,7 +6007,7 @@ procedure TCustomSynEdit.UpdateCtrlMouse;
|
||||
end;
|
||||
|
||||
var
|
||||
NewY, NewX1, NewX2: integer;
|
||||
NewY, NewX1, NewX2: Integer;
|
||||
begin
|
||||
fLastControlIsPressed:=(GetKeyShiftState=[SYNEDIT_LINK_MODIFIER]);
|
||||
if (eoShowCtrlMouseLinks in Options) and fLastControlIsPressed
|
||||
@ -6006,7 +6015,7 @@ begin
|
||||
// show link
|
||||
NewY:=fLastMouseCaret.Y;
|
||||
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
|
||||
if (NewY<>fLastCtrlMouseLinkY)
|
||||
or (NewX1<>fLastCtrlMouseLinkX1)
|
||||
@ -6075,6 +6084,14 @@ function TCustomSynEdit.IsIdentChar(const c: TUTF8Char): boolean;
|
||||
begin
|
||||
Result:=(length(c)=1) and (c[1] in IdentChars);
|
||||
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}
|
||||
|
||||
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);
|
||||
procedure OnSrcNoteBookClickLink(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftstate; X, Y: Integer);
|
||||
procedure OnSrcNoteBookMouseLink(
|
||||
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean);
|
||||
procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject);
|
||||
procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject);
|
||||
procedure OnSrcNotebookEditorChanged(Sender: TObject);
|
||||
@ -1776,6 +1778,7 @@ begin
|
||||
SourceNotebook.OnAddJumpPoint := @OnSrcNoteBookAddJumpPoint;
|
||||
SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose;
|
||||
SourceNotebook.OnClickLink := @OnSrcNoteBookClickLink;
|
||||
SourceNotebook.OnMouseLink := @OnSrcNoteBookMouseLink;
|
||||
SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged;
|
||||
SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint;
|
||||
SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged;
|
||||
@ -13675,6 +13678,19 @@ begin
|
||||
{$ENDIF}
|
||||
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,
|
||||
NewPageIndex: integer);
|
||||
begin
|
||||
|
@ -137,6 +137,7 @@ type
|
||||
FOnMouseMove: TMouseMoveEvent;
|
||||
FOnMouseDown: TMouseEvent;
|
||||
FOnClickLink: TMouseEvent;
|
||||
FOnMouseLink: TSynMouseLinkEvent;
|
||||
FOnMouseWheel : tMouseWheelEvent;
|
||||
FOnKeyDown: TKeyEvent;
|
||||
|
||||
@ -147,6 +148,8 @@ type
|
||||
Shift: TShiftState; X,Y: Integer);
|
||||
procedure EditorClickLink(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X,Y: Integer);
|
||||
procedure EditorMouseLink(
|
||||
Sender: TObject; X,Y: Integer; var AllowMouseLink: Boolean);
|
||||
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
||||
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
||||
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
@ -361,6 +364,7 @@ type
|
||||
property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove;
|
||||
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
|
||||
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
|
||||
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
||||
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
|
||||
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
|
||||
property Owner: TComponent read FAOwner;
|
||||
@ -475,6 +479,7 @@ type
|
||||
FOnAddWatchAtCursor: TOnAddWatch;
|
||||
FOnCloseClicked: TOnCloseSrcEditor;
|
||||
FOnClickLink: TMouseEvent;
|
||||
FOnMouseLink: TSynMouseLinkEvent;
|
||||
FOnCurrentCodeBufferChanged: TNotifyEvent;
|
||||
FOnDeleteLastJumpPoint: TNotifyEvent;
|
||||
FOnEditorChanged: TNotifyEvent;
|
||||
@ -571,6 +576,8 @@ type
|
||||
Shift: TShiftstate; X,Y: Integer);
|
||||
procedure EditorClickLink(Sender: TObject; Button: TMouseButton;
|
||||
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 EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
||||
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
||||
@ -750,6 +757,7 @@ type
|
||||
property OnCloseClicked: TOnCloseSrcEditor
|
||||
read FOnCloseClicked write FOnCloseClicked;
|
||||
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
|
||||
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
||||
property OnDeleteLastJumpPoint: TNotifyEvent
|
||||
read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint;
|
||||
property OnEditorVisibleChanged: TNotifyEvent
|
||||
@ -2257,6 +2265,7 @@ Begin
|
||||
OnMouseWheel := @EditorMouseWheel;
|
||||
OnMouseDown := @EditorMouseDown;
|
||||
OnClickLink := @EditorClickLink;
|
||||
OnMouseLink := @EditorMouseLink;
|
||||
OnKeyDown := @EditorKeyDown;
|
||||
end;
|
||||
if FCodeTemplates<>nil then
|
||||
@ -2669,10 +2678,18 @@ begin
|
||||
OnMouseDown(Sender, Button, Shift, X,Y);
|
||||
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;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
DebugLn(['TSourceEditor.EditorClickLink ',X,',',Y]);
|
||||
//DebugLn(['TSourceEditor.EditorClickLink ',X,',',Y]);
|
||||
if Assigned(OnClickLink) then
|
||||
OnClickLink(Sender, Button, Shift, X,Y);
|
||||
end;
|
||||
@ -4409,6 +4426,7 @@ Begin
|
||||
Result.OnMouseDown := @EditorMouseDown;
|
||||
Result.OnMouseWheel := @EditorMouseWheel;
|
||||
Result.OnClickLink := @EditorClickLink;
|
||||
Result.OnMouseLink := @EditorMouseLink;
|
||||
Result.OnKeyDown :=@EditorKeyDown;
|
||||
|
||||
Result.EditorComponent.EndUpdate;
|
||||
@ -6232,6 +6250,13 @@ begin
|
||||
|
||||
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);
|
||||
var
|
||||
MousePos: TPoint;
|
||||
|
Loading…
Reference in New Issue
Block a user