mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 07:43:13 +01:00 
			
		
		
		
	IDE: clean up old external tools
git-svn-id: trunk@45942 -
This commit is contained in:
		
							parent
							
								
									2a1a95199f
								
							
						
					
					
						commit
						abaf3fb59c
					
				
							
								
								
									
										3
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@ -5468,8 +5468,6 @@ ide/modematrixopts.pas svneol=native#text/plain
 | 
			
		||||
ide/mouseactiondialog.lfm svneol=native#text/plain
 | 
			
		||||
ide/mouseactiondialog.pas svneol=native#text/pascal
 | 
			
		||||
ide/msgquickfixes.pas svneol=native#text/plain
 | 
			
		||||
ide/msgview.lfm svneol=native#text/plain
 | 
			
		||||
ide/msgview.pp svneol=native#text/pascal
 | 
			
		||||
ide/msgvieweditor.lfm svneol=native#text/plain
 | 
			
		||||
ide/msgvieweditor.pas svneol=native#text/pascal
 | 
			
		||||
ide/multireplacedlg.lfm svneol=native#text/plain
 | 
			
		||||
@ -5479,7 +5477,6 @@ ide/newdialog.pas svneol=native#text/pascal
 | 
			
		||||
ide/newprojectdlg.lfm svneol=native#text/plain
 | 
			
		||||
ide/newprojectdlg.pp svneol=native#text/pascal
 | 
			
		||||
ide/objectlists.pas svneol=native#text/pascal
 | 
			
		||||
ide/outputfilter.pas svneol=native#text/pascal
 | 
			
		||||
ide/patheditordlg.lfm svneol=native#text/pascal
 | 
			
		||||
ide/patheditordlg.pas svneol=native#text/pascal
 | 
			
		||||
ide/procedurelist.lfm svneol=native#text/plain
 | 
			
		||||
 | 
			
		||||
@ -50,10 +50,7 @@ uses
 | 
			
		||||
  CodeToolManager,
 | 
			
		||||
  // IDEIntf
 | 
			
		||||
  LazIDEIntf, IDEMsgIntf, IDEHelpIntf, IDEImagesIntf, IDEWindowIntf, IDEDialogs,
 | 
			
		||||
  PackageIntf,
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  IDEExternToolIntf,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  PackageIntf, IDEExternToolIntf,
 | 
			
		||||
  // IDE
 | 
			
		||||
  LazarusIDEStrConsts, TransferMacros, LazConf, IDEProcs, DialogProcs,
 | 
			
		||||
  MainBar, ExtToolEditDlg, EnvironmentOpts,
 | 
			
		||||
@ -190,9 +187,6 @@ type
 | 
			
		||||
    // This is used by MakeLazarus and SaveIDEMakeOptions
 | 
			
		||||
    function CreateIDEMakeOptions(Flags: TBuildLazarusFlags): TModalResult;
 | 
			
		||||
  public
 | 
			
		||||
    {$IFDEF EnableOldExtTools}
 | 
			
		||||
    ExternalTools: TBaseExternalToolList;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    constructor Create;
 | 
			
		||||
    function ShowConfigureBuildLazarusDlg(AProfiles: TBuildLazarusProfiles): TModalResult;
 | 
			
		||||
    function MakeLazarus(Profile: TBuildLazarusProfile; Flags: TBuildLazarusFlags): TModalResult;
 | 
			
		||||
@ -373,11 +367,7 @@ end;
 | 
			
		||||
function TLazarusBuilder.MakeLazarus(Profile: TBuildLazarusProfile;
 | 
			
		||||
  Flags: TBuildLazarusFlags): TModalResult;
 | 
			
		||||
var
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  Tool: TAbstractExternalTool;
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  Tool: TExternalToolOptions;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  Executable, CmdLineParams, Cmd: String;
 | 
			
		||||
  EnvironmentOverrides: TStringList;
 | 
			
		||||
 | 
			
		||||
@ -392,7 +382,6 @@ var
 | 
			
		||||
      Params:=Cmd+' '+Params
 | 
			
		||||
    else
 | 
			
		||||
      Params:=Cmd;
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    Tool:=ExternalToolList.Add(CurTitle);
 | 
			
		||||
    Tool.Reference(Self,ClassName);
 | 
			
		||||
    try
 | 
			
		||||
@ -411,18 +400,6 @@ var
 | 
			
		||||
    finally
 | 
			
		||||
      Tool.Release(Self);
 | 
			
		||||
    end;
 | 
			
		||||
    {$ELSE}
 | 
			
		||||
    if Tool=nil then
 | 
			
		||||
      Tool:=TExternalToolOptions.Create;
 | 
			
		||||
    Tool.Title:=CurTitle;
 | 
			
		||||
    Tool.Filename:=Executable;
 | 
			
		||||
    Tool.WorkingDirectory:=fWorkingDir;
 | 
			
		||||
    Tool.ScanOutputForFPCMessages:=true;
 | 
			
		||||
    Tool.ScanOutputForMakeMessages:=true;
 | 
			
		||||
    Tool.CmdLineParams:=Params;
 | 
			
		||||
    Tool.EnvironmentOverrides.Assign(EnvironmentOverrides);
 | 
			
		||||
    Result:=ExternalTools.Run(Tool,fMacros,false);
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
var
 | 
			
		||||
@ -523,9 +500,6 @@ begin
 | 
			
		||||
    Result:=mrOk;
 | 
			
		||||
  finally
 | 
			
		||||
    EnvironmentOverrides.Free;
 | 
			
		||||
    {$IFDEF EnableOldExtTools}
 | 
			
		||||
    Tool.Free;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    if LazarusIDE<>nil then
 | 
			
		||||
      LazarusIDE.MainBarSubTitle:='';
 | 
			
		||||
  end;
 | 
			
		||||
@ -734,22 +708,14 @@ begin
 | 
			
		||||
    if not (Result in [mrOk,mrIgnore]) then begin
 | 
			
		||||
      debugln(['CreateAppleBundle CreateApplicationBundle failed']);
 | 
			
		||||
      if IDEMessagesWindow<>nil then
 | 
			
		||||
        {$IFNDEF EnableOldExtTools}
 | 
			
		||||
        IDEMessagesWindow.AddCustomMessage(mluError,'to create application bundle '+BundleDir);
 | 
			
		||||
        {$ELSE}
 | 
			
		||||
        IDEMessagesWindow.AddMsg('Error: failed to create application bundle '+BundleDir,fTargetDir,-1);
 | 
			
		||||
        {$ENDIF}
 | 
			
		||||
      exit;
 | 
			
		||||
    end;
 | 
			
		||||
    Result:=CreateAppBundleSymbolicLink(fTargetFilename);
 | 
			
		||||
    if not (Result in [mrOk,mrIgnore]) then begin
 | 
			
		||||
      debugln(['CreateAppleBundle CreateAppBundleSymbolicLink failed']);
 | 
			
		||||
      if IDEMessagesWindow<>nil then
 | 
			
		||||
        {$IFNDEF EnableOldExtTools}
 | 
			
		||||
        IDEMessagesWindow.AddCustomMessage(mluError,'failed to create application bundle symlink to '+fTargetFilename);
 | 
			
		||||
        {$ELSE}
 | 
			
		||||
        IDEMessagesWindow.AddMsg('Error: failed to create application bundle symlink to '+fTargetFilename,fTargetDir,-1);
 | 
			
		||||
        {$ENDIF}
 | 
			
		||||
      exit;
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
@ -42,20 +42,13 @@ uses
 | 
			
		||||
  ExprEval, BasicCodeTools, CodeToolManager, DefineTemplates, CodeCache,
 | 
			
		||||
  FileProcs, CodeToolsCfgScript, CodeToolsStructs,
 | 
			
		||||
  // IDEIntf
 | 
			
		||||
  {$IFDEF EnableOldExtTools}
 | 
			
		||||
  SrcEditorIntf,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  ProjectIntf, MacroIntf, IDEDialogs, IDEExternToolIntf,
 | 
			
		||||
  CompOptsIntf, LazIDEIntf, MacroDefIntf, IDEMsgIntf,
 | 
			
		||||
  // IDE
 | 
			
		||||
  LazarusIDEStrConsts, DialogProcs, IDEProcs, CodeToolsOptions, InputHistory,
 | 
			
		||||
  EditDefineTree, ProjectResources, MiscOptions, LazConf, EnvironmentOpts,
 | 
			
		||||
  TransferMacros, CompilerOptions,
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  ExtTools, etMakeMsgParser, etFPCMsgParser,
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  OutputFilter,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  Compiler, FPCSrcScan, PackageDefs, PackageSystem, Project, ProjectIcon,
 | 
			
		||||
  ModeMatrixOpts, BaseBuildManager, ApplicationBundle;
 | 
			
		||||
  
 | 
			
		||||
@ -148,11 +141,6 @@ type
 | 
			
		||||
    function CTMacroFuncProjectUnitPath(Data: Pointer): boolean;
 | 
			
		||||
    function CTMacroFuncProjectIncPath(Data: Pointer): boolean;
 | 
			
		||||
    function CTMacroFuncProjectSrcPath(Data: Pointer): boolean;
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    {$ELSE}
 | 
			
		||||
    function OnRunCompilerWithOptions(ExtTool: TIDEExternalToolOptions;
 | 
			
		||||
                           CompOptions: TBaseCompilerOptions): TModalResult;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    procedure OnProjectDestroy(Sender: TObject);
 | 
			
		||||
    procedure SetUnitSetCache(const AValue: TFPCUnitSetCache);
 | 
			
		||||
  protected
 | 
			
		||||
@ -177,9 +165,7 @@ type
 | 
			
		||||
    destructor Destroy; override;
 | 
			
		||||
    procedure SetupTransferMacros;
 | 
			
		||||
    procedure TranslateMacros;
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    procedure SetupExternalTools;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    procedure SetupCompilerInterface;
 | 
			
		||||
    procedure SetupInputHistories;
 | 
			
		||||
 | 
			
		||||
@ -243,9 +229,6 @@ type
 | 
			
		||||
var
 | 
			
		||||
  MainBuildBoss: TBuildManager = nil;
 | 
			
		||||
  TheCompiler: TCompiler = nil;
 | 
			
		||||
  {$IFDEF EnableOldExtTools}
 | 
			
		||||
  TheOutputFilter: TOutputFilter = nil;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
 | 
			
		||||
implementation
 | 
			
		||||
 | 
			
		||||
@ -337,9 +320,6 @@ begin
 | 
			
		||||
  FUnitSetChangeStamp:=TFPCUnitSetCache.GetInvalidChangeStamp;
 | 
			
		||||
 | 
			
		||||
  OnBackupFileInteractive:=@BackupFile;
 | 
			
		||||
  {$IFDEF EnableOldExtTools}
 | 
			
		||||
  RunCompilerWithOptions:=@OnRunCompilerWithOptions;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
 | 
			
		||||
  GetBuildMacroValues:=@OnGetBuildMacroValues;
 | 
			
		||||
  OnAppendCustomOption:=@AppendMatrixCustomOption;
 | 
			
		||||
@ -348,11 +328,7 @@ end;
 | 
			
		||||
 | 
			
		||||
destructor TBuildManager.Destroy;
 | 
			
		||||
begin
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  FreeAndNil(ExternalTools);
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  RunCompilerWithOptions:=nil;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
 | 
			
		||||
  GetBuildMacroValues:=nil;
 | 
			
		||||
  OnAppendCustomOption:=nil;
 | 
			
		||||
@ -508,7 +484,6 @@ begin
 | 
			
		||||
  tr('MakeFile',lisTMFunctionChompPathDelimiter);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$IFNDEF EnableOldExtTools}
 | 
			
		||||
procedure TBuildManager.SetupExternalTools;
 | 
			
		||||
begin
 | 
			
		||||
  // setup the external tool queue
 | 
			
		||||
@ -519,16 +494,10 @@ begin
 | 
			
		||||
 | 
			
		||||
  FPCMsgFilePool:=TFPCMsgFilePool.Create(nil);
 | 
			
		||||
end;
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
procedure TBuildManager.SetupCompilerInterface;
 | 
			
		||||
begin
 | 
			
		||||
  TheCompiler := TCompiler.Create;
 | 
			
		||||
  {$IFDEF EnableOldExtTools}
 | 
			
		||||
  with TheCompiler do begin
 | 
			
		||||
    OutputFilter:=TheOutputFilter;
 | 
			
		||||
  end;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TBuildManager.SetupInputHistories;
 | 
			
		||||
@ -1371,15 +1340,9 @@ function TBuildManager.CheckAmbiguousSources(const AFilename: string;
 | 
			
		||||
  begin
 | 
			
		||||
    Result:=mrOk;
 | 
			
		||||
    if Compiling then begin
 | 
			
		||||
      {$IFNDEF EnableOldExtTools}
 | 
			
		||||
      IDEMessagesWindow.AddCustomMessage(mluError,
 | 
			
		||||
        Format('ambiguous file found: "%s". Source file is: "%s"',
 | 
			
		||||
               [AmbiguousFilename, AFilename]));
 | 
			
		||||
      {$ELSE}
 | 
			
		||||
      TheOutputFilter.ReadConstLine(
 | 
			
		||||
        Format(lisWarningAmbiguousFileFoundSourceFileIs,
 | 
			
		||||
        [AmbiguousFilename, AFilename]), true);
 | 
			
		||||
      {$ENDIF}
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
@ -2275,20 +2238,6 @@ begin
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$IFNDEF EnableOldExtTools}
 | 
			
		||||
{$ELSE EnableOldExtTools}
 | 
			
		||||
function TBuildManager.OnRunCompilerWithOptions(
 | 
			
		||||
  ExtTool: TIDEExternalToolOptions; CompOptions: TBaseCompilerOptions): TModalResult;
 | 
			
		||||
begin
 | 
			
		||||
  if SourceEditorManagerIntf<>nil then
 | 
			
		||||
    SourceEditorManagerIntf.ClearErrorLines;
 | 
			
		||||
  Result:=EnvironmentOptions.ExternalTools.Run(ExtTool,GlobalMacroList,false,
 | 
			
		||||
                                               CompOptions);
 | 
			
		||||
  if LazarusIDE<>nil then
 | 
			
		||||
    LazarusIDE.DoCheckFilesOnDisk;
 | 
			
		||||
end;
 | 
			
		||||
{$Endif EnableOldExtTools}
 | 
			
		||||
 | 
			
		||||
procedure TBuildManager.SetUnitSetCache(const AValue: TFPCUnitSetCache);
 | 
			
		||||
begin
 | 
			
		||||
  if FUnitSetCache=AValue then exit;
 | 
			
		||||
 | 
			
		||||
@ -41,9 +41,6 @@ uses
 | 
			
		||||
  Dialogs, LazConfigStorage, Laz2_XMLCfg, LazUTF8,
 | 
			
		||||
  // IDEIntf
 | 
			
		||||
  ProjectIntf, ObjectInspector, IDEWindowIntf, IDEOptionsIntf,
 | 
			
		||||
  {$IFDEF EnableOldExtTools}
 | 
			
		||||
  CompOptsIntf,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  ComponentReg, IDEExternToolIntf, IDEDialogs, MacroDefIntf,
 | 
			
		||||
  DbgIntfDebuggerBase,
 | 
			
		||||
  // IDE
 | 
			
		||||
@ -222,7 +219,6 @@ const
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
  { External Tools - the user menu items in the Tools menu }
 | 
			
		||||
{$IFNDEF EnableOldExtTools}
 | 
			
		||||
type
 | 
			
		||||
  TBaseExternalUserTools = class
 | 
			
		||||
  public
 | 
			
		||||
@ -233,21 +229,6 @@ type
 | 
			
		||||
  TExternalUserToolsClass = class of TBaseExternalUserTools;
 | 
			
		||||
var
 | 
			
		||||
  ExternalUserToolsClass: TExternalUserToolsClass; // set by ExtToolEditDlg to TExternalUserTools
 | 
			
		||||
{$ELSE}
 | 
			
		||||
type
 | 
			
		||||
  TBaseExternalToolList = class(TList)
 | 
			
		||||
  public
 | 
			
		||||
    function Load(Config: TConfigStorage; const Path: string): TModalResult; virtual; abstract;
 | 
			
		||||
    function Save(Config: TConfigStorage; const Path: string): TModalResult; virtual; abstract;
 | 
			
		||||
    function Run(ExtTool: TIDEExternalToolOptions;
 | 
			
		||||
                 Macros: TTransferMacroList;
 | 
			
		||||
                 ShowAbort: boolean;
 | 
			
		||||
                 CompilerOptions: TLazCompilerOptions = nil): TModalResult; virtual; abstract;
 | 
			
		||||
  end;
 | 
			
		||||
  TExternalToolListClass = class of TBaseExternalToolList;
 | 
			
		||||
var
 | 
			
		||||
  ExternalToolListClass: TExternalToolListClass; // set by ExtToolDialog
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
type
 | 
			
		||||
  TEnvOptParseType = (
 | 
			
		||||
@ -362,9 +343,7 @@ type
 | 
			
		||||
    fMsgViewColors: array[TMsgWndColor] of TColor;
 | 
			
		||||
    FShowCompileDialog: Boolean;       // show dialog during compile
 | 
			
		||||
    FAutoCloseCompileDialog: Boolean;  // auto close dialog after succesed compile
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    FMsgViewFilters: TLMsgViewFilters;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
 | 
			
		||||
    // compiler + debugger + lazarus files
 | 
			
		||||
    FParseValues: array[TEnvOptParseType] of TParseString;
 | 
			
		||||
@ -417,12 +396,8 @@ type
 | 
			
		||||
    FBackupInfoOtherFiles: TBackupInfo;
 | 
			
		||||
    
 | 
			
		||||
    // external tools
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    fExternalUserTools: TBaseExternalUserTools; // see ExtToolEditDlg.TExternalUserTools
 | 
			
		||||
    {$ELSE}
 | 
			
		||||
    fExternalTools: TBaseExternalToolList;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    // naming conventions
 | 
			
		||||
    fPascalFileExtension: TPascalExtType;
 | 
			
		||||
    fCharcaseFileAction : TCharCaseFileAction;
 | 
			
		||||
@ -712,12 +687,7 @@ type
 | 
			
		||||
                                               write FBackupInfoOtherFiles;
 | 
			
		||||
       
 | 
			
		||||
    // external tools
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    property ExternalToolMenuItems: TBaseExternalUserTools read fExternalUserTools;
 | 
			
		||||
    {$ELSE}
 | 
			
		||||
    property ExternalTools: TBaseExternalToolList read fExternalTools
 | 
			
		||||
                                                  write fExternalTools;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
 | 
			
		||||
    // naming conventions
 | 
			
		||||
    property PascalFileExtension: TPascalExtType read fPascalFileExtension
 | 
			
		||||
@ -754,9 +724,7 @@ type
 | 
			
		||||
    property MsgViewFilenameStyle: TMsgWndFileNameStyle read FMsgViewFilenameStyle
 | 
			
		||||
                       write FMsgViewFilenameStyle;
 | 
			
		||||
    property MsgViewColors[c: TMsgWndColor]: TColor read GetMsgViewColors write SetMsgViewColors;
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    property MsgViewFilters: TLMsgViewFilters read FMsgViewFilters write FMsgViewFilters;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
 | 
			
		||||
    // glyphs
 | 
			
		||||
    property ShowButtonGlyphs: TApplicationShowGlyphs read FShowButtonGlyphs write FShowButtonGlyphs;
 | 
			
		||||
@ -1007,9 +975,7 @@ begin
 | 
			
		||||
  FMsgViewFilenameStyle:=mwfsShort;
 | 
			
		||||
  for c:=low(TMsgWndColor) to high(TMsgWndColor) do
 | 
			
		||||
    fMsgViewColors[c]:=MsgWndDefaultColors[c];
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  FMsgViewFilters:=TLMsgViewFilters.Create(nil);
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
 | 
			
		||||
  // glyphs
 | 
			
		||||
  FShowButtonGlyphs := sbgSystem;
 | 
			
		||||
@ -1058,12 +1024,8 @@ begin
 | 
			
		||||
  end;
 | 
			
		||||
  
 | 
			
		||||
  // external tools
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  fExternalUserTools:=ExternalUserToolsClass.Create;
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  fExternalTools:=ExternalToolListClass.Create;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  // naming
 | 
			
		||||
  fPascalFileExtension:=petPAS;
 | 
			
		||||
  fCharcaseFileAction:=ccfaAutoRename;
 | 
			
		||||
@ -1084,12 +1046,8 @@ var
 | 
			
		||||
  i: Integer;
 | 
			
		||||
begin
 | 
			
		||||
  FreeAndNil(FBuildMatrixOptions);
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  FreeAndNil(FMsgViewFilters);
 | 
			
		||||
  FreeAndNil(fExternalUserTools);
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  FreeAndNil(fExternalTools);
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  FreeAndNil(FRecentOpenFiles);
 | 
			
		||||
  FreeAndNil(FRecentProjectFiles);
 | 
			
		||||
  FreeAndNil(FRecentPackageFiles);
 | 
			
		||||
@ -1475,9 +1433,7 @@ begin
 | 
			
		||||
      for mwc:=low(TMsgWndColor) to high(TMsgWndColor) do
 | 
			
		||||
        fMsgViewColors[mwc]:=XMLConfig.GetValue(
 | 
			
		||||
          Path+'MsgView/Colors/'+MsgWndColorNames[mwc],MsgWndDefaultColors[mwc]);
 | 
			
		||||
      {$IFNDEF EnableOldExtTools}
 | 
			
		||||
      MsgViewFilters.LoadFromXMLConfig(XMLConfig,'MsgView/Filters/');
 | 
			
		||||
      {$ENDIF}
 | 
			
		||||
 | 
			
		||||
      // glyphs
 | 
			
		||||
      FShowButtonGlyphs := TApplicationShowGlyphs(XMLConfig.GetValue(Path+'ShowButtonGlyphs/Value',
 | 
			
		||||
@ -1512,11 +1468,7 @@ begin
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
      // external tools
 | 
			
		||||
      {$IFNDEF EnableOldExtTools}
 | 
			
		||||
      fExternalUserTools.Load(FConfigStore,Path+'ExternalTools/');
 | 
			
		||||
      {$ELSE}
 | 
			
		||||
      fExternalTools.Load(FConfigStore,Path+'ExternalTools/');
 | 
			
		||||
      {$ENDIF}
 | 
			
		||||
 | 
			
		||||
      // naming
 | 
			
		||||
      LoadPascalFileExt(Path+'');
 | 
			
		||||
@ -1864,9 +1816,7 @@ begin
 | 
			
		||||
      for mwc:=low(TMsgWndColor) to high(TMsgWndColor) do
 | 
			
		||||
        XMLConfig.SetDeleteValue(Path+'MsgView/Colors/'+MsgWndColorNames[mwc],
 | 
			
		||||
        fMsgViewColors[mwc],MsgWndDefaultColors[mwc]);
 | 
			
		||||
      {$IFNDEF EnableOldExtTools}
 | 
			
		||||
      MsgViewFilters.SaveToXMLConfig(XMLConfig,'MsgView/Filters/');
 | 
			
		||||
      {$ENDIF}
 | 
			
		||||
 | 
			
		||||
      // glyphs
 | 
			
		||||
      XMLConfig.SetDeleteValue(Path+'ShowButtonGlyphs/Value',
 | 
			
		||||
@ -1891,11 +1841,7 @@ begin
 | 
			
		||||
      XMLConfig.SetDeleteValue(Path+'Recent/AlreadyPopulated', FAlreadyPopulatedRecentFiles, false);
 | 
			
		||||
 | 
			
		||||
      // external tools
 | 
			
		||||
      {$IFNDEF EnableOldExtTools}
 | 
			
		||||
      fExternalUserTools.Save(FConfigStore,Path+'ExternalTools/');
 | 
			
		||||
      {$ELSE}
 | 
			
		||||
      fExternalTools.Save(FConfigStore,Path+'ExternalTools/');
 | 
			
		||||
      {$ENDIF}
 | 
			
		||||
 | 
			
		||||
      // naming
 | 
			
		||||
      XMLConfig.SetDeleteValue(Path+'Naming/PascalFileExtension',
 | 
			
		||||
 | 
			
		||||
@ -27,8 +27,6 @@ unit etMessageFrame;
 | 
			
		||||
 | 
			
		||||
{$mode objfpc}{$H+}
 | 
			
		||||
 | 
			
		||||
{$IFDEF EnableOldExtTools}{$Error Wrong}{$ENDIF}
 | 
			
		||||
 | 
			
		||||
{$I ide.inc}
 | 
			
		||||
 | 
			
		||||
interface
 | 
			
		||||
 | 
			
		||||
@ -42,73 +42,15 @@ uses
 | 
			
		||||
  Buttons, StdCtrls, ComCtrls, Dialogs, ExtCtrls, ButtonPanel, Menus,
 | 
			
		||||
  FileProcs,
 | 
			
		||||
  IDEExternToolIntf, IDEImagesIntf, IDEDialogs, IDEHelpIntf, IDECommands,
 | 
			
		||||
  {$IFDEF EnableOldExtTools}
 | 
			
		||||
  LazConfigStorage, UTF8Process, CompOptsIntf,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  ProjectIntf,
 | 
			
		||||
  EnvironmentOpts,
 | 
			
		||||
  ExtToolEditDlg, KeyMapping, TransferMacros, IDEProcs, LazFileUtils,
 | 
			
		||||
  CompilerOptions,
 | 
			
		||||
  {$IFDEF EnableOldExtTools}
 | 
			
		||||
  InfoBuild, OutputFilter,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  LazarusIDEStrConsts, IDEOptionDefs, EditorOptions;
 | 
			
		||||
 | 
			
		||||
const
 | 
			
		||||
  MaxExtTools = ecExtToolLast-ecExtToolFirst+1;
 | 
			
		||||
 | 
			
		||||
{$IFNDEF EnableOldExtTools}
 | 
			
		||||
 | 
			
		||||
{$ELSE EnableOldExtTools}
 | 
			
		||||
 | 
			
		||||
type
 | 
			
		||||
  TOnNeedsOutputFilter = procedure(var OutputFilter: TOutputFilter;
 | 
			
		||||
                           var Abort: boolean) of object;
 | 
			
		||||
  TOnFreeOutputFilter = procedure(OutputFilter: TOutputFilter;
 | 
			
		||||
                           ErrorOccurred: boolean) of object;
 | 
			
		||||
 | 
			
		||||
  { TExternalToolList -
 | 
			
		||||
    the storage object for all external tools }
 | 
			
		||||
 | 
			
		||||
  TExternalToolList = class(TBaseExternalToolList)
 | 
			
		||||
  private
 | 
			
		||||
    fOnFreeOutputFilter: TOnFreeOutputFilter;
 | 
			
		||||
    fOnNeedsOutputFilter: TOnNeedsOutputFilter;
 | 
			
		||||
    fRunningTools: TList; // list of TProcess
 | 
			
		||||
    fAllKeys: TKeyCommandRelationList;
 | 
			
		||||
    function GetToolOpts(Index: integer): TExternalToolOptions;
 | 
			
		||||
    procedure SetToolOpts(Index: integer; NewTool: TExternalToolOptions);
 | 
			
		||||
    procedure AddRunningTool(TheProcess: TProcess; ExecuteProcess: boolean);
 | 
			
		||||
  public
 | 
			
		||||
    procedure Add(NewTool: TExternalToolOptions);
 | 
			
		||||
    procedure Assign(Source: TExternalToolList);
 | 
			
		||||
    procedure Clear; override;
 | 
			
		||||
    constructor Create;
 | 
			
		||||
    procedure Delete(Index: integer); 
 | 
			
		||||
    destructor Destroy; override;
 | 
			
		||||
    procedure FreeStoppedProcesses;
 | 
			
		||||
    procedure Insert(Index: integer; NewTool: TExternalToolOptions);
 | 
			
		||||
    function Load(Config: TConfigStorage): TModalResult;
 | 
			
		||||
    function Load(Config: TConfigStorage; const Path: string): TModalResult; override;
 | 
			
		||||
    procedure LoadShortCuts(KeyCommandRelationList: TKeyCommandRelationList);
 | 
			
		||||
    function Run(ExtTool: TIDEExternalToolOptions;
 | 
			
		||||
                 Macros: TTransferMacroList;
 | 
			
		||||
                 ShowAbort: boolean;
 | 
			
		||||
                 CompilerOptions: TLazCompilerOptions = nil): TModalResult; override;
 | 
			
		||||
    function Run(Index: integer; Macros: TTransferMacroList;
 | 
			
		||||
                 ShowAbort: boolean): TModalResult;
 | 
			
		||||
    function Save(Config: TConfigStorage): TModalResult;
 | 
			
		||||
    function Save(Config: TConfigStorage; const Path: string): TModalResult; override;
 | 
			
		||||
    procedure SaveShortCuts(KeyCommandRelationList: TKeyCommandRelationList);
 | 
			
		||||
    
 | 
			
		||||
    property Items[Index: integer]: TExternalToolOptions
 | 
			
		||||
      read GetToolOpts write SetToolOpts; default;
 | 
			
		||||
    property OnFreeOutputFilter: TOnFreeOutputFilter
 | 
			
		||||
      read fOnFreeOutputFilter write fOnFreeOutputFilter;
 | 
			
		||||
    property OnNeedsOutputFilter: TOnNeedsOutputFilter
 | 
			
		||||
      read fOnNeedsOutputFilter write fOnNeedsOutputFilter;
 | 
			
		||||
  end;
 | 
			
		||||
{$Endif EnableOldExtTools}
 | 
			
		||||
type
 | 
			
		||||
  { TExternalToolDialog -
 | 
			
		||||
    the dialog to edit all external tools }
 | 
			
		||||
@ -143,34 +85,29 @@ type
 | 
			
		||||
    procedure MoveDownButtonClick(Sender: TObject);
 | 
			
		||||
    procedure ListboxClick(Sender: TObject);
 | 
			
		||||
  private
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    fExtToolList: TExternalUserTools;
 | 
			
		||||
    {$ELSE}
 | 
			
		||||
    fExtToolList: TExternalToolList;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    fTransferMacros: TTransferMacroList;
 | 
			
		||||
    procedure Load;
 | 
			
		||||
    procedure SetExtToolList(NewExtToolList: {$IFNDEF EnableOldExtTools}TExternalUserTools{$ELSE}TExternalToolList{$ENDIF});
 | 
			
		||||
    procedure SetExtToolList(NewExtToolList: TExternalUserTools);
 | 
			
		||||
    procedure SetTransferMacros(NewMacros: TTransferMacroList);
 | 
			
		||||
    function ToolDescription(Index: integer): string;
 | 
			
		||||
    procedure EnableButtons;
 | 
			
		||||
  public
 | 
			
		||||
    constructor Create(AnOwner: TComponent); override;
 | 
			
		||||
    destructor Destroy; override;
 | 
			
		||||
    property ExtToolList: {$IFNDEF EnableOldExtTools}TExternalUserTools{$ELSE}TExternalToolList{$ENDIF}
 | 
			
		||||
      read fExtToolList write SetExtToolList;
 | 
			
		||||
    property ExtToolList: TExternalUserTools read fExtToolList write SetExtToolList;
 | 
			
		||||
    property TransferMacros: TTransferMacroList
 | 
			
		||||
                                   read fTransferMacros write SetTransferMacros;
 | 
			
		||||
  end;
 | 
			
		||||
  
 | 
			
		||||
function ShowExtToolDialog(ExtToolList: {$IFNDEF EnableOldExtTools}TExternalUserTools{$ELSE}TExternalToolList{$ENDIF};
 | 
			
		||||
function ShowExtToolDialog(ExtToolList: TExternalUserTools;
 | 
			
		||||
  TransferMacros: TTransferMacroList):TModalResult;
 | 
			
		||||
 | 
			
		||||
implementation
 | 
			
		||||
 | 
			
		||||
{$R *.lfm}
 | 
			
		||||
 | 
			
		||||
function ShowExtToolDialog(ExtToolList: {$IFNDEF EnableOldExtTools}TExternalUserTools{$ELSE}TExternalToolList{$ENDIF};
 | 
			
		||||
function ShowExtToolDialog(ExtToolList: TExternalUserTools;
 | 
			
		||||
  TransferMacros: TTransferMacroList):TModalResult;
 | 
			
		||||
var
 | 
			
		||||
  ExternalToolDialog: TExternalToolDialog;
 | 
			
		||||
@ -188,369 +125,6 @@ begin
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$IFNDEF EnableOldExtTools}
 | 
			
		||||
 | 
			
		||||
{$ELSE EnableOldExtTools}
 | 
			
		||||
 | 
			
		||||
{ TExternalToolList }
 | 
			
		||||
 | 
			
		||||
function TExternalToolList.GetToolOpts(Index: integer): TExternalToolOptions;
 | 
			
		||||
begin
 | 
			
		||||
  Result:=TExternalToolOptions(inherited Items[Index]);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.SetToolOpts(Index: integer; 
 | 
			
		||||
  NewTool: TExternalToolOptions);
 | 
			
		||||
begin
 | 
			
		||||
  inherited Items[Index]:=NewTool;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.Add(NewTool: TExternalToolOptions);
 | 
			
		||||
begin
 | 
			
		||||
  inherited Add(NewTool);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.Assign(Source: TExternalToolList);
 | 
			
		||||
var
 | 
			
		||||
  i: integer;
 | 
			
		||||
begin
 | 
			
		||||
  if Source=Self then exit;
 | 
			
		||||
  Clear;
 | 
			
		||||
  if Source=nil then exit;
 | 
			
		||||
  Count:=Source.Count;
 | 
			
		||||
  for i:=0 to Count-1 do begin
 | 
			
		||||
    Items[i]:=TExternalToolOptions.Create;
 | 
			
		||||
    Items[i].Assign(Source[i]);
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
constructor TExternalToolList.Create;
 | 
			
		||||
begin
 | 
			
		||||
  inherited Create;
 | 
			
		||||
  Clear;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.Delete(Index: integer); 
 | 
			
		||||
begin
 | 
			
		||||
  Items[Index].Free;
 | 
			
		||||
  inherited Delete(Index);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
destructor TExternalToolList.Destroy;
 | 
			
		||||
var
 | 
			
		||||
  i: Integer;
 | 
			
		||||
begin
 | 
			
		||||
  FreeStoppedProcesses;
 | 
			
		||||
  if fRunningTools<>nil then begin
 | 
			
		||||
    for i:=0 to fRunningTools.Count-1 do
 | 
			
		||||
      TProcess(fRunningTools[i]).Free;
 | 
			
		||||
    fRunningTools.Free;
 | 
			
		||||
  end;
 | 
			
		||||
  fAllKeys.Free;
 | 
			
		||||
  inherited Destroy;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.Clear; 
 | 
			
		||||
var
 | 
			
		||||
  i: integer;
 | 
			
		||||
begin
 | 
			
		||||
  for i:=0 to Count-1 do
 | 
			
		||||
    TExternalToolOptions(Items[i]).Free;
 | 
			
		||||
  inherited Clear;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.Insert(Index: integer; NewTool: TExternalToolOptions);
 | 
			
		||||
begin
 | 
			
		||||
  inherited Insert(Index,NewTool);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TExternalToolList.Load(Config: TConfigStorage): TModalResult;
 | 
			
		||||
var
 | 
			
		||||
  i: integer;
 | 
			
		||||
  NewTool: TExternalToolOptions;
 | 
			
		||||
begin
 | 
			
		||||
  Clear;
 | 
			
		||||
  Count:=Config.GetValue('Count',0);
 | 
			
		||||
  for i:=0 to Count-1 do begin
 | 
			
		||||
    NewTool:=TExternalToolOptions.Create;
 | 
			
		||||
    Items[i]:=NewTool;
 | 
			
		||||
    Config.AppendBasePath('Tool'+IntToStr(i+1)+'/');
 | 
			
		||||
    try
 | 
			
		||||
      if NewTool.Load(Config)<>mrOk then exit;
 | 
			
		||||
    finally
 | 
			
		||||
      Config.UndoAppendBasePath;
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
  Result:=mrOk;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TExternalToolList.Load(Config: TConfigStorage; const Path: string
 | 
			
		||||
  ): TModalResult;
 | 
			
		||||
begin
 | 
			
		||||
  if Path<>'' then
 | 
			
		||||
    Config.AppendBasePath(Path);
 | 
			
		||||
  try
 | 
			
		||||
    Result:=Load(Config);
 | 
			
		||||
  finally
 | 
			
		||||
    if Path<>'' then
 | 
			
		||||
      Config.UndoAppendBasePath;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.LoadShortCuts(KeyCommandRelationList: TKeyCommandRelationList);
 | 
			
		||||
var
 | 
			
		||||
  i: integer;
 | 
			
		||||
  KeyCommandRelation: TKeyCommandRelation;
 | 
			
		||||
begin
 | 
			
		||||
  if not assigned(fAllKeys) then
 | 
			
		||||
    fAllKeys:=TKeyCommandRelationList.Create;
 | 
			
		||||
  fAllKeys.Assign(KeyCommandRelationList);
 | 
			
		||||
  for i:=0 to Count-1 do begin
 | 
			
		||||
    KeyCommandRelation:=KeyCommandRelationList.FindByCommand(ecExtToolFirst+i);
 | 
			
		||||
    if KeyCommandRelation<>nil then begin
 | 
			
		||||
      Items[i].Key:=KeyCommandRelation.ShortcutA.Key1;
 | 
			
		||||
      Items[i].Shift:=KeyCommandRelation.ShortcutA.Shift1;
 | 
			
		||||
    end else begin
 | 
			
		||||
      Items[i].Key:=VK_UNKNOWN;
 | 
			
		||||
      Items[i].Shift:=[];
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TExternalToolList.Run(Index: integer;
 | 
			
		||||
  Macros: TTransferMacroList; ShowAbort: boolean): TModalResult;
 | 
			
		||||
begin
 | 
			
		||||
  Result:=mrCancel;
 | 
			
		||||
  if (Index<0) or (Index>=Count) then exit;
 | 
			
		||||
  Result:=Run(Items[Index],Macros,ShowAbort);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TExternalToolList.Run(ExtTool: TIDEExternalToolOptions;
 | 
			
		||||
  Macros: TTransferMacroList; ShowAbort: boolean;
 | 
			
		||||
  CompilerOptions: TLazCompilerOptions): TModalResult;
 | 
			
		||||
var
 | 
			
		||||
  WorkingDir, Filename, Params, CmdLine, Title: string;
 | 
			
		||||
  TheProcess: TProcessUTF8;
 | 
			
		||||
  Abort, ErrorOccurred: boolean;
 | 
			
		||||
  NewFilename: String;
 | 
			
		||||
  TheOutputFilter: TOutputFilter;
 | 
			
		||||
begin
 | 
			
		||||
  Result:=mrCancel;
 | 
			
		||||
  if ExtTool=nil then exit;
 | 
			
		||||
  TheOutputFilter:=nil;
 | 
			
		||||
  Filename:=ExtTool.Filename;
 | 
			
		||||
  WorkingDir:=ExtTool.WorkingDirectory;
 | 
			
		||||
  Params:=ExtTool.CmdLineParams;
 | 
			
		||||
  Title:=ExtTool.Title;
 | 
			
		||||
  if Title='' then Title:=Filename;
 | 
			
		||||
  if (not Macros.SubstituteStr(Filename)) then exit;
 | 
			
		||||
  if (not Macros.SubstituteStr(WorkingDir)) then exit;
 | 
			
		||||
  if (not Macros.SubstituteStr(Params)) then exit;
 | 
			
		||||
 | 
			
		||||
  // expand working directory
 | 
			
		||||
  WorkingDir:=TrimAndExpandDirectory(WorkingDir);
 | 
			
		||||
  if (WorkingDir<>'')
 | 
			
		||||
  and (not DirPathExists(WorkingDir)) then begin
 | 
			
		||||
    Result:=IDEMessageDialogAb(lisExtToolFailedToRunTool,
 | 
			
		||||
      Format(lisExtToolUnableToRunTheTool, ['"', Title, '"', LineEnding,
 | 
			
		||||
        Format(lisWorkingDirectoryNotFound, [WorkingDir])]),
 | 
			
		||||
      mtError,[mbCancel],ShowAbort);
 | 
			
		||||
    CompileProgress.Ready(lisExtToolUnableToRunTheTool, ['"', Title, '"', LineEnding,
 | 
			
		||||
        Format(lisWorkingDirectoryNotFound, [WorkingDir])]);
 | 
			
		||||
    exit;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
  // expand file name
 | 
			
		||||
  if not FilenameIsAbsolute(Filename) then begin
 | 
			
		||||
    NewFilename:=FindProgram(Filename,GetCurrentDirUTF8,false);
 | 
			
		||||
    if NewFilename='' then begin
 | 
			
		||||
      Result:=IDEMessageDialogAb(lisExtToolFailedToRunTool,
 | 
			
		||||
        Format(lisExtToolUnableToRunTheTool, ['"', Title, '"', LineEnding,
 | 
			
		||||
          Format(lisProgramNotFound, [Filename])]),
 | 
			
		||||
        mtError,[mbCancel],ShowAbort);
 | 
			
		||||
      CompileProgress.Ready(lisExtToolUnableToRunTheTool, ['"', Title, '"', LineEnding,
 | 
			
		||||
          Format(lisProgramNotFound, [Filename])]);
 | 
			
		||||
      exit;
 | 
			
		||||
    end;
 | 
			
		||||
    Filename:=NewFilename;
 | 
			
		||||
  end;
 | 
			
		||||
  WorkingDir:=TrimFilename(WorkingDir);
 | 
			
		||||
  Filename:=TrimFilename(Filename);
 | 
			
		||||
  CmdLine:=Filename;
 | 
			
		||||
  if Params<>'' then
 | 
			
		||||
    CmdLine:=CmdLine+' '+Params;
 | 
			
		||||
  DebugLn('[TExternalToolList.Run] CmdLine="',CmdLine,'" WorkDir="',WorkingDir,'"');
 | 
			
		||||
  TheProcess:=nil;
 | 
			
		||||
  try
 | 
			
		||||
    try
 | 
			
		||||
      CheckIfFileIsExecutable(Filename);
 | 
			
		||||
      TheProcess := TOutputFilterProcess.Create(nil);
 | 
			
		||||
      TheProcess.Executable := FileName;
 | 
			
		||||
      SplitCmdLineParams(Params,TheProcess.Parameters);
 | 
			
		||||
      TheProcess.Options:= [poUsePipes,poStdErrToOutPut];
 | 
			
		||||
      if ExtTool.HideMainForm then
 | 
			
		||||
        TheProcess.ShowWindow := swoHide
 | 
			
		||||
      else
 | 
			
		||||
        TheProcess.ShowWindow := swoShowNormal;
 | 
			
		||||
      TheProcess.CurrentDirectory := WorkingDir;
 | 
			
		||||
      if ExtTool.EnvironmentOverrides.Count>0 then
 | 
			
		||||
        ExtTool.AssignEnvironmentTo(TheProcess.Environment);
 | 
			
		||||
      if (ExtTool.NeedsOutputFilter) and (TheOutputFilter=nil)
 | 
			
		||||
      and Assigned(OnNeedsOutputFilter) then begin
 | 
			
		||||
        Abort:=false;
 | 
			
		||||
        OnNeedsOutputFilter(TheOutputFilter,Abort);
 | 
			
		||||
        if Abort then begin
 | 
			
		||||
          CompileProgress.Ready(lisInfoBuildAbort);
 | 
			
		||||
          Result:=mrAbort;
 | 
			
		||||
          exit;
 | 
			
		||||
        end;
 | 
			
		||||
      end;
 | 
			
		||||
      if TheOutputFilter<>nil then begin
 | 
			
		||||
        ErrorOccurred:=false;
 | 
			
		||||
        try
 | 
			
		||||
          TheOutputFilter.CompilerOptions:=CompilerOptions as TBaseCompilerOptions;
 | 
			
		||||
          TheOutputFilter.Options:=[ofoExceptionOnError,ofoMakeFilenamesAbsolute];
 | 
			
		||||
          if ExtTool.ScanOutputForFPCMessages then
 | 
			
		||||
            TheOutputFilter.Options:=TheOutputFilter.Options+[ofoSearchForFPCMessages];
 | 
			
		||||
          if ExtTool.ScanOutputForMakeMessages then
 | 
			
		||||
            TheOutputFilter.Options:=TheOutputFilter.Options+[ofoSearchForMakeMessages];
 | 
			
		||||
          if ExtTool.ShowAllOutput then
 | 
			
		||||
            TheOutputFilter.Options:=TheOutputFilter.Options+[ofoShowAll];
 | 
			
		||||
          try
 | 
			
		||||
            Result:=mrCancel;
 | 
			
		||||
            try
 | 
			
		||||
              if TheOutputFilter.Execute(TheProcess,Self,ExtTool) then begin
 | 
			
		||||
                TheOutputFilter.ReadConstLine(Format(lisExtToolTitleCompleted,[Title]),true);
 | 
			
		||||
              end;
 | 
			
		||||
              if TheOutputFilter.ErrorExists then begin
 | 
			
		||||
                ErrorOccurred:=true;
 | 
			
		||||
              end;
 | 
			
		||||
            finally
 | 
			
		||||
              TheProcess.WaitOnExit;
 | 
			
		||||
              FreeAndNil(TheProcess);
 | 
			
		||||
            end;
 | 
			
		||||
            if ErrorOccurred then
 | 
			
		||||
              Result:=mrCancel
 | 
			
		||||
            else if TheOutputFilter.Aborted then
 | 
			
		||||
              Result:=mrAbort
 | 
			
		||||
            else
 | 
			
		||||
              Result:=mrOk;
 | 
			
		||||
          except
 | 
			
		||||
            on e: EOutputFilterError do begin
 | 
			
		||||
              DebugLn('TExternalToolList.Run Exception: ',E.Message);
 | 
			
		||||
              ErrorOccurred:=true;
 | 
			
		||||
            end
 | 
			
		||||
            else
 | 
			
		||||
              raise
 | 
			
		||||
          end;
 | 
			
		||||
        finally
 | 
			
		||||
          if Assigned(OnFreeOutputFilter) then
 | 
			
		||||
            OnFreeOutputFilter(TheOutputFilter,ErrorOccurred);
 | 
			
		||||
        end;
 | 
			
		||||
      end else begin
 | 
			
		||||
        AddRunningTool(TheProcess,true);
 | 
			
		||||
        TheProcess:=nil;
 | 
			
		||||
        Result:=mrOk;
 | 
			
		||||
      end;
 | 
			
		||||
    finally
 | 
			
		||||
      FreeAndNil(TheProcess);
 | 
			
		||||
    end;
 | 
			
		||||
  except
 | 
			
		||||
    on e: Exception do begin
 | 
			
		||||
      DebugLn('TExternalToolList.Run ',lisExtToolFailedToRunTool, ' ', E.Message);
 | 
			
		||||
      DumpExceptionBackTrace;
 | 
			
		||||
      Result:=IDEMessageDialogAb(lisExtToolFailedToRunTool,
 | 
			
		||||
        Format(lisExtToolUnableToRunTheTool, ['"', Title, '"', LineEnding, e.Message]),
 | 
			
		||||
        mtError,[mbCancel],ShowAbort);
 | 
			
		||||
      CompileProgress.Ready(lisExtToolUnableToRunTheTool,
 | 
			
		||||
                            ['"', Title, '"', LineEnding, e.Message]);
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TExternalToolList.Save(Config: TConfigStorage): TModalResult;
 | 
			
		||||
var
 | 
			
		||||
  i: integer;
 | 
			
		||||
begin
 | 
			
		||||
  Config.SetValue('Count',Count);
 | 
			
		||||
  for i:=0 to Count-1 do begin
 | 
			
		||||
    Config.AppendBasePath('Tool'+IntToStr(i+1)+'/');
 | 
			
		||||
    try
 | 
			
		||||
      if Items[i].Save(Config)<>mrOk then exit;
 | 
			
		||||
    finally
 | 
			
		||||
      Config.UndoAppendBasePath;
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
  Result:=mrOk;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TExternalToolList.Save(Config: TConfigStorage; const Path: string): TModalResult;
 | 
			
		||||
begin
 | 
			
		||||
  if Path<>'' then
 | 
			
		||||
    Config.AppendBasePath(Path);
 | 
			
		||||
  try
 | 
			
		||||
    Result:=Save(Config);
 | 
			
		||||
  finally
 | 
			
		||||
    if Path<>'' then
 | 
			
		||||
      Config.UndoAppendBasePath;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.SaveShortCuts(KeyCommandRelationList: TKeyCommandRelationList);
 | 
			
		||||
var
 | 
			
		||||
  i: integer;
 | 
			
		||||
  KeyCommandRelation: TKeyCommandRelation;
 | 
			
		||||
begin
 | 
			
		||||
  KeyCommandRelationList.ExtToolCount:=Count;
 | 
			
		||||
  for i:=0 to Count-1 do begin
 | 
			
		||||
    KeyCommandRelation:=KeyCommandRelationList.FindByCommand(ecExtToolFirst+i);
 | 
			
		||||
    if KeyCommandRelation<>nil then begin
 | 
			
		||||
      KeyCommandRelation.ShortcutA:=IDEShortCut(Items[i].Key,Items[i].Shift,
 | 
			
		||||
                                           VK_UNKNOWN,[]);
 | 
			
		||||
    end else begin
 | 
			
		||||
      DebugLn('[TExternalToolList.SaveShortCuts] Error: '
 | 
			
		||||
        +'unable to save shortcut for external tool "',Items[i].Title,'"');
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.AddRunningTool(TheProcess: TProcess;
 | 
			
		||||
  ExecuteProcess: boolean);
 | 
			
		||||
begin
 | 
			
		||||
  if fRunningTools=nil then fRunningTools:=TList.Create;
 | 
			
		||||
  fRunningTools.Add(TheProcess);
 | 
			
		||||
  if ExecuteProcess then
 | 
			
		||||
    TheProcess.Execute;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolList.FreeStoppedProcesses;
 | 
			
		||||
var
 | 
			
		||||
  i: integer;
 | 
			
		||||
  TheProcess: TProcess;
 | 
			
		||||
begin
 | 
			
		||||
  if fRunningTools=nil then exit;
 | 
			
		||||
  i:=fRunningTools.Count-1;
 | 
			
		||||
  while i>=0 do begin
 | 
			
		||||
    try
 | 
			
		||||
      TheProcess:=TProcess(fRunningTools[i]);
 | 
			
		||||
      if not TheProcess.Running then begin
 | 
			
		||||
        try
 | 
			
		||||
          TheProcess.WaitOnExit;
 | 
			
		||||
          TheProcess.Free;
 | 
			
		||||
        finally
 | 
			
		||||
          fRunningTools.Delete(i);
 | 
			
		||||
        end;
 | 
			
		||||
      end;
 | 
			
		||||
    except
 | 
			
		||||
      on E: Exception do begin
 | 
			
		||||
        DebugLn('Error freeing stopped process: ',E.Message);
 | 
			
		||||
      end;
 | 
			
		||||
    end;
 | 
			
		||||
    dec(i);
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
{ TExternalToolDialog }
 | 
			
		||||
 | 
			
		||||
constructor TExternalToolDialog.Create(AnOwner: TComponent);
 | 
			
		||||
@ -581,11 +155,7 @@ begin
 | 
			
		||||
  MoveUpButton.ImageIndex := IDEImages.LoadImage(16, 'arrow_up');
 | 
			
		||||
  MoveDownButton.ImageIndex := IDEImages.LoadImage(16, 'arrow_down');
 | 
			
		||||
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  fExtToolList:=TExternalUserTools.Create;
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  fExtToolList:=TExternalToolList.Create;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
destructor TExternalToolDialog.Destroy;
 | 
			
		||||
@ -594,7 +164,7 @@ begin
 | 
			
		||||
  inherited Destroy;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolDialog.SetExtToolList(NewExtToolList: {$IFNDEF EnableOldExtTools}TExternalUserTools{$ELSE}TExternalToolList{$ENDIF});
 | 
			
		||||
procedure TExternalToolDialog.SetExtToolList(NewExtToolList: TExternalUserTools);
 | 
			
		||||
begin
 | 
			
		||||
  if fExtToolList=NewExtToolList then exit;
 | 
			
		||||
  fExtToolList.Assign(NewExtToolList);
 | 
			
		||||
@ -609,13 +179,7 @@ end;
 | 
			
		||||
 | 
			
		||||
function TExternalToolDialog.ToolDescription(Index: integer): string;
 | 
			
		||||
begin
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  Result:=fExtToolList[Index].Title;
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  Result:=fExtToolList[Index].ShortDescription;
 | 
			
		||||
  if Result='' then
 | 
			
		||||
    Result:=fExtToolList[Index].Title;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  if Result='' then
 | 
			
		||||
    Result:=ExtractFilename(fExtToolList[Index].Filename);
 | 
			
		||||
  //DebugLn(['TExternalToolDialog.ToolDescription Index=',Index,' Result=',Result,' Cmd="',fExtToolList[Index].Filename,' ',fExtToolList[Index].CmdLineParams,'"']);
 | 
			
		||||
@ -636,11 +200,7 @@ end;
 | 
			
		||||
procedure TExternalToolDialog.AddButtonClick(Sender: TObject);
 | 
			
		||||
var
 | 
			
		||||
  MsgResult: TModalResult;
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  NewTool: TExternalUserTool;
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  NewTool: TExternalToolOptions;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
begin
 | 
			
		||||
  if fExtToolList.Count>=MaxExtTools then begin
 | 
			
		||||
    IDEMessageDialog(lisExtToolMaximumToolsReached,
 | 
			
		||||
@ -648,14 +208,8 @@ begin
 | 
			
		||||
                  mtInformation,[mbCancel]);
 | 
			
		||||
    exit;
 | 
			
		||||
  end;
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  NewTool:=TExternalUserTool.Create(nil);
 | 
			
		||||
  MsgResult:=ShowExtToolOptionDlg(fTransferMacros, NewTool, EditorOpts.KeyMap);
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  NewTool:=TExternalToolOptions.Create;
 | 
			
		||||
  MsgResult:=ShowExtToolOptionDlg(fTransferMacros, NewTool,
 | 
			
		||||
          TExternalToolList(EnvironmentOptions.ExternalTools).fAllKeys);
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  if MsgResult=mrOk then
 | 
			
		||||
  begin
 | 
			
		||||
    fExtToolList.Add(NewTool);
 | 
			
		||||
@ -673,20 +227,12 @@ end;
 | 
			
		||||
 | 
			
		||||
procedure TExternalToolDialog.MenuItemCloneClick(Sender: TObject);
 | 
			
		||||
var
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  NewTool, OldTool: TExternalUserTool;
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  NewTool, OldTool: TExternalToolOptions;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
begin
 | 
			
		||||
  If Listbox.ItemIndex <> -1 Then Begin
 | 
			
		||||
    OldTool := fExtToolList.Items[Listbox.ItemIndex];
 | 
			
		||||
    If Assigned(OldTool) Then Begin
 | 
			
		||||
      {$IFNDEF EnableOldExtTools}
 | 
			
		||||
      NewTool:=TExternalUserTool.Create(nil);
 | 
			
		||||
      {$ELSE}
 | 
			
		||||
      NewTool:=TExternalToolOptions.Create;
 | 
			
		||||
      {$ENDIF}
 | 
			
		||||
      NewTool.Assign(OldTool);
 | 
			
		||||
      fExtToolList.Add(NewTool);
 | 
			
		||||
      Listbox.Items.Add(ToolDescription(fExtToolList.Count-1));
 | 
			
		||||
@ -716,18 +262,10 @@ end;
 | 
			
		||||
procedure TExternalToolDialog.MenuItemImportClick(Sender: TObject);
 | 
			
		||||
Var
 | 
			
		||||
  FileConfig: TXMLOptionsStorage;
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  NewToolList: TExternalUserTools;
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  NewToolList : TExternalToolList;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
begin
 | 
			
		||||
  If OpenDialog1.Execute Then Begin
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    NewToolList := TExternalUserTools.Create;
 | 
			
		||||
    {$ELSE}
 | 
			
		||||
    NewToolList := TExternalToolList.Create;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    FileConfig := TXMLOptionsStorage.Create(OpenDialog1.FileName, True);
 | 
			
		||||
    NewToolList.Load(FileConfig);
 | 
			
		||||
    SetExtToolList(NewToolList);
 | 
			
		||||
@ -750,14 +288,8 @@ var
 | 
			
		||||
begin
 | 
			
		||||
  i:=Listbox.ItemIndex;
 | 
			
		||||
  if i<0 then exit;
 | 
			
		||||
  if ShowExtToolOptionDlg(fTransferMacros,fExtToolList[i],
 | 
			
		||||
      {$IFNDEF EnableOldExtTools}
 | 
			
		||||
      EditorOpts.KeyMap
 | 
			
		||||
      {$ELSE}
 | 
			
		||||
      TExternalToolList(EnvironmentOptions.ExternalTools).fAllKeys
 | 
			
		||||
      {$ENDIF}
 | 
			
		||||
      )=mrOk then
 | 
			
		||||
  begin
 | 
			
		||||
  if ShowExtToolOptionDlg(fTransferMacros,fExtToolList[i],EditorOpts.KeyMap)=mrOk
 | 
			
		||||
  then begin
 | 
			
		||||
    Listbox.Items[i]:=ToolDescription(i);
 | 
			
		||||
    EnableButtons;
 | 
			
		||||
  end;
 | 
			
		||||
@ -804,9 +336,4 @@ begin
 | 
			
		||||
  EnableButtons;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$IFDEF EnableOldExtTools}
 | 
			
		||||
initialization
 | 
			
		||||
  ExternalToolListClass:=TExternalToolList;
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
end.
 | 
			
		||||
 | 
			
		||||
@ -46,12 +46,7 @@ uses
 | 
			
		||||
  IDEExternToolIntf,
 | 
			
		||||
  // IDE
 | 
			
		||||
  LazarusIDEStrConsts, TransferMacros, DialogProcs, IDEOptionDefs,
 | 
			
		||||
  ObjInspExt, EnvironmentOpts, AboutFrm, Project, MainBar,
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  etMessagesWnd,
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  OutputFilter, MsgView,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  ObjInspExt, EnvironmentOpts, AboutFrm, Project, MainBar, etMessagesWnd,
 | 
			
		||||
  IDEFPDocFileSearch, PackageDefs, PackageSystem,
 | 
			
		||||
  HelpOptions, MainIntf, LazConf, HelpFPCMessages, CodeHelp,
 | 
			
		||||
  IDEContextHelpEdit, IDEWindowHelp, CodeBrowser;
 | 
			
		||||
@ -215,11 +210,7 @@ type
 | 
			
		||||
    function ShowHelpForSourcePosition(const Filename: string;
 | 
			
		||||
                                       const CodePos: TPoint;
 | 
			
		||||
                                       var ErrMsg: string): TShowHelpResult; override;
 | 
			
		||||
    {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    procedure ShowHelpForMessage; override;
 | 
			
		||||
    {$ELSE}
 | 
			
		||||
    procedure ShowHelpForMessage(Line: integer); override;
 | 
			
		||||
    {$ENDIF}
 | 
			
		||||
    procedure ShowHelpForObjectInspector(Sender: TObject); override;
 | 
			
		||||
    procedure ShowHelpForIDEControl(Sender: TControl); override;
 | 
			
		||||
    function CreateHint(aHintWindow: THintWindow; ScreenPos: TPoint;
 | 
			
		||||
@ -1597,7 +1588,6 @@ begin
 | 
			
		||||
    CacheWasUsed,AnOwner);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$IFNDEF EnableOldExtTools}
 | 
			
		||||
procedure TIDEHelpManager.ShowHelpForMessage;
 | 
			
		||||
var
 | 
			
		||||
  Line: TMessageLine;
 | 
			
		||||
@ -1610,33 +1600,6 @@ begin
 | 
			
		||||
  Line.GetAttributes(Parts);
 | 
			
		||||
  ShowHelpOrErrorForMessageLine(Line.Msg,Parts);
 | 
			
		||||
end;
 | 
			
		||||
{$ELSE EnableOldExtTools}
 | 
			
		||||
procedure TIDEHelpManager.ShowHelpForMessage(Line: integer);
 | 
			
		||||
  function ParseMessage(MsgItem: TIDEMessageLine): TStringList;
 | 
			
		||||
  begin
 | 
			
		||||
    Result:=TStringList.Create;
 | 
			
		||||
    Result.Values['Message']:=MsgItem.Msg;
 | 
			
		||||
    if MsgItem.Parts<>nil then
 | 
			
		||||
      Result.Assign(MsgItem.Parts);
 | 
			
		||||
  end;
 | 
			
		||||
var
 | 
			
		||||
  MsgItem: TIDEMessageLine;
 | 
			
		||||
  MessageParts: TStringList;
 | 
			
		||||
begin
 | 
			
		||||
  //debugln('TIDEHelpManager.ShowHelpForMessage A Line=',dbgs(Line));
 | 
			
		||||
  if MessagesView=nil then exit;
 | 
			
		||||
  if Line<0 then
 | 
			
		||||
    Line:=MessagesView.SelectedMessageIndex;
 | 
			
		||||
  //DebugLn('TIDEHelpManager.ShowHelpForMessage B Line=',dbgs(Line),' ',dbgs(MessagesView.VisibleItemCount));
 | 
			
		||||
  if (Line<0) or (Line>=MessagesView.VisibleItemCount) then exit;
 | 
			
		||||
  MsgItem:=MessagesView.VisibleItems[Line];
 | 
			
		||||
  if MsgItem=nil then exit;
 | 
			
		||||
  if MsgItem.Msg<>'' then begin
 | 
			
		||||
    MessageParts:=ParseMessage(MsgItem);
 | 
			
		||||
    ShowHelpOrErrorForMessageLine(MsgItem.Msg,MessageParts);
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
{$Endif EnableOldExtTools}
 | 
			
		||||
 | 
			
		||||
procedure TIDEHelpManager.ShowHelpForObjectInspector(Sender: TObject);
 | 
			
		||||
var
 | 
			
		||||
 | 
			
		||||
@ -121,7 +121,6 @@ type
 | 
			
		||||
    property Unit2Files: TICCFiles read FUnit2Files;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
{$IFNDEF EnableOldExtTools}
 | 
			
		||||
type
 | 
			
		||||
  { TQuickFixRecompilingChecksumChanged }
 | 
			
		||||
 | 
			
		||||
@ -131,17 +130,6 @@ type
 | 
			
		||||
    procedure CreateMenuItems(Fixes: TMsgQuickFixes); override;
 | 
			
		||||
    procedure QuickFix(Fixes: TMsgQuickFixes; Msg: TMessageLine); override;
 | 
			
		||||
  end;
 | 
			
		||||
{$ELSE}
 | 
			
		||||
type
 | 
			
		||||
  { TQuickFixRecompilingChecksumChanged }
 | 
			
		||||
 | 
			
		||||
  TQuickFixRecompilingChecksumChanged = class(TIDEMsgQuickFixItem)
 | 
			
		||||
  public
 | 
			
		||||
    constructor Create;
 | 
			
		||||
    function IsApplicable(Line: TIDEMessageLine): boolean; override;
 | 
			
		||||
    procedure Execute(const Msg: TIDEMessageLine; Step: TIMQuickFixStep); override;
 | 
			
		||||
  end;
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
procedure InitInspectChecksumChangedQuickFixItems;
 | 
			
		||||
 | 
			
		||||
@ -414,7 +402,6 @@ begin
 | 
			
		||||
  InfoTreeView.EndUpdate;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
{$IFNDEF EnableOldExtTools}
 | 
			
		||||
{ TQuickFixRecompilingChecksumChanged }
 | 
			
		||||
 | 
			
		||||
function TQuickFixRecompilingChecksumChanged.IsApplicable(Msg: TMessageLine;
 | 
			
		||||
@ -457,46 +444,6 @@ begin
 | 
			
		||||
    Dlg.Free;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
{$ELSE}
 | 
			
		||||
constructor TQuickFixRecompilingChecksumChanged.Create;
 | 
			
		||||
begin
 | 
			
		||||
  Name:='Show dialog for message Recompiling Unit1, checksum changed for Unit1';
 | 
			
		||||
  Caption:='Explore message "checksum changed"';
 | 
			
		||||
  Steps:=[imqfoMenuItem];
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TQuickFixRecompilingChecksumChanged.IsApplicable(Line: TIDEMessageLine
 | 
			
		||||
  ): boolean;
 | 
			
		||||
begin
 | 
			
		||||
  Result:=false;
 | 
			
		||||
  if not REMatches(Line.Msg,'Recompiling ([a-z_][a-z_0-9]*), checksum changed for ([a-z_][a-z_0-9]*)','i')
 | 
			
		||||
  then exit;
 | 
			
		||||
  Result:=true;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TQuickFixRecompilingChecksumChanged.Execute(
 | 
			
		||||
  const Msg: TIDEMessageLine; Step: TIMQuickFixStep);
 | 
			
		||||
var
 | 
			
		||||
  Dlg: TInspectChksumChgDialog;
 | 
			
		||||
  Unit1, Unit2: string;
 | 
			
		||||
begin
 | 
			
		||||
  if Step=imqfoMenuItem then begin
 | 
			
		||||
    debugln(['TQuickFixRecompilingChecksumChanged.Execute  ']);
 | 
			
		||||
    if not REMatches(Msg.Msg,'Recompiling ([a-z_][a-z_0-9]*), checksum changed for ([a-z_][a-z_0-9]*)','i')
 | 
			
		||||
    then exit;
 | 
			
		||||
    Unit1:=REVar(1);
 | 
			
		||||
    Unit2:=REVar(2);
 | 
			
		||||
    debugln(['TQuickFixRecompilingChecksumChanged.Execute Unit1=',REVar(1),', checksum changed for Unit2=',REVar(2)]);
 | 
			
		||||
    Dlg:=TInspectChksumChgDialog.Create(nil);
 | 
			
		||||
    try
 | 
			
		||||
      Dlg.InitWithMsg(Msg.Msg,Unit1,Unit2);
 | 
			
		||||
      Dlg.ShowModal;
 | 
			
		||||
    finally
 | 
			
		||||
      Dlg.Free;
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
end.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,41 +0,0 @@
 | 
			
		||||
inherited MessagesView: TMessagesView
 | 
			
		||||
  Left = 284
 | 
			
		||||
  Height = 79
 | 
			
		||||
  Top = 640
 | 
			
		||||
  Width = 722
 | 
			
		||||
  ActiveControl = MessageTreeView
 | 
			
		||||
  BorderStyle = bsSizeToolWin
 | 
			
		||||
  Caption = 'MessagesView'
 | 
			
		||||
  ClientHeight = 79
 | 
			
		||||
  ClientWidth = 722
 | 
			
		||||
  KeyPreview = True
 | 
			
		||||
  OnDeactivate = FormDeactivate
 | 
			
		||||
  OnKeyDown = MessagesViewKeyDown
 | 
			
		||||
  object MessageTreeView: TTreeView[0]
 | 
			
		||||
    Left = 0
 | 
			
		||||
    Height = 79
 | 
			
		||||
    Top = 0
 | 
			
		||||
    Width = 722
 | 
			
		||||
    Align = alClient
 | 
			
		||||
    DefaultItemHeight = 15
 | 
			
		||||
    MultiSelect = True
 | 
			
		||||
    PopupMenu = MainPopupMenu
 | 
			
		||||
    ReadOnly = True
 | 
			
		||||
    ScrollBars = ssAutoBoth
 | 
			
		||||
    ShowRoot = False
 | 
			
		||||
    TabOrder = 0
 | 
			
		||||
    OnExit = MessageViewExit
 | 
			
		||||
    Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoToolTips, tvoThemedDraw]
 | 
			
		||||
  end
 | 
			
		||||
  object MainPopupMenu: TPopupMenu[1]
 | 
			
		||||
    OnPopup = MainPopupMenuPopup
 | 
			
		||||
    left = 48
 | 
			
		||||
    top = 8
 | 
			
		||||
  end
 | 
			
		||||
  object IdleTimer1: TIdleTimer[2]
 | 
			
		||||
    AutoEnabled = True
 | 
			
		||||
    OnTimer = IdleTimer1Timer
 | 
			
		||||
    left = 166
 | 
			
		||||
    top = 8
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										1385
									
								
								ide/msgview.pp
									
									
									
									
									
								
							
							
						
						
									
										1385
									
								
								ide/msgview.pp
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1907
									
								
								ide/outputfilter.pas
									
									
									
									
									
								
							
							
						
						
									
										1907
									
								
								ide/outputfilter.pas
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -37,10 +37,7 @@ interface
 | 
			
		||||
uses
 | 
			
		||||
  Classes, SysUtils, FileUtil, Laz2_XMLCfg, Process, LCLProc, Controls,
 | 
			
		||||
  Graphics, Forms, CodeToolManager, FileProcs, LazConf, LResources, ProjectIntf,
 | 
			
		||||
  ProjectResourcesIntf, IDEMsgIntf, MacroIntf,
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
  IDEExternToolIntf,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  ProjectResourcesIntf, IDEMsgIntf, MacroIntf, IDEExternToolIntf,
 | 
			
		||||
  LazarusIDEStrConsts, resource, bitmapresource, groupresource,
 | 
			
		||||
  groupiconresource, groupcursorresource;
 | 
			
		||||
   
 | 
			
		||||
@ -189,11 +186,7 @@ begin
 | 
			
		||||
    end;
 | 
			
		||||
  end
 | 
			
		||||
  else
 | 
			
		||||
  {$IFNDEF EnableOldExtTools}
 | 
			
		||||
    IDEMessagesWindow.AddCustomMessage(mluError,Format(lisFileNotFound2, [Filename]));
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
    IDEMessagesWindow.AddMsg(Format(lisFileNotFound2, [Filename]), '', -1);
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TResourceItem.GetRealFileName(ProjectDirectory: String): String;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user