mirror of https://gitlab.com/basile.b/dexed.git
151 lines
3.7 KiB
Plaintext
151 lines
3.7 KiB
Plaintext
unit ce_customtools;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, process, ce_common;
|
|
|
|
type
|
|
|
|
TCEToolItem = class(TCollectionItem)
|
|
private
|
|
fExecutable: string;
|
|
fWorkingDir: string;
|
|
fShowWin: TShowWindowOptions;
|
|
fOpts: TProcessOptions;
|
|
fParameters: TStringList;
|
|
fName: string;
|
|
procedure setParameters(const aValue: TStringList);
|
|
published
|
|
property name: string read fName write fName;
|
|
property options: TProcessOptions read fOpts write fOpts;
|
|
property executable: string read fExecutable write fExecutable;
|
|
property workingDirectory: string read fWorkingDir write fWorkingDir;
|
|
property parameters: TStringList read fParameters write setParameters;
|
|
property showWindows: TShowWindowOptions read fShowWin write fShowWin;
|
|
public
|
|
constructor create(ACollection: TCollection); override;
|
|
destructor destroy; override;
|
|
//
|
|
procedure execute;
|
|
end;
|
|
|
|
TCETools = class(TComponent)
|
|
private
|
|
fTools: TCollection;
|
|
function getTool(index: Integer): TCEToolItem;
|
|
procedure setTools(const aValue: TCollection);
|
|
procedure readerPropNoFound(Reader: TReader; Instance: TPersistent;
|
|
var PropName: string; IsPath: boolean; var Handled, Skip: Boolean);
|
|
procedure readerError(Reader: TReader; const Message: string;
|
|
var Handled: Boolean);
|
|
published
|
|
property tools: TCollection read fTools write setTools;
|
|
public
|
|
constructor create(aOwner: TComponent); override;
|
|
destructor destroy; override;
|
|
procedure saveToFile(const aFilename: string);
|
|
procedure loadFromFile(const aFilename: string);
|
|
//
|
|
function addTool: TCEToolItem;
|
|
property tool[index: integer]: TCEToolItem read getTool;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
ce_main, ce_messages;
|
|
|
|
constructor TCEToolItem.create(ACollection: TCollection);
|
|
begin
|
|
inherited;
|
|
fName := format('<tool %d>', [ID]);
|
|
fParameters := TStringList.create;
|
|
end;
|
|
|
|
destructor TCEToolItem.destroy;
|
|
begin
|
|
fParameters.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TCEToolItem.setParameters(const aValue: TStringList);
|
|
begin
|
|
fParameters.Assign(aValue);
|
|
end;
|
|
|
|
procedure TCEToolItem.execute;
|
|
var
|
|
i: Integer;
|
|
proc: TProcess;
|
|
begin
|
|
proc := TProcess.Create(nil);
|
|
try
|
|
proc.Options := fOpts;
|
|
proc.Executable := CEMainForm.expandSymbolicString(fExecutable);
|
|
proc.ShowWindow := fShowWin;
|
|
proc.CurrentDirectory := CEMainForm.expandSymbolicString(fWorkingDir);
|
|
proc.Parameters.Clear;
|
|
for i:= 0 to fParameters.Count-1 do
|
|
proc.Parameters.Add(CEMainForm.expandSymbolicString(fParameters.Strings[i]));
|
|
proc.Options := proc.Options - [poUsePipes, poWaitOnExit];
|
|
proc.Execute;
|
|
finally
|
|
proc.Free;
|
|
end;
|
|
end;
|
|
|
|
constructor TCETools.create(aOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
fTools := TCollection.Create(TCEToolItem);
|
|
end;
|
|
|
|
destructor TCETools.destroy;
|
|
begin
|
|
fTools.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TCETools.setTools(const aValue: TCollection);
|
|
begin
|
|
fTools.Assign(aValue);
|
|
end;
|
|
|
|
function TCETools.getTool(index: Integer): TCEToolItem;
|
|
begin
|
|
result := TCEToolItem(fTools.Items[index]);
|
|
end;
|
|
|
|
function TCETools.addTool: TCEToolItem;
|
|
begin
|
|
result := TCEToolItem(fTools.Add);
|
|
end;
|
|
|
|
procedure TCETools.readerPropNoFound(Reader: TReader; Instance: TPersistent;
|
|
var PropName: string; IsPath: boolean; var Handled, Skip: Boolean);
|
|
begin
|
|
Skip := true;
|
|
Handled := false;
|
|
end;
|
|
|
|
procedure TCETools.readerError(Reader: TReader; const Message: string;
|
|
var Handled: Boolean);
|
|
begin
|
|
Handled := true;
|
|
end;
|
|
|
|
procedure TCETools.loadFromFile(const aFilename: string);
|
|
begin
|
|
loadCompFromTxtFile(self, aFilename, @readerPropNoFound, @readerError);
|
|
end;
|
|
|
|
procedure TCETools.saveToFile(const aFilename: string);
|
|
begin
|
|
saveCompToTxtFile(self, aFilename);
|
|
end;
|
|
|
|
end.
|