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

View File

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

View File

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