SynEdit: remove circular dependency between SynEdit and SynGutterLineOverview

git-svn-id: trunk@64489 -
This commit is contained in:
ondrej 2021-02-05 13:53:21 +00:00
parent 0060c09037
commit 34386c9031
3 changed files with 30 additions and 26 deletions

View File

@ -589,7 +589,6 @@ type
function GetFoldedCodeLineColor: TSynSelectedColor;
function GetFoldState: String;
function GetHiddenCodeLineColor: TSynSelectedColor;
function GetModified: Boolean;
function GetPaintLockOwner: TSynEditBase;
function GetPlugin(Index: Integer): TLazSynEditPlugin;
function GetRightEdge: Integer;
@ -678,7 +677,6 @@ type
procedure SetLineText(Value: string);
procedure SetMaxLeftChar(Value: integer);
procedure SetMaxUndo(const Value: Integer);
procedure SetModified(Value: boolean);
procedure UpdateOptions;
procedure UpdateOptions2;
procedure UpdateMouseOptions;
@ -823,6 +821,7 @@ type
function RealGetText: TCaption; override;
procedure RealSetText(const Value: TCaption); override;
function GetLines: TStrings; override;
function GetModified: Boolean; override;
function GetViewedTextBuffer: TSynEditStringsLinked; override;
function GetFoldedTextBuffer: TObject; override;
function GetTextBuffer: TSynEditStrings; override;
@ -853,6 +852,7 @@ type
procedure RecalcCharExtent;
procedure RedoItem(Item: TSynEditUndoItem);
procedure CaretChanged(Sender: TObject);
procedure SetModified(Value: boolean); override;
procedure SetMouseOptions(AValue: TSynEditorMouseOptions); override;
procedure SetName(const Value: TComponentName); override;
procedure SetOptions(Value: TSynEditorOptions); override;
@ -1108,7 +1108,6 @@ type
property ScrollOnEditRightOptions: TSynScrollOnEditOptions read FScrollOnEditRightOptions write SetScrollOnEditRightOptions;
property UseIncrementalColor : Boolean write SetUseIncrementalColor;
property Modified: Boolean read GetModified write SetModified;
property PaintLock: Integer read fPaintLock;
property UseUTF8: boolean read FUseUTF8;

View File

@ -153,6 +153,7 @@ type
function GetCanRedo: boolean; virtual; abstract;
function GetCanUndo: boolean; virtual; abstract;
function GetCaretObj: TSynEditCaret; virtual; abstract;
function GetModified: Boolean; virtual; abstract;
function GetReadOnly: boolean; virtual;
function GetIsBackwardSel: Boolean;
function GetHighlighterObj: TObject; virtual; abstract;
@ -166,6 +167,7 @@ type
function GetFoldedTextBuffer: TObject; virtual; abstract;
function GetTextBuffer: TSynEditStrings; virtual; abstract;
function GetPaintArea: TLazSynSurface; virtual; abstract; // TLazSynSurfaceManager
procedure SetModified(Value: boolean); virtual; abstract;
procedure SetMouseOptions(AValue: TSynEditorMouseOptions); virtual;
procedure SetReadOnly(Value: boolean); virtual;
procedure StatusChanged(AChanges: TSynStatusChanges); virtual; abstract;
@ -326,6 +328,7 @@ type
property Options: TSynEditorOptions read FOptions write SetOptions default SYNEDIT_DEFAULT_OPTIONS;
property Options2: TSynEditorOptions2 read FOptions2 write SetOptions2 default SYNEDIT_DEFAULT_OPTIONS2;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default FALSE;
property Modified: Boolean read GetModified write SetModified;
property CaretX: Integer read GetCaretX write SetCaretX;
property CaretY: Integer read GetCaretY write SetCaretY;

View File

@ -336,8 +336,6 @@ type
end;
implementation
uses
SynEdit;
{ TSynGutterLOvMark }
@ -963,8 +961,8 @@ procedure TSynGutterLOvProviderCurrentPage.SynStatusChanged(Sender: TObject;
Changes: TSynStatusChanges);
begin
InvalidatePixelLines(FPixelTopLine, FPixelBottomLine);
FCurTopLine := TCustomSynEdit(SynEdit).TopLine;
FCurBottomLine := TCustomSynEdit(SynEdit).ScreenRowToRow(TCustomSynEdit(SynEdit).LinesInWindow);
FCurTopLine := SynEdit.TopLine;
FCurBottomLine := SynEdit.ScreenXYToTextXY(Point(0, SynEdit.LinesInWindow)).Y;
ReCalc;
InvalidatePixelLines(FPixelTopLine, FPixelBottomLine);
end;
@ -995,13 +993,13 @@ begin
FColor := 0;
Color := $C0C0C0;
ViewedTextBuffer.AddChangeHandler(senrLineMappingChanged, @FoldChanged);
TCustomSynEdit(SynEdit).RegisterStatusChangedHandler(@SynStatusChanged,
SynEdit.RegisterStatusChangedHandler(@SynStatusChanged,
[scTopLine, scLinesInWindow]);
end;
destructor TSynGutterLOvProviderCurrentPage.Destroy;
begin
TCustomSynEdit(SynEdit).UnRegisterStatusChangedHandler(@SynStatusChanged);
SynEdit.UnRegisterStatusChangedHandler(@SynStatusChanged);
ViewedTextBuffer.AddChangeHandler(senrLineMappingChanged, @FoldChanged);
inherited;
end;
@ -1110,7 +1108,7 @@ end;
procedure TSynGutterLOvProviderModifiedLines.SynStatusChanged(Sender: TObject;
Changes: TSynStatusChanges);
begin
if (scModified in Changes) and not TCustomSynEdit(SynEdit).Modified then begin;
if (scModified in Changes) and not SynEdit.Modified then begin;
FFirstTextLineChanged := 1;
FLastTextLineChanged := 0; // open end
InvalidateTextLines(FFirstTextLineChanged, TextBuffer.Count);
@ -1121,7 +1119,7 @@ constructor TSynGutterLOvProviderModifiedLines.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ViewedTextBuffer.AddModifiedHandler(senrLinesModified, @LineModified);
TCustomSynEdit(SynEdit).RegisterStatusChangedHandler(@SynStatusChanged, [scModified]);
SynEdit.RegisterStatusChangedHandler(@SynStatusChanged, [scModified]);
FFirstTextLineChanged := -1;
FLastTextLineChanged := -1;
Color := clYellow;
@ -1131,7 +1129,7 @@ end;
destructor TSynGutterLOvProviderModifiedLines.Destroy;
begin
ViewedTextBuffer.RemoveHanlders(self);
TCustomSynEdit(SynEdit).UnRegisterStatusChangedHandler(@SynStatusChanged);
SynEdit.UnRegisterStatusChangedHandler(@SynStatusChanged);
inherited Destroy;
end;
@ -1223,14 +1221,16 @@ end;
procedure TSynGutterLOvProviderBookmarks.BufferChanging(Sender: TObject);
begin
TCustomSynEdit(SynEdit).Marks.UnRegisterChangeHandler(@DoMarkChange);
(SynEdit.Marks as TSynEditMarkList).UnRegisterChangeHandler(@DoMarkChange);
end;
procedure TSynGutterLOvProviderBookmarks.BufferChanged(Sender: TObject);
var
i: Integer;
LMarks: TSynEditMarkList;
begin
TCustomSynEdit(SynEdit).Marks.RegisterChangeHandler(@DoMarkChange,
LMarks := (SynEdit.Marks as TSynEditMarkList);
LMarks.RegisterChangeHandler(@DoMarkChange,
[smcrAdded, smcrRemoved, smcrLine, smcrVisible, smcrChanged]);
while FMarkList.Count > 0 do begin
@ -1238,32 +1238,34 @@ begin
FMarkList.Delete(0);
end;
for i := 0 to TCustomSynEdit(SynEdit).Marks.Count - 1 do
if TCustomSynEdit(SynEdit).Marks[i].Visible then
CreateGutterMark(TCustomSynEdit(SynEdit).Marks[i]);
for i := 0 to LMarks.Count - 1 do
if LMarks[i].Visible then
CreateGutterMark(LMarks[i]);
end;
constructor TSynGutterLOvProviderBookmarks.Create(AOwner: TComponent);
var
i: Integer;
LMarks: TSynEditMarkList;
begin
inherited Create(AOwner);
Color := clBlue;
ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanging, @BufferChanging);
ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
TCustomSynEdit(SynEdit).Marks.RegisterChangeHandler(@DoMarkChange,
LMarks := (SynEdit.Marks as TSynEditMarkList);
LMarks.RegisterChangeHandler(@DoMarkChange,
[smcrAdded, smcrRemoved, smcrLine, smcrVisible, smcrChanged]);
for i := 0 to TCustomSynEdit(SynEdit).Marks.Count - 1 do
if TCustomSynEdit(SynEdit).Marks[i].Visible then
CreateGutterMark(TCustomSynEdit(SynEdit).Marks[i]);
for i := 0 to LMarks.Count - 1 do
if LMarks[i].Visible then
CreateGutterMark(LMarks[i]);
end;
destructor TSynGutterLOvProviderBookmarks.Destroy;
begin
ViewedTextBuffer.RemoveHanlders(self);
TCustomSynEdit(SynEdit).Marks.UnRegisterChangeHandler(@DoMarkChange);
(SynEdit.Marks as TSynEditMarkList).UnRegisterChangeHandler(@DoMarkChange);
inherited Destroy;
end;
@ -1538,7 +1540,7 @@ function TSynGutterLineOverview.MaybeHandleMouseAction(
begin
Result := False;
if FLineMarks.IndexForLine(AnInfo.MouseY, False, True) >= 0 then
Result := HandleActionProc(FMouseActionsForMarks.GetActionsForOptions(TCustomSynEdit(SynEdit).MouseOptions), AnInfo);
Result := HandleActionProc(FMouseActionsForMarks.GetActionsForOptions(SynEdit.MouseOptions), AnInfo);
if not Result then
Result := inherited MaybeHandleMouseAction(AnInfo, HandleActionProc);
@ -1570,10 +1572,10 @@ begin
end;
if Result then begin
if (TextLine < TCustomSynEdit(SynEdit).TopLine) or
(TextLine > TCustomSynEdit(SynEdit).TopLine + TCustomSynEdit(SynEdit).LinesInWindow)
if (TextLine < SynEdit.TopLine) or
(TextLine > SynEdit.TopLine + SynEdit.LinesInWindow)
then
TCustomSynEdit(SynEdit).TopLine := Max(1, TextLine - TCustomSynEdit(SynEdit).LinesInWindow div 2);
SynEdit.TopLine := Max(1, TextLine - SynEdit.LinesInWindow div 2);
AnInfo.NewCaret.LinePos := TextLine;
end;