added eoGroupUndo by patch from bug #1190

git-svn-id: trunk@9200 -
This commit is contained in:
mattias 2006-04-29 15:32:16 +00:00
parent 950dc3d88a
commit 1c48178869
3 changed files with 105 additions and 108 deletions

View File

@ -168,7 +168,7 @@ type
eoDragDropEditing, // Allows you to select a block of text and drag it within the document to another location eoDragDropEditing, // Allows you to select a block of text and drag it within the document to another location
eoDropFiles, //TODO Allows the editor accept file drops eoDropFiles, //TODO Allows the editor accept file drops
eoEnhanceHomeKey, // home key jumps to line start if nearer, similar to visual studio eoEnhanceHomeKey, // home key jumps to line start if nearer, similar to visual studio
eoGroupUndo, //TODO When undoing/redoing actions, handle all continous changes of the same kind in one call instead undoing/redoing each command separately eoGroupUndo, // When undoing/redoing actions, handle all continous changes of the same kind in one call instead undoing/redoing each command separately
eoHalfPageScroll, // When scrolling with page-up and page-down commands, only scroll a half page at a time eoHalfPageScroll, // When scrolling with page-up and page-down commands, only scroll a half page at a time
eoHideShowScrollbars, //TODO if enabled, then the scrollbars will only show when necessary. If you have ScrollPastEOL, then it the horizontal bar will always be there (it uses MaxLength instead) eoHideShowScrollbars, //TODO if enabled, then the scrollbars will only show when necessary. If you have ScrollPastEOL, then it the horizontal bar will always be there (it uses MaxLength instead)
eoKeepCaretX, // When moving through lines w/o Cursor Past EOL, keeps the X position of the cursor eoKeepCaretX, // When moving through lines w/o Cursor Past EOL, keeps the X position of the cursor
@ -7472,6 +7472,7 @@ var
LogCaretXY: TPoint; LogCaretXY: TPoint;
LogCaret: TPoint; LogCaret: TPoint;
LogSpacePos: integer; LogSpacePos: integer;
LastUndoItem:TSynEditUndoItem;
{$ENDIF} {$ENDIF}
{begin} //mh 2000-10-30 {begin} //mh 2000-10-30
@ -7669,7 +7670,7 @@ begin
{begin} //mh 2000-10-30 {begin} //mh 2000-10-30
ecDeleteLastChar: ecDeleteLastChar:
if not ReadOnly then begin if not ReadOnly then begin
//debugln('ecDeleteLastChar A'); debugln('ecDeleteLastChar A');
if SelAvail then if SelAvail then
SetSelectedTextEmpty SetSelectedTextEmpty
else begin else begin
@ -7776,16 +7777,35 @@ begin
TrimmedSetLine(CaretY - 1, Temp); TrimmedSetLine(CaretY - 1, Temp);
end; end;
end; end;
if (Caret.X <> CaretX) or (Caret.Y <> CaretY) then begin if (Caret.X <> CaretX) or (Caret.Y <> CaretY) then begin
//debugln('ecDeleteLastChar AddChange CaretXY=',dbgs(CaretXY), {$IFDEF SYN_LAZARUS}
// ' LogCaret=',dbgs(LogCaret),' Helper="',DbgStr(Helper),'" Temp="',DbgStr(Temp),'"'); if eoGroupUndo in Options then begin
fUndoList.AddChange(crSilentDelete, LastUndoItem := fUndoList.PeekItem;
{$IFDEF SYN_LAZARUS} if (LastUndoItem <> nil)
PhysicalToLogicalPos(CaretXY), LogCaret, and (LastUndoItem.fChangeReason = crSilentDelete)
{$ELSE} and (LastUndoItem.fChangeStartPos.Y = LastUndoItem.fChangeEndPos.Y)
CaretXY, Caret, and (PhysicalToLogicalPos(CaretXY).Y = LogCaret.Y)
{$ENDIF} and (LastUndoItem.fChangeStartPos.X = LogCaret.X)
Helper, smNormal); then begin // Share the undo item with the delete char action before
LastUndoItem.fChangeStartPos.X := PhysicalToLogicalPos(CaretXY).X;
LastUndoItem.fChangeStr := Helper + LastUndoItem.fChangeStr;
end
else
begin
fUndoList.AddChange(crSilentDelete,
PhysicalToLogicalPos(CaretXY), LogCaret,
Helper, smNormal);
end;
end else begin
//debugln('ecDeleteLastChar AddChange CaretXY=',dbgs(CaretXY),
// ' LogCaret=',dbgs(LogCaret),' Helper="',DbgStr(Helper),'" Temp="',DbgStr(Temp),'"');
fUndoList.AddChange(crSilentDelete, CaretXY, Caret,
Helper, smNormal);
end;
{$ELSE}
fUndoList.AddChange(crSilentDelete,CaretXY,Caret,Helper,smNormal);
{$ENDIF}
end; end;
end; end;
end; end;

View File

@ -194,6 +194,9 @@ type
{ Editor Options object used to hold the editor options } { Editor Options object used to hold the editor options }
{ TEditorOptions }
TEditorOptions = class(TPersistent) TEditorOptions = class(TPersistent)
private private
xmlconfig: TXMLConfig; xmlconfig: TXMLConfig;
@ -246,6 +249,7 @@ TEditorOptions = class(TPersistent)
destructor Destroy; override; destructor Destroy; override;
procedure Load; procedure Load;
procedure Save; procedure Save;
function GetSynEditOptionName(SynOption: TSynEditorOption): string;
procedure GetHighlighterSettings(Syn: TCustomSyn); procedure GetHighlighterSettings(Syn: TCustomSyn);
// read highlight settings from config file // read highlight settings from config file
@ -1288,46 +1292,7 @@ begin
// general options // general options
for SynEditOpt := Low(TSynEditorOption) to High(TSynEditorOption) do for SynEditOpt := Low(TSynEditorOption) to High(TSynEditorOption) do
begin begin
case SynEditOpt of SynEditOptName := GetSynEditOptionName(SynEditOpt);
eoAltSetsColumnMode:
SynEditOptName := 'AltSetsColumnMode';
eoAutoIndent:
SynEditOptName := 'AutoIndent';
eoBracketHighlight:
SynEditOptName := 'BracketHighlight';
eoDoubleClickSelectsLine:
SynEditOptName := 'DoubleClickSelectsLine';
eoDragDropEditing:
SynEditOptName := 'DragDropEditing';
eoDropFiles:
SynEditOptName := 'DropFiles';
eoEnhanceHomeKey:
SynEditOptName := 'EnhanceHomeKey';
eoHalfPageScroll:
SynEditOptName := 'HalfPageScroll';
eoKeepCaretX:
SynEditOptName := 'KeepCaretX';
eoPersistentCaret:
SynEditOptName := 'PersistentCaret';
eoScrollByOneLess:
SynEditOptName := 'ScrollByOneLess';
eoScrollPastEof:
SynEditOptName := 'ScrollPastEof';
eoScrollPastEol:
SynEditOptName := 'ScrollPastEol';
eoShowScrollHint:
SynEditOptName := 'ShowScrollHint';
eoSmartTabs:
SynEditOptName := 'SmartTabs';
eoTabsToSpaces:
SynEditOptName := 'TabsToSpaces';
eoTabIndent:
SynEditOptName := 'TabIndent';
eoTrimTrailingSpaces:
SynEditOptName := 'TrimTrailingSpaces';
else
SynEditOptName := '';
end;
if SynEditOptName <> '' then if SynEditOptName <> '' then
if XMLConfig.GetValue('EditorOptions/General/Editor/' + SynEditOptName, if XMLConfig.GetValue('EditorOptions/General/Editor/' + SynEditOptName,
SynEditOpt in SynEditDefaultOptions) then SynEditOpt in SynEditDefaultOptions) then
@ -1460,46 +1425,7 @@ begin
// general options // general options
for SynEditOpt := Low(TSynEditorOption) to High(TSynEditorOption) do for SynEditOpt := Low(TSynEditorOption) to High(TSynEditorOption) do
begin begin
case SynEditOpt of SynEditOptName := GetSynEditOptionName(SynEditOpt);
eoAltSetsColumnMode:
SynEditOptName := 'AltSetsColumnMode';
eoAutoIndent:
SynEditOptName := 'AutoIndent';
eoBracketHighlight:
SynEditOptName := 'BracketHighlight';
eoDoubleClickSelectsLine:
SynEditOptName := 'DoubleClickSelectsLine';
eoDragDropEditing:
SynEditOptName := 'DragDropEditing';
eoDropFiles:
SynEditOptName := 'DropFiles';
eoEnhanceHomeKey:
SynEditOptName := 'EnhanceHomeKey';
eoHalfPageScroll:
SynEditOptName := 'HalfPageScroll';
eoKeepCaretX:
SynEditOptName := 'KeepCaretX';
eoPersistentCaret:
SynEditOptName := 'PersistentCaret';
eoScrollByOneLess:
SynEditOptName := 'ScrollByOneLess';
eoScrollPastEof:
SynEditOptName := 'ScrollPastEof';
eoScrollPastEol:
SynEditOptName := 'ScrollPastEol';
eoShowScrollHint:
SynEditOptName := 'ShowScrollHint';
eoSmartTabs:
SynEditOptName := 'SmartTabs';
eoTabsToSpaces:
SynEditOptName := 'TabsToSpaces';
eoTabIndent:
SynEditOptName := 'TabIndent';
eoTrimTrailingSpaces:
SynEditOptName := 'TrimTrailingSpaces';
else
SynEditOptName := '';
end;
if SynEditOptName <> '' then if SynEditOptName <> '' then
XMLConfig.SetDeleteValue('EditorOptions/General/Editor/' + SynEditOptName, XMLConfig.SetDeleteValue('EditorOptions/General/Editor/' + SynEditOptName,
SynEditOpt in fSynEditOptions, SynEditOpt in SynEditDefaultOptions); SynEditOpt in fSynEditOptions, SynEditOpt in SynEditDefaultOptions);
@ -1609,6 +1535,53 @@ begin
end; end;
end; end;
function TEditorOptions.GetSynEditOptionName(SynOption: TSynEditorOption
): string;
begin
case SynOption of
eoAltSetsColumnMode:
Result := 'AltSetsColumnMode';
eoAutoIndent:
Result := 'AutoIndent';
eoBracketHighlight:
Result := 'BracketHighlight';
eoDoubleClickSelectsLine:
Result := 'DoubleClickSelectsLine';
eoDragDropEditing:
Result := 'DragDropEditing';
eoDropFiles:
Result := 'DropFiles';
eoEnhanceHomeKey:
Result := 'EnhanceHomeKey';
eoGroupUndo:
Result := 'GroupUndo';
eoHalfPageScroll:
Result := 'HalfPageScroll';
eoKeepCaretX:
Result := 'KeepCaretX';
eoPersistentCaret:
Result := 'PersistentCaret';
eoScrollByOneLess:
Result := 'ScrollByOneLess';
eoScrollPastEof:
Result := 'ScrollPastEof';
eoScrollPastEol:
Result := 'ScrollPastEol';
eoShowScrollHint:
Result := 'ShowScrollHint';
eoSmartTabs:
Result := 'SmartTabs';
eoTabsToSpaces:
Result := 'TabsToSpaces';
eoTabIndent:
Result := 'TabIndent';
eoTrimTrailingSpaces:
Result := 'TrimTrailingSpaces';
else
Result := '';
end;
end;
function TEditorOptions.CreateSyn(LazSynHilighter: TLazSyntaxHighlighter): function TEditorOptions.CreateSyn(LazSynHilighter: TLazSyntaxHighlighter):
TCustomSyn; TCustomSyn;
begin begin
@ -2621,6 +2594,7 @@ begin
SetOption(dlgDoubleClickLine, eoDoubleClickSelectsLine); SetOption(dlgDoubleClickLine, eoDoubleClickSelectsLine);
SetOption(dlgDragDropEd, eoDragDropEditing); SetOption(dlgDragDropEd, eoDragDropEditing);
SetOption(dlgDropFiles, eoDropFiles); SetOption(dlgDropFiles, eoDropFiles);
SetOption(dlgGroupUndo, eoGroupUndo);
SetOption(dlgHomeKeyJumpsToNearestStart, eoEnhanceHomeKey); SetOption(dlgHomeKeyJumpsToNearestStart, eoEnhanceHomeKey);
SetOption(dlgHalfPageScroll, eoHalfPageScroll); SetOption(dlgHalfPageScroll, eoHalfPageScroll);
SetOption(dlgKeepCaretX, eoKeepCaretX); SetOption(dlgKeepCaretX, eoKeepCaretX);
@ -3606,6 +3580,7 @@ begin
Items.Add(dlgTrimTrailingSpaces); Items.Add(dlgTrimTrailingSpaces);
// undo // undo
Items.Add(dlgUndoAfterSave); Items.Add(dlgUndoAfterSave);
Items.Add(dlgGroupUndo);
// mouse // mouse
Items.Add(dlgDoubleClickLine); Items.Add(dlgDoubleClickLine);
Items.Add(dlgMouseLinks); Items.Add(dlgMouseLinks);
@ -3615,52 +3590,53 @@ begin
Items.Add(dlgCopyWordAtCursorOnCopyNone); Items.Add(dlgCopyWordAtCursorOnCopyNone);
Checked[Items.IndexOf(dlgAltSetClMode)] := eoAltSetsColumnMode in Checked[Items.IndexOf(dlgAltSetClMode)] := eoAltSetsColumnMode in
EditorOpts.SynEditOptions; EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgAutoIdent)] := eoAutoIndent in EditorOpts.SynEditOptions; Checked[Items.IndexOf(dlgAutoIdent)] := eoAutoIndent in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgBracHighlight)] := Checked[Items.IndexOf(dlgBracHighlight)] :=
eoBracketHighlight in EditorOpts.SynEditOptions; eoBracketHighlight in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgDragDropEd)] := Checked[Items.IndexOf(dlgDragDropEd)] :=
eoDragDropEditing in EditorOpts.SynEditOptions; eoDragDropEditing in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgDropFiles)] := eoDropFiles in EditorOpts.SynEditOptions; Checked[Items.IndexOf(dlgDropFiles)] := eoDropFiles in EditorOpts.SynEditOptions;
//TODO CheckEnabledByName[dlgDropFiles] := False; //TODO CheckEnabledByName[dlgDropFiles] := False;
Checked[Items.IndexOf(dlgGroupUndo)] := eoGroupUndo in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgHalfPageScroll)] := Checked[Items.IndexOf(dlgHalfPageScroll)] :=
eoHalfPageScroll in EditorOpts.SynEditOptions; eoHalfPageScroll in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgKeepCaretX)] := eoKeepCaretX in EditorOpts.SynEditOptions; Checked[Items.IndexOf(dlgKeepCaretX)] := eoKeepCaretX in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgPersistentCaret)] := Checked[Items.IndexOf(dlgPersistentCaret)] :=
eoPersistentCaret in EditorOpts.SynEditOptions; eoPersistentCaret in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgRightMouseMovesCursor)] := Checked[Items.IndexOf(dlgRightMouseMovesCursor)] :=
eoRightMouseMovesCursor in EditorOpts.SynEditOptions; eoRightMouseMovesCursor in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgScrollByOneLess)] := Checked[Items.IndexOf(dlgScrollByOneLess)] :=
eoScrollByOneLess in EditorOpts.SynEditOptions; eoScrollByOneLess in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgScrollPastEndFile)] := Checked[Items.IndexOf(dlgScrollPastEndFile)] :=
eoScrollPastEoF in EditorOpts.SynEditOptions; eoScrollPastEoF in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgMouseLinks)] := EditorOpts.CtrlMouseLinks; Checked[Items.IndexOf(dlgMouseLinks)] := EditorOpts.CtrlMouseLinks;
Checked[Items.IndexOf(dlgShowGutterHints)] := EditorOpts.ShowGutterHints; Checked[Items.IndexOf(dlgShowGutterHints)] := EditorOpts.ShowGutterHints;
Checked[Items.IndexOf(dlgScrollPastEndLine)] := Checked[Items.IndexOf(dlgScrollPastEndLine)] :=
eoScrollPastEoL in EditorOpts.SynEditOptions; eoScrollPastEoL in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgCloseButtonsNotebook)] := EditorOpts.ShowTabCloseButtons; Checked[Items.IndexOf(dlgCloseButtonsNotebook)] := EditorOpts.ShowTabCloseButtons;
Checked[Items.IndexOf(dlgShowScrollHint)] := Checked[Items.IndexOf(dlgShowScrollHint)] :=
eoShowScrollHint in EditorOpts.SynEditOptions; eoShowScrollHint in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgSmartTabs)] := eoSmartTabs in EditorOpts.SynEditOptions; Checked[Items.IndexOf(dlgSmartTabs)] := eoSmartTabs in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgTabsToSpaces)] := Checked[Items.IndexOf(dlgTabsToSpaces)] :=
eoTabsToSpaces in EditorOpts.SynEditOptions; eoTabsToSpaces in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgTabIndent)] := eoTabIndent in EditorOpts.SynEditOptions; Checked[Items.IndexOf(dlgTabIndent)] := eoTabIndent in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgTrimTrailingSpaces)] := Checked[Items.IndexOf(dlgTrimTrailingSpaces)] :=
eoTrimTrailingSpaces in EditorOpts.SynEditOptions; eoTrimTrailingSpaces in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgUndoAfterSave)] := EditorOpts.UndoAfterSave; Checked[Items.IndexOf(dlgUndoAfterSave)] := EditorOpts.UndoAfterSave;
Checked[Items.IndexOf(dlgDoubleClickLine)] := Checked[Items.IndexOf(dlgDoubleClickLine)] :=
eoDoubleClickSelectsLine in EditorOpts.SynEditOptions; eoDoubleClickSelectsLine in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgFindTextatCursor)] := EditorOpts.FindTextAtCursor; Checked[Items.IndexOf(dlgFindTextatCursor)] := EditorOpts.FindTextAtCursor;
Checked[Items.IndexOf(dlgUseSyntaxHighlight)] := EditorOpts.UseSyntaxHighlight; Checked[Items.IndexOf(dlgUseSyntaxHighlight)] := EditorOpts.UseSyntaxHighlight;
Checked[Items.IndexOf(dlgUseCodeFolding)] := EditorOpts.UseCodeFolding; Checked[Items.IndexOf(dlgUseCodeFolding)] := EditorOpts.UseCodeFolding;
Checked[Items.IndexOf(dlgCopyWordAtCursorOnCopyNone)] := Checked[Items.IndexOf(dlgCopyWordAtCursorOnCopyNone)] :=
EditorOpts.CopyWordAtCursorOnCopyNone; EditorOpts.CopyWordAtCursorOnCopyNone;
Checked[Items.IndexOf(dlgHomeKeyJumpsToNearestStart)] := Checked[Items.IndexOf(dlgHomeKeyJumpsToNearestStart)] :=
eoEnhanceHomeKey in EditorOpts.SynEditOptions; eoEnhanceHomeKey in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgCaretSkipsSelection)] := Checked[Items.IndexOf(dlgCaretSkipsSelection)] :=
eoCaretSkipsSelection in EditorOpts.SynEditOptions2; eoCaretSkipsSelection in EditorOpts.SynEditOptions2;
Checked[Items.IndexOf(dlgAlwaysVisibleCaret)] := Checked[Items.IndexOf(dlgAlwaysVisibleCaret)] :=
eoAlwaysVisibleCaret in EditorOpts.SynEditOptions2; eoAlwaysVisibleCaret in EditorOpts.SynEditOptions2;
end; end;
with BlockIndentComboBox do with BlockIndentComboBox do

View File

@ -854,6 +854,7 @@ resourcestring
dlgBracHighlight = 'Bracket highlighting'; dlgBracHighlight = 'Bracket highlighting';
dlgDragDropEd = 'Drag Drop editing'; dlgDragDropEd = 'Drag Drop editing';
dlgDropFiles = 'Drop files'; dlgDropFiles = 'Drop files';
dlgGroupUndo = 'Group Undo';
dlgHalfPageScroll = 'Half page scroll'; dlgHalfPageScroll = 'Half page scroll';
dlgKeepCaretX = 'Keep caret X position'; dlgKeepCaretX = 'Keep caret X position';
dlgPersistentCaret = 'Persistent caret'; dlgPersistentCaret = 'Persistent caret';