mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-20 11:59:26 +02:00
SynEdit: refactor, moved some undo/redo code to the lines object
git-svn-id: trunk@22672 -
This commit is contained in:
parent
dfd96cf12d
commit
7404b6ed0b
@ -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;
|
||||
|
@ -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 }
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user