mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 04:18:48 +02:00
IDE: added multi paste dialog like Delphi, patch #30671, from Silvio Clécio
git-svn-id: trunk@53063 -
This commit is contained in:
parent
0d7339fb56
commit
c303c71d2d
@ -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'),
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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';
|
||||
|
@ -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;
|
||||
|
@ -106,6 +106,7 @@ type
|
||||
itmEditCut: TIDEMenuCommand;
|
||||
itmEditCopy: TIDEMenuCommand;
|
||||
itmEditPaste: TIDEMenuCommand;
|
||||
itmEditMultiPaste: TIDEMenuCommand;
|
||||
//itmEditSelect: TIDEMenuSection;
|
||||
itmEditSelectAll: TIDEMenuCommand;
|
||||
itmEditSelectToBrace: TIDEMenuCommand;
|
||||
|
@ -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);
|
||||
|
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user