SynEdit: assert correct method types

git-svn-id: trunk@55604 -
This commit is contained in:
martin 2017-07-30 16:37:07 +00:00
parent 533c433bf7
commit 11a202ca0f
8 changed files with 48 additions and 41 deletions

View File

@ -50,7 +50,7 @@ type
TSynEditNotifyReason = ( // TStringListLineCountEvent TSynEditNotifyReason = ( // TStringListLineCountEvent
senrLineCount, // Lines Inserted or Deleted (if not empty, they will trigger senrLineChange too) senrLineCount, // Lines Inserted or Deleted (if not empty, they will trigger senrLineChange too)
senrLineChange, // Lines modified (also triggered by senrEditAction) senrLineChange, // Lines modified (also triggered by senrEditAction)
senrLinesModified, // Send once in "EndUpdate". Modified, inserted or deleted senrLinesModified, //TStringListLinesModifiedEvent: Send once in "EndUpdate". Modified, inserted or deleted
senrHighlightChanged, // used by Highlighter (invalidate and fold checks needed) senrHighlightChanged, // used by Highlighter (invalidate and fold checks needed)
// TStringListLineEditEvent // TStringListLineEditEvent
senrEditAction, // EditInsert, EditDelete, EditLineBreak, ... senrEditAction, // EditInsert, EditDelete, EditLineBreak, ...
@ -280,6 +280,12 @@ type
procedure DoGetPhysicalCharWidths(Line: PChar; LineLen, Index: Integer; PWidths: PPhysicalCharWidth); virtual; abstract; procedure DoGetPhysicalCharWidths(Line: PChar; LineLen, Index: Integer; PWidths: PPhysicalCharWidth); virtual; abstract;
function GetDisplayView: TLazSynDisplayView; virtual; function GetDisplayView: TLazSynDisplayView; virtual;
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); virtual; abstract;
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); virtual; abstract;
public public
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
@ -292,8 +298,6 @@ type
procedure InsertLines(Index, NumLines: integer); virtual; abstract; procedure InsertLines(Index, NumLines: integer); virtual; abstract;
procedure InsertStrings(Index: integer; NewStrings: TStrings); virtual; abstract; procedure InsertStrings(Index: integer; NewStrings: TStrings); virtual; abstract;
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); virtual; abstract;
procedure AddModifiedHandler(AReason: TSynEditNotifyReason; procedure AddModifiedHandler(AReason: TSynEditNotifyReason;
AHandler: TStringListLinesModifiedEvent); AHandler: TStringListLinesModifiedEvent);
procedure AddChangeHandler(AReason: TSynEditNotifyReason; procedure AddChangeHandler(AReason: TSynEditNotifyReason;
@ -301,8 +305,6 @@ type
procedure AddNotifyHandler(AReason: TSynEditNotifyReason; procedure AddNotifyHandler(AReason: TSynEditNotifyReason;
AHandler: TNotifyEvent); AHandler: TNotifyEvent);
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); virtual; abstract;
procedure RemoveModifiedHandler(AReason: TSynEditNotifyReason; procedure RemoveModifiedHandler(AReason: TSynEditNotifyReason;
AHandler: TStringListLinesModifiedEvent); AHandler: TStringListLinesModifiedEvent);
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason; procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
@ -988,12 +990,14 @@ end;
procedure TSynEditStrings.AddChangeHandler(AReason: TSynEditNotifyReason; procedure TSynEditStrings.AddChangeHandler(AReason: TSynEditNotifyReason;
AHandler: TStringListLineCountEvent); AHandler: TStringListLineCountEvent);
begin begin
assert(AReason in [senrLineCount, senrLineChange, senrHighlightChanged], 'AddChangeHandler');
AddGenericHandler(AReason, TMethod(AHandler)); AddGenericHandler(AReason, TMethod(AHandler));
end; end;
procedure TSynEditStrings.AddNotifyHandler(AReason: TSynEditNotifyReason; procedure TSynEditStrings.AddNotifyHandler(AReason: TSynEditNotifyReason;
AHandler: TNotifyEvent); AHandler: TNotifyEvent);
begin begin
assert(AReason in [senrCleared..senrTextBufferChanged], 'AddNotifyHandler');
AddGenericHandler(AReason, TMethod(AHandler)); AddGenericHandler(AReason, TMethod(AHandler));
end; end;
@ -1007,12 +1011,14 @@ end;
procedure TSynEditStrings.RemoveChangeHandler(AReason: TSynEditNotifyReason; procedure TSynEditStrings.RemoveChangeHandler(AReason: TSynEditNotifyReason;
AHandler: TStringListLineCountEvent); AHandler: TStringListLineCountEvent);
begin begin
assert(AReason in [senrLineCount, senrLineChange, senrHighlightChanged], 'RemoveChangeHandler');
RemoveGenericHandler(AReason, TMethod(AHandler)); RemoveGenericHandler(AReason, TMethod(AHandler));
end; end;
procedure TSynEditStrings.RemoveNotifyHandler(AReason: TSynEditNotifyReason; procedure TSynEditStrings.RemoveNotifyHandler(AReason: TSynEditNotifyReason;
AHandler: TNotifyEvent); AHandler: TNotifyEvent);
begin begin
assert(AReason in [senrCleared..senrTextBufferChanged], 'RemoveNotifyHandler');
RemoveGenericHandler(AReason, TMethod(AHandler)); RemoveGenericHandler(AReason, TMethod(AHandler));
end; end;

View File

@ -3925,8 +3925,8 @@ end;
procedure TSynEditMarkupIfDef.SetLines(const AValue: TSynEditStrings); procedure TSynEditMarkupIfDef.SetLines(const AValue: TSynEditStrings);
begin begin
if Lines <> nil then begin if Lines <> nil then begin
Lines.RemoveGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged)); Lines.RemoveNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
Lines.RemoveGenericHandler(senrTextBufferChanging, TMethod(@DoBufferChanging)); Lines.RemoveNotifyHandler(senrTextBufferChanging, @DoBufferChanging);
//FLines.RemoveEditHandler(@DoLinesEdited); //FLines.RemoveEditHandler(@DoLinesEdited);
// FLines.RemoveChangeHandler(senrHighlightChanged, @DoHighlightChanged); // FLines.RemoveChangeHandler(senrHighlightChanged, @DoHighlightChanged);
end; end;
@ -3936,8 +3936,8 @@ begin
FOuterLines.Lines := AValue; FOuterLines.Lines := AValue;
if Lines <> nil then begin if Lines <> nil then begin
Lines.AddGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged)); Lines.AddNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
Lines.AddGenericHandler(senrTextBufferChanging, TMethod(@DoBufferChanging)); Lines.AddNotifyHandler(senrTextBufferChanging, @DoBufferChanging);
//FLines.AddChangeHandler(senrHighlightChanged, @DoHighlightChanged); //FLines.AddChangeHandler(senrHighlightChanged, @DoHighlightChanged);
// FLines.AddEditHandler(@DoLinesEdited); // FLines.AddEditHandler(@DoLinesEdited);
end; end;

View File

@ -205,6 +205,11 @@ type
function LogicPosIsCombining(const AChar: PChar): Boolean; inline; function LogicPosIsCombining(const AChar: PChar): Boolean; inline;
function GetDisplayView: TLazSynDisplayView; override; function GetDisplayView: TLazSynDisplayView; override;
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); override;
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); override;
public public
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
@ -219,10 +224,6 @@ type
function GetPChar(ALineIndex: Integer; out ALen: Integer): PChar; override; // experimental function GetPChar(ALineIndex: Integer; out ALen: Integer): PChar; override; // experimental
procedure MarkModified(AFirst, ALast: Integer); procedure MarkModified(AFirst, ALast: Integer);
procedure MarkSaved; procedure MarkSaved;
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); override;
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); override;
procedure SendNotification(AReason: TSynEditNotifyReason; procedure SendNotification(AReason: TSynEditNotifyReason;
ASender: TSynEditStrings; aIndex, aCount: Integer); override; ASender: TSynEditStrings; aIndex, aCount: Integer); override;
procedure SendNotification(AReason: TSynEditNotifyReason; procedure SendNotification(AReason: TSynEditNotifyReason;

View File

@ -76,8 +76,8 @@ procedure TSynGutterLineNumber.Init;
begin begin
inherited Init; inherited Init;
FTextDrawer := Gutter.TextDrawer; FTextDrawer := Gutter.TextDrawer;
TSynEditStringList(TextBuffer).AddGenericHandler(senrLineCount, TMethod(@LineCountChanged)); TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
FTextDrawer.RegisterOnFontChangeHandler(@FontChanged); FTextDrawer.RegisterOnFontChangeHandler(@FontChanged);
LineCountchanged(nil, 0, 0); LineCountchanged(nil, 0, 0);
end; end;
@ -196,8 +196,8 @@ end;
procedure TSynGutterLineNumber.BufferChanged(Sender: TObject); procedure TSynGutterLineNumber.BufferChanged(Sender: TObject);
begin begin
TSynEditStringList(Sender).RemoveHanlders(self); TSynEditStringList(Sender).RemoveHanlders(self);
TSynEditStringList(TextBuffer).AddGenericHandler(senrLineCount, TMethod(@LineCountChanged)); TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
LineCountChanged(nil, 0, 0); LineCountChanged(nil, 0, 0);
end; end;

View File

@ -1112,7 +1112,7 @@ procedure TSynGutterLOvProviderModifiedLines.BufferChanged(Sender: TObject);
begin begin
TSynEditStringList(Sender).RemoveHanlders(self); TSynEditStringList(Sender).RemoveHanlders(self);
TSynEditStringList(TextBuffer).AddModifiedHandler(senrLinesModified, @LineModified); TSynEditStringList(TextBuffer).AddModifiedHandler(senrLinesModified, @LineModified);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
end; end;
procedure TSynGutterLOvProviderModifiedLines.LineModified(Sender: TSynEditStrings; aIndex, procedure TSynGutterLOvProviderModifiedLines.LineModified(Sender: TSynEditStrings; aIndex,
@ -1145,7 +1145,7 @@ constructor TSynGutterLOvProviderModifiedLines.Create(AOwner: TComponent);
begin begin
inherited Create(AOwner); inherited Create(AOwner);
TSynEditStringList(TextBuffer).AddModifiedHandler(senrLinesModified, @LineModified); TSynEditStringList(TextBuffer).AddModifiedHandler(senrLinesModified, @LineModified);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
TCustomSynEdit(SynEdit).RegisterStatusChangedHandler(@SynStatusChanged, [scModified]); TCustomSynEdit(SynEdit).RegisterStatusChangedHandler(@SynStatusChanged, [scModified]);
FFirstTextLineChanged := -1; FFirstTextLineChanged := -1;
FLastTextLineChanged := -1; FLastTextLineChanged := -1;
@ -1257,8 +1257,8 @@ var
i: Integer; i: Integer;
begin begin
TSynEditStringList(Sender).RemoveHanlders(self); TSynEditStringList(Sender).RemoveHanlders(self);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanging, TMethod(@BufferChanging)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanging, @BufferChanging);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
TCustomSynEdit(SynEdit).Marks.RegisterChangeHandler(@DoMarkChange, TCustomSynEdit(SynEdit).Marks.RegisterChangeHandler(@DoMarkChange,
[smcrAdded, smcrRemoved, smcrLine, smcrVisible, smcrChanged]); [smcrAdded, smcrRemoved, smcrLine, smcrVisible, smcrChanged]);
@ -1278,8 +1278,8 @@ var
begin begin
inherited Create(AOwner); inherited Create(AOwner);
Color := clBlue; Color := clBlue;
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanging, TMethod(@BufferChanging)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanging, @BufferChanging);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
TCustomSynEdit(SynEdit).Marks.RegisterChangeHandler(@DoMarkChange, TCustomSynEdit(SynEdit).Marks.RegisterChangeHandler(@DoMarkChange,
[smcrAdded, smcrRemoved, smcrLine, smcrVisible, smcrChanged]); [smcrAdded, smcrRemoved, smcrLine, smcrVisible, smcrChanged]);
@ -1316,8 +1316,8 @@ end;
procedure TSynGutterLineOverview.Init; procedure TSynGutterLineOverview.Init;
begin begin
inherited Init; inherited Init;
TSynEditStringList(TextBuffer).AddGenericHandler(senrLineCount, TMethod(@LineCountChanged)); TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
FWinControl := TSynChildWinControl.Create(Self); FWinControl := TSynChildWinControl.Create(Self);
FWinControl.Parent := SynEdit; FWinControl.Parent := SynEdit;
FWinControl.DoubleBuffered := SynEdit.DoubleBuffered; FWinControl.DoubleBuffered := SynEdit.DoubleBuffered;
@ -1353,8 +1353,8 @@ end;
procedure TSynGutterLineOverview.BufferChanged(Sender: TObject); procedure TSynGutterLineOverview.BufferChanged(Sender: TObject);
begin begin
TSynEditStringList(Sender).RemoveHanlders(self); TSynEditStringList(Sender).RemoveHanlders(self);
TSynEditStringList(TextBuffer).AddGenericHandler(senrLineCount, TMethod(@LineCountChanged)); TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged)); TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
LineCountChanged(nil, 0, 0); LineCountChanged(nil, 0, 0);
end; end;

View File

@ -1692,14 +1692,14 @@ begin
ViewedTextBuffer.RemoveNotifyHandler(senrAfterDecPaintLock, @DoAfterDecPaintLock); ViewedTextBuffer.RemoveNotifyHandler(senrAfterDecPaintLock, @DoAfterDecPaintLock);
ViewedTextBuffer.RemoveNotifyHandler(senrBeforeIncPaintLock, @DoBeforeIncPaintLock); ViewedTextBuffer.RemoveNotifyHandler(senrBeforeIncPaintLock, @DoBeforeIncPaintLock);
ViewedTextBuffer.RemoveEditHandler(@DoLinesEdited); ViewedTextBuffer.RemoveEditHandler(@DoLinesEdited);
ViewedTextBuffer.RemoveGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged)); ViewedTextBuffer.RemoveNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
end; end;
end; end;
procedure TSynPluginMultiCaretBase.DoEditorAdded(AValue: TCustomSynEdit); procedure TSynPluginMultiCaretBase.DoEditorAdded(AValue: TCustomSynEdit);
begin begin
if Editor <> nil then begin if Editor <> nil then begin
ViewedTextBuffer.AddGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged)); ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
ViewedTextBuffer.AddEditHandler(@DoLinesEdited); ViewedTextBuffer.AddEditHandler(@DoLinesEdited);
ViewedTextBuffer.AddNotifyHandler(senrBeforeIncPaintLock, @DoBeforeIncPaintLock); ViewedTextBuffer.AddNotifyHandler(senrBeforeIncPaintLock, @DoBeforeIncPaintLock);
ViewedTextBuffer.AddNotifyHandler(senrAfterDecPaintLock, @DoAfterDecPaintLock); ViewedTextBuffer.AddNotifyHandler(senrAfterDecPaintLock, @DoAfterDecPaintLock);

View File

@ -774,8 +774,8 @@ begin
Active := False; Active := False;
if Editor <> nil then begin if Editor <> nil then begin
if not FTextBufferChanging then begin if not FTextBufferChanging then begin
ViewedTextBuffer.RemoveGenericHandler(senrTextBufferChanging, TMethod(@DoBufferChanging)); ViewedTextBuffer.RemoveNotifyHandler(senrTextBufferChanging, @DoBufferChanging);
ViewedTextBuffer.RemoveGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged)); ViewedTextBuffer.RemoveNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
end; end;
ViewedTextBuffer.RemoveEditHandler(@DoLinesEdited); ViewedTextBuffer.RemoveEditHandler(@DoLinesEdited);
ViewedTextBuffer.RemoveNotifyHandler(senrAfterIncPaintLock, @DoIncPaintLock); ViewedTextBuffer.RemoveNotifyHandler(senrAfterIncPaintLock, @DoIncPaintLock);
@ -810,8 +810,8 @@ begin
ViewedTextBuffer.AddNotifyHandler(senrAfterIncPaintLock, @DoIncPaintLock); ViewedTextBuffer.AddNotifyHandler(senrAfterIncPaintLock, @DoIncPaintLock);
ViewedTextBuffer.AddNotifyHandler(senrBeforeDecPaintLock, @DoDecPaintLock); ViewedTextBuffer.AddNotifyHandler(senrBeforeDecPaintLock, @DoDecPaintLock);
if not FTextBufferChanging then begin if not FTextBufferChanging then begin
ViewedTextBuffer.AddGenericHandler(senrTextBufferChanging, TMethod(@DoBufferChanging)); ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanging, @DoBufferChanging);
ViewedTextBuffer.AddGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged)); ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
end; end;
end; end;
end; end;

View File

@ -1858,10 +1858,10 @@ end;
procedure TIDESynGutterLOvProviderPascal.BufferChanged(Sender: TObject); procedure TIDESynGutterLOvProviderPascal.BufferChanged(Sender: TObject);
begin begin
TSynEditStringList(Sender).RemoveHanlders(self); TSynEditStringList(Sender).RemoveHanlders(self);
TSynEditStringList(TextBuffer).AddGenericHandler(senrHighlightChanged, TSynEditStringList(TextBuffer).AddChangeHandler(senrHighlightChanged,
TMethod(@HighlightChanged)); @HighlightChanged);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged,
TMethod(@BufferChanged)); @BufferChanged);
//LineCountChanged(nil, 0, 0); //LineCountChanged(nil, 0, 0);
HighlightChanged(nil,-1,-1); HighlightChanged(nil,-1,-1);
end; end;
@ -2038,10 +2038,10 @@ begin
SingleLine := False; SingleLine := False;
Color := $D4D4D4; Color := $D4D4D4;
Color2 := $E8E8E8; Color2 := $E8E8E8;
TSynEditStringList(TextBuffer).AddGenericHandler(senrHighlightChanged, TSynEditStringList(TextBuffer).AddChangeHandler(senrHighlightChanged,
TMethod(@HighlightChanged)); @HighlightChanged);
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged,
TMethod(@BufferChanged)); @BufferChanged);
end; end;
destructor TIDESynGutterLOvProviderPascal.Destroy; destructor TIDESynGutterLOvProviderPascal.Destroy;