IDE: added multi paste dialog like Delphi, patch #30671, from Silvio Clécio

git-svn-id: trunk@53063 -
This commit is contained in:
mattias 2016-10-01 11:03:21 +00:00
parent 0d7339fb56
commit c303c71d2d
8 changed files with 65 additions and 4 deletions

View File

@ -170,6 +170,9 @@ const
ecQuit = ecFirstLazarus + 214;
ecOpenUnit = ecFirstLazarus + 215;
// edit menu
ecMultiPaste = ecFirstLazarus + 230;
// IDE navigation
ecToggleFormUnit = ecFirstLazarus + 301;
ecToggleObjectInsp = ecFirstLazarus + 302;
@ -1909,7 +1912,7 @@ begin
end;
const
IDEEditorCommandStrs: array[0..315] of TIdentMapEntry = (
IDEEditorCommandStrs: array[0..316] of TIdentMapEntry = (
// search
(Value: ecFind; Name: 'ecFind'),
(Value: ecFindAgain; Name: 'ecFindAgain'),
@ -2028,6 +2031,9 @@ const
(Value: ecRestart; Name: 'ecRestart'),
(Value: ecQuit; Name: 'ecQuit'),
// edit menu
(Value: ecMultiPaste; Name: 'ecMultiPaste'),
// IDE navigation
(Value: ecToggleFormUnit; Name: 'ecToggleFormUnit'),
(Value: ecToggleObjectInsp; Name: 'ecToggleObjectInsp'),

View File

@ -191,7 +191,7 @@ Seppo Suutarla - Finnish translation
Sérgio Marcelo
Shane Miller
Sileno Goedicke
Silvio Clecio
Silvio Clécio
Simon Ameis
Slavko Fedorik
Stefan Hille

View File

@ -402,6 +402,7 @@ begin
ecCut : Result:= srkmecCut;
ecCopy : Result:= srkmecCopy;
ecPaste : Result:= srkmecPaste;
ecMultiPaste : Result:= srkmecMultiPaste;
ecScrollUp : Result:= srkmecScrollUp;
ecScrollDown : Result:= srkmecScrollDown;
ecScrollLeft : Result:= srkmecScrollLeft;
@ -986,6 +987,7 @@ begin
ecCopy: SetSingle(VK_C,[XCtrl], VK_Insert,[XCtrl]);
ecCut: SetSingle(VK_X,[XCtrl], VK_Delete,[ssShift]);
ecPaste: SetSingle(VK_V,[XCtrl], VK_Insert,[ssShift]);
ecMultiPaste: SetSingle(VK_UNKNOWN,[]);
ecNormalSelect: SetSingle(VK_UNKNOWN,[]);
ecColumnSelect: SetSingle(VK_UNKNOWN,[]);
ecLineSelect: SetSingle(VK_UNKNOWN,[]);
@ -1459,6 +1461,7 @@ begin
ecCopy: SetSingle(VK_Insert,[ssCtrl]);
ecCut: SetSingle(VK_Delete,[ssShift]);
ecPaste: SetSingle(VK_Insert,[ssShift]);
ecMultiPaste: SetSingle(VK_UNKNOWN,[]);
ecNormalSelect: SetCombo(VK_O,[ssCtrl],VK_K,[]);
ecColumnSelect: SetCombo(VK_O,[ssCtrl],VK_C,[]);
ecLineSelect: SetCombo(VK_K,[ssCtrl],VK_L,[]);
@ -2077,6 +2080,7 @@ begin
ecCopy: SetSingle(VK_C,[ssMeta], VK_Insert,[ssCtrl]);
ecCut: SetSingle(VK_X,[ssMeta], VK_Delete,[ssShift]);
ecPaste: SetSingle(VK_V,[ssMeta], VK_Insert,[ssShift]);
ecMultiPaste: SetSingle(VK_UNKNOWN,[]);
ecNormalSelect: SetSingle(VK_UNKNOWN,[]);
ecColumnSelect: SetSingle(VK_UNKNOWN,[]);
ecLineSelect: SetSingle(VK_UNKNOWN,[]);
@ -2623,6 +2627,7 @@ begin
AddDefault(C, 'Copy selection to clipboard', srkmecCopy, ecCopy);
AddDefault(C, 'Cut selection to clipboard', srkmecCut, ecCut);
AddDefault(C, 'Paste clipboard to current position', srkmecPaste, ecPaste);
AddDefault(C, 'Multi paste clipboard to current position', srkmecMultiPaste, ecMultiPaste);
AddDefault(C, 'Normal selection mode', srkmecNormalSelect, ecNormalSelect);
AddDefault(C, 'Column selection mode', srkmecColumnSelect, ecColumnSelect);
AddDefault(C, 'Line selection mode', srkmecLineSelect, ecLineSelect);

View File

@ -347,6 +347,7 @@ resourcestring
lisKMSelectPageBottom = 'Select Page Bottom';
lisUseAndClose = 'Use and close';
lisMenuSelect = 'Select';
lisMenuMultiPaste = 'MultiPaste';
lisMenuSelectAll = 'Select All';
lisCheckAll = 'Check All';
lisUncheckAll = 'Uncheck All';
@ -2942,6 +2943,7 @@ resourcestring
srkmecCut = 'Cut selection to clipboard';
srkmecCopy = 'Copy selection to clipboard';
srkmecPaste = 'Paste clipboard to current position';
srkmecMultiPaste = 'MultiPaste clipboard to current position';
srkmecScrollUp = 'Scroll up one line';
srkmecScrollDown = 'Scroll down one line';
srkmecScrollLeft = 'Scroll left one char';

View File

@ -214,6 +214,7 @@ type
procedure mnuEditCutClicked(Sender: TObject);
procedure mnuEditCopyClicked(Sender: TObject);
procedure mnuEditPasteClicked(Sender: TObject);
procedure mnuEditMultiPasteClicked(Sender: TObject);
procedure mnuEditSelectAllClick(Sender: TObject);
procedure mnuEditSelectCodeBlockClick(Sender: TObject);
procedure mnuEditSelectToBraceClick(Sender: TObject);
@ -2598,6 +2599,7 @@ begin
itmEditCut.OnClick:=@mnuEditCutClicked;
itmEditCopy.OnClick:=@mnuEditCopyClicked;
itmEditPaste.OnClick:=@mnuEditPasteClicked;
itmEditMultiPaste.OnClick:=@mnuEditMultiPasteClicked;
itmEditSelectAll.OnClick:=@mnuEditSelectAllClick;
itmEditSelectToBrace.OnClick:=@mnuEditSelectToBraceClick;
itmEditSelectCodeBlock.OnClick:=@mnuEditSelectCodeBlockClick;
@ -3701,6 +3703,7 @@ begin
IDECommandList.FindIDECommand(ecSelectAll).Enabled := Assigned(ASrcEdit) and (ASrcEdit.SourceText<>'');
end;
IDECommandList.FindIDECommand(ecMultiPaste).Enabled := Editable;
IDECommandList.FindIDECommand(ecBlockIndent).Enabled := Editable;
IDECommandList.FindIDECommand(ecBlockUnindent).Enabled := Editable;
IDECommandList.FindIDECommand(ecSelectionUpperCase).Enabled := SelEditable;
@ -12904,6 +12907,11 @@ begin
DoSourceEditorCommand(ecPaste);
end;
procedure TMainIDE.mnuEditMultiPasteClicked(Sender: TObject);
begin
DoSourceEditorCommand(ecMultiPaste);
end;
procedure TMainIDE.mnuEditRedoClicked(Sender: TObject);
var
ActiveDesigner: TComponentEditorDesigner;

View File

@ -106,6 +106,7 @@ type
itmEditCut: TIDEMenuCommand;
itmEditCopy: TIDEMenuCommand;
itmEditPaste: TIDEMenuCommand;
itmEditMultiPaste: TIDEMenuCommand;
//itmEditSelect: TIDEMenuSection;
itmEditSelectAll: TIDEMenuCommand;
itmEditSelectToBrace: TIDEMenuCommand;

View File

@ -1021,6 +1021,7 @@ begin
CreateMenuItem(ParentMI,itmEditCut,'itmEditCut',lisCut,'laz_cut');
CreateMenuItem(ParentMI,itmEditCopy,'itmEditCopy',lisCopy,'laz_copy');
CreateMenuItem(ParentMI,itmEditPaste,'itmEditPaste',lisPaste,'laz_paste');
CreateMenuItem(ParentMI,itmEditMultiPaste,'itmEditMultiPaste',lisMenuMultiPaste);
// "Select" menu items
CreateMenuSeparatorSection(mnuEdit,itmEditSelect,'itmEditSelect');
@ -1517,6 +1518,7 @@ begin
itmEditCut.Command:=GetCommand(ecCut);
itmEditCopy.Command:=GetCommand(ecCopy);
itmEditPaste.Command:=GetCommand(ecPaste);
itmEditMultiPaste.Command:=GetCommand(ecMultiPaste);
itmEditSelectAll.Command:=GetCommand(ecSelectAll);
itmEditSelectToBrace.Command:=GetCommand(ecSelectToBrace);

View File

@ -42,7 +42,7 @@ uses
{$IFDEF IDE_MEM_CHECK}
MemCheck,
{$ENDIF}
SynEditMouseCmds, Classes, SysUtils, types, Math,
SynEditMouseCmds, Classes, SysUtils, StrUtils, types, Math,
Controls, Forms, ComCtrls, StdCtrls, Graphics, Dialogs, Extctrls, Menus,
ExtendedNotebook, LCLProc, LCLType, LResources, LCLIntf, FileUtil, LazFileUtils,
Translations, ClipBrd, HelpIntfs,
@ -69,7 +69,7 @@ uses
CodeMacroPrompt, CodeTemplatesDlg, CodeToolsOptions,
editor_general_options,
SortSelectionDlg, EncloseSelectionDlg, EncloseIfDef, InvertAssignTool,
SourceEditProcs, SourceMarks, CharacterMapDlg, SearchFrm,
SourceEditProcs, SourceMarks, CharacterMapDlg, SearchFrm, MultiPasteDlg,
FPDocHints, EditorMacroListViewer, EditorToolbarStatic, editortoolbar_options,
DbgIntfBaseTypes, DbgIntfDebuggerBase, BaseDebugManager, Debugger, MainIntf,
GotoFrm;
@ -465,6 +465,7 @@ type
function IsCaretOnScreen(ACaret: TPoint; UseSoftCenter: Boolean = False): Boolean;
// text
procedure MultiPasteText;
function SearchReplace(const ASearch, AReplace: string;
SearchOptions: TSrcEditSearchOptions): integer; override;
function GetSourceText: string; override;
@ -1284,6 +1285,7 @@ var
SrcEditMenuCut: TIDEMenuCommand;
SrcEditMenuCopy: TIDEMenuCommand;
SrcEditMenuPaste: TIDEMenuCommand;
SrcEditMenuMultiPaste: TIDEMenuCommand;
SrcEditMenuCopyFilename: TIDEMenuCommand;
SrcEditMenuFindDeclaration: TIDEMenuCommand;
SrcEditMenuSelectAll: TIDEMenuCommand;
@ -1562,6 +1564,7 @@ begin
SrcEditMenuCut:=RegisterIDEMenuCommand(AParent,'Cut',lisCut, nil, nil, nil, 'laz_cut');
SrcEditMenuCopy:=RegisterIDEMenuCommand(AParent,'Copy',lisCopy, nil, nil, nil, 'laz_copy');
SrcEditMenuPaste:=RegisterIDEMenuCommand(AParent,'Paste',lisPaste, nil, nil, nil, 'laz_paste');
SrcEditMenuMultiPaste:=RegisterIDEMenuCommand(AParent,'MultiPaste',lisMenuMultiPaste);
SrcEditMenuSelectAll:=RegisterIDEMenuCommand(AParent,'SelectAll',lisMenuSelectAll);
SrcEditMenuCopyFilename:=RegisterIDEMenuCommand(AParent,'Copy filename', uemCopyFilename);
{%endregion}
@ -3821,6 +3824,8 @@ Begin
CheckActiveWindow;
case Command of
ecMultiPaste:
MultiPasteText;
ecContextHelp:
FindHelpForSourceAtCursor;
@ -5780,6 +5785,37 @@ begin
(ACaret.X <= FEditor.LeftChar + FEditor.CharsInWindow);
end;
procedure TSourceEditor.MultiPasteText;
var
I, CaretX: Integer;
Content: TStringList;
Dialog: TMultiPasteDialog;
begin
if ReadOnly then Exit;
Dialog := TMultiPasteDialog.Create(nil);
try
if Dialog.ShowModal <> mrOK then Exit;
CaretX := FEditor.CaretX;
if CaretX > 1 then
begin
Content := TStringList.Create;
try
Content.Text := Dialog.Content.Text;
for I := 0 to Pred(Content.Count) do
if I > 0 then
Content[I] := Concat(DupeString(' ', Pred(CaretX)), Content[I]);
FEditor.InsertTextAtCaret(Content.Text);
finally
Content.Free;
end;
end
else
FEditor.InsertTextAtCaret(Dialog.Content.Text);
finally
Dialog.Free;
end;
end;
function TSourceEditor.SearchReplace(const ASearch, AReplace: string;
SearchOptions: TSrcEditSearchOptions): integer;
const
@ -10460,6 +10496,7 @@ begin
SrcEditMenuCut.Command:=GetCommand(ecCut);
SrcEditMenuCopy.Command:=GetCommand(ecCopy);
SrcEditMenuPaste.Command:=GetCommand(ecPaste);
SrcEditMenuMultiPaste.Command:=GetCommand(ecMultiPaste);
SrcEditMenuCopyFilename.OnClick:=@CopyFilenameClicked;
SrcEditMenuSelectAll.Command:=GetCommand(ecSelectAll);
{%endregion}