2
0
Эх сурвалжийг харах

ChangeHistory cleanup. Doesn't change anything yet, just prepares for allowing undo after reload, like modern editors and like needed when working with AI.

Martijn Laan 3 өдөр өмнө
parent
commit
708180eb85

+ 24 - 16
Components/ScintEdit.pas

@@ -259,11 +259,12 @@ type
     function CanUndo: Boolean;
     function CanUndo: Boolean;
     procedure ChooseCaretX;
     procedure ChooseCaretX;
     procedure ClearAll;
     procedure ClearAll;
+    procedure ClearChangeHistory;
     procedure ClearCmdKey(const Key: AnsiChar; const Shift: TShiftState); overload;
     procedure ClearCmdKey(const Key: AnsiChar; const Shift: TShiftState); overload;
     procedure ClearCmdKey(const KeyCode: TScintKeyCode; const Shift: TShiftState); overload;
     procedure ClearCmdKey(const KeyCode: TScintKeyCode; const Shift: TShiftState); overload;
     procedure ClearIndicators(const IndicatorNumber: TScintIndicatorNumber);
     procedure ClearIndicators(const IndicatorNumber: TScintIndicatorNumber);
     procedure ClearSelection;
     procedure ClearSelection;
-    procedure ClearUndo(const ClearChangeHistory: Boolean = True);
+    procedure ClearUndo(const AlsoClearChangeHistory: Boolean = True);
     function ConvertRawStringToString(const S: TScintRawString): String;
     function ConvertRawStringToString(const S: TScintRawString): String;
     function ConvertPCharToRawString(const Text: PChar;
     function ConvertPCharToRawString(const Text: PChar;
       const TextLen: Integer): TScintRawString;
       const TextLen: Integer): TScintRawString;
@@ -633,10 +634,6 @@ begin
   Call(SCI_SETVIRTUALSPACEOPTIONS, Flags, 0);
   Call(SCI_SETVIRTUALSPACEOPTIONS, Flags, 0);
   Call(SCI_SETWRAPMODE, Ord(FWordWrap), 0);
   Call(SCI_SETWRAPMODE, Ord(FWordWrap), 0);
   Call(SCI_SETINDENTATIONGUIDES, IndentationGuides[FIndentationGuides], 0);
   Call(SCI_SETINDENTATIONGUIDES, IndentationGuides[FIndentationGuides], 0);
-  { If FChangeHistory is not schDisabled then next call to ClearUndo will enable
-    change history and else we should disable it now }
-  if FChangeHistory = schDisabled then
-    Call(SCI_SETCHANGEHISTORY, SC_CHANGE_HISTORY_DISABLED, 0);
 end;
 end;
 
 
 procedure TScintEdit.AssignCmdKey(const Key: AnsiChar; const Shift: TShiftState;
 procedure TScintEdit.AssignCmdKey(const Key: AnsiChar; const Shift: TShiftState;
@@ -760,6 +757,15 @@ begin
   ChooseCaretX;
   ChooseCaretX;
 end;
 end;
 
 
+procedure TScintEdit.ClearChangeHistory;
+begin
+  if FChangeHistory <> schDisabled then begin
+    const SaveChangeHistory = FChangeHistory;
+    SetChangeHistory(schDisabled);
+    SetChangeHistory(SaveChangeHistory);
+  end;
+end;
+
 procedure TScintEdit.ClearCmdKey(const Key: AnsiChar; const Shift: TShiftState);
 procedure TScintEdit.ClearCmdKey(const Key: AnsiChar; const Shift: TShiftState);
 begin
 begin
   ClearCmdKey(KeyToKeyCode(Key), Shift);
   ClearCmdKey(KeyToKeyCode(Key), Shift);
@@ -782,7 +788,7 @@ begin
   Call(SCI_CLEAR, 0, 0);
   Call(SCI_CLEAR, 0, 0);
 end;
 end;
 
 
-procedure TScintEdit.ClearUndo(const ClearChangeHistory: Boolean);
+procedure TScintEdit.ClearUndo(const AlsoClearChangeHistory: Boolean);
 begin
 begin
   { SCI_EMPTYUNDOBUFFER resets the save point but doesn't send a
   { SCI_EMPTYUNDOBUFFER resets the save point but doesn't send a
     SCN_SAVEPOINTREACHED notification. Call SetSavePoint manually to get
     SCN_SAVEPOINTREACHED notification. Call SetSavePoint manually to get
@@ -790,15 +796,8 @@ begin
   SetSavePoint;
   SetSavePoint;
   Call(SCI_EMPTYUNDOBUFFER, 0, 0);
   Call(SCI_EMPTYUNDOBUFFER, 0, 0);
 
 
-  if ClearChangeHistory and (FChangeHistory <> schDisabled) then begin
-    Call(SCI_SETCHANGEHISTORY, SC_CHANGE_HISTORY_DISABLED, 0);
-    var Flags := SC_CHANGE_HISTORY_ENABLED;
-    if FChangeHistory = schMarkers then
-      Flags := Flags or SC_CHANGE_HISTORY_MARKERS
-    else
-      Flags := Flags or SC_CHANGE_HISTORY_INDICATORS;
-    Call(SCI_SETCHANGEHISTORY, Flags, 0);
-  end;
+  if AlsoClearChangeHistory then
+    ClearChangeHistory;
 end;
 end;
 
 
 function TScintEdit.ConvertRawStringToString(const S: TScintRawString): String;
 function TScintEdit.ConvertRawStringToString(const S: TScintRawString): String;
@@ -1796,7 +1795,16 @@ procedure TScintEdit.SetChangeHistory(const Value: TScintChangeHistory);
 begin
 begin
   if FChangeHistory <> Value then begin
   if FChangeHistory <> Value then begin
     FChangeHistory := Value;
     FChangeHistory := Value;
-    ApplyOptions;
+    if FChangeHistory = schDisabled then
+      Call(SCI_SETCHANGEHISTORY, SC_CHANGE_HISTORY_DISABLED, 0)
+    else begin
+      var Flags := SC_CHANGE_HISTORY_ENABLED;
+      if FChangeHistory = schMarkers then
+        Flags := Flags or SC_CHANGE_HISTORY_MARKERS
+      else
+        Flags := Flags or SC_CHANGE_HISTORY_INDICATORS;
+      Call(SCI_SETCHANGEHISTORY, Flags, 0);
+    end;
   end;
   end;
 end;
 end;