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
senrLineCount, // Lines Inserted or Deleted (if not empty, they will trigger senrLineChange too)
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)
// TStringListLineEditEvent
senrEditAction, // EditInsert, EditDelete, EditLineBreak, ...
@ -280,6 +280,12 @@ type
procedure DoGetPhysicalCharWidths(Line: PChar; LineLen, Index: Integer; PWidths: PPhysicalCharWidth); virtual; abstract;
function GetDisplayView: TLazSynDisplayView; virtual;
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); virtual; abstract;
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); virtual; abstract;
public
constructor Create;
destructor Destroy; override;
@ -292,8 +298,6 @@ type
procedure InsertLines(Index, NumLines: integer); virtual; abstract;
procedure InsertStrings(Index: integer; NewStrings: TStrings); virtual; abstract;
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); virtual; abstract;
procedure AddModifiedHandler(AReason: TSynEditNotifyReason;
AHandler: TStringListLinesModifiedEvent);
procedure AddChangeHandler(AReason: TSynEditNotifyReason;
@ -301,8 +305,6 @@ type
procedure AddNotifyHandler(AReason: TSynEditNotifyReason;
AHandler: TNotifyEvent);
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
AHandler: TMethod); virtual; abstract;
procedure RemoveModifiedHandler(AReason: TSynEditNotifyReason;
AHandler: TStringListLinesModifiedEvent);
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
@ -988,12 +990,14 @@ end;
procedure TSynEditStrings.AddChangeHandler(AReason: TSynEditNotifyReason;
AHandler: TStringListLineCountEvent);
begin
assert(AReason in [senrLineCount, senrLineChange, senrHighlightChanged], 'AddChangeHandler');
AddGenericHandler(AReason, TMethod(AHandler));
end;
procedure TSynEditStrings.AddNotifyHandler(AReason: TSynEditNotifyReason;
AHandler: TNotifyEvent);
begin
assert(AReason in [senrCleared..senrTextBufferChanged], 'AddNotifyHandler');
AddGenericHandler(AReason, TMethod(AHandler));
end;
@ -1007,12 +1011,14 @@ end;
procedure TSynEditStrings.RemoveChangeHandler(AReason: TSynEditNotifyReason;
AHandler: TStringListLineCountEvent);
begin
assert(AReason in [senrLineCount, senrLineChange, senrHighlightChanged], 'RemoveChangeHandler');
RemoveGenericHandler(AReason, TMethod(AHandler));
end;
procedure TSynEditStrings.RemoveNotifyHandler(AReason: TSynEditNotifyReason;
AHandler: TNotifyEvent);
begin
assert(AReason in [senrCleared..senrTextBufferChanged], 'RemoveNotifyHandler');
RemoveGenericHandler(AReason, TMethod(AHandler));
end;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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