IDE: using find declaration for source editor hyperlinks, from Martin Friebe and Alexander Klenin

git-svn-id: trunk@17816 -
This commit is contained in:
mattias 2008-12-12 21:16:30 +00:00
parent ff17c1142f
commit 4ec7c62a72
3 changed files with 62 additions and 4 deletions

View File

@ -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);

View File

@ -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

View File

@ -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;