diff --git a/CHANGELOG.md b/CHANGELOG.md index f29c2375..1539834d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,12 @@ # v3.9.26-devel +## Enhancements + +- Editor, added the _Undo All_ action. + ## Bugx fixed -- Fixed windows release (#116). ldc2 >= 1.31.0 is a minimal requirement now. +- Fixed windows release (#116). From now ldc2 >= 1.31.0 is a minimal requirement. - The context lines of the diff viewer were not legible whith dark themes. # v3.9.25 diff --git a/src/u_editor.lfm b/src/u_editor.lfm index 9beea453..5a21e1cb 100644 --- a/src/u_editor.lfm +++ b/src/u_editor.lfm @@ -10,32 +10,33 @@ inherited EditorWidget: TEditorWidget OnShow = FormShow inherited Content: TPanel Height = 398 + Top = 36 Width = 465 ClientHeight = 398 ClientWidth = 465 object editorStatus: TStatusBar[0] Left = 0 - Height = 19 - Top = 377 + Height = 20 + Top = 376 Width = 465 BorderSpacing.Bottom = 2 - Panels = < + Panels = < item Width = 110 - end + end item Width = 80 - end + end item Width = 120 - end + end item Alignment = taCenter Width = 100 - end + end item Width = 2000 - end + end item Width = 50 end> @@ -45,20 +46,19 @@ inherited EditorWidget: TEditorWidget end end inherited toolbar: TDexedToolBar - Height = 30 Width = 457 end inherited contextMenu: TPopupMenu Left = 24 Top = 16 end - object macRecorder: TSynMacroRecorder[2] + object macRecorder: TSynMacroRecorder[3] RecordShortCut = 0 PlaybackShortCut = 0 Left = 80 Top = 16 end - object mnuEditor: TPopupMenu[3] + object mnuEditor: TPopupMenu[4] OnPopup = mnuEditorPopup Left = 152 Top = 16 @@ -81,13 +81,17 @@ inherited EditorWidget: TEditorWidget Caption = 'Undo' OnClick = mnuedUndoClick end + object mnuedUndoAll: TMenuItem + Caption = 'Undo all' + OnClick = mnuedUndoAllClick + end object mnuedRedo: TMenuItem Caption = 'Redo' OnClick = mnuedRedoClick end - object enuItemRedoAll: TMenuItem + object mnuedRedoAll: TMenuItem Caption = 'Redo all' - OnClick = enuItemRedoAllClick + OnClick = mnuedRedoAllClick end object MenuItem11: TMenuItem Caption = '-' @@ -280,7 +284,7 @@ inherited EditorWidget: TEditorWidget OnClick = MenuItem8Click end end - object mnuCurFile: TPopupMenu[4] + object mnuCurFile: TPopupMenu[5] Left = 216 Top = 16 object mnuCurFileShowInMiniExpl: TMenuItem diff --git a/src/u_editor.pas b/src/u_editor.pas index 3cb0ad24..ea906bd5 100644 --- a/src/u_editor.pas +++ b/src/u_editor.pas @@ -62,7 +62,8 @@ type MenuItem14: TMenuItem; MenuItem15: TMenuItem; MenuItem16: TMenuItem; - enuItemRedoAll: TMenuItem; + mnuedRedoAll: TMenuItem; + mnuedUndoAll: TMenuItem; mnuCurFileCopyName: TMenuItem; mnuCurFileShowInMiniExpl: TMenuItem; mnuCurFileShellOpen: TMenuItem; @@ -113,7 +114,7 @@ type editorStatus: TStatusBar; mnuEditor: TPopupMenu; mnuCurFile: TPopupMenu; - procedure enuItemRedoAllClick(Sender: TObject); + procedure mnuedRedoAllClick(Sender: TObject); procedure FormShortCut(var Msg: TLMKey; var Handled: Boolean); procedure FormShow(Sender: TObject); procedure mnuCurFileCopyNameClick(Sender: TObject); @@ -134,6 +135,7 @@ type procedure mnuEdShowSpecClick(Sender: TObject); procedure mnuedSortLinesClick(Sender: TObject); procedure mnuEdTabWidth2Click(Sender: TObject); + procedure mnuedUndoAllClick(Sender: TObject); procedure mnuedUpcaseClick(Sender: TObject); procedure MenuItem5Click(Sender: TObject); procedure MenuItem6Click(Sender: TObject); @@ -360,7 +362,9 @@ begin AssignPng(mnuedCut.Bitmap, 'CUT'); AssignPng(mnuedPaste.Bitmap, 'PASTE'); AssignPng(mnuedUndo.Bitmap, 'ARROW_UNDO'); + AssignPng(mnuedUndoAll.Bitmap, 'ARROW_UNDO'); AssignPng(mnuedRedo.Bitmap, 'ARROW_REDO'); + AssignPng(mnuedRedoAll.Bitmap, 'ARROW_REDO'); AssignPng(mnuedJum2Decl.Bitmap, 'ARROW_SHOE'); AssignPng(mnuedCopy.Bitmap, 'COPY'); AssignPng(mnuedNext.Bitmap, 'GO_NEXT'); @@ -388,7 +392,9 @@ begin AssignPng(mnuedCut.Bitmap, 'CUT24'); AssignPng(mnuedPaste.Bitmap, 'PASTE24'); AssignPng(mnuedUndo.Bitmap, 'ARROW_UNDO24'); + AssignPng(mnuedUndoAll.Bitmap, 'ARROW_UNDO24'); AssignPng(mnuedRedo.Bitmap, 'ARROW_REDO24'); + AssignPng(mnuedRedoAll.Bitmap, 'ARROW_REDO24'); //AssignPng(mnuedJum2Decl.Bitmap, 'ARROW_SHOE24'); AssignPng(mnuedCopy.Bitmap, 'COPY24'); AssignPng(mnuedNext.Bitmap, 'GO_NEXT24'); @@ -416,7 +422,9 @@ begin AssignPng(mnuedCut.Bitmap, 'CUT32'); AssignPng(mnuedPaste.Bitmap, 'PASTE32'); AssignPng(mnuedUndo.Bitmap, 'ARROW_UNDO32'); + AssignPng(mnuedUndoAll.Bitmap, 'ARROW_UNDO32'); AssignPng(mnuedRedo.Bitmap, 'ARROW_REDO32'); + AssignPng(mnuedRedoAll.Bitmap, 'ARROW_REDO32'); //AssignPng(mnuedJum2Decl.Bitmap, 'ARROW_SHOE32'); AssignPng(mnuedCopy.Bitmap, 'COPY32'); AssignPng(mnuedNext.Bitmap, 'GO_NEXT32'); @@ -1043,6 +1051,12 @@ begin end; end; +procedure TEditorWidget.mnuedUndoAllClick(Sender: TObject); +begin + if fDoc.isAssigned then + fDoc.undoAll(); +end; + procedure TEditorWidget.mnuedNextCareaClick(Sender: TObject); begin if fDoc.isAssigned then @@ -1092,7 +1106,7 @@ begin end; end; -procedure TEditorWidget.enuItemRedoAllClick(Sender: TObject); +procedure TEditorWidget.mnuedRedoAllClick(Sender: TObject); begin if fDoc.isAssigned then fDoc.redoAll(); @@ -1259,7 +1273,9 @@ begin mnuedPaste.Enabled:=fDoc.CanPaste; mnuedCopy.Enabled:=fDoc.SelAvail; mnuedUndo.Enabled:=fDoc.CanUndo; + mnuedUndoAll.Enabled:=fDoc.CanUndo; mnuedRedo.Enabled:=fDoc.CanRedo; + mnuedRedoAll.Enabled:=fDoc.CanRedo; mnuedJum2Decl.Enabled:=fDoc.isDSource; mnuEdSetSpaces.Checked:= eoTabsToSpaces in fDoc.Options; diff --git a/src/u_main.lfm b/src/u_main.lfm index 2ab5a397..89b57fbe 100644 --- a/src/u_main.lfm +++ b/src/u_main.lfm @@ -1,17 +1,17 @@ object MainForm: TMainForm Left = 383 - Height = 35 + Height = 34 Top = 610 - Width = 687 + Width = 673 AllowDropFiles = True Caption = 'Dexed' + DesignTimePPI = 94 Menu = mainMenu OnClose = FormClose OnCloseQuery = FormCloseQuery OnDropFiles = FormDropFiles OnResize = FormResize ShowHint = True - LCLVersion = '2.2.4.0' object mainMenu: TMainMenu Top = 1 object MenuItem1: TMenuItem @@ -134,6 +134,9 @@ object MainForm: TMainForm object MenuItem19: TMenuItem Action = actEdUndo end + object MenuItem120: TMenuItem + Action = actEdUndoAll + end object MenuItem20: TMenuItem Action = actEdRedo end @@ -420,7 +423,7 @@ object MainForm: TMainForm end end object Actions: TActionList - Left = 33 + Left = 32 object actEdCopy: TAction Category = 'Edit' Caption = 'Copy' @@ -450,13 +453,6 @@ object MainForm: TMainForm OnUpdate = updateDocEditBasedAction ShortCut = 16474 end - object actEdRedo: TAction - Category = 'Edit' - Caption = 'Redo' - OnExecute = actEdRedoExecute - OnUpdate = updateDocEditBasedAction - ShortCut = 24666 - end object actFileSave: TAction Category = 'File' Caption = 'Save file' @@ -816,6 +812,19 @@ object MainForm: TMainForm Caption = 'Check semantics' OnExecute = actProjCheckSemaExecute end + object actEdUndoAll: TAction + Category = 'Edit' + Caption = 'Undo all' + OnExecute = actEdUndoAllExecute + OnUpdate = updateDocEditBasedAction + end + object actEdRedo: TAction + Category = 'Edit' + Caption = 'Redo' + OnExecute = actEdRedoExecute + OnUpdate = updateDocEditBasedAction + ShortCut = 24666 + end object actEdRedoAll: TAction Category = 'Edit' Caption = 'Redo all' @@ -875,7 +884,7 @@ object MainForm: TMainForm object ApplicationProperties1: TApplicationProperties OnActivate = ApplicationProperties1Activate OnException = ApplicationProperties1Exception - Left = 64 + Left = 63 Top = 1 end end diff --git a/src/u_main.pas b/src/u_main.pas index 8ca993ee..898be36b 100644 --- a/src/u_main.pas +++ b/src/u_main.pas @@ -118,6 +118,7 @@ type actFileNewClip: TAction; actEdFormat: TAction; actEdRedoAll: TAction; + actEdUndoAll: TAction; actProjCheckSema: TAction; actProjSetEnv: TAction; actProjGitPull: TAction; @@ -188,6 +189,7 @@ type MenuItem117: TMenuItem; MenuItem118: TMenuItem; MenuItem119: TMenuItem; + MenuItem120: TMenuItem; mnuGitBranch: TMenuItem; mnuItemDubDialog: TMenuItem; mnuItemHelp: TMenuItem; @@ -299,6 +301,7 @@ type MenuItem8: TMenuItem; MenuItem9: TMenuItem; procedure actEdFormatExecute(Sender: TObject); + procedure actEdUndoAllExecute(Sender: TObject); procedure actFileCloseAllExecute(Sender: TObject); procedure actFileCloseAllOthersExecute(Sender: TObject); procedure actFileCompileExecute(Sender: TObject); @@ -1565,6 +1568,7 @@ begin actFileNewClip.ImageIndex:= i; i := loadIcon('ARROW_UNDO'); actEdUndo.ImageIndex:= i; + actEdUndoAll.ImageIndex:= i; i := loadIcon('ARROW_REDO'); actEdRedo.ImageIndex:= i; actEdRedoAll.ImageIndex:= i; @@ -2916,6 +2920,12 @@ begin fDoc.redoAll(); end; +procedure TMainForm.actEdUndoAllExecute(Sender: TObject); +begin + if fDoc.isAssigned then + fDoc.undoAll(); +end; + procedure TMainForm.actEdMacPlayExecute(Sender: TObject); begin if fDoc.isAssigned then diff --git a/src/u_synmemo.pas b/src/u_synmemo.pas index 9e6bd879..9e67ca20 100644 --- a/src/u_synmemo.pas +++ b/src/u_synmemo.pas @@ -382,6 +382,7 @@ type procedure setDscannerOptions(dsEnabled: boolean; dsDelay: integer); procedure centerCursor(); procedure redoAll(); + procedure undoAll(); procedure scrollCentered(down: boolean); // property IdentifierMatchOptions: TIdentifierMatchOptions read fMatchOpts write setMatchOpts; @@ -484,8 +485,9 @@ const ecSelLeftWordEdge = ecUserFirst + 32; ecSelRightWordEdge = ecUserFirst + 33; ecRedoAll = ecUserFirst + 34; - ecScrollCenteredUp = ecUserFirst + 35; - ecScrollCenteredDown = ecUserFirst + 36; + ecUndoAll = ecUserFirst + 35; + ecScrollCenteredUp = ecUserFirst + 36; + ecScrollCenteredDown = ecUserFirst + 37; var D2Syn: TSynD2Syn; // used as model to set the options when no editor exists. TxtSyn: TSynTxtSyn; // used as model to set the options when no editor exists. @@ -1487,6 +1489,7 @@ begin AddKey(ecSmartWordLeft, 0, [], 0, []); AddKey(ecSmartWordRight, 0, [], 0, []); AddKey(ecRedoAll, 0, [], 0, []); + AddKey(ecUndoAll, 0, [], 0, []); AddKey(ecScrollCenteredDown, VK_DOWN, [ssCtrl, ssAlt], 0, []); AddKey(ecScrollCenteredUp, VK_UP, [ssCtrl, ssAlt], 0, []); end; @@ -1529,6 +1532,7 @@ begin 'ecSelLeftWordEdge': begin Int := ecSelLeftWordEdge; exit(true); end; 'ecSelRightWordEdge': begin Int := ecSelRightWordEdge; exit(true); end; 'ecRedoAll': begin Int := ecRedoAll; exit(true); end; + 'ecUndoAll': begin Int := ecUndoAll; exit(true); end; 'ecScrollCenteredUp': begin Int := ecScrollCenteredUp; exit(true); end; 'ecScrollCenteredDown': begin Int := ecScrollCenteredDown; exit(true); end; else exit(false); @@ -1572,6 +1576,7 @@ begin ecSelLeftWordEdge: begin Ident := 'ecSelLeftWordEdge'; exit(true); end; ecSelRightWordEdge: begin Ident := 'ecSelRightWordEdge'; exit(true); end; ecRedoAll: begin Ident := 'ecRedoAll'; exit(true); end; + ecUndoAll: begin Ident := 'ecUndoAll'; exit(true); end; ecScrollCenteredUp: begin Ident := 'ecScrollCenteredUp'; exit(true); end; ecScrollCenteredDown: begin Ident := 'ecScrollCenteredDown'; exit(true); end; else exit(false); @@ -1708,6 +1713,8 @@ begin gotoWordEdge(true); ecRedoAll: redoAll(); + ecUndoAll: + undoAll(); ecScrollCenteredUp: scrollCentered(false); ecScrollCenteredDown: @@ -2715,6 +2722,14 @@ begin EndUpdate(); end; +procedure TDexedMemo.undoAll(); +begin + BeginUpdate(false); + while CanUndo do + Undo; + EndUpdate(); +end; + procedure TDexedMemo.gotoWordEdge(right: boolean); var s: string;