mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-06 06:18:12 +02:00
1283 lines
39 KiB
ObjectPascal
1283 lines
39 KiB
ObjectPascal
{
|
|
***************************************************************************
|
|
* *
|
|
* 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
|
|
* *
|
|
***************************************************************************
|
|
|
|
Author: Mattias Gaertner
|
|
|
|
Abstract:
|
|
Run Parameters Options (TRunParamsOptions)
|
|
and Dialog for them (TRunParamsOptsDlg)
|
|
|
|
Run Parameters are project specific options for the debugger like
|
|
command line parameters and working directory.
|
|
|
|
The options saved in a TRunParamsOptions are stored in the project info file
|
|
(.lpi) together with the rest of the project.
|
|
|
|
The dialog will be activated by main.pp with the function
|
|
ShowRunParamsOptsDlg (see below) when the user clicks on the
|
|
menu->Run->Run Parameters.
|
|
}
|
|
unit RunParamsOpts;
|
|
|
|
{$mode objfpc}
|
|
{$H+}
|
|
|
|
{$I ide.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF IDE_MEM_CHECK}
|
|
MemCheck,
|
|
{$ENDIF}
|
|
Classes, SysUtils,
|
|
// LCL
|
|
Controls, Forms, Buttons, StdCtrls, ComCtrls, Dialogs, ButtonPanel, ExtCtrls,
|
|
// IdeIntf
|
|
BaseIDEIntf, IDEHelpIntf, ProjectIntf, IDEDialogs, IDEImagesIntf, MacroIntf,
|
|
// LazUtils
|
|
LazFileUtils, LazFileCache, LazUTF8, Laz2_XMLCfg,
|
|
// IDE
|
|
IDEProcs, MiscOptions, SysVarUserOverrideDlg, InputHistory, LazarusIDEStrConsts,
|
|
EnvironmentOpts;
|
|
|
|
{ The xml format version:
|
|
When the format changes (new values, changed formats) we can distinguish old
|
|
files and are able to convert them.
|
|
}
|
|
const
|
|
RunParamsOptionsVersion = 2;
|
|
|
|
type
|
|
{
|
|
the storage object for run parameters
|
|
}
|
|
|
|
TRunParamsOptionsModeSave = (rpsLPS, rpsLPI);
|
|
|
|
{ TRunParamsOptionsMode }
|
|
|
|
TRunParamsOptionsMode = class(TAbstractRunParamsOptionsMode)
|
|
private
|
|
fSaveIn: TRunParamsOptionsModeSave;
|
|
protected
|
|
procedure AssignTo(Dest: TPersistent); override;
|
|
public
|
|
property SaveIn: TRunParamsOptionsModeSave read fSaveIn write fSaveIn;
|
|
public
|
|
procedure AssignEnvironmentTo(Strings: TStrings); override;
|
|
|
|
function LegacyLoad(XMLConfig: TXMLConfig; const Path: string;
|
|
AdjustPathDelims: boolean): TModalResult;
|
|
function Load(XMLConfig: TXMLConfig; const Path: string;
|
|
AdjustPathDelims: boolean): TModalResult;
|
|
function LegacySave(XMLConfig: TXMLConfig; const Path: string;
|
|
UsePathDelim: TPathDelimSwitch): TModalResult;
|
|
function Save(XMLConfig: TXMLConfig; const Path: string;
|
|
UsePathDelim: TPathDelimSwitch): TModalResult;
|
|
|
|
procedure Clear; override;
|
|
end;
|
|
|
|
{ TRunParamsOptions }
|
|
|
|
TRunParamsOptions = class(TAbstractRunParamsOptions)
|
|
protected
|
|
procedure AssignTo(Dest: TPersistent); override;
|
|
function CreateMode(const AName: string): TAbstractRunParamsOptionsMode; override;
|
|
procedure SetActiveModeName(const AValue: string); override;
|
|
public
|
|
procedure AssignEnvironmentTo(Strings: TStrings); override;
|
|
|
|
function LegacyLoad(XMLConfig: TXMLConfig; const Path: string;
|
|
AdjustPathDelims: boolean): TModalResult;
|
|
function Load(XMLConfig: TXMLConfig; const Path: string;
|
|
AdjustPathDelims: boolean; const ASaveIn: TRunParamsOptionsModeSave): TModalResult;
|
|
function LegacySave(XMLConfig: TXMLConfig; const Path: string;
|
|
UsePathDelim: TPathDelimSwitch): TModalResult;
|
|
function Save(XMLConfig: TXMLConfig; const Path: string;
|
|
UsePathDelim: TPathDelimSwitch; const ASaveIn: TRunParamsOptionsModeSave;
|
|
const ALegacyList: Boolean): TModalResult;
|
|
function GetActiveMode: TRunParamsOptionsMode;
|
|
end;
|
|
|
|
{ TRunParamsOptsDlg - the form of the run parameters options dialog }
|
|
|
|
TRunParamsOptsDlg = class(TForm)
|
|
ButtonPanel: TButtonPanel;
|
|
CmdLineParametersComboBox: TComboBox;
|
|
CmdLineParametersGroupBox: TGroupBox;
|
|
DeleteModeButton: TToolButton;
|
|
DisplayEdit: TEdit;
|
|
DisplayGroupBox: TGroupBox;
|
|
EnvVarsPage: TTabSheet;
|
|
GeneralPage: TTabSheet;
|
|
HostApplicationBrowseBtn: TButton;
|
|
HostApplicationEdit: TEdit;
|
|
HostApplicationGroupBox: TGroupBox;
|
|
IncludeSystemVariablesCheckBox: TCheckBox;
|
|
ModesComboBox: TComboBox;
|
|
ModesLabel: TLabel;
|
|
NewModeButton: TToolButton;
|
|
Notebook: TPageControl;
|
|
Panel1: TPanel;
|
|
PreviewMemo: TMemo;
|
|
PreviewMultilineCheckBox: TCheckBox;
|
|
PreviewPage: TTabSheet;
|
|
SaveInComboBox: TComboBox;
|
|
SaveInLabel: TLabel;
|
|
SystemVariablesGroupBox: TGroupBox;
|
|
SystemVariablesListView: TListView;
|
|
ToolBar1: TToolBar;
|
|
UseDisplayCheckBox: TCheckBox;
|
|
UseLaunchingApplicationCheckBox: TCheckBox;
|
|
UseLaunchingApplicationComboBox: TComboBox;
|
|
UseLaunchingApplicationGroupBox: TGroupBox;
|
|
UserOverridesAddButton: TBitBtn;
|
|
UserOverridesDeleteButton: TBitBtn;
|
|
UserOverridesEditButton: TBitBtn;
|
|
UserOverridesGroupBox: TGroupBox;
|
|
UserOverridesListView: TListView;
|
|
WorkingDirectoryBtn: TButton;
|
|
WorkingDirectoryComboBox: TComboBox;
|
|
WorkingDirectoryGroupBox: TGroupBox;
|
|
procedure DeleteModeButtonClick(Sender: TObject);
|
|
procedure EnvVarsPageResize(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure HelpButtonClick(Sender: TObject);
|
|
procedure ModesComboBoxChange(Sender: TObject);
|
|
procedure NotebookChange(Sender: TObject);
|
|
procedure OkButtonClick(Sender: TObject);
|
|
procedure HostApplicationBrowseBtnClick(Sender: TObject);
|
|
procedure NewModeButtonClick(Sender: TObject);
|
|
procedure PreviewMultilineCheckBoxChange(Sender: TObject);
|
|
procedure UseLaunchingApplicationCheckBoxChange(Sender: TObject);
|
|
procedure UserOverridesListViewSelectItem(Sender: TObject; {%H-}Item: TListItem;
|
|
{%H-}Selected: Boolean);
|
|
procedure WorkingDirectoryBtnClick(Sender: TObject);
|
|
procedure UserOverridesAddButtonClick(Sender: TObject);
|
|
procedure UserOverridesEditButtonClick(Sender: TObject);
|
|
procedure UserOverridesDeleteButtonClick(Sender: TObject);
|
|
private
|
|
fHistoryLists: THistoryLists;
|
|
fOptions: TRunParamsOptions;
|
|
fSaveToOptions: TRunParamsOptions;
|
|
fLastSelectedMode: TRunParamsOptionsMode;
|
|
procedure SetupNotebook;
|
|
procedure SetupLocalPage;
|
|
procedure SetupEnvironmentPage;
|
|
procedure SetupPreviewPage;
|
|
procedure SetOptions(NewOptions: TRunParamsOptions);
|
|
procedure FillListView(ListView: TListView; sl: TStringList);
|
|
procedure FillSystemVariablesListView;
|
|
procedure FillUserOverridesListView(const AMode: TRunParamsOptionsMode);
|
|
procedure ReloadModesComboBox;
|
|
procedure UpdatePreview;
|
|
procedure SaveToOptions;
|
|
procedure SaveToOptionsMode(const AMode: TRunParamsOptionsMode);
|
|
procedure LoadFromOptionsMode(const AMode: TRunParamsOptionsMode);
|
|
procedure SaveUserOverrides(const AMode: TRunParamsOptionsMode);
|
|
procedure SelectMode(const AName: string);
|
|
function SelectedMode: TRunParamsOptionsMode;
|
|
procedure SetComboBoxText(AComboBox: TComboBox; AText: ansistring);
|
|
public
|
|
constructor Create(AnOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
property Options: TRunParamsOptions Write SetOptions;
|
|
property HistoryLists: THistoryLists read fHistoryLists write fHistoryLists;
|
|
end;
|
|
|
|
function ShowRunParamsOptsDlg(RunParamsOptions: TRunParamsOptions; HistoryLists: THistoryLists): TModalResult;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
const
|
|
DefaultLauncherTitle = '''Lazarus Run Output''';
|
|
DefaultLauncherApplication = '$(LazarusDir)/tools/runwait.sh $(TargetCmdLine)';
|
|
|
|
hlLaunchingApplication = 'LaunchingApplication';
|
|
hlCmdLineParameters = 'CommandLineParameters';
|
|
hlWorkingDirectory = 'WorkingDirectory';
|
|
|
|
function FindTerminalInPath(const ATerm: String = ''): String;
|
|
var
|
|
List: TStrings;
|
|
i: Integer;
|
|
s: String;
|
|
Term: String;
|
|
begin
|
|
Result := '';
|
|
Term := ATerm;
|
|
if Term = '' then
|
|
Term := GetEnvironmentVariableUTF8('TERM');
|
|
List := TStringList.Create;
|
|
{$IFDEF MSWINDOWS}
|
|
List.Delimiter := ';';
|
|
if Term = '' then
|
|
Term := 'cmd.exe';
|
|
{$ELSE}
|
|
List.Delimiter := ':';
|
|
if Term = '' then
|
|
Term := 'xterm';
|
|
{$ENDIF}
|
|
List.DelimitedText := GetEnvironmentVariableUTF8('PATH');
|
|
for i := 0 to List.Count - 1 do
|
|
begin
|
|
S := List.Strings[i] + PathDelim + Term;
|
|
if FileExistsCached(S) and FileIsExecutableCached(S) then
|
|
begin
|
|
// gnome-terminal is not compatible to xterm params.
|
|
if Term = 'gnome-terminal' then
|
|
Result := S + ' -t ' + DefaultLauncherTitle + ' -e ' +
|
|
'''' + DefaultLauncherApplication + ''''
|
|
else if SameText(Term,'cmd.exe') then
|
|
Result := S + ' /C ${TargetCmdLine}'
|
|
else
|
|
Result := S + ' -T ' + DefaultLauncherTitle + ' -e ' +
|
|
DefaultLauncherApplication;
|
|
break;
|
|
end;
|
|
end;
|
|
List.Free;
|
|
end;
|
|
|
|
var
|
|
DefaultLaunchingApplicationPathPlusParams: string;
|
|
|
|
function GetDefaultLaunchingApplicationPathPlusParams: string;
|
|
begin
|
|
Result:=DefaultLaunchingApplicationPathPlusParams;
|
|
if Result<>'' then exit;
|
|
Result:=FindTerminalInPath;
|
|
DefaultLaunchingApplicationPathPlusParams:=Result;
|
|
end;
|
|
|
|
function ShowRunParamsOptsDlg(RunParamsOptions: TRunParamsOptions;
|
|
HistoryLists: THistoryLists): TModalResult;
|
|
var
|
|
RunParamsOptsForm: TRunParamsOptsDlg;
|
|
begin
|
|
Result := mrCancel;
|
|
RunParamsOptsForm := TRunParamsOptsDlg.Create(nil);
|
|
try
|
|
RunParamsOptsForm.HistoryLists := HistoryLists;
|
|
RunParamsOptsForm.Options := RunParamsOptions;
|
|
Result := RunParamsOptsForm.ShowModal;
|
|
finally
|
|
RunParamsOptsForm.Free;
|
|
end;
|
|
end;
|
|
|
|
{ TRunParamsOptions }
|
|
|
|
procedure TRunParamsOptions.AssignEnvironmentTo(Strings: TStrings);
|
|
begin
|
|
if GetActiveMode=nil then
|
|
BaseIDEIntf.AssignEnvironmentTo(Strings, nil)
|
|
else
|
|
GetActiveMode.AssignEnvironmentTo(Strings);
|
|
end;
|
|
|
|
procedure TRunParamsOptions.AssignTo(Dest: TPersistent);
|
|
var
|
|
ADest: TRunParamsOptions;
|
|
begin
|
|
inherited AssignTo(Dest);
|
|
|
|
if Dest is TRunParamsOptions then
|
|
begin
|
|
ADest := TRunParamsOptions(Dest);
|
|
|
|
ADest.ActiveModeName := ActiveModeName;
|
|
end;
|
|
end;
|
|
|
|
function TRunParamsOptions.CreateMode(const AName: string
|
|
): TAbstractRunParamsOptionsMode;
|
|
begin
|
|
Result := TRunParamsOptionsMode.Create(AName);
|
|
end;
|
|
|
|
procedure TRunParamsOptions.SetActiveModeName(const AValue: string);
|
|
var
|
|
NewMode: TAbstractRunParamsOptionsMode;
|
|
begin
|
|
if AValue=ActiveModeName then exit;
|
|
NewMode:=Find(AValue);
|
|
if NewMode<>nil then
|
|
inherited SetActiveModeName(NewMode.Name)
|
|
else if AValue<>'' then
|
|
raise EListError.Create('TRunParamsOptions.SetActiveModeName no such mode "'+AValue+'"')
|
|
else
|
|
inherited SetActiveModeName('');
|
|
end;
|
|
|
|
function TRunParamsOptions.GetActiveMode: TRunParamsOptionsMode;
|
|
var
|
|
AMode: TAbstractRunParamsOptionsMode;
|
|
begin
|
|
AMode := Find(ActiveModeName);
|
|
if AMode=nil then exit(nil);
|
|
Result := AMode as TRunParamsOptionsMode;
|
|
end;
|
|
|
|
function TRunParamsOptions.LegacyLoad(XMLConfig: TXMLConfig;
|
|
const Path: string; AdjustPathDelims: boolean): TModalResult;
|
|
var
|
|
NewMode: TRunParamsOptionsMode;
|
|
begin
|
|
Clear;
|
|
|
|
NewMode := Add('default') as TRunParamsOptionsMode;
|
|
NewMode.SaveIn := rpsLPI;
|
|
Result := NewMode.LegacyLoad(XMLConfig, Path+'RunParams/', AdjustPathDelims);
|
|
ActiveModeName := 'default';
|
|
end;
|
|
|
|
function TRunParamsOptions.LegacySave(XMLConfig: TXMLConfig;
|
|
const Path: string; UsePathDelim: TPathDelimSwitch): TModalResult;
|
|
var
|
|
AMode: TRunParamsOptionsMode;
|
|
begin
|
|
Result := mrOK;
|
|
|
|
AMode := GetActiveMode;
|
|
if (AMode<>nil) and (AMode.SaveIn=rpsLPI) then
|
|
AMode.LegacySave(XMLConfig, Path+'RunParams/', UsePathDelim);
|
|
end;
|
|
|
|
function TRunParamsOptions.Load(XMLConfig: TXMLConfig; const Path: string;
|
|
AdjustPathDelims: boolean; const ASaveIn: TRunParamsOptionsModeSave
|
|
): TModalResult;
|
|
var
|
|
Cnt, I: Integer;
|
|
NewMode: TRunParamsOptionsMode;
|
|
ModePath, NewActiveModeName, ModesPath: string;
|
|
IsLegacyList: Boolean;
|
|
begin
|
|
//don't clear! needed for merging lpi and lps
|
|
|
|
ModesPath := Path + 'Modes/';
|
|
IsLegacyList := XMLConfig.IsLegacyList(ModesPath);
|
|
Cnt := XMLConfig.GetListItemCount(ModesPath, 'Mode', IsLegacyList);
|
|
Result := mrOK;
|
|
|
|
for I := 0 to Cnt-1 do
|
|
begin
|
|
ModePath := ModesPath+XMLConfig.GetListItemXPath('Mode', I, IsLegacyList, False)+'/';
|
|
NewMode := Add(XMLConfig.GetValue(ModePath+'Name', '')) as TRunParamsOptionsMode;
|
|
NewMode.SaveIn := ASaveIn;
|
|
Result := NewMode.Load(XMLConfig, ModePath, AdjustPathDelims);
|
|
if Result<>mrOK then
|
|
Exit;
|
|
end;
|
|
|
|
if ASaveIn=rpsLPS then
|
|
begin
|
|
NewActiveModeName := XMLConfig.GetValue(Path + 'Modes/ActiveMode', '');
|
|
// sanity check -> modes from LPI could be modified independently on LPS and
|
|
// NewActiveModeName doesn't have to exist any more
|
|
if Assigned(Find(NewActiveModeName)) then
|
|
ActiveModeName := NewActiveModeName;
|
|
end;
|
|
|
|
if (GetActiveMode=nil) and (Count>0) then
|
|
ActiveModeName := Modes[0].Name;
|
|
end;
|
|
|
|
function TRunParamsOptions.Save(XMLConfig: TXMLConfig; const Path: string;
|
|
UsePathDelim: TPathDelimSwitch; const ASaveIn: TRunParamsOptionsModeSave;
|
|
const ALegacyList: Boolean): TModalResult;
|
|
var
|
|
AMode: TRunParamsOptionsMode;
|
|
I, Cnt: Integer;
|
|
ModesPath, ModePath: string;
|
|
begin
|
|
Result := mrOK;
|
|
ModesPath := Path+'Modes/';
|
|
|
|
// save a format version to distinguish old formats
|
|
XMLConfig.SetValue(Path + 'FormatVersion/Value',
|
|
RunParamsOptionsVersion);
|
|
|
|
Cnt := 0;
|
|
for I := 0 to Count-1 do
|
|
begin
|
|
AMode := Modes[I] as TRunParamsOptionsMode;
|
|
|
|
if AMode.SaveIn=ASaveIn then
|
|
begin
|
|
ModePath := ModesPath+XMLConfig.GetListItemXPath('Mode', Cnt, ALegacyList, False)+'/';
|
|
Result := AMode.Save(XMLConfig, ModePath, UsePathDelim);
|
|
if Result<>mrOK then
|
|
Exit;
|
|
Inc(Cnt);
|
|
end;
|
|
end;
|
|
|
|
XMLConfig.SetListItemCount(ModesPath, Cnt, ALegacyList);
|
|
if ASaveIn=rpsLPS then
|
|
XMLConfig.SetValue(Path + 'Modes/ActiveMode', ActiveModeName);
|
|
end;
|
|
|
|
{ TRunParamsOptionsMode }
|
|
|
|
function TRunParamsOptionsMode.LegacyLoad(XMLConfig: TXMLConfig;
|
|
const Path: string; AdjustPathDelims: boolean): TModalResult;
|
|
|
|
function f(const Filename: string): string;
|
|
begin
|
|
Result := SwitchPathDelims(Filename, AdjustPathDelims);
|
|
end;
|
|
|
|
procedure LoadUserOverrides(const APath: string);
|
|
var
|
|
i, Cnt: integer;
|
|
begin
|
|
Cnt := XMLConfig.GetValue(APath + 'Count', 0);
|
|
for i := 0 to Cnt - 1 do
|
|
begin
|
|
UserOverrides.Values[XMLConfig.GetValue(
|
|
APath + 'Variable' + IntToStr(i) + '/Name', '')] :=
|
|
XMLConfig.GetValue(APath + 'Variable' + IntToStr(i) + '/Value', '');
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
// local options
|
|
HostApplicationFilename := f(XMLConfig.GetValue(
|
|
Path + 'local/HostApplicationFilename/Value',
|
|
HostApplicationFilename));
|
|
CmdLineParams := f(XMLConfig.GetValue(
|
|
Path + 'local/CommandLineParams/Value', CmdLineParams));
|
|
UseLaunchingApplication := XMLConfig.GetValue(
|
|
Path + 'local/LaunchingApplication/Use', UseLaunchingApplication);
|
|
LaunchingApplicationPathPlusParams :=
|
|
f(XMLConfig.GetValue(Path + 'local/LaunchingApplication/PathPlusParams',
|
|
f(GetDefaultLaunchingApplicationPathPlusParams)));
|
|
WorkingDirectory := f(XMLConfig.GetValue(
|
|
Path + 'local/WorkingDirectory/Value', WorkingDirectory));
|
|
UseDisplay := XMLConfig.GetValue(Path + 'local/Display/Use',
|
|
UseDisplay);
|
|
Display := XMLConfig.GetValue(Path + 'local/Display/Value', Display);
|
|
|
|
// environment options
|
|
LoadUserOverrides(Path + 'environment/UserOverrides/');
|
|
IncludeSystemVariables := XMLConfig.GetValue(
|
|
Path + 'environment/IncludeSystemVariables/Value',
|
|
IncludeSystemVariables);
|
|
|
|
Result := mrOk;
|
|
end;
|
|
|
|
function TRunParamsOptionsMode.LegacySave(XMLConfig: TXMLConfig;
|
|
const Path: string; UsePathDelim: TPathDelimSwitch): TModalResult;
|
|
|
|
function f(const AFilename: string): string;
|
|
begin
|
|
Result:=SwitchPathDelims(AFilename,UsePathDelim);
|
|
end;
|
|
|
|
procedure SaveUserOverrides(const APath: string);
|
|
var
|
|
i: integer;
|
|
begin
|
|
XMLConfig.SetDeleteValue(APath + 'Count', UserOverrides.Count, 0);
|
|
for i := 0 to UserOverrides.Count - 1 do
|
|
begin
|
|
XMLConfig.SetValue(APath + 'Variable' + IntToStr(i) + '/Name',
|
|
UserOverrides.Names[i]); // no default
|
|
XMLConfig.SetDeleteValue(APath + 'Variable' + IntToStr(i) + '/Value',
|
|
UserOverrides.Values[UserOverrides.Names[i]],'');
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
// local options
|
|
XMLConfig.SetDeleteValue(Path + 'local/HostApplicationFilename/Value',
|
|
f(HostApplicationFilename), '');
|
|
XMLConfig.SetDeleteValue(Path + 'local/CommandLineParams/Value',
|
|
f(CmdLineParams), '');
|
|
XMLConfig.SetDeleteValue(Path + 'local/LaunchingApplication/Use',
|
|
UseLaunchingApplication, False);
|
|
XMLConfig.SetDeleteValue(Path + 'local/LaunchingApplication/PathPlusParams',
|
|
f(LaunchingApplicationPathPlusParams), f(GetDefaultLaunchingApplicationPathPlusParams));
|
|
XMLConfig.SetDeleteValue(Path + 'local/WorkingDirectory/Value',
|
|
f(WorkingDirectory), '');
|
|
XMLConfig.SetDeleteValue(Path + 'local/Display/Use',
|
|
UseDisplay, False);
|
|
XMLConfig.SetDeleteValue(Path + 'local/Display/Value',
|
|
Display, ':0');
|
|
|
|
// environment options
|
|
SaveUserOverrides(Path + 'environment/UserOverrides/');
|
|
XMLConfig.SetDeleteValue(Path + 'environment/IncludeSystemVariables/Value',
|
|
IncludeSystemVariables, False);
|
|
|
|
Result := mrOk;
|
|
end;
|
|
|
|
function TRunParamsOptionsMode.Load(XMLConfig: TXMLConfig; const Path: string;
|
|
AdjustPathDelims: boolean): TModalResult;
|
|
|
|
function f(const Filename: string): string;
|
|
begin
|
|
Result := SwitchPathDelims(Filename, AdjustPathDelims);
|
|
end;
|
|
|
|
procedure LoadUserOverrides(const APath: string);
|
|
var
|
|
i, Cnt: integer;
|
|
begin
|
|
Cnt := XMLConfig.GetValue(APath + 'Count', 0);
|
|
for i := 0 to Cnt - 1 do
|
|
begin
|
|
UserOverrides.Values[XMLConfig.GetValue(
|
|
APath + 'Variable' + IntToStr(i) + '/Name', '')] :=
|
|
XMLConfig.GetValue(APath + 'Variable' + IntToStr(i) + '/Value', '');
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
// local options
|
|
HostApplicationFilename := f(XMLConfig.GetValue(
|
|
Path + 'local/HostApplicationFilename/Value',
|
|
HostApplicationFilename));
|
|
CmdLineParams := f(XMLConfig.GetValue(
|
|
Path + 'local/CommandLineParams/Value', CmdLineParams));
|
|
UseLaunchingApplication := XMLConfig.GetValue(
|
|
Path + 'local/LaunchingApplication/Use', UseLaunchingApplication);
|
|
LaunchingApplicationPathPlusParams :=
|
|
f(XMLConfig.GetValue(Path + 'local/LaunchingApplication/PathPlusParams',
|
|
f(GetDefaultLaunchingApplicationPathPlusParams)));
|
|
WorkingDirectory := f(XMLConfig.GetValue(
|
|
Path + 'local/WorkingDirectory/Value', WorkingDirectory));
|
|
UseDisplay := XMLConfig.GetValue(Path + 'local/Display/Use',
|
|
UseDisplay);
|
|
Display := XMLConfig.GetValue(Path + 'local/Display/Value', Display);
|
|
|
|
// environment options
|
|
LoadUserOverrides(Path + 'environment/UserOverrides/');
|
|
IncludeSystemVariables := XMLConfig.GetValue(
|
|
Path + 'environment/IncludeSystemVariables/Value',
|
|
IncludeSystemVariables);
|
|
|
|
Result := mrOk;
|
|
end;
|
|
|
|
function TRunParamsOptionsMode.Save(XMLConfig: TXMLConfig; const Path: string;
|
|
UsePathDelim: TPathDelimSwitch): TModalResult;
|
|
|
|
function f(const AFilename: string): string;
|
|
begin
|
|
Result:=SwitchPathDelims(AFilename,UsePathDelim);
|
|
end;
|
|
|
|
procedure SaveUserOverrides(const APath: string);
|
|
var
|
|
i: integer;
|
|
begin
|
|
XMLConfig.SetDeleteValue(APath + 'Count', UserOverrides.Count, 0);
|
|
for i := 0 to UserOverrides.Count - 1 do
|
|
begin
|
|
XMLConfig.SetValue(APath + 'Variable' + IntToStr(i) + '/Name',
|
|
UserOverrides.Names[i]); // no default
|
|
XMLConfig.SetDeleteValue(APath + 'Variable' + IntToStr(i) + '/Value',
|
|
UserOverrides.Values[UserOverrides.Names[i]],'');
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
XMLConfig.SetValue(Path + 'Name', Name);
|
|
|
|
// local options
|
|
XMLConfig.SetDeleteValue(Path + 'local/HostApplicationFilename/Value',
|
|
f(HostApplicationFilename), '');
|
|
XMLConfig.SetDeleteValue(Path + 'local/CommandLineParams/Value',
|
|
f(CmdLineParams), '');
|
|
XMLConfig.SetDeleteValue(Path + 'local/LaunchingApplication/Use',
|
|
UseLaunchingApplication, False);
|
|
XMLConfig.SetDeleteValue(Path + 'local/LaunchingApplication/PathPlusParams',
|
|
f(LaunchingApplicationPathPlusParams), f(GetDefaultLaunchingApplicationPathPlusParams));
|
|
XMLConfig.SetDeleteValue(Path + 'local/WorkingDirectory/Value',
|
|
f(WorkingDirectory), '');
|
|
XMLConfig.SetDeleteValue(Path + 'local/Display/Use',
|
|
UseDisplay, False);
|
|
XMLConfig.SetDeleteValue(Path + 'local/Display/Value',
|
|
Display, ':0');
|
|
|
|
// environment options
|
|
SaveUserOverrides(Path + 'environment/UserOverrides/');
|
|
XMLConfig.SetDeleteValue(Path + 'environment/IncludeSystemVariables/Value',
|
|
IncludeSystemVariables, False);
|
|
|
|
Result := mrOk;
|
|
end;
|
|
|
|
procedure TRunParamsOptionsMode.AssignEnvironmentTo(Strings: TStrings);
|
|
var
|
|
idx: integer;
|
|
begin
|
|
BaseIDEIntf.AssignEnvironmentTo(Strings, UserOverrides);
|
|
|
|
if UseDisplay then
|
|
begin
|
|
// assignment is not allowed in a sorted list
|
|
// Strings.Values['DISPLAY']:=Display;
|
|
idx := Strings.IndexOfName('DISPLAY');
|
|
if idx <> -1 then
|
|
Strings.Delete(idx);
|
|
Strings.Add('DISPLAY=' + Display);
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptionsMode.AssignTo(Dest: TPersistent);
|
|
var
|
|
ADest: TRunParamsOptionsMode;
|
|
begin
|
|
inherited AssignTo(Dest);
|
|
|
|
if Dest is TRunParamsOptionsMode then
|
|
begin
|
|
ADest := Dest as TRunParamsOptionsMode;
|
|
ADest.SaveIn := SaveIn;
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptionsMode.Clear;
|
|
begin
|
|
inherited Clear;
|
|
|
|
SaveIn := rpsLPS;
|
|
LaunchingApplicationPathPlusParams := GetDefaultLaunchingApplicationPathPlusParams;
|
|
end;
|
|
|
|
|
|
{ TRunParamsOptsDlg }
|
|
|
|
constructor TRunParamsOptsDlg.Create(AnOwner: TComponent);
|
|
begin
|
|
inherited Create(AnOwner);
|
|
fOptions := TRunParamsOptions.Create;
|
|
Caption := dlgRunParameters;
|
|
ModesLabel.Caption := dlgMode;
|
|
SaveInLabel.Caption := dlgSaveIn;
|
|
NewModeButton.Hint := dlgAddNewMode;
|
|
DeleteModeButton.Hint := dlgDeleteMode;
|
|
NewModeButton.ImageIndex := IDEImages.LoadImage('laz_add');
|
|
DeleteModeButton.ImageIndex := IDEImages.LoadImage('laz_delete');
|
|
ToolBar1.Images := IDEImages.Images_16;
|
|
ButtonPanel.OKButton.Caption:=lisMenuOk;
|
|
ButtonPanel.HelpButton.Caption:=lisMenuHelp;
|
|
ButtonPanel.CancelButton.Caption:=lisCancel;
|
|
SaveInComboBox.Items[0] := lisProjectSession+' (.lps)';
|
|
SaveInComboBox.Items[1] := lisProjectMacro+' (.lpi)';
|
|
SetupNotebook;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.DeleteModeButtonClick(Sender: TObject);
|
|
begin
|
|
if ModesComboBox.ItemIndex=-1 then
|
|
Exit;
|
|
|
|
if fOptions.Count=1 then
|
|
begin
|
|
MessageDlg(lisCannotDeleteLastMode, mtError, [mbOK], 0);
|
|
Exit;
|
|
end;
|
|
if MessageDlg(lisDelete2, mtConfirmation, [mbYes, mbNo], 0)<>mrYes then
|
|
Exit;
|
|
|
|
fLastSelectedMode := nil;
|
|
fOptions.Delete(ModesComboBox.ItemIndex);
|
|
ReloadModesComboBox;
|
|
ModesComboBox.ItemIndex := 0;
|
|
ModesComboBoxChange(ModesComboBox);
|
|
end;
|
|
|
|
destructor TRunParamsOptsDlg.Destroy;
|
|
begin
|
|
fOptions.Free;
|
|
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SetupNotebook;
|
|
begin
|
|
with Notebook do
|
|
begin
|
|
Page[0].Caption := dlgRunOLocal;
|
|
Page[1].Caption := dlgRunOEnvironment;
|
|
PageIndex := 0;
|
|
end;
|
|
|
|
SetupLocalPage;
|
|
SetupEnvironmentPage;
|
|
SetupPreviewPage;
|
|
IDEImages.AssignImage(UserOverridesAddButton, 'laz_add');
|
|
IDEImages.AssignImage(UserOverridesEditButton, 'laz_edit');
|
|
IDEImages.AssignImage(UserOverridesDeleteButton, 'laz_delete');
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.NewModeButtonClick(Sender: TObject);
|
|
var
|
|
NewName: string;
|
|
NewMode: TRunParamsOptionsMode;
|
|
begin
|
|
NewName := InputBox(dlgCreateNewRunParametersSettings, lisName, '');
|
|
if NewName='' then
|
|
Exit;
|
|
if fOptions.Find(NewName)<>nil then
|
|
begin
|
|
MessageDlg(lisDuplicateModeName, mtError, [mbOK], 0);
|
|
Exit;
|
|
end;
|
|
|
|
fLastSelectedMode := nil;
|
|
NewMode := fOptions.Add(NewName) as TRunParamsOptionsMode;
|
|
SaveToOptionsMode(NewMode);
|
|
ReloadModesComboBox;
|
|
SelectMode(NewName);
|
|
ModesComboBoxChange(ModesComboBox);
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.PreviewMultilineCheckBoxChange(Sender: TObject);
|
|
begin
|
|
UpdatePreview;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SetupLocalPage;
|
|
begin
|
|
HostApplicationGroupBox.Caption := dlgHostApplication;
|
|
HostApplicationBrowseBtn.Caption := '...';
|
|
CmdLineParametersGroupBox.Caption := dlgCommandLineParams;
|
|
UseLaunchingApplicationGroupBox.Caption := lisUseLaunchingApplicationGroupBox;
|
|
UseLaunchingApplicationCheckBox.Caption := dlgUseLaunchingApp;
|
|
|
|
WorkingDirectoryGroupBox.Caption := dlgROWorkingDirectory;
|
|
WorkingDirectoryBtn.Caption := '...';
|
|
DisplayGroupBox.Caption := dlgRunODisplay;
|
|
UseDisplayCheckBox.Caption := dlgRunOUsedisplay;
|
|
DisplayEdit.Parent := DisplayGroupBox;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SetupEnvironmentPage;
|
|
begin
|
|
SystemVariablesGroupBox.Caption := dlgRunOSystemVariables;
|
|
|
|
with SystemVariablesListView do
|
|
begin
|
|
Columns.BeginUpdate;
|
|
Columns[0].Caption := lisVariable;
|
|
Columns[1].Caption := lisValue;
|
|
Columns.EndUpdate;
|
|
end;
|
|
|
|
UserOverridesGroupBox.Caption := dlgRunOUserOverrides;
|
|
|
|
with UserOverridesListView do
|
|
begin
|
|
Columns.BeginUpdate;
|
|
Columns[0].Caption := lisVariable;
|
|
Columns[1].Caption := lisValue;
|
|
Columns.EndUpdate;
|
|
end;
|
|
|
|
UserOverridesAddButton.Caption := lisDlgAdd;
|
|
UserOverridesEditButton.Caption := lisDlgEdit;
|
|
UserOverridesDeleteButton.Caption := lisDelete;
|
|
IncludeSystemVariablesCheckBox.Caption := dlgIncludeSystemVariables;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SetupPreviewPage;
|
|
begin
|
|
PreviewPage.Caption:=dlgWRDPreview;
|
|
PreviewMultilineCheckBox.Caption:=lisShowMultipleLines;
|
|
PreviewMultilineCheckBox.Checked:=MiscellaneousOptions.ShowCompOptMultiLine;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.OkButtonClick(Sender: TObject);
|
|
begin
|
|
if SelectedMode<>nil then
|
|
SaveToOptionsMode(SelectedMode);
|
|
SaveToOptions;
|
|
ModalResult := mrOk;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.ReloadModesComboBox;
|
|
var
|
|
I: Integer;
|
|
AMode: TAbstractRunParamsOptionsMode;
|
|
begin
|
|
ModesComboBox.Clear;
|
|
for I := 0 to fOptions.Count-1 do
|
|
begin
|
|
AMode := fOptions[I];
|
|
ModesComboBox.AddItem(AMode.Name, AMode);
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.UpdatePreview;
|
|
var
|
|
sl: TStringList;
|
|
MultiLine: Boolean;
|
|
|
|
procedure AddLines(aCaption, Params: string);
|
|
var
|
|
ParamList: TStringList;
|
|
begin
|
|
sl.Add(aCaption);
|
|
if MultiLine then begin
|
|
ParamList:=TStringList.Create;
|
|
try
|
|
SplitCmdLineParams(Params,ParamList);
|
|
sl.AddStrings(ParamList);
|
|
finally
|
|
ParamList.Free;
|
|
end;
|
|
end else begin
|
|
sl.Add(Params);
|
|
end;
|
|
end;
|
|
|
|
var
|
|
s: string;
|
|
begin
|
|
MultiLine:=PreviewMultilineCheckBox.Checked;
|
|
if MultiLine then
|
|
PreviewMemo.ScrollBars:=ssAutoBoth
|
|
else
|
|
PreviewMemo.ScrollBars:=ssAutoVertical;
|
|
|
|
sl:=TStringList.Create;
|
|
try
|
|
s:=HostApplicationEdit.Text;
|
|
if s<>'' then begin
|
|
IDEMacros.SubstituteMacros(s);
|
|
sl.Add('Host Application: '+s);
|
|
end;
|
|
|
|
s:=WorkingDirectoryComboBox.Text;
|
|
if s<>'' then begin
|
|
IDEMacros.SubstituteMacros(s);
|
|
sl.Add('Working Directory: '+s);
|
|
end;
|
|
|
|
if UseLaunchingApplicationCheckBox.Checked then begin
|
|
s:=UseLaunchingApplicationComboBox.Text;
|
|
if s<>'' then begin
|
|
IDEMacros.SubstituteMacros(s);
|
|
AddLines('Launching Application:',s);
|
|
end;
|
|
end;
|
|
|
|
s:=CmdLineParametersComboBox.Text;
|
|
if s<>'' then begin
|
|
IDEMacros.SubstituteMacros(s);
|
|
AddLines('Parameters:',s);
|
|
end;
|
|
|
|
if UseDisplayCheckBox.Checked then begin
|
|
s:=DisplayEdit.Text;
|
|
if s<>'' then begin
|
|
IDEMacros.SubstituteMacros(s);
|
|
sl.Add('Display: '+s);
|
|
end;
|
|
end;
|
|
|
|
PreviewMemo.Lines.Assign(sl);
|
|
finally
|
|
sl.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SaveToOptions;
|
|
begin
|
|
fSaveToOptions.Assign(fOptions);
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.EnvVarsPageResize(Sender: TObject);
|
|
var
|
|
NewHeight: Integer;
|
|
begin
|
|
NewHeight:=(Notebook.Page[1].Height - 37) div 2;
|
|
with UserOverridesGroupBox do
|
|
SetBounds(Left,Top+Height-NewHeight,Width,NewHeight);
|
|
|
|
SystemVariablesListView.Column[0].Width := SystemVariablesListView.Width div 2;
|
|
SystemVariablesListView.Column[1].Width := SystemVariablesListView.Column[0].Width;
|
|
|
|
UserOverridesListView.Column[0].Width := UserOverridesListView.Width div 2;
|
|
UserOverridesListView.Column[1].Width := UserOverridesListView.Column[0].Width;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.FormClose(Sender: TObject;
|
|
var CloseAction: TCloseAction);
|
|
begin
|
|
MiscellaneousOptions.ShowCompOptMultiLine:=PreviewMultilineCheckBox.Checked;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.FormCreate(Sender: TObject);
|
|
begin
|
|
ModesComboBox.DropDownCount := EnvironmentOptions.DropDownCount;
|
|
SaveInComboBox.DropDownCount := EnvironmentOptions.DropDownCount;
|
|
CmdLineParametersComboBox.DropDownCount := EnvironmentOptions.DropDownCount;
|
|
UseLaunchingApplicationComboBox.DropDownCount := EnvironmentOptions.DropDownCount;
|
|
WorkingDirectoryComboBox.DropDownCount := EnvironmentOptions.DropDownCount;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.HelpButtonClick(Sender: TObject);
|
|
begin
|
|
LazarusHelp.ShowHelpForIDEControl(Self);
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.HostApplicationBrowseBtnClick(Sender: TObject);
|
|
var
|
|
OpenDialog: TIDEOpenDialog;
|
|
begin
|
|
OpenDialog := IDEOpenDialogClass.Create(Self);
|
|
with OpenDialog do
|
|
begin
|
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
|
if HostApplicationEdit.Text <> '' then
|
|
OpenDialog.InitialDir := ExtractFilePath(HostApplicationEdit.Text);
|
|
OpenDialog.Filename := HostApplicationEdit.Text;
|
|
if OpenDialog.Execute then
|
|
begin
|
|
if (FileIsExecutable(OpenDialog.Filename))
|
|
or (IDEMessageDialog(lisRunParamsFileNotExecutable,
|
|
Format(lisRunParamsTheHostApplicationIsNotExecutable,[OpenDialog.Filename]),
|
|
mtWarning, [mbCancel, mbIgnore]) = mrIgnore) then
|
|
begin
|
|
HostApplicationEdit.Text := OpenDialog.Filename;
|
|
end;
|
|
end;
|
|
InputHistories.StoreFileDialogSettings(OpenDialog);
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.ModesComboBoxChange(Sender: TObject);
|
|
begin
|
|
if fLastSelectedMode<>nil then
|
|
SaveToOptionsMode(fLastSelectedMode);
|
|
if SelectedMode<>nil then
|
|
LoadFromOptionsMode(SelectedMode);
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.NotebookChange(Sender: TObject);
|
|
begin
|
|
UpdatePreview;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.LoadFromOptionsMode(const AMode: TRunParamsOptionsMode);
|
|
var
|
|
List: THistoryList;
|
|
S: String;
|
|
begin
|
|
// local
|
|
HostApplicationEdit.Text := AMode.HostApplicationFilename;
|
|
|
|
// WorkingDirectoryComboBox
|
|
List:=HistoryLists.GetList(hlWorkingDirectory,true,rltFile);
|
|
List.AppendEntry(AMode.WorkingDirectory);
|
|
WorkingDirectoryComboBox.Items.Assign(List);
|
|
WorkingDirectoryComboBox.Text := AMode.WorkingDirectory;
|
|
|
|
SaveInComboBox.ItemIndex := Ord(AMode.SaveIn);
|
|
if SaveInComboBox.ItemIndex = -1 then
|
|
SaveInComboBox.ItemIndex := 0;
|
|
|
|
// UseLaunchingApplicationComboBox
|
|
UseLaunchingApplicationCheckBox.Checked := AMode.UseLaunchingApplication;
|
|
List := HistoryLists.GetList(hlLaunchingApplication,true,rltFile);
|
|
List.AppendEntry(AMode.LaunchingApplicationPathPlusParams);
|
|
S := FindTerminalInPath;
|
|
if S <> '' then
|
|
List.AppendEntry(S);
|
|
{$IFNDEF MSWINDOWS}
|
|
S := FindTerminalInPath('gnome-terminal');
|
|
if S <> '' then
|
|
List.AppendEntry(S);
|
|
S := FindTerminalInPath('konsole');
|
|
if S <> '' then
|
|
List.AppendEntry(S);
|
|
{$ENDIF}
|
|
UseLaunchingApplicationComboBox.Items.Assign(List);
|
|
UseLaunchingApplicationComboBox.Text := AMode.LaunchingApplicationPathPlusParams;
|
|
UseLaunchingApplicationComboBox.Enabled := UseLaunchingApplicationCheckBox.Checked;
|
|
|
|
// CmdLineParametersComboBox
|
|
List:=HistoryLists.GetList(hlCmdLineParameters,true,rltCaseSensitive);
|
|
List.AppendEntry(AMode.CmdLineParams);
|
|
CmdLineParametersComboBox.Items.Assign(List);
|
|
CmdLineParametersComboBox.Text := AMode.CmdLineParams;
|
|
|
|
UseDisplayCheckBox.Checked := AMode.UseDisplay;
|
|
DisplayEdit.Text := AMode.Display;
|
|
|
|
// environment
|
|
FillSystemVariablesListView;
|
|
FillUserOverridesListView(AMode);
|
|
|
|
IncludeSystemVariablesCheckBox.Checked := AMode.IncludeSystemVariables;
|
|
|
|
fOptions.ActiveModeName := AMode.Name;
|
|
fLastSelectedMode := AMode;
|
|
|
|
UpdatePreview;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.UseLaunchingApplicationCheckBoxChange(Sender: TObject);
|
|
begin
|
|
UseLaunchingApplicationComboBox.Enabled := (Sender as TCheckBox).Checked;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.UserOverridesListViewSelectItem(Sender: TObject;
|
|
Item: TListItem; Selected: Boolean);
|
|
var
|
|
en: Boolean;
|
|
begin
|
|
en := Assigned(UserOverridesListView.Selected);
|
|
UserOverridesDeleteButton.Enabled := en;
|
|
UserOverridesEditButton.Enabled := en;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.WorkingDirectoryBtnClick(Sender: TObject);
|
|
var
|
|
NewDirectory: String;
|
|
begin
|
|
NewDirectory:=InputHistories.SelectDirectory('Working directory',true,
|
|
ExtractFilePath(WorkingDirectoryComboBox.Text),
|
|
ExtractFilename(WorkingDirectoryComboBox.Text));
|
|
if NewDirectory<>'' then
|
|
WorkingDirectoryComboBox.Text:=NewDirectory;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.UserOverridesAddButtonClick(Sender: TObject);
|
|
var
|
|
Variable, Value: string;
|
|
NewLI, SelLI: TListItem;
|
|
begin
|
|
SelLI := SystemVariablesListView.Selected;
|
|
if SelLI <> nil then
|
|
begin
|
|
Variable := SelLI.Caption;
|
|
Value := SelLI.SubItems[0];
|
|
end
|
|
else
|
|
begin
|
|
Variable := '';
|
|
Value := '';
|
|
end;
|
|
if ShowSysVarUserOverrideDialog(Variable, Value) = mrOk then
|
|
begin
|
|
NewLI := UserOverridesListView.Items.Add;
|
|
NewLI.Caption := Variable;
|
|
NewLI.SubItems.Add(Value);
|
|
UserOverridesListView.Selected := NewLI;
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.UserOverridesEditButtonClick(Sender: TObject);
|
|
var
|
|
Variable, Value: string;
|
|
SelLI: TListItem;
|
|
begin
|
|
SelLI := UserOverridesListView.Selected;
|
|
if SelLI = nil then
|
|
exit;
|
|
Variable := SelLI.Caption;
|
|
Value := SelLI.SubItems[0];
|
|
if ShowSysVarUserOverrideDialog(Variable, Value) = mrOk then
|
|
begin
|
|
SelLI.Caption := Variable;
|
|
SelLI.SubItems[0] := Value;
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.UserOverridesDeleteButtonClick(Sender: TObject);
|
|
var
|
|
SelLI: TListItem;
|
|
OldIndex: integer;
|
|
begin
|
|
SelLI := UserOverridesListView.Selected;
|
|
if SelLI <> nil then
|
|
begin
|
|
OldIndex := SelLI.Index;
|
|
SelLI.Delete;
|
|
if OldIndex = UserOverridesListView.Items.Count then
|
|
Dec(OldIndex);
|
|
if OldIndex >= 0 then
|
|
UserOverridesListView.Selected := UserOverridesListView.Items[OldIndex];
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SaveToOptionsMode(const AMode: TRunParamsOptionsMode);
|
|
|
|
procedure SaveComboHistory(AComboBox: TComboBox; const History: string;
|
|
ListType: TRecentListType);
|
|
begin
|
|
AComboBox.AddHistoryItem(AComboBox.Text,20,true,false);
|
|
HistoryLists.GetList(History,true,ListType).Assign(AComboBox.Items);
|
|
end;
|
|
|
|
begin
|
|
if (SaveInComboBox.ItemIndex>=Ord(Low(TRunParamsOptionsModeSave)))
|
|
and(SaveInComboBox.ItemIndex<=Ord(High(TRunParamsOptionsModeSave))) then
|
|
AMode.SaveIn := TRunParamsOptionsModeSave(SaveInComboBox.ItemIndex)
|
|
else
|
|
AMode.SaveIn := Low(TRunParamsOptionsModeSave);
|
|
|
|
// local
|
|
AMode.HostApplicationFilename := Trim(HostApplicationEdit.Text);
|
|
AMode.CmdLineParams := Trim(CmdLineParametersComboBox.Text);
|
|
AMode.UseLaunchingApplication := UseLaunchingApplicationCheckBox.Checked;
|
|
AMode.LaunchingApplicationPathPlusParams :=
|
|
Trim(UseLaunchingApplicationComboBox.Text);
|
|
AMode.WorkingDirectory := Trim(WorkingDirectoryComboBox.Text);
|
|
AMode.UseDisplay := UseDisplayCheckBox.Checked;
|
|
AMode.Display := Trim(DisplayEdit.Text);
|
|
|
|
// history list: WorkingDirectoryComboBox
|
|
SaveComboHistory(WorkingDirectoryComboBox,hlWorkingDirectory,rltFile);
|
|
|
|
// history list: UseLaunchingApplicationComboBox
|
|
SaveComboHistory(UseLaunchingApplicationComboBox,hlLaunchingApplication,rltFile);
|
|
|
|
// history list: CmdLineParametersComboBox
|
|
SaveComboHistory(CmdLineParametersComboBox,hlCmdLineParameters,rltCaseSensitive);
|
|
|
|
// environment
|
|
SaveUserOverrides(AMode);
|
|
|
|
AMode.IncludeSystemVariables := IncludeSystemVariablesCheckBox.Checked;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SaveUserOverrides(const AMode: TRunParamsOptionsMode
|
|
);
|
|
var
|
|
i: integer;
|
|
begin
|
|
AMode.UserOverrides.Clear;
|
|
for i := 0 to UserOverridesListView.Items.Count - 1 do
|
|
begin
|
|
AMode.UserOverrides.Values[UserOverridesListView.Items[i].Caption] :=
|
|
UserOverridesListView.Items[i].SubItems[0];
|
|
end;
|
|
end;
|
|
|
|
function TRunParamsOptsDlg.SelectedMode: TRunParamsOptionsMode;
|
|
begin
|
|
if ModesComboBox.ItemIndex>=0 then
|
|
Result := ModesComboBox.Items.Objects[ModesComboBox.ItemIndex] as TRunParamsOptionsMode
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SelectMode(const AName: string);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to ModesComboBox.Items.Count-1 do
|
|
if ModesComboBox.Items[I] = AName then
|
|
begin
|
|
ModesComboBox.ItemIndex := I;
|
|
Exit;
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SetComboBoxText(AComboBox: TComboBox; AText: ansistring);
|
|
var
|
|
a: integer;
|
|
begin
|
|
a := AComboBox.Items.IndexOf(AText);
|
|
if a >= 0 then
|
|
AComboBox.ItemIndex := a
|
|
else
|
|
begin
|
|
AComboBox.Items.Add(AText);
|
|
AComboBox.ItemIndex := AComboBox.Items.IndexOf(AText);
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.SetOptions(NewOptions: TRunParamsOptions);
|
|
begin
|
|
fOptions.Assign(NewOptions);
|
|
fSaveToOptions := NewOptions;
|
|
|
|
if fOptions.Count=0 then
|
|
fOptions.Add('default');
|
|
|
|
ReloadModesComboBox;
|
|
SelectMode(NewOptions.ActiveModeName);
|
|
if (ModesComboBox.ItemIndex=-1) then
|
|
ModesComboBox.ItemIndex := 0;
|
|
|
|
ModesComboBoxChange(ModesComboBox);
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.FillListView(ListView: TListView; sl: TStringList);
|
|
var
|
|
i: integer;
|
|
Variable, Value: string;
|
|
begin
|
|
with ListView.Items do
|
|
begin
|
|
//BeginUpdate;
|
|
for i := 0 to sl.Count - 1 do
|
|
begin
|
|
Variable := sl.Names[i];
|
|
Value := sl.Values[Variable];
|
|
if Count <= i then
|
|
begin
|
|
// add line to listview
|
|
Add;
|
|
Item[i].SubItems.Add('');
|
|
end;
|
|
Item[i].Caption := Variable;
|
|
Item[i].SubItems[0] := Value;
|
|
end;
|
|
while Count > sl.Count do
|
|
Delete(Count - 1);
|
|
//EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.FillSystemVariablesListView;
|
|
var
|
|
EnvList: TStringList;
|
|
begin
|
|
EnvList := EnvironmentAsStringList;
|
|
FillListView(SystemVariablesListView, EnvList);
|
|
EnvList.Free;
|
|
end;
|
|
|
|
procedure TRunParamsOptsDlg.FillUserOverridesListView(
|
|
const AMode: TRunParamsOptionsMode);
|
|
begin
|
|
FillListView(UserOverridesListView, AMode.UserOverrides);
|
|
UserOverridesListView.OnSelectItem(nil, nil, false); //update buttons
|
|
end;
|
|
|
|
end.
|