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

git-svn-id: trunk@53064 -
This commit is contained in:
mattias 2016-10-02 08:15:58 +00:00
parent c303c71d2d
commit 641d73f10a
3 changed files with 801 additions and 0 deletions

2
.gitattributes vendored
View File

@ -6119,6 +6119,8 @@ ide/mouseactiondialog.lfm svneol=native#text/plain
ide/mouseactiondialog.pas svneol=native#text/pascal
ide/msgvieweditor.lfm svneol=native#text/plain
ide/msgvieweditor.pas svneol=native#text/pascal
ide/multipastedlg.lfm svneol=native#text/plain
ide/multipastedlg.pas svneol=native#text/plain
ide/multireplacedlg.lfm svneol=native#text/plain
ide/multireplacedlg.pas svneol=native#text/pascal
ide/newdialog.lfm svneol=native#text/plain

657
ide/multipastedlg.lfm Normal file
View File

@ -0,0 +1,657 @@
object MultiPasteDialog: TMultiPasteDialog
Left = 245
Height = 500
Top = 137
Width = 460
BorderStyle = bsDialog
Caption = 'MultiPaste'
ClientHeight = 500
ClientWidth = 460
Position = poScreenCenter
LCLVersion = '1.7'
object PasteOptsGroupBox: TGroupBox
Left = 6
Height = 216
Top = 6
Width = 448
Align = alTop
AutoSize = True
BorderSpacing.Left = 6
BorderSpacing.Top = 6
BorderSpacing.Right = 6
Caption = 'Paste &options'
ClientHeight = 197
ClientWidth = 444
TabOrder = 0
object TxtBeforeLinesLabel: TLabel
Left = 6
Height = 17
Top = 6
Width = 432
Align = alTop
BorderSpacing.Left = 6
BorderSpacing.Top = 6
BorderSpacing.Right = 6
Caption = 'Text &before each line'
FocusControl = TxtBeforeLinesEdit
ParentColor = False
end
object TxtBeforeLinesEdit: TEdit
Left = 6
Height = 27
Top = 26
Width = 432
Align = alTop
BorderSpacing.Left = 6
BorderSpacing.Top = 3
BorderSpacing.Right = 6
TabOrder = 0
end
object TxtAfterLinesLabel: TLabel
Left = 6
Height = 17
Top = 59
Width = 432
Align = alTop
BorderSpacing.Left = 6
BorderSpacing.Top = 6
BorderSpacing.Right = 6
Caption = 'Text &after each line'
FocusControl = TxtAfterLinesEdit
ParentColor = False
end
object TxtAfterLinesEdit: TEdit
Left = 6
Height = 27
Top = 79
Width = 432
Align = alTop
BorderSpacing.Left = 6
BorderSpacing.Top = 3
BorderSpacing.Right = 6
TabOrder = 1
end
object EscQuotesCheckBox: TCheckBox
AnchorSideLeft.Control = TxtAfterLinesEdit
AnchorSideTop.Control = TxtAfterLinesEdit
AnchorSideTop.Side = asrBottom
Left = 6
Height = 21
Top = 112
Width = 104
BorderSpacing.Top = 6
BorderSpacing.Right = 6
Caption = 'Escape &quotes'
Checked = True
State = cbChecked
TabOrder = 2
end
object EscQuotesStyleComboBox: TComboBox
AnchorSideLeft.Control = EscQuotesCheckBox
AnchorSideTop.Control = EscQuotesCheckBox
AnchorSideTop.Side = asrBottom
Left = 26
Height = 25
Top = 139
Width = 180
BorderSpacing.Left = 20
BorderSpacing.Top = 6
ItemHeight = 0
ItemIndex = 0
Items.Strings = (
'Pascal style: '' => '''''
'C style: " => \"'
)
Style = csDropDownList
TabOrder = 3
Text = 'Pascal style: '' => '''''
end
object TrimClipbrdContentsCheckBox: TCheckBox
AnchorSideLeft.Control = EscQuotesCheckBox
AnchorSideTop.Control = EscQuotesStyleComboBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 21
Top = 170
Width = 155
BorderSpacing.Top = 6
BorderSpacing.Bottom = 6
Caption = '&Trim clipboard contents'
Checked = True
State = cbChecked
TabOrder = 4
end
end
object PreviewGroupBox: TGroupBox
Left = 6
Height = 225
Top = 228
Width = 448
Align = alClient
BorderSpacing.Around = 6
Caption = '&Preview'
ClientHeight = 206
ClientWidth = 444
TabOrder = 1
inline PreviewSynEdit: TSynEdit
Left = 6
Height = 194
Top = 6
Width = 432
Align = alClient
BorderSpacing.Around = 6
Font.Height = 13
Font.Name = 'DejaVu Sans Mono'
Font.Pitch = fpFixed
Font.Quality = fqNonAntialiased
ParentColor = False
ParentFont = False
TabOrder = 0
Gutter.Width = 57
Gutter.MouseActions = <>
RightGutter.Width = 0
RightGutter.MouseActions = <>
InsertMode = False
Keystrokes = <
item
Command = ecUp
ShortCut = 38
end
item
Command = ecSelUp
ShortCut = 8230
end
item
Command = ecScrollUp
ShortCut = 16422
end
item
Command = ecDown
ShortCut = 40
end
item
Command = ecSelDown
ShortCut = 8232
end
item
Command = ecScrollDown
ShortCut = 16424
end
item
Command = ecLeft
ShortCut = 37
end
item
Command = ecSelLeft
ShortCut = 8229
end
item
Command = ecWordLeft
ShortCut = 16421
end
item
Command = ecSelWordLeft
ShortCut = 24613
end
item
Command = ecRight
ShortCut = 39
end
item
Command = ecSelRight
ShortCut = 8231
end
item
Command = ecWordRight
ShortCut = 16423
end
item
Command = ecSelWordRight
ShortCut = 24615
end
item
Command = ecPageDown
ShortCut = 34
end
item
Command = ecSelPageDown
ShortCut = 8226
end
item
Command = ecPageBottom
ShortCut = 16418
end
item
Command = ecSelPageBottom
ShortCut = 24610
end
item
Command = ecPageUp
ShortCut = 33
end
item
Command = ecSelPageUp
ShortCut = 8225
end
item
Command = ecPageTop
ShortCut = 16417
end
item
Command = ecSelPageTop
ShortCut = 24609
end
item
Command = ecLineStart
ShortCut = 36
end
item
Command = ecSelLineStart
ShortCut = 8228
end
item
Command = ecEditorTop
ShortCut = 16420
end
item
Command = ecSelEditorTop
ShortCut = 24612
end
item
Command = ecLineEnd
ShortCut = 35
end
item
Command = ecSelLineEnd
ShortCut = 8227
end
item
Command = ecEditorBottom
ShortCut = 16419
end
item
Command = ecSelEditorBottom
ShortCut = 24611
end
item
Command = ecToggleMode
ShortCut = 45
end
item
Command = ecCopy
ShortCut = 16429
end
item
Command = ecPaste
ShortCut = 8237
end
item
Command = ecDeleteChar
ShortCut = 46
end
item
Command = ecCut
ShortCut = 8238
end
item
Command = ecDeleteLastChar
ShortCut = 8
end
item
Command = ecDeleteLastChar
ShortCut = 8200
end
item
Command = ecDeleteLastWord
ShortCut = 16392
end
item
Command = ecUndo
ShortCut = 32776
end
item
Command = ecRedo
ShortCut = 40968
end
item
Command = ecLineBreak
ShortCut = 13
end
item
Command = ecSelectAll
ShortCut = 16449
end
item
Command = ecCopy
ShortCut = 16451
end
item
Command = ecBlockIndent
ShortCut = 24649
end
item
Command = ecLineBreak
ShortCut = 16461
end
item
Command = ecInsertLine
ShortCut = 16462
end
item
Command = ecDeleteWord
ShortCut = 16468
end
item
Command = ecBlockUnindent
ShortCut = 24661
end
item
Command = ecPaste
ShortCut = 16470
end
item
Command = ecCut
ShortCut = 16472
end
item
Command = ecDeleteLine
ShortCut = 16473
end
item
Command = ecDeleteEOL
ShortCut = 24665
end
item
Command = ecUndo
ShortCut = 16474
end
item
Command = ecRedo
ShortCut = 24666
end
item
Command = ecGotoMarker0
ShortCut = 16432
end
item
Command = ecGotoMarker1
ShortCut = 16433
end
item
Command = ecGotoMarker2
ShortCut = 16434
end
item
Command = ecGotoMarker3
ShortCut = 16435
end
item
Command = ecGotoMarker4
ShortCut = 16436
end
item
Command = ecGotoMarker5
ShortCut = 16437
end
item
Command = ecGotoMarker6
ShortCut = 16438
end
item
Command = ecGotoMarker7
ShortCut = 16439
end
item
Command = ecGotoMarker8
ShortCut = 16440
end
item
Command = ecGotoMarker9
ShortCut = 16441
end
item
Command = ecSetMarker0
ShortCut = 24624
end
item
Command = ecSetMarker1
ShortCut = 24625
end
item
Command = ecSetMarker2
ShortCut = 24626
end
item
Command = ecSetMarker3
ShortCut = 24627
end
item
Command = ecSetMarker4
ShortCut = 24628
end
item
Command = ecSetMarker5
ShortCut = 24629
end
item
Command = ecSetMarker6
ShortCut = 24630
end
item
Command = ecSetMarker7
ShortCut = 24631
end
item
Command = ecSetMarker8
ShortCut = 24632
end
item
Command = ecSetMarker9
ShortCut = 24633
end
item
Command = EcFoldLevel1
ShortCut = 41009
end
item
Command = EcFoldLevel2
ShortCut = 41010
end
item
Command = EcFoldLevel3
ShortCut = 41011
end
item
Command = EcFoldLevel4
ShortCut = 41012
end
item
Command = EcFoldLevel5
ShortCut = 41013
end
item
Command = EcFoldLevel6
ShortCut = 41014
end
item
Command = EcFoldLevel7
ShortCut = 41015
end
item
Command = EcFoldLevel8
ShortCut = 41016
end
item
Command = EcFoldLevel9
ShortCut = 41017
end
item
Command = EcFoldLevel0
ShortCut = 41008
end
item
Command = EcFoldCurrent
ShortCut = 41005
end
item
Command = EcUnFoldCurrent
ShortCut = 41003
end
item
Command = EcToggleMarkupWord
ShortCut = 32845
end
item
Command = ecNormalSelect
ShortCut = 24654
end
item
Command = ecColumnSelect
ShortCut = 24643
end
item
Command = ecLineSelect
ShortCut = 24652
end
item
Command = ecTab
ShortCut = 9
end
item
Command = ecShiftTab
ShortCut = 8201
end
item
Command = ecMatchBracket
ShortCut = 24642
end
item
Command = ecColSelUp
ShortCut = 40998
end
item
Command = ecColSelDown
ShortCut = 41000
end
item
Command = ecColSelLeft
ShortCut = 40997
end
item
Command = ecColSelRight
ShortCut = 40999
end
item
Command = ecColSelPageDown
ShortCut = 40994
end
item
Command = ecColSelPageBottom
ShortCut = 57378
end
item
Command = ecColSelPageUp
ShortCut = 40993
end
item
Command = ecColSelPageTop
ShortCut = 57377
end
item
Command = ecColSelLineStart
ShortCut = 40996
end
item
Command = ecColSelLineEnd
ShortCut = 40995
end
item
Command = ecColSelEditorTop
ShortCut = 57380
end
item
Command = ecColSelEditorBottom
ShortCut = 57379
end>
MouseActions = <>
MouseTextActions = <>
MouseSelActions = <>
Options = [eoAutoIndent, eoBracketHighlight, eoGroupUndo, eoNoCaret, eoScrollPastEol, eoSmartTabs, eoTabsToSpaces, eoTrimTrailingSpaces]
VisibleSpecialChars = [vscSpace, vscTabAtLast]
ReadOnly = True
SelectedColor.BackPriority = 50
SelectedColor.ForePriority = 50
SelectedColor.FramePriority = 50
SelectedColor.BoldPriority = 50
SelectedColor.ItalicPriority = 50
SelectedColor.UnderlinePriority = 50
SelectedColor.StrikeOutPriority = 50
BracketHighlightStyle = sbhsBoth
BracketMatchColor.Background = clNone
BracketMatchColor.Foreground = clNone
BracketMatchColor.Style = [fsBold]
FoldedCodeColor.Background = clNone
FoldedCodeColor.Foreground = clGray
FoldedCodeColor.FrameColor = clGray
MouseLinkColor.Background = clNone
MouseLinkColor.Foreground = clBlue
LineHighlightColor.Background = clNone
LineHighlightColor.Foreground = clNone
inline SynLeftGutterPartList1: TSynGutterPartList
object SynGutterMarks1: TSynGutterMarks
Width = 24
MouseActions = <>
end
object SynGutterLineNumber1: TSynGutterLineNumber
Width = 17
MouseActions = <>
MarkupInfo.Background = clBtnFace
MarkupInfo.Foreground = clNone
DigitCount = 2
ShowOnlyLineNumbersMultiplesOf = 1
ZeroStart = False
LeadingZeros = False
end
object SynGutterChanges1: TSynGutterChanges
Width = 4
MouseActions = <>
ModifiedColor = 59900
SavedColor = clGreen
end
object SynGutterSeparator1: TSynGutterSeparator
Width = 2
MouseActions = <>
MarkupInfo.Background = clWhite
MarkupInfo.Foreground = clGray
end
object SynGutterCodeFolding1: TSynGutterCodeFolding
MouseActions = <>
MarkupInfo.Background = clNone
MarkupInfo.Foreground = clGray
MouseActionsExpanded = <>
MouseActionsCollapsed = <>
end
end
end
end
object BottomButtonPanel: TButtonPanel
Left = 6
Height = 35
Top = 459
Width = 448
BorderSpacing.Left = 6
BorderSpacing.Right = 6
BorderSpacing.Bottom = 6
BorderSpacing.Around = 0
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
CloseButton.Name = 'CloseButton'
CloseButton.DefaultCaption = True
CancelButton.Name = 'CancelButton'
CancelButton.DefaultCaption = True
TabOrder = 2
ShowButtons = [pbOK, pbCancel, pbHelp]
end
end

142
ide/multipastedlg.pas Normal file
View File

@ -0,0 +1,142 @@
{
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
* *
***************************************************************************
MultiPaste text - Lazarus addon
Author: Silvio Clecio (https://github.com/silvioprog)
Inspired by: Delphi Multi Paste
Last Modified: Fri Sep 30 15:22:18 EDT 2016
Abstract:
The MultiPaste dialog enables you to modify and paste into the
Source Editor the text you copied to the clipboard. The MultiPaste feature
helps you to work with SQL, HTML, JSON, formatted text, and any other text.
}
unit MultiPasteDlg;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Classes, StdCtrls, ButtonPanel, Forms, Clipbrd, IDEHelpIntf, SynEdit;
type
TMultiPasteDialog = class(TForm)
BottomButtonPanel: TButtonPanel;
PreviewSynEdit: TSynEdit;
TrimClipbrdContentsCheckBox: TCheckBox;
EscQuotesCheckBox: TCheckBox;
EscQuotesStyleComboBox: TComboBox;
TxtBeforeLinesEdit: TEdit;
TxtAfterLinesEdit: TEdit;
TxtBeforeLinesLabel: TLabel;
TxtAfterLinesLabel: TLabel;
PasteOptsGroupBox: TGroupBox;
PreviewGroupBox: TGroupBox;
private
FContent: TStringList;
protected
procedure DoWatch(Sender: TObject); virtual;
procedure DoUpdatePreview; virtual;
function DoFormatContent(const AContent: string): string; virtual;
procedure DoEscQuotesCheckBoxChange(Sender: TObject); virtual;
procedure DoHelpButtonClick(Sender: TObject); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Content: TStringList read FContent;
end;
implementation
{$R *.lfm}
constructor TMultiPasteDialog.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FContent := TStringList.Create;
FContent.SkipLastLineBreak := True;
OnShow := @DoWatch;
OnActivate := @DoWatch;
TxtBeforeLinesEdit.OnChange := @DoWatch;
TxtAfterLinesEdit.OnChange := @DoWatch;
EscQuotesCheckBox.OnChange := @DoEscQuotesCheckBoxChange;
EscQuotesStyleComboBox.OnChange := @DoWatch;
TrimClipbrdContentsCheckBox.OnChange := @DoWatch;
BottomButtonPanel.HelpButton.OnClick := @DoHelpButtonClick;
end;
destructor TMultiPasteDialog.Destroy;
begin
FContent.Free;
inherited Destroy;
end;
procedure TMultiPasteDialog.DoWatch(Sender: TObject);
begin
DoUpdatePreview;
end;
procedure TMultiPasteDialog.DoUpdatePreview;
begin
if Clipboard.HasFormat(CF_TEXT) then
PreviewSynEdit.Lines.Text := DoFormatContent(Clipboard.AsText)
else
PreviewSynEdit.Clear;
end;
function TMultiPasteDialog.DoFormatContent(const AContent: string): string;
var
I: Integer;
S: string;
begin
FContent.Text := AContent;
for I := 0 to Pred(FContent.Count) do
begin
S := FContent[I];
if TrimClipbrdContentsCheckBox.Checked then
S := Trim(S);
if EscQuotesCheckBox.Checked then
case EscQuotesStyleComboBox.ItemIndex of
0: S := StringReplace(S, '''', '''''', [rfReplaceAll]);
1: S := StringReplace(S, '"', '\"', [rfReplaceAll]);
end;
FContent[I] := Concat(TxtBeforeLinesEdit.Text, S, TxtAfterLinesEdit.Text);
end;
Result := FContent.Text;
end;
procedure TMultiPasteDialog.DoEscQuotesCheckBoxChange(Sender: TObject);
begin
DoWatch(Sender);
EscQuotesStyleComboBox.Enabled := EscQuotesCheckBox.Checked;
end;
procedure TMultiPasteDialog.DoHelpButtonClick(Sender: TObject);
begin
LazarusHelp.ShowHelpForIDEControl(Self);
end;
end.