mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-18 19:48:14 +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}
|
{$IFNDEF SYN_LAZARUS}
|
||||||
procedure TrimmedSetLine(ALine: integer; ALineText: string);
|
procedure TrimmedSetLine(ALine: integer; ALineText: string);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
procedure UpdateModified;
|
||||||
procedure UndoRedoAdded(Sender: TObject);
|
procedure UndoRedoAdded(Sender: TObject);
|
||||||
procedure UnlockUndo;
|
procedure UnlockUndo;
|
||||||
procedure UpdateCaret;
|
procedure UpdateCaret;
|
||||||
@ -5550,7 +5551,11 @@ begin
|
|||||||
{end} //mh 2000-11-20
|
{end} //mh 2000-11-20
|
||||||
end;
|
end;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
crTrimSpace: FTrimmedLinesView.ForceTrim;
|
crTrimSpace:
|
||||||
|
begin
|
||||||
|
FTrimmedLinesView.ForceTrim;
|
||||||
|
UpdateModified;
|
||||||
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
crTrimRealSpace:
|
crTrimRealSpace:
|
||||||
begin
|
begin
|
||||||
@ -9900,23 +9905,25 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomSynEdit.UndoRedoAdded(Sender: TObject);
|
procedure TCustomSynEdit.UpdateModified;
|
||||||
var
|
|
||||||
Item: TSynEditUndoItem;
|
|
||||||
begin
|
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
|
if fUndoList.UnModifiedMarkerExists then
|
||||||
Modified:=not fUndoList.IsTopMarkedAsUnmodified
|
Modified:=not fUndoList.IsTopMarkedAsUnmodified
|
||||||
else if fRedoList.UnModifiedMarkerExists then
|
else if fRedoList.UnModifiedMarkerExists then
|
||||||
Modified:=not fRedoList.IsTopMarkedAsUnmodified
|
Modified:=not fRedoList.IsTopMarkedAsUnmodified
|
||||||
else
|
else
|
||||||
{$ENDIF}
|
|
||||||
Modified := fUndoList.CanUndo or fUndoList.FullUndoImpossible; //mh 2000-10-03
|
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
|
// we have to clear the redo information, since adding undo info removes
|
||||||
// the necessary context to undo earlier edit actions
|
// the necessary context to undo earlier edit actions
|
||||||
if (Sender = fUndoList) and not (sfInsideRedo in fStateFlags) then //mh 2000-10-30
|
if (Sender = fUndoList) and not (sfInsideRedo in fStateFlags) then //mh 2000-10-30
|
||||||
|
@ -259,6 +259,8 @@ type
|
|||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure AddChange(AReason: TSynChangeReason; AStart, AEnd: TPoint;
|
procedure AddChange(AReason: TSynChangeReason; AStart, AEnd: TPoint;
|
||||||
ChangeText: string; SelMode: TSynSelectionMode);
|
ChangeText: string; SelMode: TSynSelectionMode);
|
||||||
|
procedure AppendToLastChange(AReason: TSynChangeReason; AStart, AEnd: TPoint;
|
||||||
|
ChangeText: string; SelMode: TSynSelectionMode);
|
||||||
procedure BeginBlock; //sbs 2000-11-19
|
procedure BeginBlock; //sbs 2000-11-19
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
procedure EndBlock; //sbs 2000-11-19
|
procedure EndBlock; //sbs 2000-11-19
|
||||||
@ -1071,6 +1073,34 @@ begin
|
|||||||
end;
|
end;
|
||||||
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
|
{begin} //sbs 2000-11-19
|
||||||
procedure TSynEditUndoList.BeginBlock;
|
procedure TSynEditUndoList.BeginBlock;
|
||||||
begin
|
begin
|
||||||
|
@ -123,7 +123,7 @@ begin
|
|||||||
and (fLockCount = 0) then begin
|
and (fLockCount = 0) then begin
|
||||||
s := fSynStrings[fLineIndex];
|
s := fSynStrings[fLineIndex];
|
||||||
fSynStrings[fLineIndex] := s; // trigger OnPutted, so the line gets repainted
|
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);
|
Point(1+length(s)+length(fSpaces), fLineIndex+1), fSpaces, smNormal);
|
||||||
end;
|
end;
|
||||||
FIsTrimming := False;
|
FIsTrimming := False;
|
||||||
@ -278,7 +278,7 @@ begin
|
|||||||
ltext := fSynStrings[index];
|
ltext := fSynStrings[index];
|
||||||
llen := length(ltext);
|
llen := length(ltext);
|
||||||
fSynStrings[index] := ltext; // trigger OnPutted, so the line gets repainted
|
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);
|
Point(1+llen+slen, index+1), fLockList[i], smNormal);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user