mirror of https://gitlab.com/basile.b/dexed.git
added "tool-chaining" feature to custom tools
This commit is contained in:
parent
75a9d12a57
commit
ebb34743b8
|
|
@ -20,10 +20,15 @@ type
|
||||||
fParameters: TStringList;
|
fParameters: TStringList;
|
||||||
fToolAlias: string;
|
fToolAlias: string;
|
||||||
fQueryParams: boolean;
|
fQueryParams: boolean;
|
||||||
|
fChainBefore: TStringList;
|
||||||
|
fChainAfter: TStringList;
|
||||||
//fShortcut: string;
|
//fShortcut: string;
|
||||||
fLogMessager: TCELogMessageSubject;
|
fLogMessager: TCELogMessageSubject;
|
||||||
procedure setParameters(const aValue: TStringList);
|
procedure setParameters(aValue: TStringList);
|
||||||
|
procedure setChainBefore(aValue: TStringList);
|
||||||
|
procedure setChainAfter(aValue: TStringList);
|
||||||
procedure processOutput(sender: TObject);
|
procedure processOutput(sender: TObject);
|
||||||
|
procedure execute;
|
||||||
published
|
published
|
||||||
property toolAlias: string read fToolAlias write fToolAlias;
|
property toolAlias: string read fToolAlias write fToolAlias;
|
||||||
property options: TProcessOptions read fOpts write fOpts;
|
property options: TProcessOptions read fOpts write fOpts;
|
||||||
|
|
@ -32,12 +37,12 @@ type
|
||||||
property parameters: TStringList read fParameters write setParameters;
|
property parameters: TStringList read fParameters write setParameters;
|
||||||
property showWindows: TShowWindowOptions read fShowWin write fShowWin;
|
property showWindows: TShowWindowOptions read fShowWin write fShowWin;
|
||||||
property queryParameters: boolean read fQueryParams write fQueryParams;
|
property queryParameters: boolean read fQueryParams write fQueryParams;
|
||||||
|
property chainBefore: TStringList read fChainBefore write setchainBefore;
|
||||||
|
property chainAfter: TStringList read fChainAfter write setChainAfter;
|
||||||
//property shortcut: string read fShortcut write fShortcut;
|
//property shortcut: string read fShortcut write fShortcut;
|
||||||
public
|
public
|
||||||
constructor create(ACollection: TCollection); override;
|
constructor create(ACollection: TCollection); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
//
|
|
||||||
procedure execute;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TCETools = class(TWritableComponent, ICEMainMenuProvider)
|
TCETools = class(TWritableComponent, ICEMainMenuProvider)
|
||||||
|
|
@ -56,6 +61,8 @@ type
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
//
|
//
|
||||||
function addTool: TCEToolItem;
|
function addTool: TCEToolItem;
|
||||||
|
procedure executeTool(aTool: TCEToolItem); overload;
|
||||||
|
procedure executeTool(aToolIndex: Integer); overload;
|
||||||
property tool[index: integer]: TCEToolItem read getTool;
|
property tool[index: integer]: TCEToolItem read getTool;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -75,22 +82,36 @@ begin
|
||||||
inherited;
|
inherited;
|
||||||
fToolAlias := format('<tool %d>', [ID]);
|
fToolAlias := format('<tool %d>', [ID]);
|
||||||
fParameters := TStringList.create;
|
fParameters := TStringList.create;
|
||||||
|
fChainBefore := TStringList.Create;
|
||||||
|
fChainAfter := TStringList.Create;
|
||||||
fLogMessager := TCELogMessageSubject.create;
|
fLogMessager := TCELogMessageSubject.create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCEToolItem.destroy;
|
destructor TCEToolItem.destroy;
|
||||||
begin
|
begin
|
||||||
fParameters.Free;
|
fParameters.Free;
|
||||||
|
fChainAfter.Free;
|
||||||
|
fChainBefore.Free;
|
||||||
fLogMessager.Free;
|
fLogMessager.Free;
|
||||||
killProcess(fProcess);
|
killProcess(fProcess);
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEToolItem.setParameters(const aValue: TStringList);
|
procedure TCEToolItem.setParameters(aValue: TStringList);
|
||||||
begin
|
begin
|
||||||
fParameters.Assign(aValue);
|
fParameters.Assign(aValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEToolItem.setChainBefore(aValue: TStringList);
|
||||||
|
begin
|
||||||
|
fChainBefore.Assign(aValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEToolItem.setChainAfter(aValue: TStringList);
|
||||||
|
begin
|
||||||
|
fChainAfter.Assign(aValue);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEToolItem.execute;
|
procedure TCEToolItem.execute;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
|
@ -155,7 +176,8 @@ end;
|
||||||
|
|
||||||
procedure TCETools.executeToolFromMenu(sender: TObject);
|
procedure TCETools.executeToolFromMenu(sender: TObject);
|
||||||
begin
|
begin
|
||||||
TCEToolItem(TMenuItem(sender).tag).execute;
|
//TCEToolItem(TMenuItem(sender).tag).execute;
|
||||||
|
executeTool(TCEToolItem(TMenuItem(sender).tag));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCETools.menuDeclare(item: TMenuItem);
|
procedure TCETools.menuDeclare(item: TMenuItem);
|
||||||
|
|
@ -210,6 +232,36 @@ begin
|
||||||
result := TCEToolItem(fTools.Add);
|
result := TCEToolItem(fTools.Add);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCETools.executeTool(aTool: TCEToolItem);
|
||||||
|
var
|
||||||
|
nme: string;
|
||||||
|
chained: TCollectionItem;
|
||||||
|
begin
|
||||||
|
if aTool = nil then exit;
|
||||||
|
if not exeInSysPath(aTool.executable) then
|
||||||
|
if (aTool.chainAfter.Count = 0) and (aTool.chainBefore.Count = 0) then
|
||||||
|
exit;
|
||||||
|
// TODO-cWiki: toolchain, process is async but poWaitOnExit can be set to force syncro.
|
||||||
|
for nme in aTool.chainBefore do
|
||||||
|
for chained in fTools do
|
||||||
|
if TCEToolItem(chained).toolAlias = nme then
|
||||||
|
TCEToolItem(chained).execute;
|
||||||
|
if exeInSysPath(aTool.executable) then
|
||||||
|
aTool.execute;
|
||||||
|
for nme in aTool.chainAfter do
|
||||||
|
for chained in fTools do
|
||||||
|
if TCEToolItem(chained).toolAlias = nme then
|
||||||
|
TCEToolItem(chained).execute;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCETools.executeTool(aToolIndex: Integer);
|
||||||
|
begin
|
||||||
|
if aToolIndex < 0 then exit;
|
||||||
|
if aToolIndex > fTools.Count-1 then exit;
|
||||||
|
//
|
||||||
|
executeTool(tool[aToolIndex]);
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
RegisterClasses([TCEToolItem, TCETools]);
|
RegisterClasses([TCEToolItem, TCETools]);
|
||||||
CustomTools := TCETools.create(nil);
|
CustomTools := TCETools.create(nil);
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ type
|
||||||
procedure lstToolsSelectionChange(Sender: TObject; User: boolean);
|
procedure lstToolsSelectionChange(Sender: TObject; User: boolean);
|
||||||
procedure propsEdModified(Sender: TObject);
|
procedure propsEdModified(Sender: TObject);
|
||||||
private
|
private
|
||||||
|
procedure executeSelectedTool;
|
||||||
procedure DataToGui;
|
procedure DataToGui;
|
||||||
procedure updateNames;
|
procedure updateNames;
|
||||||
public
|
public
|
||||||
|
|
@ -137,18 +138,21 @@ begin
|
||||||
updateNames;
|
updateNames;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEToolsEditorWidget.btnRunClick(Sender: TObject);
|
procedure TCEToolsEditorWidget.executeSelectedTool;
|
||||||
begin
|
begin
|
||||||
if lstTools.ItemIndex = -1 then
|
if lstTools.ItemIndex = -1 then
|
||||||
exit;
|
exit;
|
||||||
CustomTools.tool[lstTools.ItemIndex].execute;
|
CustomTools.executeTool(lstTools.ItemIndex);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEToolsEditorWidget.btnRunClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
executeSelectedTool;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEToolsEditorWidget.lstToolsDblClick(Sender: TObject);
|
procedure TCEToolsEditorWidget.lstToolsDblClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if lstTools.ItemIndex = -1 then
|
executeSelectedTool;
|
||||||
exit;
|
|
||||||
CustomTools.tool[lstTools.ItemIndex].execute;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue