IDE: optional abort for run tool

git-svn-id: trunk@28705 -
This commit is contained in:
mattias 2010-12-13 19:29:39 +00:00
parent 2d8d01da6c
commit 25b1fc7114
6 changed files with 47 additions and 42 deletions

View File

@ -283,7 +283,7 @@ begin
// append target CPU
if Options.TargetCPU<>'' then
Tool.CmdLineParams:=Tool.CmdLineParams+' CPU_TARGET='+Options.FPCTargetCPU;
Result:=ExternalTools.Run(Tool,Macros);
Result:=ExternalTools.Run(Tool,Macros,false);
if Result<>mrOk then exit;
end;
@ -351,7 +351,7 @@ begin
if Options.TargetCPU<>'' then
Tool.CmdLineParams:=Tool.CmdLineParams+' CPU_TARGET='+Options.FPCTargetCPU;
// run
Result:=ExternalTools.Run(Tool,Macros);
Result:=ExternalTools.Run(Tool,Macros,false);
if Result<>mrOk then exit;
end;
Result:=mrOk;

View File

@ -1607,7 +1607,7 @@ begin
if SourceEditorManagerIntf<>nil then
SourceEditorManagerIntf.ClearErrorLines;
Result:=EnvironmentOptions.ExternalTools.Run(ExtTool,GlobalMacroList,
nil,CompOptions);
nil,CompOptions,false);
if LazarusIDE<>nil then
LazarusIDE.DoCheckFilesOnDisk;
end;

View File

@ -99,7 +99,7 @@ type
function DoTestAll: TModalResult;
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
function RunTool(ExtTool: TExternalToolOptions): TModalResult;
function RunTool(ExtTool: TExternalToolOptions; ShowAbort: Boolean): TModalResult;
procedure Add(const Msg, CurDir: String; ProgressLine: boolean;
OriginalIndex: integer);
procedure AddMsg(const Msg, CurDir: String; OriginalIndex: integer);
@ -402,7 +402,7 @@ begin
CompileTool.Filename:=CompilerFilename;
CompileTool.CmdLineParams:=CmdLineParams;
Result:=RunTool(CompileTool);
Result:=RunTool(CompileTool,false);
FreeThenNil(CompileTool);
finally
DeleteFileUTF8(BogusFilename);
@ -1128,11 +1128,11 @@ begin
inherited Destroy;
end;
function TCheckCompilerOptsDlg.RunTool(ExtTool: TExternalToolOptions
): TModalResult;
function TCheckCompilerOptsDlg.RunTool(ExtTool: TExternalToolOptions;
ShowAbort: Boolean): TModalResult;
begin
TestMemo.Lines.Text:=ExtTool.Filename+' '+ExtTool.CmdLineParams;
Result:=EnvironmentOptions.ExternalTools.Run(ExtTool,MacroList);
Result:=EnvironmentOptions.ExternalTools.Run(ExtTool,MacroList,ShowAbort);
end;
procedure TCheckCompilerOptsDlg.Add(const Msg, CurDir: String;

View File

@ -42,7 +42,7 @@ uses
Classes, SysUtils, Process, LCLType, LCLProc, Controls, Forms,
Buttons, StdCtrls, ComCtrls, Dialogs, ExtCtrls,
LazConfigStorage, FileUtil, UTF8Process,
IDEExternToolIntf, IDEImagesIntf,
IDEExternToolIntf, IDEImagesIntf, IDEDialogs,
ExtToolEditDlg, IDECommands, KeyMapping, TransferMacros, IDEProcs,
InfoBuild, CompilerOptions, OutputFilter, LazarusIDEStrConsts, ButtonPanel;
@ -79,12 +79,15 @@ type
function Load(Config: TConfigStorage; const Path: string): TModalResult;
procedure LoadShortCuts(KeyCommandRelationList: TKeyCommandRelationList);
function Run(ExtTool: TIDEExternalToolOptions;
Macros: TTransferMacroList): TModalResult;
Macros: TTransferMacroList;
ShowAbort: boolean): TModalResult;
function Run(ExtTool: TIDEExternalToolOptions;
Macros: TTransferMacroList;
TheOutputFilter: TOutputFilter;
CompilerOptions: TBaseCompilerOptions): TModalResult;
function Run(Index: integer; Macros: TTransferMacroList): TModalResult;
CompilerOptions: TBaseCompilerOptions;
ShowAbort: boolean): TModalResult;
function Run(Index: integer; Macros: TTransferMacroList;
ShowAbort: boolean): TModalResult;
function Save(Config: TConfigStorage): TModalResult;
function Save(Config: TConfigStorage; const Path: string): TModalResult;
procedure SaveShortCuts(KeyCommandRelationList: TKeyCommandRelationList);
@ -281,26 +284,27 @@ begin
end;
function TExternalToolList.Run(ExtTool: TIDEExternalToolOptions;
Macros: TTransferMacroList): TModalResult;
Macros: TTransferMacroList; ShowAbort: boolean): TModalResult;
begin
Result:=Run(ExtTool,Macros,nil,nil);
Result:=Run(ExtTool,Macros,nil,nil,ShowAbort);
end;
function TExternalToolList.Run(Index: integer;
Macros: TTransferMacroList): TModalResult;
Macros: TTransferMacroList; ShowAbort: boolean): TModalResult;
begin
Result:=mrCancel;
if (Index<0) or (Index>=Count) then exit;
Result:=Run(Items[Index],Macros);
Result:=Run(Items[Index],Macros,ShowAbort);
end;
function TExternalToolList.Run(ExtTool: TIDEExternalToolOptions;
Macros: TTransferMacroList; TheOutputFilter: TOutputFilter;
CompilerOptions: TBaseCompilerOptions): TModalResult;
CompilerOptions: TBaseCompilerOptions; ShowAbort: boolean): TModalResult;
var WorkingDir, Filename, Params, CmdLine, Title: string;
TheProcess: TProcessUTF8;
Abort, ErrorOccurred: boolean;
NewFilename: String;
Btns: TMsgDlgButtons;
begin
Result:=mrCancel;
if ExtTool=nil then exit;
@ -312,14 +316,17 @@ begin
if (not Macros.SubstituteStr(Filename)) then exit;
if (not Macros.SubstituteStr(WorkingDir)) then exit;
if (not Macros.SubstituteStr(Params)) then exit;
if ShowAbort then
Btns:=[mbIgnore,mbAbort]
else
Btns:=[mbCancel];
if not FilenameIsAbsolute(Filename) then begin
NewFilename:=FindProgram(Filename,GetCurrentDirUTF8,false);
if NewFilename='' then begin
Result:=MessageDlg(lisExtToolFailedToRunTool,
Format(lisExtToolUnableToRunTheTool, ['"', Title, '"', #13,
'Program '+Filename+' not found']
),
mtError,[mbIgnore,mbAbort],0);
'Program '+Filename+' not found']),
mtError,Btns,0);
if Result=mrIgnore then Result:=mrCancel;
CompileProgress.Ready(lisExtToolUnableToRunTheTool, ['"', Title, '"', #13,
@ -415,16 +422,12 @@ begin
on e: Exception do begin
DebugLn('TExternalToolList.Run ',lisExtToolFailedToRunTool, ' ', E.Message);
DumpExceptionBackTrace;
DebugLn(['TExternalToolList.Run AAA1']);
Result:=MessageDlg(lisExtToolFailedToRunTool,
Result:=IDEMessageDialog(lisExtToolFailedToRunTool,
Format(lisExtToolUnableToRunTheTool, ['"', Title, '"', #13, e.Message]
),
mtError,[mbIgnore,mbAbort],0);
DebugLn(['TExternalToolList.Run AAA2']);
mtError,Btns,'');
if Result=mrIgnore then Result:=mrCancel;
DebugLn(['TExternalToolList.Run AAA3']);
CompileProgress.Ready(lisExtToolUnableToRunTheTool, ['"', Title, '"', #13, e.Message]);
DebugLn(['TExternalToolList.Run AAA4']);
end;
end;
end;

View File

@ -23,6 +23,7 @@
Abstract:
Editor dialog to edit nodes of Help for IDE windows (controls).
}
{%RunCommand bb$MakeExe($(EdFile))}
unit IDEContextHelpEdit;
{$mode objfpc}{$H+}

View File

@ -871,11 +871,11 @@ type
// external tools
function PrepareForCompile: TModalResult; override;
function OnRunExternalTool(Tool: TIDEExternalToolOptions): TModalResult;
function DoRunExternalTool(Index: integer): TModalResult;
function DoRunExternalTool(Index: integer; ShowAbort: Boolean): TModalResult;
function DoSaveBuildIDEConfigs(Flags: TBuildLazarusFlags): TModalResult; override;
function DoBuildLazarus(Flags: TBuildLazarusFlags): TModalResult; override;
function DoBuildAdvancedLazarus(ProfileNames: TStringList): TModalResult;
function DoBuildFile: TModalResult;
function DoBuildFile(ShowAbort: Boolean): TModalResult;
function DoRunFile: TModalResult;
function DoConfigBuildFile: TModalResult;
function GetIDEDirectives(AnUnitInfo: TUnitInfo;
@ -3066,7 +3066,7 @@ begin
GetCurrentUnit(ASrcEdit,AnUnitInfo);
if (AnUnitInfo<>nil)
and AnUnitInfo.BuildFileIfActive then
DoBuildFile
DoBuildFile(false)
else
DoBuildProject(crCompile,[]);
end;
@ -3087,7 +3087,7 @@ begin
end;
ecBuildFile:
DoBuildFile;
DoBuildFile(false);
ecRunFile:
DoRunFile;
@ -3173,7 +3173,7 @@ begin
PkgBoss.ShowConfigureCustomComponents;
ecExtToolFirst..ecExtToolLast:
DoRunExternalTool(Command-ecExtToolFirst);
DoRunExternalTool(Command-ecExtToolFirst,false);
ecSyntaxCheck:
DoCheckSyntax;
@ -4086,7 +4086,7 @@ Begin
GetCurrentUnit(ASrcEdit,AnUnitInfo);
if (AnUnitInfo<>nil)
and AnUnitInfo.BuildFileIfActive then
DoBuildFile
DoBuildFile(false)
else
DoBuildProject(crCompile,[]);
end;
@ -4165,7 +4165,7 @@ end;
procedure TMainIDE.mnuBuildFileClicked(Sender: TObject);
begin
DoBuildFile;
DoBuildFile(false);
end;
procedure TMainIDE.mnuRunFileClicked(Sender: TObject);
@ -4417,7 +4417,7 @@ begin
if not (Sender is TIDEMenuItem) then exit;
Index:=itmCustomTools.IndexOf(TIDEMenuItem(Sender))-1;
if (Index<0) or (Index>=EnvironmentOptions.ExternalTools.Count) then exit;
DoRunExternalTool(Index);
DoRunExternalTool(Index,false);
end;
procedure TMainIDE.mnuEnvGeneralOptionsClicked(Sender: TObject);
@ -11476,10 +11476,11 @@ end;
//-----------------------------------------------------------------------------
function TMainIDE.DoRunExternalTool(Index: integer): TModalResult;
function TMainIDE.DoRunExternalTool(Index: integer; ShowAbort: Boolean
): TModalResult;
begin
SourceEditorManager.ClearErrorLines;
Result:=EnvironmentOptions.ExternalTools.Run(Index,GlobalMacroList);
Result:=EnvironmentOptions.ExternalTools.Run(Index,GlobalMacroList,ShowAbort);
DoCheckFilesOnDisk;
end;
@ -11718,7 +11719,7 @@ begin
end;
end;
function TMainIDE.DoBuildFile: TModalResult;
function TMainIDE.DoBuildFile(ShowAbort: Boolean): TModalResult;
var
ActiveSrcEdit: TSourceEditor;
ActiveUnitInfo: TUnitInfo;
@ -11786,7 +11787,7 @@ begin
ExtTool.CmdLineParams:=Params;
// run
Result:=EnvironmentOptions.ExternalTools.Run(ExtTool,GlobalMacroList);
Result:=EnvironmentOptions.ExternalTools.Run(ExtTool,GlobalMacroList,true);
finally
// clean up
ExtTool.Free;
@ -11833,7 +11834,7 @@ begin
IDEDirectiveNames[idedRunFlags],''));
AlwaysBuildBeforeRun:=idedrfBuildBeforeRun in RunFlags;
if AlwaysBuildBeforeRun then begin
Result:=DoBuildFile;
Result:=DoBuildFile(true);
if Result<>mrOk then exit;
end;
RunWorkingDir:=GetIDEStringDirective(DirectiveList,
@ -11873,7 +11874,7 @@ begin
ExtTool.CmdLineParams:=Params;
// run
Result:=EnvironmentOptions.ExternalTools.Run(ExtTool,GlobalMacroList);
Result:=EnvironmentOptions.ExternalTools.Run(ExtTool,GlobalMacroList,false);
finally
// clean up
ExtTool.Free;
@ -12205,7 +12206,7 @@ end;
function TMainIDE.OnRunExternalTool(Tool: TIDEExternalToolOptions): TModalResult;
begin
SourceEditorManager.ClearErrorLines;
Result:=EnvironmentOptions.ExternalTools.Run(Tool,GlobalMacroList);
Result:=EnvironmentOptions.ExternalTools.Run(Tool,GlobalMacroList,false);
DoCheckFilesOnDisk;
end;
@ -12624,7 +12625,7 @@ begin
Tool.Title:=lisCommandAfterPublishingModule;
Tool.WorkingDirectory:=DestDir;
Tool.CmdLineParams:=CmdAfterParams;
Result:=EnvironmentOptions.ExternalTools.Run(Tool,GlobalMacroList);
Result:=EnvironmentOptions.ExternalTools.Run(Tool,GlobalMacroList,false);
if Result<>mrOk then exit;
end else begin
ShowErrorForCommandAfter;