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

View File

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

View File

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

View File

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

View File

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

View File

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