SynEdit: refactor, moved some undo/redo code to the lines object

git-svn-id: trunk@22672 -
This commit is contained in:
martin 2009-11-18 16:53:20 +00:00
parent dfd96cf12d
commit 7404b6ed0b
6 changed files with 122 additions and 74 deletions

View File

@ -454,7 +454,6 @@ type
function GetFoldState: String;
function GetPlugin(Index: Integer): TSynEditPlugin;
function GetTextBetweenPoints(aStartPoint, aEndPoint: TPoint): String;
function GetUndoList: TSynEditUndoList;
function GetDividerDrawLevel: Integer; deprecated;
procedure SetDefSelectionMode(const AValue: TSynSelectionMode);
procedure SetDividerDrawLevel(const AValue: Integer); deprecated;
@ -654,7 +653,6 @@ type
AddToUndoList: Boolean = false);
procedure ShowCaret;
procedure UndoItem(Item: TSynEditUndoItem);
property UndoList: TSynEditUndoList read GetUndoList;
procedure UpdateCursor;
protected
fGutterWidth: Integer;
@ -1178,7 +1176,7 @@ begin
if Result then
with TSynEdit(Caller) do begin
FCaret.LineCharPos := FCaretPos;
UndoList.AddChange(TSynEditUndoCaret.Create(FCaretPos));
FTheLinesView.CurUndoList.AddChange(TSynEditUndoCaret.Create(FCaretPos));
end;
end;
@ -1215,7 +1213,7 @@ begin
if Result then
with TSynEdit(Caller) do begin
SetCaretAndSelection(FCaretPos, FBeginPos, FEndPos, FBlockMode);
UndoList.AddChange(TSynEditUndoSelCaret.Create(FCaretPos, FBeginPos,
FTheLinesView.CurUndoList.AddChange(TSynEditUndoSelCaret.Create(FCaretPos, FBeginPos,
FEndPos, FBlockMode));
end;
end;
@ -1516,6 +1514,7 @@ begin
FCaret.Lines := FTheLinesView;
FInternalCaret.Lines := FTheLinesView;
FFontDummy := TFont.Create;
with TSynEditStringList(fLines) do begin
AddChangeHandler(senrLineCount, {$IFDEF FPC}@{$ENDIF}LineCountChanged);
@ -1523,28 +1522,19 @@ begin
AddNotifyHandler(senrBeginUpdate, {$IFDEF FPC}@{$ENDIF}LinesChanging);
AddNotifyHandler(senrEndUpdate, {$IFDEF FPC}@{$ENDIF}LinesChanged);
AddNotifyHandler(senrCleared, {$IFDEF FPC}@{$ENDIF}ListCleared);
AddNotifyHandler(senrUndoRedoAdded, {$IFDEF FPC}@{$ENDIF}UndoRedoAdded);
end;
fFontDummy := TFont.Create;
fUndoList := TSynEditUndoList.Create;
fUndoList.OnAddedUndo := {$IFDEF FPC}@{$ENDIF}UndoRedoAdded;
fUndoList.OnNeedCaretUndo := {$IFDEF FPC}@{$ENDIF}GetCaretUndo;
fRedoList := TSynEditUndoList.Create;
fRedoList.OnAddedUndo := {$IFDEF FPC}@{$ENDIF}UndoRedoAdded;
FIsUndoing := False;
FIsRedoing := False;
TSynEditStringList(FLines).UndoList := fUndoList;
TSynEditStringList(FLines).RedoList := fRedoList;
FUndoList := TSynEditStringList(fLines).UndoList;
FRedoList := TSynEditStringList(fLines).RedoList;
FUndoList.OnNeedCaretUndo := {$IFDEF FPC}@{$ENDIF}GetCaretUndo;
FBlockSelection := TSynEditSelection.Create(FTheLinesView, True);
FBlockSelection.Caret := FCaret;
FBlockSelection.UndoList := fUndoList;
FBlockSelection.InvalidateLinesMethod := {$IFDEF FPC}@{$ENDIF}InvalidateLines;
FBlockSelection.AddChangeHandler({$IFDEF FPC}@{$ENDIF}DoBlockSelectionChanged);
FInternalBlockSelection := TSynEditSelection.Create(FTheLinesView, False);
FInternalBlockSelection.UndoList := fUndoList;
FInternalBlockSelection.InvalidateLinesMethod := {$IFDEF FPC}@{$ENDIF}InvalidateLines;
// No need for caret, on interanl block
@ -1794,8 +1784,6 @@ begin
FreeAndNil(FMouseActionExecHandlerList);
FreeAndNil(FMouseActions);
FreeAndNil(FMouseSelActions);
FreeAndNil(fUndoList);
FreeAndNil(fRedoList);
FreeAndNil(fGutter);
FreeAndNil(fTextDrawer);
FreeAndNil(fFontDummy);
@ -4752,7 +4740,7 @@ begin
Group := fRedoList.PopItem;
if Group <> nil then begin;
IncPaintLock;
FIsRedoing := True;
FTheLinesView.IsRedoing := True;
Item := Group.Pop;
if Item <> nil then begin
BeginUndoBlock;
@ -4767,7 +4755,7 @@ begin
EndUndoBlock;
end;
end;
FIsRedoing := False;
FTheLinesView.IsRedoing := False;
Group.Free;
if fRedoList.IsTopMarkedAsUnmodified then
fUndoList.MarkTopAsUnmodified;
@ -4860,7 +4848,7 @@ begin
Group := fUndoList.PopItem;
if Group <> nil then begin;
IncPaintLock;
FIsUndoing := True;
FTheLinesView.IsUndoing := True;
Item := Group.Pop;
if Item <> nil then begin
BeginUndoBlock(fRedoList);
@ -4878,7 +4866,7 @@ begin
EndUndoBlock(fRedoList);
end;
end;
FIsUndoing := False;
FTheLinesView.IsUndoing := False;
Group.Free;
if fUndoList.IsTopMarkedAsUnmodified then
fRedoList.MarkTopAsUnmodified;
@ -4921,14 +4909,6 @@ begin
end;
end;
function TCustomSynEdit.GetUndoList: TSynEditUndoList;
begin
if FIsUndoing then
Result := fRedoList
else
Result := fUndoList;
end;
procedure TCustomSynEdit.SetDividerDrawLevel(const AValue: Integer);
begin
if assigned(fHighlighter) then
@ -6208,6 +6188,7 @@ end;
procedure TCustomSynEdit.BeginUndoBlock(aList: TSynEditUndoList = nil);
begin
if aList = nil then aList := fUndoList;
aList.OnNeedCaretUndo := {$IFDEF FPC}@{$ENDIF}GetCaretUndo;
aList.BeginBlock;
IncPaintLock;
FFoldedLinesView.Lock;

View File

@ -95,7 +95,6 @@ type
protected
FWordBreaker: TSynWordBreaker;
FBlockSelection: TSynEditSelection;
FIsUndoing, FIsRedoing: Boolean;
function GetMarkupMgr: TObject; virtual; abstract;
function GetLines: TStrings; virtual; abstract;
function GetCaretObj: TSynEditCaret; virtual; abstract;
@ -387,7 +386,7 @@ end;
function TSynEditFriend.GetIsRedoing: Boolean;
begin
Result := FFriendEdit.FIsRedoing;
Result := FFriendEdit.ViewedTextBuffer.IsRedoing;
end;
function TSynEditFriend.GetCaretObj: TSynEditCaret;
@ -397,7 +396,7 @@ end;
function TSynEditFriend.GetIsUndoing: Boolean;
begin
Result := FFriendEdit.FIsUndoing;
Result := FFriendEdit.ViewedTextBuffer.IsUndoing;
end;
{ TSynSelectedColor }

View File

@ -79,7 +79,6 @@ type
FCaret: TSynEditCaret;
FHide: Boolean;
FInternalCaret: TSynEditCaret;
fUndoList: TSynEditUndoList;
FInvalidateLinesMethod: TInvalidateLines;
FEnabled: Boolean;
FHookedLines: Boolean;
@ -156,7 +155,6 @@ type
property LastLineBytePos: TPoint read GetLastLineBytePos;
property InvalidateLinesMethod : TInvalidateLines write FInvalidateLinesMethod;
property Caret: TSynEditCaret read FCaret write SetCaret;
property UndoList: TSynEditUndoList read fUndoList write fUndoList;
property Persistent: Boolean read FPersistent write SetPersistent;
// automatically Start/Exctend selection if caret moves
// (depends if caret was at block border or not)

View File

@ -33,14 +33,19 @@ type
TStringListLineCountEvent = procedure(Sender: TSynEditStrings;
Index, Count: Integer) of object;
TSynEditNotifyReason = (senrLineCount, senrLineChange, senrEditAction,
senrTextEdit, senrBeginUpdate, senrEndUpdate,
senrCleared);
TStringListLineEditEvent = procedure(Sender: TSynEditStrings;
LinePos, BytePos, Count, LineBrkCnt: Integer;
Text: String) of object;
TSynEditNotifyReason = ( // TStringListLineCountEvent
senrLineCount, senrLineChange, senrEditAction,
// TStringListLineEditEvent
senrTextEdit,
// TNotifyEvent
senrBeginUpdate, senrEndUpdate, senrCleared,
senrUndoRedoAdded
);
TPhysicalCharWidths = Array of Shortint;
TSynEditUndoList = class;
@ -89,9 +94,13 @@ type
function GetLengthOfLongestLine: integer; virtual; abstract;
procedure SetTextStr(const Value: string); override;
function GetRedoList: TSynEditUndoList; virtual; abstract;
function GetUndoList: TSynEditUndoList; virtual; abstract;
function GetRedoList: TSynEditUndoList; virtual; abstract;
function GetCurUndoList: TSynEditUndoList; virtual; abstract;
procedure SetIsUndoing(const AValue: Boolean); virtual; abstract;
function GetIsUndoing: Boolean; virtual; abstract;
procedure SetIsRedoing(const AValue: Boolean); virtual; abstract;
function GetIsRedoing: Boolean; virtual; abstract;
procedure SendNotification(AReason: TSynEditNotifyReason;
ASender: TSynEditStrings; aIndex, aCount: Integer;
aBytePos: Integer = -1; aLen: Integer = 0;
@ -146,7 +155,9 @@ type
procedure EditRedo(Item: TSynEditUndoItem); virtual; abstract;
property UndoList: TSynEditUndoList read GetUndoList;
property RedoList: TSynEditUndoList read GetRedoList;
property IsUndoing: Boolean write SetIsUndoing;
property CurUndoList: TSynEditUndoList read GetCurUndoList; // Re or Undo (Redo while undoing)
property IsUndoing: Boolean read GetIsUndoing write SetIsUndoing;
property IsRedoing: Boolean read GetIsRedoing write SetIsRedoing;
procedure IncreaseTextChangeStamp;
public
property ExpandedStrings[Index: integer]: string read GetExpandedString;
@ -180,9 +191,13 @@ type
aTxt: String = ''); override;
procedure IgnoreSendNotification(AReason: TSynEditNotifyReason;
IncIgnore: Boolean); override;
function GetRedoList: TSynEditUndoList; override;
function GetUndoList: TSynEditUndoList; override;
function GetRedoList: TSynEditUndoList; override;
function GetCurUndoList: TSynEditUndoList; override;
procedure SetIsUndoing(const AValue: Boolean); override;
function GetIsUndoing: Boolean; override;
procedure SetIsRedoing(const AValue: Boolean); override;
function GetIsRedoing: Boolean; override;
protected
function GetCount: integer; override;
function GetCapacity: integer;
@ -552,6 +567,21 @@ begin
fSynStrings.IsUndoing := AValue;
end;
function TSynEditStringsLinked.GetIsUndoing: Boolean;
begin
Result := fSynStrings.IsUndoing;
end;
procedure TSynEditStringsLinked.SetIsRedoing(const AValue: Boolean);
begin
fSynStrings.IsRedoing := AValue;
end;
function TSynEditStringsLinked.GetIsRedoing: Boolean;
begin
Result := fSynStrings.IsRedoing;
end;
function TSynEditStringsLinked.GetIsUtf8: Boolean;
begin
Result := FSynStrings.IsUtf8;
@ -604,6 +634,11 @@ begin
Result := fSynStrings.GetUndoList;
end;
function TSynEditStringsLinked.GetCurUndoList: TSynEditUndoList;
begin
Result := fSynStrings.GetCurUndoList;
end;
procedure TSynEditStringsLinked.RegisterAttribute(const Index: TClass; const Size: Word);
begin
fSynStrings.RegisterAttribute(Index, Size);

View File

@ -124,6 +124,7 @@ type
FLineRangeNotificationList: TLineRangeNotificationList; // LineCount
FLineChangeNotificationList: TLineRangeNotificationList; // ContentChange (not called on add...)
FLineEditNotificationList: TLineEditNotificationList;
FUndoRedoAddedNotificationList: TSynMethodList;
FOnChangeList: TSynMethodList;
FOnChangingList: TSynMethodList;
FOnClearedList: TSynMethodList;
@ -131,9 +132,9 @@ type
FIgnoreSendNotification: array [TSynEditNotifyReason] of Integer;
fDosFileFormat: boolean;
fIndexOfLongestLine: integer;
fRedoList: TSynEditUndoList;
fUndoList: TSynEditUndoList;
FIsUndoing: Boolean;
FRedoList: TSynEditUndoList;
FUndoList: TSynEditUndoList;
FIsUndoing, FIsRedoing: Boolean;
{$IFDEF SYN_LAZARUS}
function GetFlags(Index: Integer): TSynEditStringFlags;
@ -149,7 +150,12 @@ type
function GetRedoList: TSynEditUndoList; override;
function GetUndoList: TSynEditUndoList; override;
function GetCurUndoList: TSynEditUndoList; override;
procedure SetIsUndoing(const AValue: Boolean); override;
function GetIsUndoing: Boolean; override;
procedure SetIsRedoing(const AValue: Boolean); override;
function GetIsRedoing: Boolean; override;
procedure UndoRedoAdded(Sender: TObject);
procedure SendNotification(AReason: TSynEditNotifyReason;
ASender: TSynEditStrings; aIndex, aCount: Integer;
aBytePos: Integer = -1; aLen: Integer = 0; aTxt: String = ''); override;
@ -402,9 +408,18 @@ var
r: TSynEditNotifyReason;
begin
fList := TSynEditStringMemory.Create;
FUndoList := TSynEditUndoList.Create;
fUndoList.OnAddedUndo := {$IFDEF FPC}@{$ENDIF}UndoRedoAdded;
FRedoList := TSynEditUndoList.Create;
fRedoList.OnAddedUndo := {$IFDEF FPC}@{$ENDIF}UndoRedoAdded;
FIsUndoing := False;
FIsRedoing := False;
FLineRangeNotificationList := TLineRangeNotificationList.Create;
FLineChangeNotificationList := TLineRangeNotificationList.Create;
FLineEditNotificationList := TLineEditNotificationList.Create;
FUndoRedoAddedNotificationList := TLineEditNotificationList.Create;
FOnChangeList := TSynMethodList.Create;
FOnChangingList := TSynMethodList.Create;
FOnClearedList := TSynMethodList.Create;
@ -429,9 +444,12 @@ begin
FreeAndNil(FLineRangeNotificationList);
FreeAndNil(FLineChangeNotificationList);
FreeAndNil(FLineEditNotificationList);
FreeAndNil(FUndoRedoAddedNotificationList);
FreeAndNil(FOnChangeList);
FreeAndNil(FOnChangingList);
FreeAndNil(FOnClearedList);
FreeAndNil(FUndoList);
FreeAndNil(FRedoList);
FreeAndNil(fList);
end;
@ -599,6 +617,11 @@ begin
end;
function TSynEditStringList.GetUndoList: TSynEditUndoList;
begin
Result := fUndoList;
end;
function TSynEditStringList.GetCurUndoList: TSynEditUndoList;
begin
if FIsUndoing then
Result := fRedoList
@ -611,6 +634,26 @@ begin
FIsUndoing := AValue;
end;
function TSynEditStringList.GetIsUndoing: Boolean;
begin
Result := FIsUndoing;
end;
procedure TSynEditStringList.SetIsRedoing(const AValue: Boolean);
begin
FIsRedoing := AValue;
end;
function TSynEditStringList.GetIsRedoing: Boolean;
begin
Result := FIsRedoing;
end;
procedure TSynEditStringList.UndoRedoAdded(Sender: TObject);
begin
FUndoRedoAddedNotificationList.CallNotifyEvents(Sender);
end;
// Maps the Physical Width (ScreenCells) to each character
// Multibyte Chars have thw width on the first byte, and a 0 Width for all other bytes
function TSynEditStringList.GetPhysicalCharWidths(const Line: String; Index: Integer): TPhysicalCharWidths;
@ -872,6 +915,7 @@ begin
senrBeginUpdate : FOnChangingList.Add(AHandler);
senrEndUpdate : FOnChangeList.Add(AHandler);
senrCleared : FOnClearedList.Add(AHandler);
senrUndoRedoAdded : FUndoRedoAddedNotificationList.Add(AHandler);
end;
end;
@ -884,6 +928,7 @@ begin
senrBeginUpdate : FOnChangingList.Remove(AHandler);
senrEndUpdate : FOnChangeList.Remove(AHandler);
senrCleared : FOnClearedList.Remove(AHandler);
senrUndoRedoAdded : FUndoRedoAddedNotificationList.Remove(AHandler);
end;
end;
@ -913,7 +958,7 @@ begin
LogX := Length(s) + 1;
end;
Strings[LogY - 1] := copy(s,1, LogX - 1) + AText + copy(s, LogX, length(s));
UndoList.AddChange(TSynEditUndoTxtInsert.Create(LogX, LogY, Length(AText)));
CurUndoList.AddChange(TSynEditUndoTxtInsert.Create(LogX, LogY, Length(AText)));
MarkModified(LogY, LogY);
SendNotification(senrEditAction, self, LogY, 0, LogX, length(AText), AText);
end;
@ -927,7 +972,7 @@ begin
exit;
Result := copy(s, LogX, ByteLen);
Strings[LogY - 1] := copy(s,1, LogX - 1) + copy(s, LogX + ByteLen, length(s));
UndoList.AddChange(TSynEditUndoTxtDelete.Create(LogX, LogY, Result));
CurUndoList.AddChange(TSynEditUndoTxtDelete.Create(LogX, LogY, Result));
MarkModified(LogY, LogY);
SendNotification(senrEditAction, self, LogY, 0, LogX, -ByteLen, '');
end;
@ -940,7 +985,7 @@ begin
if LogX - 1 < length(s) then
Strings[LogY - 1] := copy(s, 1, LogX - 1);
Insert(LogY, copy(s, LogX, length(s)));
UndoList.AddChange(TSynEditUndoTxtLineBreak.Create(LogY));
CurUndoList.AddChange(TSynEditUndoTxtLineBreak.Create(LogY));
MarkModified(LogY, LogY + 1);
SendNotification(senrEditAction, self, LogY, 1, LogX, 0, '');
end;
@ -952,7 +997,7 @@ begin
t := Strings[LogY - 1];
if FillText <> '' then
EditInsert(1 + Length(t), LogY, FillText);
UndoList.AddChange(TSynEditUndoTxtLineJoin.Create(1 + Length(Strings[LogY-1]),
CurUndoList.AddChange(TSynEditUndoTxtLineJoin.Create(1 + Length(Strings[LogY-1]),
LogY));
t := t + FillText;
Strings[LogY - 1] := t + Strings[LogY] ;
@ -965,7 +1010,7 @@ procedure TSynEditStringList.EditLinesInsert(LogY, ACount: Integer;
AText: String = '');
begin
InsertLines(LogY - 1, ACount);
UndoList.AddChange(TSynEditUndoTxtLinesIns.Create(LogY, ACount));
CurUndoList.AddChange(TSynEditUndoTxtLinesIns.Create(LogY, ACount));
SendNotification(senrEditAction, self, LogY, ACount, 1, 0, '');
if AText <> '' then
EditInsert(1, LogY, AText);
@ -979,23 +1024,18 @@ begin
for i := LogY to LogY + ACount - 1 do
EditDelete(1, i, length(Strings[i-1]));
DeleteLines(LogY - 1, ACount);
UndoList.AddChange(TSynEditUndoTxtLinesDel.Create(LogY, ACount));
CurUndoList.AddChange(TSynEditUndoTxtLinesDel.Create(LogY, ACount));
SendNotification(senrEditAction, self, LogY, -ACount, 1, 0, '');
end;
procedure TSynEditStringList.EditUndo(Item: TSynEditUndoItem);
begin
IsUndoing := True;
try
EditRedo(Item);
finally
IsUndoing := False;
end;
EditRedo(Item);
end;
procedure TSynEditStringList.UndoEditLinesDelete(LogY, ACount: Integer);
begin
UndoList.AddChange(TSynEditUndoTxtLinesDel.Create(LogY, ACount));
CurUndoList.AddChange(TSynEditUndoTxtLinesDel.Create(LogY, ACount));
DeleteLines(LogY - 1, ACount);
SendNotification(senrEditAction, self, LogY, -ACount, 1, 0, '');
end;

View File

@ -294,9 +294,9 @@ begin
Result := Caller is TSynEditStringTrimmingList;
if Result then
with TSynEditStringTrimmingList(Caller) do begin
UndoList.Lock;
CurUndoList.Lock;
EditInsertTrim(1, FPosY, FText);
UndoList.Unlock;
CurUndoList.Unlock;
SendNotification(senrLineChange, TSynEditStringTrimmingList(Caller),
FPosY - 1, 1);
SendNotification(senrEditAction, TSynEditStringTrimmingList(Caller),
@ -366,7 +366,7 @@ begin
if (fLineIndex <> TSynEditCaret(Sender).LinePos - 1) or
(FTrimType = settIgnoreAll) then
begin
UndoList.AppendToLastChange(TSynEditUndoTrimForget.Create(FLineIndex+1, FSpaces));
CurUndoList.AppendToLastChange(TSynEditUndoTrimForget.Create(FLineIndex+1, FSpaces));
i := length(FSpaces);
fSpaces := '';
SendNotification(senrEditAction, self, FLineIndex+1, 0,
@ -382,7 +382,7 @@ begin
s := copy(FSpaces, j + 1, MaxInt);
FSpaces := copy(FSpaces, 1, j);
i := length(s);
UndoList.AppendToLastChange(TSynEditUndoTrimForget.Create(FLineIndex+1, s));
CurUndoList.AppendToLastChange(TSynEditUndoTrimForget.Create(FLineIndex+1, s));
SendNotification(senrEditAction, self, FLineIndex+1, 0,
1+length(fSynStrings[FLineIndex]) + length(FSpaces), -i, '');
end;
@ -561,7 +561,7 @@ begin
if (slen > 0) and (index >= 0) and (index < fSynStrings.Count) then begin
ltext := fSynStrings[index];
fSynStrings[index] := ltext; // trigger OnPutted, so the line gets repainted
UndoList.AppendToLastChange(TSynEditUndoTrimForget.Create(Index+1, fLockList[i]));
CurUndoList.AppendToLastChange(TSynEditUndoTrimForget.Create(Index+1, fLockList[i]));
end;
end;
FIsTrimming := False;
@ -699,7 +699,7 @@ begin
StoreSpacesForLine(LogY - 1,
copy(s,1, LogX - 1) + AText + copy(s, LogX, length(s)),
fSynStrings.Strings[LogY - 1]);
UndoList.AddChange(TSynEditUndoTrimInsert.Create(LogX, LogY, Length(AText)));
CurUndoList.AddChange(TSynEditUndoTrimInsert.Create(LogX, LogY, Length(AText)));
end;
function TSynEditStringTrimmingList.EditDeleteTrim(LogX, LogY, ByteLen:
@ -715,7 +715,7 @@ begin
copy(s,1, LogX - 1) + copy(s, LogX + ByteLen, length(s)),
fSynStrings.Strings[LogY - 1]);
if Result <> '' then
UndoList.AddChange(TSynEditUndoTrimDelete.Create(LogX, LogY, Result));
CurUndoList.AddChange(TSynEditUndoTrimDelete.Create(LogX, LogY, Result));
end;
procedure TSynEditStringTrimmingList.EditMoveToTrim(LogY, Len: Integer);
@ -729,7 +729,7 @@ begin
t := copy(t, 1, length(t) - Len);
StoreSpacesForLine(LogY - 1, s, t);
fSynStrings[LogY - 1] := t;
UndoList.AddChange(TSynEditUndoTrimMoveTo.Create(LogY, Len));
CurUndoList.AddChange(TSynEditUndoTrimMoveTo.Create(LogY, Len));
end;
procedure TSynEditStringTrimmingList.EditMoveFromTrim(LogY, Len: Integer);
@ -743,7 +743,7 @@ begin
s := copy(s, 1 + Len, Len);
StoreSpacesForLine(LogY - 1, s, t);
fSynStrings[LogY - 1] := t;
UndoList.AddChange(TSynEditUndoTrimMoveFrom.Create(LogY, Len));
CurUndoList.AddChange(TSynEditUndoTrimMoveFrom.Create(LogY, Len));
end;
procedure TSynEditStringTrimmingList.UpdateLineText(LogY: Integer);
@ -931,12 +931,7 @@ end;
procedure TSynEditStringTrimmingList.EditUndo(Item: TSynEditUndoItem);
begin
IsUndoing := True;
try
EditRedo(Item);
finally
IsUndoing := False;
end;
EditRedo(Item);
end;
procedure TSynEditStringTrimmingList.EditRedo(Item: TSynEditUndoItem);