mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-13 12:59:19 +02:00
IDE, SourceEditor: Make the top-line-hint clickable, and scroll to the hint-line. Issue #40983
This commit is contained in:
parent
fb4c4ca214
commit
0d63ab6747
@ -61,7 +61,7 @@ uses
|
|||||||
SynEditHighlighter, SynEditHighlighterFoldBase, SynHighlighterPas,
|
SynEditHighlighter, SynEditHighlighterFoldBase, SynHighlighterPas,
|
||||||
SynEditMarkupHighAll, SynEditKeyCmds, SynEditMarkupIfDef, SynEditMiscProcs,
|
SynEditMarkupHighAll, SynEditKeyCmds, SynEditMarkupIfDef, SynEditMiscProcs,
|
||||||
SynPluginMultiCaret, SynEditPointClasses,
|
SynPluginMultiCaret, SynEditPointClasses,
|
||||||
SynEditMarkupFoldColoring, SynEditTextTabExpander,
|
SynEditMarkupFoldColoring, SynEditTextTabExpander, SynEditMouseCmds,
|
||||||
etSrcEditMarks, LazarusIDEStrConsts;
|
etSrcEditMarks, LazarusIDEStrConsts;
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -258,6 +258,7 @@ type
|
|||||||
FOnIfdefNodeStateRequest: TSynMarkupIfdefStateRequest;
|
FOnIfdefNodeStateRequest: TSynMarkupIfdefStateRequest;
|
||||||
FMarkupIfDef: TSourceSynEditMarkupIfDef;
|
FMarkupIfDef: TSourceSynEditMarkupIfDef;
|
||||||
FTopInfoDisplay: TSourceLazSynTopInfoView;
|
FTopInfoDisplay: TSourceLazSynTopInfoView;
|
||||||
|
FMouseTopLineDownPos: TPoint;
|
||||||
FTopInfoLastTopLine: Integer;
|
FTopInfoLastTopLine: Integer;
|
||||||
FSrcSynCaretChangedLock, FSrcSynCaretChangedNeeded: boolean;
|
FSrcSynCaretChangedLock, FSrcSynCaretChangedNeeded: boolean;
|
||||||
FExtraMarkupLine: TSynEditMarkupSpecialLine;
|
FExtraMarkupLine: TSynEditMarkupSpecialLine;
|
||||||
@ -265,6 +266,8 @@ type
|
|||||||
FTopInfoMarkup: TSynSelectedColor;
|
FTopInfoMarkup: TSynSelectedColor;
|
||||||
FUserWordsList: TFPList;
|
FUserWordsList: TFPList;
|
||||||
|
|
||||||
|
function CatchMouseForTopInforLine(var AnInfo: TSynEditMouseActionInfo;
|
||||||
|
HandleActionProc: TSynEditMouseActionHandler): Boolean;
|
||||||
function DoIfDefNodeStateRequest(Sender: TObject; LinePos,
|
function DoIfDefNodeStateRequest(Sender: TObject; LinePos,
|
||||||
XStartPos: Integer; CurrentState: TSynMarkupIfdefNodeStateEx): TSynMarkupIfdefNodeState;
|
XStartPos: Integer; CurrentState: TSynMarkupIfdefNodeStateEx): TSynMarkupIfdefNodeState;
|
||||||
function GetHighlightUserWordCount: Integer;
|
function GetHighlightUserWordCount: Integer;
|
||||||
@ -1714,6 +1717,38 @@ begin
|
|||||||
Result := idnInvalid;
|
Result := idnInvalid;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TIDESynEditor.CatchMouseForTopInforLine(var AnInfo: TSynEditMouseActionInfo;
|
||||||
|
HandleActionProc: TSynEditMouseActionHandler): Boolean;
|
||||||
|
var
|
||||||
|
p: TPoint;
|
||||||
|
l: LongInt;
|
||||||
|
begin
|
||||||
|
Result :=
|
||||||
|
AnInfo.MouseY < TSourceLazSynSurfaceManager(FPaintArea).ExtraManager.Bounds.Bottom;
|
||||||
|
if not Result then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
if AnInfo.Button <> TSynMouseButton.mbLeft then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
p := TSourceLazSynSurfaceManager(FPaintArea).ExtraManager.TextArea.PixelsToRowColumn(Point(AnInfo.MouseX, AnInfo.MouseY), []);
|
||||||
|
|
||||||
|
if AnInfo.Dir = cdDown then begin
|
||||||
|
FMouseTopLineDownPos := p;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (p.y <> FMouseTopLineDownPos.Y) or (abs(p.X - FMouseTopLineDownPos.x) > 1) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
if (p.y < 0) or (p.y >= FTopInfoDisplay.LineMapCount) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
l := ToPos(FTopInfoDisplay.LineMap[p.y]);
|
||||||
|
TopLine := l+1;
|
||||||
|
CaretXY := Point(p.X, l);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TIDESynEditor.InvalidateAllIfdefNodes;
|
procedure TIDESynEditor.InvalidateAllIfdefNodes;
|
||||||
begin
|
begin
|
||||||
FMarkupIfDef.InvalidateAll;
|
FMarkupIfDef.InvalidateAll;
|
||||||
@ -1819,6 +1854,7 @@ begin
|
|||||||
TSourceLazSynSurfaceManager(FPaintArea).TopLineCount := 0;
|
TSourceLazSynSurfaceManager(FPaintArea).TopLineCount := 0;
|
||||||
// TSourceLazSynSurfaceManager(FPaintArea).ExtraManager.TextArea.BackgroundColor := clSilver;
|
// TSourceLazSynSurfaceManager(FPaintArea).ExtraManager.TextArea.BackgroundColor := clSilver;
|
||||||
TSourceLazSynSurfaceManager(FPaintArea).ExtraManager.DisplayView := FTopInfoDisplay;
|
TSourceLazSynSurfaceManager(FPaintArea).ExtraManager.DisplayView := FTopInfoDisplay;
|
||||||
|
RegisterMouseActionSearchHandler(@CatchMouseForTopInforLine);
|
||||||
|
|
||||||
FTopInfoNestList := TLazSynEditNestedFoldsList.Create(TextBuffer);
|
FTopInfoNestList := TLazSynEditNestedFoldsList.Create(TextBuffer);
|
||||||
FTopInfoNestList.ResetFilter;
|
FTopInfoNestList.ResetFilter;
|
||||||
@ -1849,6 +1885,7 @@ end;
|
|||||||
|
|
||||||
destructor TIDESynEditor.Destroy;
|
destructor TIDESynEditor.Destroy;
|
||||||
begin
|
begin
|
||||||
|
UnRegisterMouseActionSearchHandler(@CatchMouseForTopInforLine);
|
||||||
ViewedTextBuffer.RemoveChangeHandler(senrHighlightChanged, @DoHighlightChanged);
|
ViewedTextBuffer.RemoveChangeHandler(senrHighlightChanged, @DoHighlightChanged);
|
||||||
HighlightUserWordCount := 0;
|
HighlightUserWordCount := 0;
|
||||||
Highlighter := nil;
|
Highlighter := nil;
|
||||||
|
Loading…
Reference in New Issue
Block a user