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
eoDropFiles, //TODO Allows the editor accept file drops
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
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
@ -7472,6 +7472,7 @@ var
LogCaretXY: TPoint;
LogCaret: TPoint;
LogSpacePos: integer;
LastUndoItem:TSynEditUndoItem;
{$ENDIF}
{begin} //mh 2000-10-30
@ -7669,7 +7670,7 @@ begin
{begin} //mh 2000-10-30
ecDeleteLastChar:
if not ReadOnly then begin
//debugln('ecDeleteLastChar A');
debugln('ecDeleteLastChar A');
if SelAvail then
SetSelectedTextEmpty
else begin
@ -7776,16 +7777,35 @@ begin
TrimmedSetLine(CaretY - 1, Temp);
end;
end;
if (Caret.X <> CaretX) or (Caret.Y <> CaretY) then begin
//debugln('ecDeleteLastChar AddChange CaretXY=',dbgs(CaretXY),
// ' LogCaret=',dbgs(LogCaret),' Helper="',DbgStr(Helper),'" Temp="',DbgStr(Temp),'"');
fUndoList.AddChange(crSilentDelete,
{$IFDEF SYN_LAZARUS}
PhysicalToLogicalPos(CaretXY), LogCaret,
{$ELSE}
CaretXY, Caret,
{$ENDIF}
Helper, smNormal);
{$IFDEF SYN_LAZARUS}
if eoGroupUndo in Options then begin
LastUndoItem := fUndoList.PeekItem;
if (LastUndoItem <> nil)
and (LastUndoItem.fChangeReason = crSilentDelete)
and (LastUndoItem.fChangeStartPos.Y = LastUndoItem.fChangeEndPos.Y)
and (PhysicalToLogicalPos(CaretXY).Y = LogCaret.Y)
and (LastUndoItem.fChangeStartPos.X = LogCaret.X)
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;

View File

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

View File

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