mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 19:59:31 +02:00
IDE, SourceEdit: keep topline when folding comment and similar via context menu. Issue #41227
(cherry picked from commit beb2505039
)
This commit is contained in:
parent
5ae99331c1
commit
e474818093
@ -287,6 +287,7 @@ type
|
|||||||
procedure SrcSynCaretChanged(Sender: TObject);
|
procedure SrcSynCaretChanged(Sender: TObject);
|
||||||
function GetHighlighter: TSynCustomFoldHighlighter;
|
function GetHighlighter: TSynCustomFoldHighlighter;
|
||||||
protected
|
protected
|
||||||
|
procedure RestoreTopLineAfterFold(AnOldTopLine: integer);
|
||||||
procedure DoOnStatusChange(Changes: TSynStatusChanges); override;
|
procedure DoOnStatusChange(Changes: TSynStatusChanges); override;
|
||||||
function CreateGutter(AOwner : TSynEditBase; ASide: TSynGutterSide;
|
function CreateGutter(AOwner : TSynEditBase; ASide: TSynGutterSide;
|
||||||
ATextDrawer: TheTextDrawer): TSynGutter; override;
|
ATextDrawer: TheTextDrawer): TSynGutter; override;
|
||||||
@ -294,7 +295,7 @@ type
|
|||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
function TextIndexToViewPos(aTextIndex : Integer) : Integer;
|
function TextIndexToViewPos(aTextIndex : Integer) : Integer; // Wrong name: argument is TextPos, not TextIdx
|
||||||
property IDEGutterMarks: TIDESynGutterMarks read GetIDEGutterMarks;
|
property IDEGutterMarks: TIDESynGutterMarks read GetIDEGutterMarks;
|
||||||
property TopView;
|
property TopView;
|
||||||
property TextBuffer;
|
property TextBuffer;
|
||||||
@ -1594,6 +1595,16 @@ begin
|
|||||||
Result := nil;
|
Result := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TIDESynEditor.RestoreTopLineAfterFold(AnOldTopLine: integer);
|
||||||
|
var
|
||||||
|
tv: Integer;
|
||||||
|
begin
|
||||||
|
tv := TextIndexToViewPos(AnOldTopLine);
|
||||||
|
if not TextView.IsTextIdxVisible(ToIdx(AnOldTopLine)) then
|
||||||
|
tv := tv + 1;
|
||||||
|
TopView := tv;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TIDESynEditor.DoOnStatusChange(Changes: TSynStatusChanges);
|
procedure TIDESynEditor.DoOnStatusChange(Changes: TSynStatusChanges);
|
||||||
begin
|
begin
|
||||||
inherited DoOnStatusChange(Changes);
|
inherited DoOnStatusChange(Changes);
|
||||||
@ -2718,12 +2729,13 @@ end;
|
|||||||
|
|
||||||
procedure TIDESynGutterCodeFolding.UnFoldIfdef(AInclDisabled, AInclEnabled: Boolean);
|
procedure TIDESynGutterCodeFolding.UnFoldIfdef(AInclDisabled, AInclEnabled: Boolean);
|
||||||
var
|
var
|
||||||
i, j, k, y1, y2: Integer;
|
i, j, k, y1, y2, CurTopLine: Integer;
|
||||||
FldInf: TSynFoldNodeInfo;
|
FldInf: TSynFoldNodeInfo;
|
||||||
Tree: TSynMarkupHighIfDefLinesTree;
|
Tree: TSynMarkupHighIfDefLinesTree;
|
||||||
IfLineNode: TSynMarkupHighIfDefLinesNodeInfo;
|
IfLineNode: TSynMarkupHighIfDefLinesNodeInfo;
|
||||||
IsDisabled: Boolean;
|
IsDisabled: Boolean;
|
||||||
begin
|
begin
|
||||||
|
CurTopLine := TSynEdit(SynEdit).TopLine;
|
||||||
if TSynEdit(SynEdit).SelAvail then begin
|
if TSynEdit(SynEdit).SelAvail then begin
|
||||||
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
||||||
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
||||||
@ -2760,15 +2772,17 @@ begin
|
|||||||
end; //FoldView.IsFoldedAtTextIndex(i,j)
|
end; //FoldView.IsFoldedAtTextIndex(i,j)
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
TIDESynEditor(SynEdit).RestoreTopLineAfterFold(CurTopLine);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIDESynGutterCodeFolding.FoldIfdef(AInclTemp: Boolean);
|
procedure TIDESynGutterCodeFolding.FoldIfdef(AInclTemp: Boolean);
|
||||||
var
|
var
|
||||||
i, j, k, y1, y2: Integer;
|
i, j, k, y1, y2, CurTopLine: Integer;
|
||||||
FldInf: TSynFoldNodeInfo;
|
FldInf: TSynFoldNodeInfo;
|
||||||
Tree: TSynMarkupHighIfDefLinesTree;
|
Tree: TSynMarkupHighIfDefLinesTree;
|
||||||
IfLineNode: TSynMarkupHighIfDefLinesNodeInfo;
|
IfLineNode: TSynMarkupHighIfDefLinesNodeInfo;
|
||||||
begin
|
begin
|
||||||
|
CurTopLine := TSynEdit(SynEdit).TopLine;
|
||||||
if TSynEdit(SynEdit).SelAvail then begin
|
if TSynEdit(SynEdit).SelAvail then begin
|
||||||
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
||||||
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
||||||
@ -2799,14 +2813,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
TIDESynEditor(SynEdit).RestoreTopLineAfterFold(CurTopLine);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIDESynGutterCodeFolding.PopClickedUnfoldAll(Sender: TObject);
|
procedure TIDESynGutterCodeFolding.PopClickedUnfoldAll(Sender: TObject);
|
||||||
var
|
var
|
||||||
i, y1, y2: Integer;
|
i, y1, y2, CurTopLine: Integer;
|
||||||
begin
|
begin
|
||||||
|
CurTopLine := TSynEdit(SynEdit).TopLine;
|
||||||
if not TSynEdit(SynEdit).SelAvail then begin
|
if not TSynEdit(SynEdit).SelAvail then begin
|
||||||
FoldView.UnfoldAll;
|
FoldView.UnfoldAll;
|
||||||
|
TIDESynEditor(SynEdit).RestoreTopLineAfterFold(CurTopLine);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
||||||
@ -2814,13 +2831,15 @@ begin
|
|||||||
if TSynEdit(SynEdit).BlockEnd.X = 1 then dec(y2);
|
if TSynEdit(SynEdit).BlockEnd.X = 1 then dec(y2);
|
||||||
for i := y1-1 to y2-1 do
|
for i := y1-1 to y2-1 do
|
||||||
FoldView.UnFoldAtTextIndex(i);
|
FoldView.UnFoldAtTextIndex(i);
|
||||||
|
TIDESynEditor(SynEdit).RestoreTopLineAfterFold(CurTopLine);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIDESynGutterCodeFolding.PopClickedUnfoldComment(Sender: TObject);
|
procedure TIDESynGutterCodeFolding.PopClickedUnfoldComment(Sender: TObject);
|
||||||
var
|
var
|
||||||
i, j, y1, y2: Integer;
|
i, j, y1, y2, CurTopLine: Integer;
|
||||||
FldInf: TSynFoldNodeInfo;
|
FldInf: TSynFoldNodeInfo;
|
||||||
begin
|
begin
|
||||||
|
CurTopLine := TSynEdit(SynEdit).TopLine;
|
||||||
if TSynEdit(SynEdit).SelAvail then begin
|
if TSynEdit(SynEdit).SelAvail then begin
|
||||||
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
||||||
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
||||||
@ -2846,13 +2865,15 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
TIDESynEditor(SynEdit).RestoreTopLineAfterFold(CurTopLine);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIDESynGutterCodeFolding.PopClickedFoldComment(Sender: TObject);
|
procedure TIDESynGutterCodeFolding.PopClickedFoldComment(Sender: TObject);
|
||||||
var
|
var
|
||||||
i, j, y1, y2: Integer;
|
i, j, y1, y2, CurTopLine: Integer;
|
||||||
FldInf: TSynFoldNodeInfo;
|
FldInf: TSynFoldNodeInfo;
|
||||||
begin
|
begin
|
||||||
|
CurTopLine := TSynEdit(SynEdit).TopLine;
|
||||||
if TSynEdit(SynEdit).SelAvail then begin
|
if TSynEdit(SynEdit).SelAvail then begin
|
||||||
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
||||||
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
||||||
@ -2876,13 +2897,15 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
TIDESynEditor(SynEdit).RestoreTopLineAfterFold(CurTopLine);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIDESynGutterCodeFolding.PopClickedHideComment(Sender: TObject);
|
procedure TIDESynGutterCodeFolding.PopClickedHideComment(Sender: TObject);
|
||||||
var
|
var
|
||||||
i, j, y1, y2: Integer;
|
i, j, y1, y2, CurTopLine: Integer;
|
||||||
FldInf: TSynFoldNodeInfo;
|
FldInf: TSynFoldNodeInfo;
|
||||||
begin
|
begin
|
||||||
|
CurTopLine := TSynEdit(SynEdit).TopLine;
|
||||||
if TSynEdit(SynEdit).SelAvail then begin
|
if TSynEdit(SynEdit).SelAvail then begin
|
||||||
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
y1 := TSynEdit(SynEdit).BlockBegin.Y;
|
||||||
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
y2 := TSynEdit(SynEdit).BlockEnd.Y;
|
||||||
@ -2906,6 +2929,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
TIDESynEditor(SynEdit).RestoreTopLineAfterFold(CurTopLine);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIDESynGutterCodeFolding.CreatePopUpMenuEntries(var APopUp: TPopupMenu; ALine: Integer);
|
procedure TIDESynGutterCodeFolding.CreatePopUpMenuEntries(var APopUp: TPopupMenu; ALine: Integer);
|
||||||
|
Loading…
Reference in New Issue
Block a user