Reimplement "IDE: Improvements to Tools dialog. Export/import/cloning etc."

git-svn-id: trunk@40965 -
This commit is contained in:
juha 2013-05-01 08:44:38 +00:00
parent f59a82f602
commit d3c8905a70
5 changed files with 232 additions and 109 deletions

View File

@ -2,19 +2,19 @@ object ExternalToolDialog: TExternalToolDialog
Left = 334
Height = 347
Top = 226
Width = 410
Width = 451
ActiveControl = ListBox
BorderStyle = bsSizeToolWin
Caption = 'ExternalToolDialog'
ClientHeight = 347
ClientWidth = 410
ClientWidth = 451
Position = poScreenCenter
LCLVersion = '0.9.29'
LCLVersion = '1.1'
object ToolBar: TToolBar
Left = 0
Height = 48
Height = 94
Top = 0
Width = 410
Width = 451
AutoSize = True
ButtonHeight = 46
ButtonWidth = 47
@ -24,28 +24,28 @@ object ExternalToolDialog: TExternalToolDialog
ShowHint = True
TabOrder = 0
object MoveDownButton: TToolButton
Left = 283
Top = 2
Left = 1
Top = 48
Caption = 'MoveDownButton'
ImageIndex = 4
OnClick = MoveDownButtonClick
end
object MoveUpButton: TToolButton
Left = 204
Left = 252
Top = 2
Caption = 'MoveUpButton'
ImageIndex = 3
OnClick = MoveUpButtonClick
end
object EditButton: TToolButton
Left = 139
Left = 173
Top = 2
Caption = 'EditButton'
ImageIndex = 2
OnClick = EditButtonClick
end
object RemoveButton: TToolButton
Left = 60
Left = 75
Top = 2
Caption = 'RemoveButton'
ImageIndex = 1
@ -59,18 +59,31 @@ object ExternalToolDialog: TExternalToolDialog
OnClick = AddButtonClick
end
object tbSeparator: TToolButton
Left = 197
Left = 247
Top = 2
Width = 7
Width = 5
Caption = 'tbSeparator'
Style = tbsDivider
end
object tbSeparator2: TToolButton
Left = 117
Top = 48
Width = 5
Caption = 'tbSeparator2'
Style = tbsDivider
end
object ExtraButton: TToolButton
Left = 122
Top = 48
Caption = 'ExtraButton'
DropdownMenu = PopupDropdownMenu
end
end
object ListBox: TListBox
Left = 0
Height = 261
Top = 48
Width = 410
Height = 215
Top = 94
Width = 451
Align = alClient
BorderSpacing.Bottom = 6
ItemHeight = 0
@ -81,9 +94,46 @@ object ExternalToolDialog: TExternalToolDialog
Left = 6
Height = 26
Top = 315
Width = 398
Width = 439
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]
ShowBevel = False
end
object PopupDropdownMenu: TPopupMenu
left = 224
top = 48
object MenuItemClone: TMenuItem
Caption = 'MenuItemClone'
OnClick = MenuItemCloneClick
end
object MenuItemSeparator: TMenuItem
Caption = '-'
end
object MenuItemExport: TMenuItem
Caption = 'MenuItemExport'
OnClick = MenuItemExportClick
end
object MenuItemImport: TMenuItem
Caption = 'MenuItemImport'
OnClick = MenuItemImportClick
end
end
object SaveDialog1: TSaveDialog
Options = [ofPathMustExist, ofEnableSizing, ofViewDetail]
left = 312
top = 40
end
object OpenDialog1: TOpenDialog
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
left = 384
top = 48
end
end

View File

@ -40,13 +40,13 @@ uses
MemCheck,
{$ENDIF}
Classes, SysUtils, Process, LCLType, LCLProc, Controls, Forms,
Buttons, StdCtrls, ComCtrls, Dialogs, ExtCtrls, ButtonPanel,
Buttons, StdCtrls, ComCtrls, Dialogs, ExtCtrls, ButtonPanel, Menus,
LazConfigStorage, FileProcs, UTF8Process,
IDEExternToolIntf, IDEImagesIntf, IDEDialogs, IDEHelpIntf, IDECommands,
CompOptsIntf, ProjectIntf,
EnvironmentOpts,
ExtToolEditDlg, KeyMapping, TransferMacros, IDEProcs,
InfoBuild, CompilerOptions, OutputFilter, LazarusIDEStrConsts;
InfoBuild, CompilerOptions, OutputFilter, LazarusIDEStrConsts, IDEOptionDefs;
const
MaxExtTools = ecExtToolLast-ecExtToolFirst+1;
@ -104,6 +104,13 @@ type
TExternalToolDialog = class(TForm)
ButtonPanel: TButtonPanel;
ListBox: TListBox;
MenuItemImport: TMenuItem;
MenuItemExport: TMenuItem;
MenuItemSeparator: TMenuItem;
MenuItemClone: TMenuItem;
OpenDialog1: TOpenDialog;
PopupDropdownMenu: TPopupMenu;
SaveDialog1: TSaveDialog;
ToolBar: TToolBar;
AddButton: TToolButton;
RemoveButton: TToolButton;
@ -111,8 +118,13 @@ type
tbSeparator: TToolButton;
MoveUpButton: TToolButton;
MoveDownButton: TToolButton;
tbSeparator2: TToolButton;
ExtraButton: TToolButton;
procedure AddButtonClick(Sender: TObject);
procedure HelpButtonClick(Sender: TObject);
procedure MenuItemCloneClick(Sender: TObject);
procedure MenuItemExportClick(Sender: TObject);
procedure MenuItemImportClick(Sender: TObject);
procedure RemoveButtonClick(Sender: TObject);
procedure EditButtonClick(Sender: TObject);
procedure MoveUpButtonClick(Sender: TObject);
@ -345,7 +357,8 @@ begin
try
CheckIfFileIsExecutable(Filename);
TheProcess := TOutputFilterProcess.Create(nil);
TheProcess.CommandLine := Filename+' '+Params;
TheProcess.Executable := FileName;
TheProcess.Parameters.Text := Params;
TheProcess.Options:= [poUsePipes,poStdErrToOutPut];
if ExtTool.HideMainForm then
TheProcess.ShowWindow := swoHide
@ -528,6 +541,11 @@ begin
MoveUpButton.Caption:=lisUp;
MoveDownButton.Caption:=lisDown;
ExtraButton.Caption:=lisMoreSub;
MenuItemClone.Caption:=lisClone;
MenuItemExport.Caption:=lisDlgExport;
MenuItemImport.Caption:=lisDlgImport;
ButtonPanel.HelpButton.OnClick := @HelpButtonClick;
AddButton.ImageIndex := IDEImages.LoadImage(16, 'laz_add');
@ -604,6 +622,48 @@ begin
LazarusHelp.ShowHelpForIDEControl(Self);
end;
procedure TExternalToolDialog.MenuItemCloneClick(Sender: TObject);
var
NewTool, OldTool : TExternalToolOptions;
begin
If Listbox.ItemIndex <> -1 Then Begin
OldTool := fExtToolList.Items[Listbox.ItemIndex];
If Assigned(OldTool) Then Begin
NewTool := TExternalToolOptions.Create;
NewTool.Assign(OldTool);
fExtToolList.Add(NewTool);
Listbox.Items.Add(ToolDescription(fExtToolList.Count-1));
end;
end;
end;
procedure TExternalToolDialog.MenuItemExportClick(Sender: TObject);
Var
FileConfig : TXMLOptionsStorage;
begin
If SaveDialog1.Execute Then Begin
FileConfig := TXMLOptionsStorage.Create(SaveDialog1.FileName, False);
fExtToolList.Save(FileConfig);
FileConfig.WriteToDisk;
FreeAndNil(FileConfig);
end;
end;
procedure TExternalToolDialog.MenuItemImportClick(Sender: TObject);
Var
FileConfig : TXMLOptionsStorage;
NewToolList : TExternalToolList;
begin
If OpenDialog1.Execute Then Begin
NewToolList := TExternalToolList.Create;
FileConfig := TXMLOptionsStorage.Create(OpenDialog1.FileName, True);
NewToolList.Load(FileConfig);
SetExtToolList(NewToolList);
FreeAndNil(FileConfig);
FreeAndNil(NewToolList);
end;
end;
procedure TExternalToolDialog.RemoveButtonClick(Sender: TObject);
begin
if Listbox.ItemIndex<0 then exit;

View File

@ -1,10 +1,10 @@
object ExternalToolOptionDlg: TExternalToolOptionDlg
Left = 348
Height = 501
Top = 210
Height = 592
Top = 119
Width = 661
Caption = 'ExternalToolOptionDlg'
ClientHeight = 501
ClientHeight = 592
ClientWidth = 661
Constraints.MinHeight = 350
Constraints.MinWidth = 350
@ -12,15 +12,15 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
OnCreate = FormCreate
OnDestroy = FormDestroy
Position = poScreenCenter
LCLVersion = '0.9.29'
LCLVersion = '1.1'
object TitleLabel: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = TitleEdit
AnchorSideTop.Side = asrCenter
Left = 6
Height = 14
Top = 9
Width = 46
Height = 15
Top = 10
Width = 59
BorderSpacing.Left = 6
Caption = 'TitleLabel'
ParentColor = False
@ -30,21 +30,21 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideTop.Control = FilenameEdit
AnchorSideTop.Side = asrCenter
Left = 6
Height = 14
Top = 36
Width = 68
Height = 15
Top = 39
Width = 88
BorderSpacing.Left = 6
Caption = 'FilenameLabel'
ParentColor = False
end
object ParametersLabel: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = ParametersEdit
AnchorSideTop.Control = MemoParameters
AnchorSideTop.Side = asrCenter
Left = 6
Height = 14
Top = 63
Width = 81
Height = 15
Top = 102
Width = 105
BorderSpacing.Left = 6
Caption = 'ParametersLabel'
ParentColor = False
@ -54,9 +54,9 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideTop.Control = WorkingDirEdit
AnchorSideTop.Side = asrCenter
Left = 6
Height = 14
Top = 90
Width = 78
Height = 15
Top = 164
Width = 99
BorderSpacing.Left = 6
Caption = 'WorkingDirLabel'
ParentColor = False
@ -66,7 +66,7 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 128
Height = 21
Height = 23
Top = 6
Width = 527
Anchors = [akTop, akLeft, akRight]
@ -80,9 +80,9 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = OpenButton
Left = 128
Height = 21
Top = 33
Width = 483
Height = 23
Top = 35
Width = 496
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
BorderSpacing.Right = 6
@ -95,10 +95,10 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = FilenameEdit
AnchorSideBottom.Side = asrBottom
Left = 617
Height = 21
Top = 33
Width = 38
Left = 630
Height = 23
Top = 35
Width = 25
Anchors = [akTop, akRight, akBottom]
AutoSize = True
BorderSpacing.Right = 6
@ -108,36 +108,20 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
ShowHint = True
TabOrder = 2
end
object ParametersEdit: TEdit
object WorkingDirEdit: TEdit
AnchorSideLeft.Control = TitleEdit
AnchorSideTop.Control = FilenameEdit
AnchorSideTop.Control = MemoParameters
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 128
Height = 21
Top = 60
Height = 23
Top = 160
Width = 527
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
BorderSpacing.Right = 6
TabOrder = 3
Text = 'ParametersEdit'
end
object WorkingDirEdit: TEdit
AnchorSideLeft.Control = TitleEdit
AnchorSideTop.Control = ParametersEdit
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 128
Height = 21
Top = 87
Width = 527
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
BorderSpacing.Right = 6
TabOrder = 4
Text = 'WorkingDirEdit'
end
object OptionsGroupBox: TGroupBox
@ -147,8 +131,8 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 6
Height = 105
Top = 114
Height = 124
Top = 189
Width = 649
Anchors = [akTop, akLeft, akRight]
AutoSize = True
@ -156,14 +140,14 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
Caption = 'OptionsGroupBox'
ChildSizing.Layout = cclTopToBottomThenLeftToRight
ChildSizing.ControlsPerLine = 5
ClientHeight = 87
ClientWidth = 645
TabOrder = 5
ClientHeight = 95
ClientWidth = 643
TabOrder = 4
object OptionScanOutputForFPCMessagesCheckBox: TCheckBox
Left = 6
Height = 17
Height = 21
Top = 6
Width = 242
Width = 316
BorderSpacing.Around = 6
Caption = 'OptionScanOutputForFPCMessagesCheckBox'
TabOrder = 0
@ -172,9 +156,9 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideTop.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 6
Height = 17
Top = 29
Width = 242
Height = 21
Top = 33
Width = 316
BorderSpacing.Around = 6
Caption = 'OptionScanOutputForMakeMessagesCheckBox'
TabOrder = 1
@ -185,7 +169,7 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideTop.Side = asrBottom
Left = 6
Height = 29
Top = 52
Top = 60
Width = 323
BorderSpacing.Around = 6
Caption = 'ScannersButton'
@ -196,10 +180,10 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideLeft.Control = OptionScanOutputForFPCMessagesCheckBox
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = OptionScanOutputForFPCMessagesCheckBox
Left = 254
Height = 17
Left = 328
Height = 21
Top = 6
Width = 101
Width = 135
BorderSpacing.Left = 6
Caption = 'chkHideMainForm'
TabOrder = 3
@ -212,15 +196,15 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideRight.Control = OptionsGroupBox
AnchorSideRight.Side = asrBottom
Left = 6
Height = 25
Top = 225
Height = 78
Top = 319
Width = 649
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Top = 6
Caption = 'KeyGroupBox'
Constraints.MinHeight = 25
TabOrder = 6
TabOrder = 5
end
object MacrosGroupbox: TGroupBox
AnchorSideLeft.Control = Owner
@ -230,15 +214,15 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ButtonPanel
Left = 6
Height = 207
Top = 256
Height = 151
Top = 403
Width = 649
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Around = 6
Caption = 'MacrosGroupbox'
ClientHeight = 189
ClientWidth = 645
TabOrder = 7
ClientHeight = 122
ClientWidth = 643
TabOrder = 6
object MacrosListbox: TListBox
AnchorSideLeft.Control = MacrosGroupbox
AnchorSideTop.Control = MacrosInsertButton
@ -246,9 +230,9 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideBottom.Control = MacrosGroupbox
AnchorSideBottom.Side = asrBottom
Left = 6
Height = 181
Height = 114
Top = 2
Width = 506
Width = 489
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 6
BorderSpacing.Right = 6
@ -262,10 +246,10 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
AnchorSideTop.Control = MacrosGroupbox
AnchorSideRight.Control = MacrosGroupbox
AnchorSideRight.Side = asrBottom
Left = 518
Height = 23
Left = 501
Height = 24
Top = 2
Width = 121
Width = 136
Anchors = [akTop, akRight]
AutoSize = True
BorderSpacing.Top = 2
@ -279,22 +263,42 @@ object ExternalToolOptionDlg: TExternalToolOptionDlg
object ButtonPanel: TButtonPanel
Left = 6
Height = 26
Top = 469
Top = 560
Width = 649
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
OKButton.OnClick = OKButtonClick
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
HelpButton.OnClick = HelpButtonClick
CloseButton.Name = 'CloseButton'
CloseButton.DefaultCaption = True
CloseButton.Enabled = False
CancelButton.Name = 'CancelButton'
TabOrder = 8
CancelButton.DefaultCaption = True
TabOrder = 7
ShowButtons = [pbOK, pbCancel, pbHelp]
ShowBevel = False
end
object MemoParameters: TMemo
AnchorSideLeft.Control = TitleEdit
AnchorSideTop.Control = FilenameEdit
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 128
Height = 90
Top = 64
Width = 527
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
BorderSpacing.Right = 6
ScrollBars = ssAutoBoth
TabOrder = 8
end
object OpenDialog: TOpenDialog
Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail]
left = 88
top = 32
left = 80
top = 56
end
end

View File

@ -69,6 +69,7 @@ type
TExternalToolOptionDlg = class(TForm)
ButtonPanel: TButtonPanel;
MemoParameters: TMemo;
ScannersButton: TButton;
TitleLabel: TLabel;
TitleEdit: TEdit;
@ -77,7 +78,6 @@ type
OpenDialog: TOpenDialog;
OpenButton:TButton;
ParametersLabel: TLabel;
ParametersEdit: TEdit;
WorkingDirLabel: TLabel;
WorkingDirEdit: TEdit;
OptionsGroupBox: TGroupBox;
@ -161,7 +161,7 @@ procedure TExternalToolOptionDlg.SaveToOptions;
begin
fOptions.Title:=TitleEdit.Text;
fOptions.Filename:=FilenameEdit.Text;
fOptions.CmdLineParams:=ParametersEdit.Text;
fOptions.CmdLineParams:=MemoParameters.Lines.Text;
fOptions.WorkingDirectory:=WorkingDirEdit.Text;
fOptions.Key:=fKeyBox.Key;
fOptions.Shift:=fKeyBox.ShiftState;
@ -208,7 +208,7 @@ procedure TExternalToolOptionDlg.LoadFromOptions;
begin
TitleEdit.Text:=fOptions.Title;
FilenameEdit.Text:=fOptions.Filename;
ParametersEdit.Text:=fOptions.CmdLineParams;
MemoParameters.Lines.Text:=fOptions.CmdLineParams;
WorkingDirEdit.Text:=fOptions.WorkingDirectory;
fKeyBox.Key:=fOptions.Key;
fKeyBox.ShiftState:=fOptions.Shift;
@ -336,8 +336,8 @@ begin
end;
procedure TExternalToolOptionDlg.MacrosInsertButtonClick(Sender: TObject);
var i: integer;
s: string;
var i, ALine: integer;
s, AStr: string;
begin
i:=MacrosListbox.ItemIndex;
if i<0 then exit;
@ -345,7 +345,11 @@ begin
s:='$('+fTransferMacros[i].Name+')'
else
s:='$'+fTransferMacros[i].Name+'()';
ParametersEdit.Text:=ParametersEdit.Text+s;
ALine := MemoParameters.CaretPos.Y;
If MemoParameters.Lines.Count = 0 Then
MemoParameters.Lines.Add('');
AStr := MemoParameters.Lines[Aline];
MemoParameters.Lines[Aline] := AStr + s;
end;
procedure TExternalToolOptionDlg.MacrosListboxClick(Sender: TObject);

View File

@ -51,7 +51,6 @@ resourcestring
lisRemove = 'Remove';
lisBtnRemove = '&Remove';
lisRename = 'Rename';
lisRenameShowResult = 'Show list of renamed Identifiers';
lisReplace = 'Replace';
lisBtnReplace = '&Replace';
lisBtnDlgReplace = '&Replace ...';
@ -67,14 +66,10 @@ resourcestring
lisFile = 'File';
lisNew = 'New';
lisClose = 'Close';
lrsRescanLplFiles = 'Rescan lpl files';
lrsPLDDeleteSelected = 'Delete selected';
lisBtnClose = '&Close';
lisOk = 'OK';
lisMenuOk = '&OK';
lisCancel = 'Cancel';
lisImportPackageListXml = 'Import package list (*.xml)';
lisExportPackageListXml = 'Export package list (*.xml)';
lisNo = 'No';
lisContinue = 'Continue';
lisBreak = 'Break';
@ -114,7 +109,19 @@ resourcestring
lisStop = 'Stop';
lisLess = 'Less';
lisMore = 'More';
lisMoreSub = 'More >>';
lisDefault = 'Default';
lisClone = 'Clone';
lisExport = 'Export';
lisDlgExport = 'Export ...';
lisImport = 'Import';
lisDlgImport = 'Import ...';
lisImportPackageListXml = 'Import package list (*.xml)';
lisExportPackageListXml = 'Export package list (*.xml)';
lrsRescanLplFiles = 'Rescan lpl files';
lrsPLDDeleteSelected = 'Delete selected';
lisRenameShowResult = 'Show list of renamed Identifiers';
// errors
lisErrInvalidOption = 'Invalid option at position %d: "%s"';
@ -2391,7 +2398,6 @@ resourcestring
lisCollapseAllUnits = 'Collapse all units';
lisExpandAllClasses = 'Expand all classes';
lisCollapseAllClasses = 'Collapse all classes';
lisExport = 'Export ...';
lisBegins = 'begins';
lisIdentifierBeginsWith = 'Identifier begins with ...';
lisUnitNameBeginsWith = 'Unit name begins with ...';
@ -3737,7 +3743,7 @@ resourcestring
lisExtToolMaximumToolsReached = 'Maximum Tools reached';
lisExtToolThereIsAMaximumOfTools = 'There is a maximum of %s tools.';
lisExtToolTitleCompleted = '"%s" completed';
// edit external tools
lisEdtExtToolEditTool = 'Edit Tool';
lisEdtExtToolProgramfilename = 'Program Filename:';
@ -5645,7 +5651,6 @@ resourcestring
lisDeleteSelectedMacro = 'Delete selected macro?';
lisSaveMacroAs = 'Save macro as';
lisLoadMacroFrom = 'Load macro from';
lisImport = 'Import ...';
lisProjectMacro = 'Project';
lisNewRecordedMacrosNotToBeSaved = 'New recorded macros. Not to be saved';
lisSavedWithProjectSession = 'Saved with project session';