mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-31 01:47:43 +02:00
SynEdit: TrimSpaces would mark the editor as modified. They also could add an "undo last caret move" (Bug #12949)
git-svn-id: trunk@18231 -
This commit is contained in:
parent
5612e34a33
commit
fc746d62ba
@ -597,6 +597,7 @@ type
|
||||
{$IFNDEF SYN_LAZARUS}
|
||||
procedure TrimmedSetLine(ALine: integer; ALineText: string);
|
||||
{$ENDIF}
|
||||
procedure UpdateModified;
|
||||
procedure UndoRedoAdded(Sender: TObject);
|
||||
procedure UnlockUndo;
|
||||
procedure UpdateCaret;
|
||||
@ -5550,7 +5551,11 @@ begin
|
||||
{end} //mh 2000-11-20
|
||||
end;
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
crTrimSpace: FTrimmedLinesView.ForceTrim;
|
||||
crTrimSpace:
|
||||
begin
|
||||
FTrimmedLinesView.ForceTrim;
|
||||
UpdateModified;
|
||||
end;
|
||||
{$ENDIF}
|
||||
crTrimRealSpace:
|
||||
begin
|
||||
@ -9900,23 +9905,25 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCustomSynEdit.UndoRedoAdded(Sender: TObject);
|
||||
var
|
||||
Item: TSynEditUndoItem;
|
||||
procedure TCustomSynEdit.UpdateModified;
|
||||
begin
|
||||
// Modified := TRUE;
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
Item := TSynEditUndoList(Sender).PeekItem;
|
||||
if Item <> nil then
|
||||
TSynEditStringList(fLines).MarkModified(Item.ChangeStartPos.y - 1,
|
||||
Item.ChangeEndPos.y - 1, Sender = fUndoList, Item.fChangeReason);
|
||||
if fUndoList.UnModifiedMarkerExists then
|
||||
Modified:=not fUndoList.IsTopMarkedAsUnmodified
|
||||
else if fRedoList.UnModifiedMarkerExists then
|
||||
Modified:=not fRedoList.IsTopMarkedAsUnmodified
|
||||
else
|
||||
{$ENDIF}
|
||||
Modified := fUndoList.CanUndo or fUndoList.FullUndoImpossible; //mh 2000-10-03
|
||||
end;
|
||||
|
||||
procedure TCustomSynEdit.UndoRedoAdded(Sender: TObject);
|
||||
var
|
||||
Item: TSynEditUndoItem;
|
||||
begin
|
||||
Item := TSynEditUndoList(Sender).PeekItem;
|
||||
if Item <> nil then
|
||||
TSynEditStringList(fLines).MarkModified(Item.ChangeStartPos.y - 1,
|
||||
Item.ChangeEndPos.y - 1, Sender = fUndoList, Item.fChangeReason);
|
||||
UpdateModified;
|
||||
// we have to clear the redo information, since adding undo info removes
|
||||
// the necessary context to undo earlier edit actions
|
||||
if (Sender = fUndoList) and not (sfInsideRedo in fStateFlags) then //mh 2000-10-30
|
||||
|
@ -259,6 +259,8 @@ type
|
||||
destructor Destroy; override;
|
||||
procedure AddChange(AReason: TSynChangeReason; AStart, AEnd: TPoint;
|
||||
ChangeText: string; SelMode: TSynSelectionMode);
|
||||
procedure AppendToLastChange(AReason: TSynChangeReason; AStart, AEnd: TPoint;
|
||||
ChangeText: string; SelMode: TSynSelectionMode);
|
||||
procedure BeginBlock; //sbs 2000-11-19
|
||||
procedure Clear;
|
||||
procedure EndBlock; //sbs 2000-11-19
|
||||
@ -1071,6 +1073,34 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSynEditUndoList.AppendToLastChange(AReason: TSynChangeReason; AStart,
|
||||
AEnd: TPoint; ChangeText: string; SelMode: TSynSelectionMode);
|
||||
var
|
||||
NewItem: TSynEditUndoItem;
|
||||
begin
|
||||
if (fLockCount = 0) and (PeekItem <> nil) then begin
|
||||
if (fItems.Count = fUnModifiedItem) then
|
||||
inc(fUnModifiedItem);
|
||||
NewItem := TSynEditUndoItem.Create;
|
||||
try
|
||||
with NewItem do begin
|
||||
fChangeReason := AReason;
|
||||
fChangeSelMode := SelMode;
|
||||
fChangeStartPos := AStart;
|
||||
fChangeEndPos := AEnd;
|
||||
fChangeStr := ChangeText;
|
||||
fChangeNumber := PeekItem.fChangeNumber;
|
||||
end;
|
||||
//PushItem(NewItem);
|
||||
fItems.Add(NewItem);
|
||||
EnsureMaxEntries;
|
||||
except
|
||||
NewItem.Free;
|
||||
raise;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
{begin} //sbs 2000-11-19
|
||||
procedure TSynEditUndoList.BeginBlock;
|
||||
begin
|
||||
|
@ -123,7 +123,7 @@ begin
|
||||
and (fLockCount = 0) then begin
|
||||
s := fSynStrings[fLineIndex];
|
||||
fSynStrings[fLineIndex] := s; // trigger OnPutted, so the line gets repainted
|
||||
fUndoList.AddChange(crTrimSpace, Point(1+length(s), fLineIndex+1),
|
||||
fUndoList.AppendToLastChange(crTrimSpace, Point(1+length(s), fLineIndex+1),
|
||||
Point(1+length(s)+length(fSpaces), fLineIndex+1), fSpaces, smNormal);
|
||||
end;
|
||||
FIsTrimming := False;
|
||||
@ -278,7 +278,7 @@ begin
|
||||
ltext := fSynStrings[index];
|
||||
llen := length(ltext);
|
||||
fSynStrings[index] := ltext; // trigger OnPutted, so the line gets repainted
|
||||
fUndoList.AddChange(crTrimSpace, Point(1+llen, index+1),
|
||||
fUndoList.AppendToLastChange(crTrimSpace, Point(1+llen, index+1),
|
||||
Point(1+llen+slen, index+1), fLockList[i], smNormal);
|
||||
end;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user