diff --git a/components/codetools/definetemplates.pas b/components/codetools/definetemplates.pas index 89ea74dde0..7d96ab64be 100644 --- a/components/codetools/definetemplates.pas +++ b/components/codetools/definetemplates.pas @@ -698,7 +698,7 @@ type RealTargetOS: string; RealTargetCPU: string; RealCompilerInPath: string; // the ppc in PATH - FullVersion: string; + FullVersion: string; // Version.Release.Patch ConfigFiles: TFPCConfigFileStateList; UnitPaths: TStrings; Defines: TStringToStringTree; // macro to value @@ -902,6 +902,8 @@ type property ConfigCaches: TFPCTargetConfigCaches read FConfigCaches write SetConfigCaches; property TestFilename: string read FTestFilename write FTestFilename; // an empty file to test the compiler, will be auto created property ExtraOptions: string read FExtraOptions write FExtraOptions; // additional compiler options not used as key + function GetFPCVersion(const CompilerFilename, TargetOS, TargetCPU: string; + UseCompiledVersionAsDefault: boolean): string; function FindUnitSet(const CompilerFilename, TargetOS, TargetCPU, Options, FPCSrcDir: string; CreateIfNotExists: boolean): TFPCUnitSetCache; @@ -926,6 +928,7 @@ function GetCompiledTargetCPU: string; function GetDefaultCompilerFilename(const TargetCPU: string = ''; Cross: boolean = false): string; function GetFPCTargetOS(TargetOS: string): string; function GetFPCTargetCPU(TargetCPU: string): string; +function IsFPCExecutable(const CompilerFilename: string): boolean; // functions to quickly setup some defines function CreateDefinesInDirectories(const SourcePaths, FlagName: string @@ -2660,6 +2663,19 @@ begin Result:=LowerCase(TargetCPU); end; +function IsFPCExecutable(const CompilerFilename: string): boolean; +var + ShortFilename: String; +begin + Result:=false; + if not FilenameIsAbsolute(CompilerFilename) then exit; + if CompareFilenames(ExtractFileExt(CompilerFilename),ExeExt)<>0 then exit; + ShortFilename:=ExtractFileNameOnly(CompilerFilename); + if (CompareFilenames(ShortFilename,'fpc')<>0) + and (CompareFilenames(LeftStr(ShortFilename,3),'ppc')<>0) then exit; + Result:=true; +end; + function CreateDefinesInDirectories(const SourcePaths, FlagName: string ): TDefineTemplate; var @@ -7443,7 +7459,7 @@ begin if FileExistsCached(Compiler) then begin ExtraOptions:=GetFPCInfoCmdLineOptions(ExtraOptions); - // get real OS and CPU + // get version and real OS and CPU InfoTypes:=[fpciTargetOS,fpciTargetProcessor,fpciFullVersion]; Info:=RunFPCInfo(Compiler,InfoTypes,ExtraOptions); if ParseFPCInfo(Info,InfoTypes,Infos) then begin @@ -8333,6 +8349,22 @@ begin Result:=false; end; +function TFPCDefinesCache.GetFPCVersion(const CompilerFilename, TargetOS, + TargetCPU: string; UseCompiledVersionAsDefault: boolean): string; +var + CfgCache: TFPCTargetConfigCache; +begin + if UseCompiledVersionAsDefault then + Result:={$I %FPCVersion%} + else + Result:=''; + if not IsFPCExecutable(CompilerFilename) then exit; + CfgCache:=ConfigCaches.Find(CompilerFilename,ExtraOptions,TargetOS,TargetCPU,true); + if not CfgCache.Update(TestFilename,ExtraOptions) then exit; + if CfgCache.FullVersion='' then exit; + Result:=CfgCache.FullVersion; +end; + function TFPCDefinesCache.FindUnitSet(const CompilerFilename, TargetOS, TargetCPU, Options, FPCSrcDir: string; CreateIfNotExists: boolean ): TFPCUnitSetCache; diff --git a/components/ideintf/ideexterntoolintf.pas b/components/ideintf/ideexterntoolintf.pas index 22e8a5f8ad..2ec005578a 100644 --- a/components/ideintf/ideexterntoolintf.pas +++ b/components/ideintf/ideexterntoolintf.pas @@ -241,7 +241,8 @@ type FTool: TAbstractExternalTool; public destructor Destroy; override; // (main thread) - procedure Init; virtual; // called if process started, before first line (worker thread) + procedure Init; virtual; // called after macros resolved, before starting thread (main thread) + procedure InitReading; virtual; // called if process started, before first line (worker thread) procedure Done; virtual; // called after process stopped (worker thread) procedure ReadLine(Line: string; OutputIndex: integer; var Handled: boolean); virtual; abstract; // (worker thread) function CreateMsgLine(OutputIndex: integer): TMessageLine; // (worker thread) @@ -380,6 +381,7 @@ type FFreeData: boolean; FGroup: TExternalToolGroup; FResolveMacrosOnExecute: boolean; + FThread: TThread; FWorkerDirectory: string; FWorkerMessages: TMessageLines; FParsers: TFPList; // list of TExtToolParser @@ -418,6 +420,7 @@ type destructor Destroy; override; procedure EnterCriticalSection; virtual; // always use before access procedure LeaveCriticalSection; virtual; + property Thread: TThread read FThread write FThread; procedure ConsistencyCheck; virtual; property Title: string read FTitle write SetTitle; @@ -1223,6 +1226,11 @@ begin end; +procedure TExtToolParser.InitReading; +begin + +end; + procedure TExtToolParser.Done; begin diff --git a/ide/buildmanager.pas b/ide/buildmanager.pas index 0ca573473c..35ac5feda8 100644 --- a/ide/buildmanager.pas +++ b/ide/buildmanager.pas @@ -129,7 +129,6 @@ type function CTMacroFuncProjectIncPath(Data: Pointer): boolean; function CTMacroFuncProjectSrcPath(Data: Pointer): boolean; {$IFDEF EnableNewExtTools} - procedure FPCMsgFilePoolLoadFile(aFilename: string; out s: string); {$ELSE} function OnRunCompilerWithOptions(ExtTool: TIDEExternalToolOptions; CompOptions: TBaseCompilerOptions): TModalResult; @@ -492,7 +491,6 @@ begin ExternalToolList.RegisterParser(TDefaultParser); FPCMsgFilePool:=TFPCMsgFilePool.Create(nil); - FPCMsgFilePool.OnLoadFile:=@FPCMsgFilePoolLoadFile; end; {$ENDIF} @@ -1920,6 +1918,8 @@ function TBuildManager.MacroFuncFPCVer(const Param: string; const Data: PtrInt; CompilerFilename: String; ConfigCache: TFPCTargetConfigCache; begin + if OverrideFPCVer<>'' then + exit(OverrideFPCVer); Result:={$I %FPCVERSION%}; // Version.Release.Patch if CodeToolBoss<>nil then begin // fetch the FPC version from the current compiler @@ -2115,25 +2115,6 @@ begin end; {$IFDEF EnableNewExtTools} -procedure TBuildManager.FPCMsgFilePoolLoadFile(aFilename: string; out s: string - ); -// Note: called by any thread -var - fs: TFileStreamUTF8; - Encoding: String; -begin - s:=''; - fs := TFileStreamUTF8.Create(aFilename, fmOpenRead or fmShareDenyNone); - try - SetLength(s,fs.Size); - if s<>'' then - fs.Read(s[1],length(s)); - Encoding:=GuessEncoding(s); - s:=ConvertEncoding(s,Encoding,EncodingUTF8); - finally - fs.Free; - end; -end; {$ELSE EnableNewExtTools} function TBuildManager.OnRunCompilerWithOptions( ExtTool: TIDEExternalToolOptions; CompOptions: TBaseCompilerOptions): TModalResult; diff --git a/ide/environmentopts.pp b/ide/environmentopts.pp index 143aa91c10..6e18b24d89 100644 --- a/ide/environmentopts.pp +++ b/ide/environmentopts.pp @@ -410,7 +410,7 @@ type function GetParsedLazarusDirectory: string; function GetParsedTestBuildDirectory: string; function GetParsedCompilerFilename: string; - function GetParsedFPCSourceDirectory: string; + function GetParsedFPCSourceDirectory(FPCVer: string = ''): string; function GetParsedMakeFilename: string; function GetParsedCompilerMessagesFilename: string; function GetParsedFPDocPaths: string; @@ -658,6 +658,7 @@ type end; var + OverrideFPCVer: string = ''; EnvironmentOptions: TEnvironmentOptions = nil; function PascalExtToType(const Ext: string): TPascalExtType; @@ -1785,8 +1786,28 @@ begin Result:=GetParsedValue(eopTestBuildDirectory); end; -function TEnvironmentOptions.GetParsedFPCSourceDirectory: string; +function TEnvironmentOptions.GetParsedFPCSourceDirectory(FPCVer: string + ): string; +var + s: String; begin + if (FPCVer<>'') and (Pos('$(',FPCSourceDirectory)>0) then begin + s:='$(FPCVer)'; + GlobalMacroList.SubstituteStr(s); + if s<>FPCVer then begin + // override macro FPCVer + OverrideFPCVer:=FPCVer; + IncreaseCompilerParseStamp; + try + Result:=GetParsedValue(eopFPCSourceDirectory); + debugln(['TEnvironmentOptions.GetParsedFPCSourceDirectory FPCVer=',FPCVer,' FPCSrcDir=',Result]); + finally + OverrideFPCVer:=''; + IncreaseCompilerParseStamp; + end; + exit; + end; + end; Result:=GetParsedValue(eopFPCSourceDirectory); end; diff --git a/ide/etfpcmsgparser.pas b/ide/etfpcmsgparser.pas index 4e2ddd234a..202834af38 100644 --- a/ide/etfpcmsgparser.pas +++ b/ide/etfpcmsgparser.pas @@ -32,8 +32,8 @@ interface uses Classes, SysUtils, strutils, FileProcs, KeywordFuncLists, IDEExternToolIntf, PackageIntf, LazIDEIntf, ProjectIntf, CodeToolsFPCMsgs, CodeToolsStructs, - CodeCache, CodeToolManager, DirectoryCacher, BasicCodeTools, LazUTF8, - etMakeMsgParser, EnvironmentOpts; + CodeCache, CodeToolManager, DirectoryCacher, BasicCodeTools, DefineTemplates, + LazUTF8, FileUtil, etMakeMsgParser, EnvironmentOpts; type TFPCMsgFilePool = class; @@ -59,22 +59,30 @@ type TETLoadFileEvent = procedure(aFilename: string; out s: string) of object; + { TFPCMsgFilePool } + TFPCMsgFilePool = class(TComponent) private fCritSec: TRTLCriticalSection; FDefaultEnglishFile: string; - FDefaultLocaleFile: string; + FDefaultTranslationFile: string; FFiles: TFPList; // list of TFPCMsgFilePoolItem sorted for loaded FOnLoadFile: TETLoadFileEvent; + fPendingLog: TStrings; + procedure Log(Msg: string; AThread: TThread); + procedure LogSync; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - function LoadFile(aFilename: string; UpdateFromDisk: boolean): TFPCMsgFilePoolItem; - procedure UnloadFile(var aFile: TFPCMsgFilePoolItem); + function LoadFile(aFilename: string; UpdateFromDisk: boolean; + AThread: TThread): TFPCMsgFilePoolItem; + procedure UnloadFile(var aFile: TFPCMsgFilePoolItem; AThread: TThread); procedure EnterCriticalsection; procedure LeaveCriticalSection; + procedure GetMsgFileNames(CompilerFilename, TargetOS, TargetCPU: string; + out anEnglishFile, aTranslationFile: string); // (main thread) property DefaultEnglishFile: string read FDefaultEnglishFile write FDefaultEnglishFile; - property DefaultLocaleFile: string read FDefaultLocaleFile write FDefaultLocaleFile; + property DefaulTranslationFile: string read FDefaultTranslationFile write FDefaultTranslationFile; property OnLoadFile: TETLoadFileEvent read FOnLoadFile write FOnLoadFile; // (main or workerthread) end; @@ -146,8 +154,9 @@ type TranslationFile: TFPCMsgFilePoolItem; constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure Init; override; // called before reading the output - procedure Done; override; + procedure Init; override; // called after macros resolved, before starting thread (main thread) + procedure InitReading; override; // called if process started, before first line (worker thread) + procedure Done; override; // called after process stopped (worker thread) procedure ReadLine(Line: string; OutputIndex: integer; var Handled: boolean); override; function LongenFilename(aFilename: string): string; procedure ImproveMessages(aSynchronized: boolean); override; @@ -599,11 +608,36 @@ end; { TFPCMsgFilePool } +procedure TFPCMsgFilePool.Log(Msg: string; AThread: TThread); +begin + EnterCriticalsection; + try + fPendingLog.Add(Msg); + finally + LeaveCriticalSection; + end; + if AThread<>nil then + LogSync + else + TThread.Synchronize(AThread,@LogSync); +end; + +procedure TFPCMsgFilePool.LogSync; +begin + EnterCriticalsection; + try + dbgout(fPendingLog.Text); + finally + LeaveCriticalSection; + end; +end; + constructor TFPCMsgFilePool.Create(AOwner: TComponent); begin inherited Create(AOwner); InitCriticalSection(fCritSec); FFiles:=TFPList.Create; + fPendingLog:=TStringList.Create; end; destructor TFPCMsgFilePool.Destroy; @@ -629,29 +663,52 @@ begin if FPCMsgFilePool=Self then FPCMsgFilePool:=nil; inherited Destroy; + FreeAndNil(fPendingLog); finally LeaveCriticalSection; end; DoneCriticalsection(fCritSec); end; -function TFPCMsgFilePool.LoadFile(aFilename: string; UpdateFromDisk: boolean - ): TFPCMsgFilePoolItem; +function TFPCMsgFilePool.LoadFile(aFilename: string; UpdateFromDisk: boolean; + AThread: TThread): TFPCMsgFilePoolItem; +var + IsMainThread: Boolean; + + procedure ResultOutdated; + begin + // cached file needs update + if Result.fUseCount=0 then begin + FFiles.Remove(Result); + Result.Free; + end; + Result:=nil; + end; + + function FileExists: boolean; + begin + if IsMainThread then + Result:=FileExistsCached(aFilename) + else + Result:=FileExistsUTF8(aFilename); + end; + var Item: TFPCMsgFilePoolItem; i: Integer; NewItem: TFPCMsgFilePoolItem; FileTxt: string; + Code: TCodeBuffer; begin Result:=nil; if aFilename='' then exit; aFilename:=TrimAndExpandFilename(aFilename); - //debugln(['TFPCMsgFilePool.LoadFile ',aFilename]); + //Log('TFPCMsgFilePool.LoadFile '+aFilename,aThread); + IsMainThread:=GetThreadID=MainThreadID; if UpdateFromDisk then begin - // Note: do not use FileExistsCached, called by threads - if not FileExistsUTF8(aFilename) then begin - debugln(['TFPCMsgFilePool.LoadFile file not found: ',aFilename]); + if not FileExists then begin + Log('TFPCMsgFilePool.LoadFile file not found: '+aFilename,AThread); exit; end; end; @@ -665,19 +722,21 @@ begin Result:=Item; break; end; + Code:=nil; if UpdateFromDisk then begin - if (Result<>nil) - and (FileAgeUTF8(aFilename)<>Result.LoadedFileAge) then begin - // cached file needs update - if Result.fUseCount=0 then begin - FFiles.Remove(Result); - Result.Free; - end; - Result:=nil; + if IsMainThread then begin + Code:=CodeToolBoss.LoadFile(aFilename,true,false); + if (Code<>nil) and (Result<>nil) and (Code.FileDateOnDisk<>Result.LoadedFileAge) + then + ResultOutdated; + end else begin + if (Result<>nil) + and (FileAgeUTF8(aFilename)<>Result.LoadedFileAge) then + ResultOutdated; end; end else if Result=nil then begin // not yet loaded, not yet checked if file exists -> check now - if not FileExistsUTF8(aFilename) then + if not FileExists then exit; end; @@ -687,20 +746,30 @@ begin end else begin // load for the first time NewItem:=TFPCMsgFilePoolItem.Create(Self,aFilename); - //debugln(['TFPCMsgFilePool.LoadFile ',NewItem.FFile<>nil,' ',aFilename]); + //Log('TFPCMsgFilePool.LoadFile '+dbgs(NewItem.FFile<>nil)+' '+aFilename,aThread); if Assigned(OnLoadFile) then begin OnLoadFile(aFilename,FileTxt); NewItem.FFile.LoadFromText(FileTxt); + NewItem.FLoadedFileAge:=FileAgeUTF8(aFilename); end else begin - NewItem.FFile.LoadFromFile(aFilename); + if IsMainThread then begin + if Code=nil then + Code:=CodeToolBoss.LoadFile(aFilename,true,false); + if Code=nil then + exit; + NewItem.FFile.LoadFromText(Code.Source); + NewItem.FLoadedFileAge:=Code.FileDateOnDisk; + end else begin + NewItem.FFile.LoadFromFile(aFilename); + NewItem.FLoadedFileAge:=FileAgeUTF8(aFilename); + end; end; - NewItem.FLoadedFileAge:=FileAgeUTF8(aFilename); // load successful Result:=NewItem; NewItem:=nil; FFiles.Add(Result); inc(Result.fUseCount); - //debugln(['TFPCMsgFilePool.LoadFile ',Result.Filename,' ',Result.fUseCount]); + //log('TFPCMsgFilePool.LoadFile '+Result.Filename+' '+dbgs(Result.fUseCount),aThread); end; finally FreeAndNil(NewItem); @@ -708,7 +777,8 @@ begin end; end; -procedure TFPCMsgFilePool.UnloadFile(var aFile: TFPCMsgFilePoolItem); +procedure TFPCMsgFilePool.UnloadFile(var aFile: TFPCMsgFilePoolItem; + AThread: TThread); var i: Integer; Item: TFPCMsgFilePoolItem; @@ -721,7 +791,7 @@ begin if FFiles.IndexOf(aFile)<0 then raise Exception.Create('TFPCMsgFilePool.UnloadFile unknown, maybe already freed'); dec(aFile.fUseCount); - //debugln(['TFPCMsgFilePool.UnloadFile ',aFile.Filename,' UseCount=',aFile.fUseCount]); + //log('TFPCMsgFilePool.UnloadFile '+aFile.Filename+' UseCount='+dbgs(aFile.fUseCount),aThread); if aFile.fUseCount>0 then exit; // not used anymore if not FileExistsUTF8(aFile.Filename) then begin @@ -742,7 +812,7 @@ begin if Keep then begin // this file is the newest version => keep it in cache end else begin - //debugln(['TFPCMsgFilePool.UnloadFile free: ',aFile.Filename]); + //log('TFPCMsgFilePool.UnloadFile free: '+aFile.Filename,aThread); FFiles.Remove(aFile); aFile.Free; end; @@ -762,6 +832,28 @@ begin System.LeaveCriticalsection(fCritSec); end; +procedure TFPCMsgFilePool.GetMsgFileNames(CompilerFilename, TargetOS, + TargetCPU: string; out anEnglishFile, aTranslationFile: string); +var + FPCVer: String; + FPCSrcDir: String; + aFilename: String; +begin + anEnglishFile:=DefaultEnglishFile; + aTranslationFile:=DefaulTranslationFile; + if IsFPCExecutable(CompilerFilename) then + FPCVer:=CodeToolBoss.FPCDefinesCache.GetFPCVersion(CompilerFilename,TargetOS,TargetCPU,false) + else + FPCVer:=''; + FPCSrcDir:=EnvironmentOptions.GetParsedFPCSourceDirectory(FPCVer); + if FilenameIsAbsolute(FPCSrcDir) then begin + aFilename:=AppendPathDelim(FPCSrcDir)+SetDirSeparators('compiler/msg/errore.msg'); + if FileExistsCached(aFilename) then + anEnglishFile:=aFilename; + // ToDo: translation + end; +end; + { TFPCMsgFilePoolItem } constructor TFPCMsgFilePoolItem.Create(aPool: TFPCMsgFilePool; @@ -792,9 +884,9 @@ begin FreeAndNil(fFileExists); FreeAndNil(fLastSource); if TranslationFile<>nil then - FPCMsgFilePool.UnloadFile(TranslationFile); + FPCMsgFilePool.UnloadFile(TranslationFile,nil); if MsgFile<>nil then - FPCMsgFilePool.UnloadFile(MsgFile); + FPCMsgFilePool.UnloadFile(MsgFile,nil); FreeAndNil(DirectoryStack); FreeAndNil(fLineToMsgID); inherited Destroy; @@ -807,7 +899,7 @@ procedure TIDEFPCParser.Init; //debugln(['TFPCParser.Init load Msg filename=',aFilename]); if (aFilename<>'') and (List=nil) then begin try - List:=FPCMsgFilePool.LoadFile(aFilename,true); + List:=FPCMsgFilePool.LoadFile(aFilename,true,nil); except on E: Exception do begin debugln(['TFPCParser.Init failed to load file '+aFilename+': '+E.Message]); @@ -817,11 +909,40 @@ procedure TIDEFPCParser.Init; end; var - Item: TFPCMsgItem; + i: Integer; + Param: String; + p: PChar; + aTargetOS: String; + aTargetCPU: String; begin inherited Init; + + if FPCMsgFilePool<>nil then begin + aTargetOS:=''; + aTargetCPU:=''; + for i:=0 to Tool.Process.Parameters.Count-1 do begin + Param:=Tool.Process.Parameters[i]; + if Param='' then continue; + p:=PChar(Param); + if p^<>'-' then continue; + if p[1]='T' then + aTargetOS:=copy(Param,3,255) + else if p[1]='P' then + aTargetCPU:=copy(Param,3,255); + end; + FPCMsgFilePool.GetMsgFileNames(Tool.Process.Executable,aTargetOS,aTargetCPU, + MsgFilename,TranslationFilename); + end; + LoadMsgFile(MsgFilename,MsgFile); LoadMsgFile(TranslationFilename,TranslationFile); +end; + +procedure TIDEFPCParser.InitReading; +var + Item: TFPCMsgItem; +begin + inherited InitReading; fLineToMsgID.Clear; // FPC logo lines @@ -1571,10 +1692,6 @@ end; constructor TIDEFPCParser.Create(AOwner: TComponent); begin inherited Create(AOwner); - if FPCMsgFilePool<>nil then begin - MsgFilename:=FPCMsgFilePool.DefaultEnglishFile; - TranslationFilename:=FPCMsgFilePool.DefaultLocaleFile; - end; fLineToMsgID:=TPatternToMsgIDs.Create; fFileExists:=TFilenameToPointerTree.Create(false); end; @@ -1984,14 +2101,14 @@ begin Result:=''; if CompareText(SubTool,SubToolFPC)=0 then begin if FPCMsgFilePool=nil then exit; - CurMsgFile:=FPCMsgFilePool.LoadFile(FPCMsgFilePool.DefaultEnglishFile,false); + CurMsgFile:=FPCMsgFilePool.LoadFile(FPCMsgFilePool.DefaultEnglishFile,false,nil); if CurMsgFile=nil then exit; try MsgItem:=CurMsgFile.GetMsg(MsgID); if MsgItem=nil then exit; Result:=MsgItem.GetTrimmedComment(false,true); finally - FPCMsgFilePool.UnloadFile(CurMsgFile); + FPCMsgFilePool.UnloadFile(CurMsgFile,nil); end; end; end; @@ -2005,14 +2122,14 @@ begin Result:=''; if CompareText(SubTool,SubToolFPC)=0 then begin if FPCMsgFilePool=nil then exit; - CurMsgFile:=FPCMsgFilePool.LoadFile(FPCMsgFilePool.DefaultEnglishFile,false); + CurMsgFile:=FPCMsgFilePool.LoadFile(FPCMsgFilePool.DefaultEnglishFile,false,nil); if CurMsgFile=nil then exit; try MsgItem:=CurMsgFile.GetMsg(MsgID); if MsgItem=nil then exit; Result:=MsgItem.Pattern; finally - FPCMsgFilePool.UnloadFile(CurMsgFile); + FPCMsgFilePool.UnloadFile(CurMsgFile,nil); end; end; end; diff --git a/ide/etmakemsgparser.pas b/ide/etmakemsgparser.pas index ada434245d..51602b49bf 100644 --- a/ide/etmakemsgparser.pas +++ b/ide/etmakemsgparser.pas @@ -51,7 +51,7 @@ type DefaultDirectory: string; constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure Init; override; + procedure InitReading; override; procedure ReadLine(Line: string; OutputIndex: integer; var Handled: boolean); override; class function DefaultSubTool: string; override; class function Priority: integer; override; @@ -232,10 +232,10 @@ begin inherited Destroy; end; -procedure TIDEMakeParser.Init; +procedure TIDEMakeParser.InitReading; begin DefaultDirectory:=Tool.WorkerDirectory; - inherited Init; + inherited InitReading; end; procedure TIDEMakeParser.ReadLine(Line: string; OutputIndex: integer; diff --git a/ide/etmessageframe.lfm b/ide/etmessageframe.lfm index 227d0f0e3a..8d339bc884 100644 --- a/ide/etmessageframe.lfm +++ b/ide/etmessageframe.lfm @@ -5,25 +5,24 @@ object MessagesFrame: TMessagesFrame Width = 444 ClientHeight = 106 ClientWidth = 444 - LCLVersion = '1.1' TabOrder = 0 DesignLeft = 297 DesignTop = 171 object SearchPanel: TPanel Left = 0 - Height = 27 - Top = 79 + Height = 24 + Top = 82 Width = 444 Align = alBottom AutoSize = True - ClientHeight = 27 + ClientHeight = 24 ClientWidth = 444 TabOrder = 0 object SearchEdit: TEdit AnchorSideLeft.Control = HideSearchSpeedButton AnchorSideLeft.Side = asrBottom Left = 34 - Height = 25 + Height = 22 Top = 1 Width = 200 BorderSpacing.Left = 10 @@ -41,47 +40,11 @@ object MessagesFrame: TMessagesFrame AnchorSideBottom.Control = SearchEdit AnchorSideBottom.Side = asrBottom Left = 234 - Height = 25 + Height = 22 Top = 1 Width = 23 Anchors = [akTop, akLeft, akBottom] Flat = True - Glyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00256929C4216425C9FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D7533CF488F4DFF458C4AFF2265 - 26D1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF003C8A430638833ED9519957FF79C07EFF76BF7CFF468D - 4BFF236627DB20622306FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0042924AB83D8C45F765AD6CFF7DC282FF7AC180FF4B92 - 50FF276D2CF7246828BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0043944B384E9A55FF81C587FF7EC385FF317A - 36FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0045954CFF85C78CFF82C689FF3682 - 3DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A9E53FF8ACA91FF87C98EFF3C8A - 43FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A659FF8ECC95FF8BCB93FF4292 - 4AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0056AD5FFF93CF9AFF90CE98FF489A - 50FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005BB465FF96D29FFF94D09CFF4EA2 - 57FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005FBB6AFF9AD4A3FF98D3A1FF53AA - 5DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0063C06FFF9ED6A7FF9CD4A5FF59B2 - 63FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0066C572FFA2D8ABFFA0D7A9FF5DB8 - 68FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0068C774FF67C673FF65C270FF62BE - 6DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } OnClick = SearchNextSpeedButtonClick ShowHint = True ParentShowHint = False @@ -93,47 +56,11 @@ object MessagesFrame: TMessagesFrame AnchorSideBottom.Control = SearchNextSpeedButton AnchorSideBottom.Side = asrBottom Left = 257 - Height = 25 + Height = 22 Top = 1 Width = 23 Anchors = [akTop, akLeft, akBottom] Flat = True - Glyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00286E2DFF256929FF216425FF1E60 - 22FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D7533FF74BD7AFF72BD78FF2265 - 26FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00337D39FF79C07EFF76BF7CFF266B - 2BFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0039853FFF7DC282FF7AC180FF2B72 - 30FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003F8D46FF81C587FF7EC385FF317A - 36FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0045954CFF85C78CFF82C689FF3682 - 3DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A9E53FF8ACA91FF87C98EFF3C8A - 43FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A659FF8ECC95FF8BCB93FF4292 - 4AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0056AD5FFF93CF9AFF90CE98FF489A - 50FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005BB465FF96D29FFF94D09CFF5DAC - 65FF499C5238FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0065C371BB62BF6EF779C683FF9AD4A3FF98D3A1FF7DC3 - 86FF4FA458F74A9E53B8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0068C7740666C472DB7CCA87FF9ED6A7FF9CD4A5FF73C0 - 7DFF55AC5ED950A65906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0066C572D17ECA88FF7BC885FF5DB8 - 68CFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0067C673C965C270C4FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } OnClick = SearchPrevSpeedButtonClick ShowHint = True ParentShowHint = False @@ -144,283 +71,16 @@ object MessagesFrame: TMessagesFrame AnchorSideBottom.Control = SearchPanel AnchorSideBottom.Side = asrBottom Left = 1 - Height = 25 + Height = 22 Top = 1 Width = 23 Anchors = [akTop, akLeft, akBottom] Flat = True - Glyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00806D5EFF7C614CFF806249FF816249FF816249FF816249FF816249FF8362 - 48FF816348FF816249FF7C614CFF806D5EFFFFFFFF00FFFFFF00FFFFFF00FFFF - FF007C614CFFE6CCB4FFD1B69CFFD2B59AFFD1B398FFD2B295FFCBAB8EFFCBA9 - 8CFFC8A689FFC6A389FFDCBDA4FF7E614CFFFFFFFF00FFFFFF00FFFFFF00FFFF - FF007C614CFFEED4BCFFEDD2B8FFEFD2B7FFEDCFB4FFEFCFB2FFEECEB1FFF1CF - B2FFF0CEB1FFEFCCB2FFEBCCB3FF7E614CFFFFFFFF00FFFFFF00FFFFFF00FFFF - FF00806D5EFF7C614CFF806249FF816249FF816249FF826449FF816348FF8362 - 48FF836248FF84624AFF7E614CFF806D5EFFFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } OnClick = HideSearchSpeedButtonClick ShowHint = True ParentShowHint = False end end - object ImageList1: TImageList - left = 97 - top = 25 - Bitmap = { - 4C69070000001000000010000000FFFFFF00FFFFFF00FFFFFF0091DEFB0391DE - FB0FFFFFFF00FFFFFF00FFFFFF0000C1FE12FFFFFF0000BDFD6000BAFC1200B7 - FB0F00B4FA09FFFFFF00FFFFFF00FFFFFF00FFFFFF0091DEFB2E91DEFBE791DE - FBBF8FDDFB958FDDFB428DDDFB0200BFFD3C00BCFDA800B9FCC300B6FB8D00B3 - F9C0FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0091DEFB8B91DEFBC290DD - FBFA8FD6F1EA8DD1EBF463D3FAFF4B9EBAF501B9FAFE41C8FEFF28B8FCFF00AF - F8C600ACF76600A8F521FFFFFF00FFFFFF00FFFFFF0091DEFB6190DCF9F887BA - CDF78B8D8EFF98AEB7FF80D4F4FF22C0F8FF43CBFEFF4DC2FFFF3FB0FFFF15A5 - FAFF00A7F56CFFFFFF00FFFFFF00FFFFFF00FFFFFF008D95986E89CDE7FF8FDC - F9FF677479FF6C6C6CFF5F9CB2FF09B5F6FF28BDFCFF44B6FFFF36A3FFFF109E - F9FF0795DBD6009EF218FFFFFF00FFFFFF0083838334787878E4727E82FF8BD1 - EBFF788083FF323232FF858585FF717E83FF03ADF4FF01A9F4FF0EA1F8FF268F - C3FF2E2E2ED529292934FFFFFF00FFFFFF007D7D7D80929292FF505050FF7777 - 77FF5D5D5DFF232323FF6B6B6BFF53859BFF457E98FF228DBFFF3C6E87FF2A7F - AFFF4A4F53FF1F1F1F80FFFFFF00FFFFFF00777777C0929292FF656565FF3232 - 32FF282828FF676767FF797979FF6D6D6DFF616161FF44687AFF4E5051FF4D4D - 4DFF545454FF191919C0FFFFFF00FFFFFF006F6F6FED909090FF7D7D7DFF7D7D - 7DFF7B7B7BFF767676FF6E6E6EFF626262FF595959FF4F4F4FFF484848FF4444 - 44FF545454FF141414EDFFFFFF00FFFFFF00646464ED808080FF717171FF6F6F - 6FFF6C6C6CFF676767FF606060FF575757FF4F4F4FFF474747FF414141FF3D3D - 3DFF4B4B4BFF101010EDFFFFFF00FFFFFF005B5B5BC0707070FF696969FF6161 - 61FF5D5D5DFF5A5A5AFF545454FF4C4C4CFF454545FF3F3F3FFF393939FF3B3B - 3BFF3D3D3DFF0C0C0CC0FFFFFF00FFFFFF004F4F4F80616161FF626262FF5656 - 56FF515151FF4D4D4DFF484848FF424242FF3D3D3DFF373737FF343434FF3C3C - 3CFF2A2A2AFF09090980FFFFFF00FFFFFF00404040343B3B3BD5626262FF5454 - 54FF484848FF434343FF3F3F3FFF3A3A3AFF353535FF313131FF373737FF3C3C - 3CFF090909D507070734FFFFFF00FFFFFF00FFFFFF00313131672C2C2CF15656 - 56FF4C4C4CFF414141FF393939FF353535FF353535FF393939FF3A3A3AFF0909 - 09F106060667FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00232323671E1E - 1ED53A3A3AFF454545FF474747FF424242FF373737FF262626FF070707D50505 - 0567FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001A1A - 1A34131313800F0F0FC00C0C0CED0A0A0AED080808C00606068005050534FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006A85 - FC236984FA7D6782F9DB6580F7F3637EF5F3617CF3DB5F7AF17D5D77EF23FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006984FA536882 - F9E66E83EEFF92A6F4FFA0B4F8FFA0B4F8FF91A6F3FF687DE9FF5973EBE65671 - E953FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006883F9536681F8F48497 - F1FFA9BDFBFF8AA3F8FF6B89F6FF6B89F6FF89A2F8FFA8BCFAFF7F92ECFF526C - E4F44F69E253FFFFFF00FFFFFF00FFFFFF006781F822657FF6E58397F0FFA9BD - FBFF6382F5FF6382F5FFFFFFFFFFFFFFFFFF617EF3FF607CF3FFA6B9F9FF7B8D - EAFF4A64DEE54862DB22FFFFFF00FFFFFF00637EF57E6C81ECFFA9BDFBFF6382 - F5FF6281F5FF6280F4FFFFFFFFFFFFFFFFFF5F7AF1FF5F78F0FF5D76EFFFA5B5 - F8FF5D70DDFF435DD77EFFFFFF00FFFFFF005F7AF1DB91A6F3FF88A1F8FF6280 - F4FF617EF3FF607CF3FFFFFFFFFFFFFFFFFF5D76EFFF5C73EEFF5B70ECFF8293 - F1FF8998ECFF3E58D2DBFFFFFF00FFFFFF005B76EDF6A1B6F8FF6784F4FF607C - F3FF5F7AF1FF5F78F0FFFFFFFFFFFFFFFFFF5B70ECFF5A6EEBFF596CEAFF5F6F - E9FF9BA8F1FF3A53CEF6FFFFFF00FFFFFF005771E9F6A0B3F7FF6580F2FF5F78 - F0FF5D76EFFF5C73EEFFD3D9FAFFFFFFFFFF596CEAFF5869E8FF5767E7FF5D6C - E7FF99A5F1FF354FCAF6FFFFFF00FFFFFF00526DE5DB8E9FF0FF8499F4FF5C73 - EEFF5B70ECFF5A6EEBFF909DF1FFA6AFF3FF5767E7FF5665E6FF5562E5FF7D89 - EBFF8591E7FF314AC6DBFFFFFF00FFFFFF004E68E17E6073E0FFA4B3F7FF5A6E - EBFF596CEAFF5869E8FFFFFFFFFFFFFFFFFF5562E5FF5461E3FF535FE2FF9FA9 - F2FF5061D1FF2D46C27EFFFFFF00FFFFFF004963DC224660DAE57888E6FFA3B0 - F5FF5767E7FF5665E6FF8992EDFF8892ECFF535FE2FF525DE1FF9FA9F2FF6F7D - DDFF2B44C0E52942BE22FFFFFF00FFFFFF00FFFFFF00425CD5533F59D3F47584 - E3FFA1ACF4FF7F8BECFF5C67E4FF5B66E3FF7D87EAFF9FA8F1FF6F7CDDFF2943 - BFF42741BD53FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003A54CF533852 - CCE65264D4FF8490E7FF95A0EEFF959FEDFF838EE5FF4C5DCEFF2841BDE6263F - BB53FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00334D - C823314BC67D2F48C4DB2C46C2F32A44C0F32842BEDB2640BC7D243EBA23FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF003DBFEC033CBCEBD43ABAEAC339B8E803FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF003CBCEB9585D4F1FF82D1F0FF37B5E769FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF003CBCEB123ABAE9F2F1FAFDFFD5EFFAFF35B2E6ED33AFE412FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF003AB9E9B494D8F2FFF3FCFEFFE7FAFEFF8FD3F0FF31ACE396FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003AB9 - E93038B7E8FDF9FDFFFF94E9F9FF9EEBFAFFECFAFEFF2FA9E1FC2DA6E030FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0038B7 - E8D4A9DFF4FFEDF9FDFF3EA3D6FF3EA3D6FFD4F5FCFFA2D7F1FF2BA3DEC3FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0038B6E85A71C8 - EDFFF9FEFFFF5EDCF4FF3EA2D5FF3EA2D5FF5CD9F4FFEDFBFEFF68BBE5FF269C - DB5AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0038B6E80C36B4E6ECC8EA - F7FFE6FAFDFF5DDAF4FF3DA1D5FF3DA1D5FF57D7F2FFC7F3FCFFC0E3F4FF2499 - D9E42296D80CFFFFFF00FFFFFF00FFFFFF00FFFFFF0036B3E6AA8CD2F0FFEAFB - FEFF94E6F8FF5CDAF4FF47B1DDFF3DA1D5FF56D7F2FF5CDBF5FFDEF8FDFF7DC0 - E7FF1D8ED487FFFFFF00FFFFFF00FFFFFF0036B3E62434B1E5FBF3FBFEFFC3F2 - FBFF5CDCF6FF5CDAF4FF64DFF6FF57CBEBFF55D6F2FF54D9F5FF94E7F8FFE3F4 - FBFF1787D0F91380CD24FFFFFF00FFFFFF0034B0E5CA9DD7F1FFE7F9FDFF8BE5 - F8FF5ADBF6FF5BDAF4FF3DA1D5FF3DA1D5FF54D6F2FF52D8F5FF50D6F4FFD8F6 - FCFF88BFE5FF0E79C9B4FFFFFF0034B0E54B62BFE8FFF4FCFEFFB5EFFAFF58DA - F5FF58DAF5FF57D8F3FF58D7F2FF58D6F2FF57D9F4FF51D8F5FF4ED7F4FF62DA - F6FFEAFBFEFF4493D2FF066DC34B31ADE3E3BEE3F5FFF4FCFEFFEFFBFEFFEEFB - FEFFEEFBFEFFEFFCFEFFEFFCFEFFEFFBFEFFEEFBFEFFEDFBFEFFEDFBFEFFECFB - FEFFF2FCFEFFABCEEBFF0368C1D82FAAE2A22DA7E0FF2BA4DFFF29A1DDFF279E - DCFF259BDAFF2398D9FF2093D6FF1B8CD3FF1685CFFF117ECCFF0D77C9FF0971 - C6FF066CC3FF0368C1FF0064BFA2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000101E2000101E3000101E200000000000000000000000000000000000000 - 00000000000000000000000000000000000001B3CC8101B3CCAB01B3CCAB01B3 - CCAB01B3CCAB01B3CCAB01B3CCAB01B3CCAB01B3CCAB01B3CCAB01B3CCAB01B3 - CC3C1FB1D70001B3CC00000000000000000001B1CAAD9CEFFBFF8FEBF9FF8DEA - F8FF8AE9F8FF85E7F6FF7CE3F3FF74E0F0FF6FDDEEFF6FDDEEFF4DC4D5FF01B1 - CAAD01B1CA3D01B1CA00000000000000000001AFC8AE95EDFBFF7EE6F7FF7CE5 - F6FF7BE4F5FF79E3F4FF75E0F1FF70DBECFF6AD7E8FF67D5E6FF45BCCDFFBBF6 - FFFF01AFC8AE01AFC83E000000000000000001ADC6AF97EDFBFF7FE7F8FF7EE6 - F7FF7CE5F6FF7BE4F5FF79E3F4FF75E0F1FF70DBECFF6AD7E8FF37AEBFFF37AE - BFFF37AEBFFF0194ACBF000000000000000001AAC3B199EEFCFF81E9FAFF7FE7 - F8FF7EE6F7FF7CE5F6FF7BE4F5FF79E3F4FF75E0F1FF70DBECFF6AD7E8FF67D5 - E6FF6FDDEEFF01AAC3B1000000000000000001A7C0B39BEFFDFF82EAFBFF81E9 - FAFF7FE7F8FF7EE6F7FF7CE5F6FF7BE4F5FF79E3F4FF75E0F1FF70DBECFF6AD7 - E8FF6FDDEEFF01A7C0B3000000000000000001A4BCB59DF0FDFF84EBFCFF82EA - FBFF81E9FAFF7FE7F8FF7EE6F7FF7CE5F6FF7BE4F5FF79E3F4FF75E0F1FF70DB - ECFF74E0F0FF01A4BCB5000000000000000001A1B9B79EF1FEFF85ECFDFF84EB - FCFF82EAFBFF81E9FAFF7FE7F8FF7EE6F7FF7CE5F6FF7BE4F5FF79E3F4FF75E0 - F1FF7CE3F3FF01A1B9B70000000000000000019EB5B9A0F1FFFF86ECFDFF85EC - FDFF84EBFCFF82EAFBFF81E9FAFF7FE7F8FF7EE6F7FF7CE5F6FF7BE4F5FF79E3 - F4FF85E7F6FF019EB5B90000000000000000019AB2BBA1F2FFFF87EDFEFF86EC - FDFF85ECFDFF84EBFCFF82EAFBFF81E9FAFF7FE7F8FF7EE6F7FF7CE5F6FF7BE4 - F5FF8AE9F8FF019AB2BB00000000000000000091A8C1AFF4FFFFA1F2FFFFA0F1 - FFFF9EF1FEFF9CF0FDFF9BEFFDFF99EEFCFF97EDFBFF95EDFBFF92ECFAFF90EA - F9FF96ECFAFF0091A8C1000000000000000000869D9600859CC900859CC90085 - 9CC900859CC900859CC900859CC900859CC900859CC900859CC900859CC90085 - 9CC900859CC900869D9600000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B8875812B88758A5B887 - 58F9B88758FFB88758FFB88758FFB88758FFB88758FFB88758FFB88758FFB887 - 58BAB8875824FFFFFF00FFFFFF00FFFFFF00FFFFFF00B88758B1DAC1A9FFFDFC - FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC9 - B4FFB88758DBB8875806FFFFFF00FFFFFF00B887580CB88758FCFEFEFDFFFEF6 - F0FFFEF2E9FFFEF1E6FFFEEFE4FFFEEEE1FFFEECDEFFFDEADBFFFDEADCFFFFFF - FFFFC7A07BFFB8875836FFFFFF00FFFFFF00B887581EC0956CFFFFFFFFFFFEF1 - E8FFFEF0E6FFFEEFE3FFFEEDE0FFFEECDDFFFDEADBFFFDE8D7FFFDE6D5FFFFFF - FFFFCDAA89FFB887584BFFFFFF00FFFFFF00B887581EC0956CFFFFFFFFFFFEF0 - E5FFFEEEE2FFFEEDE0FFFEEBDDFFFDE9DAFFFDE8D7FFFDE6D4FFFDE4D1FFFFFF - FFFFCDAA89FFB887584BFFFFFF00FFFFFF00B887580CB88758FCFEFEFDFFFEF2 - E9FFFEECDFFFFDEBDCFFFDE9D9FFFDE7D6FFFDE6D3FFFDE4D0FFFCE4D1FFFFFF - FFFFC8A27DFFB8875839FFFFFF00FFFFFF00FFFFFF00B88758B1DAC1A9FFFEFE - FDFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEE2FFFDE3D0FFFEF2E9FFFFFFFFFFDFC9 - B4FFB88758DBB8875809FFFFFF00FFFFFF00FFFFFF00B8875812B88758A5B887 - 58FCB88758FFB88758FFD5B89DFFFFFFFFFFFFFFFFFFF8F3EFFFD5B89DFFB887 - 58D3B8875824FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00B88758DCF5EEE7FFD5B89DFFB88758F7B887587DFFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00B887588DD4B699FFB88758F4B8875871FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00B8875822B88758DEB8875864FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D898 - 5223D4964D7DD2924CDBCD8C45F3CB8B41F3C98B40DBC78B407DC5873D23FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D6974F53D191 - 49E6D0A06AFFE0BFA0FFE3C5AEFFE3C5AEFFDFBC9FFFC89762FFBD7D35E6BC7E - 3553FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D4964D53CF8D47F4D9B2 - 8CFFE6CDB8FFE0BA9DFFD7AB85FFD6A982FFD9B391FFE1C2ABFFD4AE86FFB16B - 35F4B16F3553FFFFFF00FFFFFF00FFFFFF00D2934C22CE8E47E5D9B28CFFE6CA - B3FFD6A97DFFD1A579FFE2C4A8FFE1C3A8FFD0A276FFD1A477FFDDBDA2FFD0AC - 85FFAB6635E5A9653522FFFFFF00FFFFFF00CE91477ECD9C68FFE7CBB4FFD4A5 - 7AFFD0A077FFCF9E74FFFBF8F5FFFBF8F5FFCB9E71FFCB9D71FFCDA177FFDFC0 - A5FFB98A5BFFA45C347EFFFFFF00FFFFFF00CB8E41DBE0BC9FFFDBB393FFCFA0 - 75FFCD9E72FFCB9C71FFDDBFA3FFDDBFA2FFC5996BFFC5996BFFC4986BFFD1AB - 85FFD8BA97FF9E5635DBFFFFFF00FFFFFF00C5853BF6E4C9B0FFD0A37AFFCC9D - 71FFC79A6CFFC5986BFFFFFFFFFFFFFFFEFFC39669FFC19468FFC29468FFC398 - 6DFFDFC5ABFF955334F6FFFFFF00FFFFFF00BF7E35F6E3C7AFFFD0A276FFC599 - 6BFFC4976AFFC49669FFEEE0D4FFFBF7F4FFBF9066FFBE8F65FFBE8F64FFBE92 - 69FFDFC6AAFF925034F6FFFFFF00FFFFFF00BC7E35DBDBBC9CFFD5AD89FFC798 - 6CFFC39569FFC19367FFEDDFD3FFFAF7F4FFBB8B63FFB98A63FFB88A62FFC59D - 78FFD2B893FF905135DBFFFFFF00FFFFFF00B878357EBF915EFFE0C2A8FFC596 - 6CFFC29169FFE1CBB8FFFEFDFCFFFFFFFEFFEADCD0FFB4855EFFB3855EFFD4B5 - 99FFAE7B56FF8F51357EFFFFFF00FFFFFF00AF703522AB6935E5CFAA81FFDABC - A2FFBE9166FFBA8C62FFB7895FFFB3845EFFB1835DFFB0835CFFCDAA8DFFC6A5 - 79FF895034E589503522FFFFFF00FFFFFF00FFFFFF00A76234539F5533F4CBA7 - 7DFFD8BB9FFFC39C77FFB68A62FFB48660FFBE9672FFD1B397FFC5A377FF844F - 35F489503553FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009F5634539955 - 34E6B28057FFD5B793FFDBC3A6FFDAC3A6FFD2B490FFAB7A52FF864F34E68850 - 3553FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009754 - 35239453347D925234DB8A5034F3884F34F3895035DB8950357D84503623FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0069452100694521006945210069452100694521006945210069452100FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EA84 - 6220EC866487EC8664D0EC8664F5EC8664F5EC8664D0EC866487EA8462206945 - 2100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00DF7A5860E384 - 64EBEFB7A4FFFAE4DDFFFEF9F7FFFEF9F7FFFAE4DDFFEFB7A4FFE38464EBDF7A - 586069452100FFFFFF00FFFFFF00FFFFFF00FFFFFF00CF6B4960D77F61F9F6E3 - DCFFFCFCFCFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFCFCFCFFF6E3DCFFD77F - 61F9CF6B4960FFFFFF00FFFFFF00FFFFFF00BF5C3A20C56747EBF2DFD9FFF8F8 - F8FFF7F7F7FFC15D3BFFC15D3BFFC15D3BFFC15D3BFFE9D0C8FFF8F8F8FFF2DF - D9FFC56747EBBF5C3A20FFFFFF00FFFFFF00B34F2D87D49D8AFFF5F5F5FFF3F3 - F3FFF3F3F3FFDAA998FFDAA998FFCF8E78FFB34F2DFFD3A190FFF3F3F3FFF5F5 - F5FFD49C89FFB34F2D87FFFFFF00FFFFFF00AB4624D0EAD5CDFFF0F0F0FFF0F0 - F0FFF0F0F0FFEBEBEBFFE0E0E0FFC89C8DFFAB4624FFBD8A79FFCECECEFFD2D1 - D1FFDCC7C0FFAB4624D0FFFFFF00FFFFFF00AD4422F5F4EFEDFFEEEEEEFFEAEA - EAFFDCDBDBFFD3D1D1FFC7A69CFFAE4725FFC1735AFFDEDCDCFFD2D0D0FFD2D0 - D0FFDFD8D7FFAD4422F5FFFFFF00FFFFFF00B74826F5F4EEEDFFE7E5E5FFDAD6 - D6FFD8D4D4FFD8D4D4FFB74826FFB74826FFE3DFDFFFD8D4D4FFD8D4D4FFD8D4 - D4FFE1D8D6FFB74826F5FFFFFF00FFFFFF00C5502ED0EAD0C8FFE1DADAFFE0D9 - D9FFE0D9D9FFE0D9D9FFF1EDEDFFF1EDEDFFE0D9D9FFE0D9D9FFE0D9D9FFE0D9 - D9FFE1C4BDFFC5502ED0FFFFFF00FFFFFF00D6593787E59D8AFFEAE2E2FFE7DF - DFFFE7DFDFFFE7DFDFFFD65937FFD65937FFE7DFDFFFE7DFDFFFE7DFDFFFE8E0 - E0FFE19784FFD6593787FFFFFF00FFFFFF00E3603E20E66A4AEBF3D3CDFFF0E5 - E5FFEFE4E4FFEFE4E4FFE5613FFFE5613FFFEFE4E4FFEFE4E4FFEFE4E4FFEFCD - C7FFE66A4AEBE3603E20FFFFFF00FFFFFF00FFFFFF00EE664460EF7659F9F7D4 - CEFFF7E9E9FFF7E8E8FFFCF4F4FFFCF4F4FFF7E8E8FFF7E9E9FFF6D1CAFFEF76 - 58F9EE664460FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EE664460EF6F - 4FEBF5A28FFFFAD1CAFFFCE7E5FFFCE6E5FFF9D1C9FFF4A18EFFEF6E4EEBEE66 - 4460FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EE66 - 4420EE664487EE6644D0EE6644F5EE6644F5EE6644D0EE664487EE664420FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF006945210069452100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00 - } - end object MsgCtrlPopupMenu: TPopupMenu OnPopup = MsgCtrlPopupMenuPopup OnClose = MsgCtrlPopupMenuClose diff --git a/ide/etmessageframe.pas b/ide/etmessageframe.pas index 1aecb6e762..818c8df5a3 100644 --- a/ide/etmessageframe.pas +++ b/ide/etmessageframe.pas @@ -36,7 +36,7 @@ uses LazUTF8Classes, LazFileUtils, LazUTF8, AvgLvlTree, SynEdit, LResources, Forms, Buttons, ExtCtrls, Controls, LMessages, LCLType, Graphics, LCLIntf, Themes, ImgList, GraphType, Menus, Clipbrd, Dialogs, StdCtrls, - IDEExternToolIntf, etSrcEditMarks, etQuickFixes; + IDEExternToolIntf, IDEImagesIntf, MenuIntf, etSrcEditMarks, etQuickFixes; const CustomViewCaption = '------------------------------'; @@ -221,7 +221,7 @@ type FHeaderBackground: array[TLMVToolState] of TColor; FIdleConnected: boolean; FImageChangeLink: TChangeLink; - FImages: TImageList; + FImages: TCustomImageList; FItemHeight: integer; FOnAllViewsStopped: TNotifyEvent; FOnOpenMessage: TOnOpenMessageLine; @@ -253,7 +253,7 @@ type procedure SetActiveFilter(AValue: TLMsgViewFilter); procedure SetHeaderBackground(aToolState: TLMVToolState; AValue: TColor); procedure SetIdleConnected(AValue: boolean); - procedure SetImages(AValue: TImageList); + procedure SetImages(AValue: TCustomImageList); procedure SetItemHeight(AValue: integer); procedure SetOptions(NewOptions: TMsgCtrlOptions); procedure SetScrollLeft(AValue: integer); @@ -368,7 +368,7 @@ type property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor default MCDefaultBackground; property HeaderBackground[aToolState: TLMVToolState]: TColor read GetHeaderBackground write SetHeaderBackground; property AutoHeaderBackground: TColor read FAutoHeaderBackground write SetAutoHeaderBackground default MCDefaultAutoHeaderBackground; - property Images: TImageList read FImages write SetImages; + property Images: TCustomImageList read FImages write SetImages; property UrgencyStyles[Urgency: TMessageLineUrgency]: TMsgCtrlUrgencyStyle read GetUrgencyStyles write SetUrgencyStyles; property SearchText: string read FSearchText write SetSearchText; property IdleConnected: boolean read FIdleConnected write SetIdleConnected; @@ -383,48 +383,13 @@ type { TMessagesFrame } TMessagesFrame = class(TFrame) - AboutToolMenuItem: TMenuItem; - AddFilterMenuItem: TMenuItem; - ClearHideMsgTypesMenuItem: TMenuItem; - CopyAllMenuItem: TMenuItem; - CopyFilenameMenuItem: TMenuItem; - CopyMenuItem: TMenuItem; - CopyMsgMenuItem: TMenuItem; - CopySeparatorMenuItem: TMenuItem; - CopyShownMenuItem: TMenuItem; - FilenameStyleMenuItem: TMenuItem; - FileStyleFullMenuItem: TMenuItem; - FileStyleRelativeMenuItem: TMenuItem; - FileStyleShortMenuItem: TMenuItem; - FilterSeparatorMenuItem: TMenuItem; - FindMenuItem: TMenuItem; - HideBelowMenuItem: TMenuItem; - HideDebugMenuItem: TMenuItem; - HideHintsMenuItem: TMenuItem; - HideHintsWithoutPosMenuItem: TMenuItem; - HideMsgOfTypeMenuItem: TMenuItem; - HideNoneMenuItem: TMenuItem; - HideNotesMenuItem: TMenuItem; HideSearchSpeedButton: TSpeedButton; - HideSeparatorMenuItem: TMenuItem; - HideVerboseMenuItem: TMenuItem; - HideWarningsMenuItem: TMenuItem; - ImageList1: TImageList; - InfoSeparatorMenuItem: TMenuItem; MsgCtrlPopupMenu: TPopupMenu; - QuickFixesMenuItem: TMenuItem; - SaveAllToFileMenuItem: TMenuItem; - SaveShownToFileMenuItem: TMenuItem; - SaveToFileMenuItem: TMenuItem; SearchEdit: TEdit; SearchNextSpeedButton: TSpeedButton; SearchPanel: TPanel; SearchPrevSpeedButton: TSpeedButton; ShowIDMenuItem: TMenuItem; - StyleSeparatorMenuItem: TMenuItem; - SwitchFilterMenuItem: TMenuItem; - TranslateMenuItem: TMenuItem; - UnhideMsgTypeMenuItem: TMenuItem; UnhideMsgTypeSeparatorMenuItem: TMenuItem; procedure AboutToolMenuItemClick(Sender: TObject); procedure AddFilterMenuItemClick(Sender: TObject); @@ -495,11 +460,109 @@ type function GetDefaultSearchText: string; end; +const + MessagesMenuRootName = 'Messages'; +var + MsgFindMenuItem: TIDEMenuCommand; + MsgQuickFixMenuSection: TIDEMenuSection; + MsgClearMenuItem: TIDEMenuCommand; + MsgHideMsgOfTypeMenuItem: TIDEMenuCommand; + MsgUnhideMsgTypeMenuSection: TIDEMenuSection; + MsgClearHideMsgTypesMenuItem: TIDEMenuCommand; + MsgHideBelowMenuSection: TIDEMenuSection; + MsgHideWarningsMenuItem: TIDEMenuCommand; + MsgHideNotesMenuItem: TIDEMenuCommand; + MsgHideHintsMenuItem: TIDEMenuCommand; + MsgHideVerboseMenuItem: TIDEMenuCommand; + MsgHideDebugMenuItem: TIDEMenuCommand; + MsgHideNoneMenuItem: TIDEMenuCommand; + MsgHideHintsWithoutPosMenuItem: TIDEMenuCommand; + MsgSwitchFilterMenuSection: TIDEMenuSection; + MsgFiltersMenuSection: TIDEMenuSection; + MsgAddFilterMenuItem: TIDEMenuCommand; + MsgCopyMenuSection: TIDEMenuSection; + MsgCopyFilenameMenuItem: TIDEMenuCommand; + MsgCopyMsgMenuItem: TIDEMenuCommand; + MsgCopyShownMenuItem: TIDEMenuCommand; + MsgCopyAllMenuItem: TIDEMenuCommand; + MsgSaveToFileMenuSection: TIDEMenuSection; + MsgSaveAllToFileMenuItem: TIDEMenuCommand; + MsgSaveShownToFileMenuItem: TIDEMenuCommand; + MsgFilenameStyleMenuSection: TIDEMenuSection; + MsgFileStyleShortMenuItem: TIDEMenuCommand; + MsgFileStyleRelativeMenuItem: TIDEMenuCommand; + MsgFileStyleFullMenuItem: TIDEMenuCommand; + MsgTranslateMenuItem: TIDEMenuCommand; + MsgShowIDMenuItem: TIDEMenuCommand; + MsgAboutToolMenuItem: TIDEMenuCommand; + +procedure RegisterStandardMessagesViewMenuItems; + function CompareHideMsgType(HideMsgType1, HideMsgType2: Pointer): integer; function CompareLineAndHideMsgType(MessageLine1, HideMsgType1: Pointer): integer; implementation +procedure RegisterStandardMessagesViewMenuItems; +var + Path: String; + Parent: TIDEMenuSection; +begin + MessagesMenuRoot := RegisterIDEMenuRoot(MessagesMenuRootName); + Path := MessagesMenuRoot.Name; + MsgFindMenuItem := RegisterIDEMenuCommand(Path, 'Find', 'Find ...'); + MsgQuickFixMenuSection := RegisterIDEMenuSection(Path, 'Quick Fix'); + MsgClearMenuItem := RegisterIDEMenuCommand(Path, 'Clear', lisClear); + MsgHideMsgOfTypeMenuItem:=RegisterIDEMenuCommand(Path,'HideMsgOfType',''); + MsgUnhideMsgTypeMenuSection:=RegisterIDEMenuCommand(Parent,'UnhideMsgType'); + Parent:=MsgUnhideMsgTypeMenuSection; + Parent.ChildsAsSubMenu:=true; + Parent.Caption:='Unhide message type'; + MsgUnhideMsgOfTypeMenuSection:=RegisterIDEMenuSection(Parent,'UnhideMsgOfTypeSection'); + MsgClearHideMsgTypesMenuItem:=RegisterIDEMenuCommand(Parent,'Unhide all','Unhide all'); + MsgHideBelowMenuSection:=RegisterIDEMenuSection(Path,'Hide Below Section'); + Parent:=MsgHideBelowMenuSection; + Parent.ChildsAsSubMenu:=true; + Parent.Caption:='Hide non urgent messages ...'; + MsgHideWarningsMenuItem:=RegisterIDEMenuCommand(Parent,'Hide warnings','Hide warnings'); + MsgHideNotesMenuItem:=RegisterIDEMenuCommand(Parent,'Hide notes','Hide notes'); + MsgHideHintsMenuItem:=RegisterIDEMenuCommand(Parent,'Hide hints','Hide hints'); + MsgHideVerboseMenuItem:=RegisterIDEMenuCommand(Parent,'Hide verbose messages','Hide verbose messages'); + MsgHideDebugMenuItem:=RegisterIDEMenuCommand(Parent,'Hide debug messages','Hide debug messages'); + MsgHideNoneMenuItem:=RegisterIDEMenuCommand(Parent,'Hide none, do not hide by urgency','Hide none, do not hide by urgency'); + MsgHideHintsWithoutPosMenuItem:=RegisterIDEMenuCommand(Path, 'Hide hints without source position', 'Hide hints without source position'); + MsgSwitchFilterMenuSection:=RegisterIDEMenuSection(Path,'Switch Filter Section'); + Parent:=MsgSwitchFilterMenuSection; + Parent.ChildsAsSubMenu:=true; + Parent.Caption:='Switch Filter Settings ...'; + MsgFiltersMenuSection:=RegisterIDEMenuSection(Parent,'Filters'); + MsgAddFilterMenuItem:=RegisterIDEMenuCommand(Parent,'Add Filter','Add filter ...'); + MsgCopyMenuSection:=RegisterIDEMenuSection(Path,'Copy'); + Parent:=MsgCopyMenuSection; + Parent.ChildsAsSubMenu:=true; + Parent.Caption:='Copy ...'; + MsgCopyFilenameMenuItem:=RegisterIDEMenuCommand(Parent,'Filename','Copy file name to clipboard'); + MsgCopyMsgMenuItem := RegisterIDEMenuCommand(Parent, 'Selected',lisCopySelectedMessagesToClipboard); + MsgCopyShownMenuItem: := RegisterIDEMenuCommand(Parent, 'Shown', 'Copy shown messages to clipboard'); + MsgCopyAllMenuItem:=RegisterIDEMenuCommand(Parent,'All'.'Copy all/original messages to clipboard'); + MsgSaveToFileMenuSection:=RegisterIDEMenuSection(Path,'Save'); + Parent:=MsgSaveToFileMenuSection; + Parent.ChildsAsSubMenu:=true; + Parent.Caption:='Save ...'; + MsgSaveShownToFileMenuItem:=RegisterIDEMenuCommand(Parent,'Save shown messages to file ...','Shown'); + MsgSaveAllToFileMenuItem:=RegisterIDEMenuCommand(Parent,'Save all/original messages to file ...','All'); + MsgFilenameStyleMenuSection:=RegisterIDEMenuSection(Path,'Filename Styles'); + Parent:=MsgFilenameStyleMenuSection; + Parent.ChildsAsSubMenu:=true; + Parent.Caption:='Filename Style ...'; + MsgFileStyleShortMenuItem:=RegisterIDEMenuCommand(Parent,'Short','Short, no path'); + MsgFileStyleRelativeMenuItem:=RegisterIDEMenuCommand(Parent,'Relative','Relative'); + MsgFileStyleFullMenuItem:=RegisterIDEMenuCommand(Parent,'Full','Full'); + MsgTranslateMenuItem:=RegisterIDEMenuCommand(Path, 'Translate', 'Translate'); + MsgShowIDMenuItem:=RegisterIDEMenuCommand(Path, 'ShowID', 'Show message type ID'); + MsgAboutToolMenuItem:=RegisterIDEMenuCommand(Path, 'About', 'About Tool'); +end; + function CompareHideMsgType(HideMsgType1, HideMsgType2: Pointer): integer; var Item1: TLMVFilterHideMsgType absolute HideMsgType1; @@ -1421,7 +1484,7 @@ begin Application.RemoveOnIdleHandler(@OnIdle); end; -procedure TMessagesCtrl.SetImages(AValue: TImageList); +procedure TMessagesCtrl.SetImages(AValue: TCustomImageList); begin if FImages=AValue then Exit; if Images <> nil then @@ -2968,11 +3031,11 @@ begin end; InfoSeparatorMenuItem.Visible:=true; - AboutToolMenuItem.Caption:='About '+View.Caption; - AboutToolMenuItem.Visible:=true; + MsgAboutToolMenuItem.Caption:='About '+View.Caption; + MsgAboutToolMenuItem.Visible:=true; end else begin InfoSeparatorMenuItem.Visible:=false; - AboutToolMenuItem.Visible:=false; + MsgAboutToolMenuItem.Visible:=false; end; if CanHideMsgType then begin @@ -2981,26 +3044,26 @@ begin end else begin HideMsgOfTypeMenuItem.Visible:=false; end; - HideHintsWithoutPosMenuItem.Checked:=MessagesCtrl.ActiveFilter.HideNotesWithoutPos; + MsgHideHintsWithoutPosMenuItem.Checked:=MessagesCtrl.ActiveFilter.HideNotesWithoutPos; - CopyMsgMenuItem.Enabled:=HasText; - CopyFilenameMenuItem.Enabled:=HasFilename; - CopyAllMenuItem.Enabled:=not Running; - CopyShownMenuItem.Enabled:=HasViewContent; - SaveAllToFileMenuItem.Enabled:=not Running; - SaveShownToFileMenuItem.Enabled:=HasViewContent; + MsgCopyMsgMenuItem.Enabled:=HasText; + MsgCopyFilenameMenuItem.Enabled:=HasFilename; + MsgCopyAllMenuItem.Enabled:=not Running; + MsgCopyShownMenuItem.Enabled:=HasViewContent; + MsgSaveAllToFileMenuItem.Enabled:=not Running; + MsgSaveShownToFileMenuItem.Enabled:=HasViewContent; MinUrgency:=MessagesCtrl.ActiveFilter.MinUrgency; - HideWarningsMenuItem.Checked:=MinUrgency in [mluError..mluPanic]; - HideNotesMenuItem.Checked:=MinUrgency in [mluWarning,mluImportant]; - HideHintsMenuItem.Checked:=MinUrgency=mluNote; - HideVerboseMenuItem.Checked:=MinUrgency=mluHint; - HideDebugMenuItem.Checked:=MinUrgency in [mluProgress..mluVerbose]; - HideNoneMenuItem.Checked:=MinUrgency=mluNone; + MsgHideWarningsMenuItem.Checked:=MinUrgency in [mluError..mluPanic]; + MsgHideNotesMenuItem.Checked:=MinUrgency in [mluWarning,mluImportant]; + MsgHideHintsMenuItem.Checked:=MinUrgency=mluNote; + MsgHideVerboseMenuItem.Checked:=MinUrgency=mluHint; + MsgHideDebugMenuItem.Checked:=MinUrgency in [mluProgress..mluVerbose]; + MsgHideNoneMenuItem.Checked:=MinUrgency=mluNone; - FileStyleShortMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsShort; - FileStyleRelativeMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsRelative; - FileStyleFullMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsFull; + MsgFileStyleShortMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsShort; + MsgFileStyleRelativeMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsRelative; + MsgFileStyleFullMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsFull; UpdateUnhideItems; UpdateFilterItems; @@ -3071,7 +3134,7 @@ end; procedure TMessagesFrame.TranslateMenuItemClick(Sender: TObject); begin - if TranslateMenuItem.Checked then + if MsgTranslateMenuItem.Checked then MessagesCtrl.Options:=MessagesCtrl.Options+[mcoShowTranslated] else MessagesCtrl.Options:=MessagesCtrl.Options-[mcoShowTranslated]; @@ -3131,11 +3194,11 @@ end; procedure TMessagesFrame.FileStyleMenuItemClick(Sender: TObject); begin - if Sender=FileStyleShortMenuItem then + if Sender=MsgFileStyleShortMenuItem then MessagesCtrl.FilenameStyle:=mcfsShort - else if Sender=FileStyleRelativeMenuItem then + else if Sender=MsgFileStyleRelativeMenuItem then MessagesCtrl.FilenameStyle:=mcfsRelative - else if Sender=FileStyleFullMenuItem then + else if Sender=MsgFileStyleFullMenuItem then MessagesCtrl.FilenameStyle:=mcfsFull; end; @@ -3148,7 +3211,7 @@ end; procedure TMessagesFrame.HideHintsWithoutPosMenuItemClick(Sender: TObject); begin - MessagesCtrl.ActiveFilter.HideNotesWithoutPos:=HideHintsWithoutPosMenuItem.Checked; + MessagesCtrl.ActiveFilter.HideNotesWithoutPos:=MsgHideHintsWithoutPosMenuItem.Checked; end; procedure TMessagesFrame.HideMsgOfTypeMenuItemClick(Sender: TObject); @@ -3165,17 +3228,17 @@ procedure TMessagesFrame.HideUrgencyMenuItemClick(Sender: TObject); var MinUrgency: TMessageLineUrgency; begin - if Sender=HideWarningsMenuItem then + if Sender=MsgHideWarningsMenuItem then MinUrgency:=mluError - else if Sender=HideNotesMenuItem then + else if Sender=MsgHideNotesMenuItem then MinUrgency:=mluWarning - else if Sender=HideHintsMenuItem then + else if Sender=MsgHideHintsMenuItem then MinUrgency:=mluNote - else if Sender=HideVerboseMenuItem then + else if Sender=MsgHideVerboseMenuItem then MinUrgency:=mluHint - else if Sender=HideDebugMenuItem then + else if Sender=MsgHideDebugMenuItem then MinUrgency:=mluVerbose3 - else if Sender=HideNoneMenuItem then + else if Sender=MsgHideNoneMenuItem then MinUrgency:=mluNone; MessagesCtrl.ActiveFilter.MinUrgency:=MinUrgency; end; @@ -3396,74 +3459,54 @@ begin end; constructor TMessagesFrame.Create(TheOwner: TComponent); +var + ImgIDInfo: Integer; + ImgIDHint: Integer; + ImgIDNote: Integer; + ImgIDWarning: Integer; + ImgIDError: Integer; + ImgIDFatal: Integer; begin inherited Create(TheOwner); MessagesCtrl:=TMessagesCtrl.Create(Self); + ImgIDInfo:=IDEImages.LoadImage(12, 'state12x12_information'); + ImgIDHint:=IDEImages.LoadImage(12, 'state12x12_hint'); + ImgIDNote:=IDEImages.LoadImage(12, 'state12x12_note'); + ImgIDWarning:=IDEImages.LoadImage(12, 'state12x12_warning'); + ImgIDError:=IDEImages.LoadImage(12, 'state12x12_error'); + ImgIDFatal:=IDEImages.LoadImage(12, 'state12x12_fatal'); with MessagesCtrl do begin Name:='MessagesCtrl'; Align:=alClient; Parent:=Self; - UrgencyStyles[mluNone].SetValues('?',6,clDefault); - UrgencyStyles[mluProgress].SetValues('Fortschritt',5,clDefault); - UrgencyStyles[mluDebug].SetValues('Debug',5,clDefault); - UrgencyStyles[mluVerbose3].SetValues('ExtAusfuehrlich',5,clDefault); - UrgencyStyles[mluVerbose2].SetValues('SehrAusfuerhlich',5,clDefault); - UrgencyStyles[mluVerbose].SetValues('Ausfuerhlich',5,clDefault); - UrgencyStyles[mluHint].SetValues('Hinweis',4,clDefault); - UrgencyStyles[mluNote].SetValues('Note',3,clDefault); - UrgencyStyles[mluWarning].SetValues('Warnung',2,clDefault); - UrgencyStyles[mluImportant].SetValues('Sonstiges',4,clDefault); - UrgencyStyles[mluError].SetValues('Fehler',1,clDefault); - UrgencyStyles[mluFatal].SetValues('Fatal',0,clDefault); - UrgencyStyles[mluPanic].SetValues('Panik',0,clDefault); - Images:=ImageList1; + + UrgencyStyles[mluNone].SetValues('?',ImgIDInfo,clDefault); + UrgencyStyles[mluProgress].SetValues('Fortschritt',ImgIDInfo,clDefault); + UrgencyStyles[mluDebug].SetValues('Debug',ImgIDInfo,clDefault); + UrgencyStyles[mluVerbose3].SetValues('ExtAusfuehrlich',ImgIDInfo,clDefault); + UrgencyStyles[mluVerbose2].SetValues('SehrAusfuerhlich',ImgIDInfo,clDefault); + UrgencyStyles[mluVerbose].SetValues('Ausfuerhlich',ImgIDInfo,clDefault); + UrgencyStyles[mluHint].SetValues('Hinweis',ImgIDHint,clDefault); + UrgencyStyles[mluNote].SetValues('Note',ImgIDNote,clDefault); + UrgencyStyles[mluWarning].SetValues('Warnung',ImgIDWarning,clDefault); + UrgencyStyles[mluImportant].SetValues('Sonstiges',ImgIDInfo,clDefault); + UrgencyStyles[mluError].SetValues('Fehler',ImgIDError,clDefault); + UrgencyStyles[mluFatal].SetValues('Fatal',ImgIDFatal,clDefault); + UrgencyStyles[mluPanic].SetValues('Panik',ImgIDFatal,clDefault); + Images:=IDEImages.Images_12; PopupMenu:=MsgCtrlPopupMenu; end; - // popup menu - QuickFixesMenuItem.Caption:='Quick Fix ...'; - FindMenuItem.Caption:='Find ...'; - // popup menu: filter - HideBelowMenuItem.Caption:='Hide non urgent messages ...'; - HideWarningsMenuItem.Caption:='Hide warnings'; - HideNotesMenuItem.Caption:='Hide notes'; - HideHintsMenuItem.Caption:='Hide hints'; - HideVerboseMenuItem.Caption:='Hide verbose messages'; - HideDebugMenuItem.Caption:='Hide debug messages'; - HideNoneMenuItem.Caption:='Hide none, do not hide by urgency'; - HideVerboseMenuItem.Checked:=true; - // HideMsgOfTypeMenuItem.Caption:=automatically in OnPopup - UnhideMsgTypeMenuItem.Caption:='Unhide message type'; - ClearHideMsgTypesMenuItem.Caption:='Unhide all above'; - HideHintsWithoutPosMenuItem.Caption:='Hide hints without source position'; - SwitchFilterMenuItem.Caption:='Switch filter settings ...'; - AddFilterMenuItem.Caption:='Add filter'; - // popup menu: copy and save messages - CopyMenuItem.Caption:='Copy ...'; - CopyFilenameMenuItem.Caption:='Copy file name'; - CopyMsgMenuItem.Caption:='Copy selected messages'; - CopyShownMenuItem.Caption:='Copy shown messages'; - CopyAllMenuItem.Caption:='Copy all messages'; - SaveToFileMenuItem.Caption:='Save to file ...'; - SaveShownToFileMenuItem.Caption:='Save shown messages to file ...'; - SaveAllToFileMenuItem.Caption:='Save all messages to file ...'; - // popup menu: view options - TranslateMenuItem.Caption:='Translate'; - TranslateMenuItem.Checked:=mcoShowTranslated in MessagesCtrl.Options; - ShowIDMenuItem.Caption:='Show message type ID'; - ShowIDMenuItem.Checked:=mcoShowMessageID in MessagesCtrl.Options; - FilenameStyleMenuItem.Caption:='File name style'; - FileStyleShortMenuItem.Caption:='Short, no path'; - FileStyleRelativeMenuItem.Caption:='Relative'; - FileStyleFullMenuItem.Caption:='Full'; - // search SearchPanel.Visible:=false; // by default the search is hidden HideSearchSpeedButton.Hint:='Hide Search'; + HideSearchSpeedButton.LoadGlyphFromLazarusResource('debugger_power_grey'); SearchEdit.Text:=GetDefaultSearchText; SearchNextSpeedButton.Hint:='Find the next occurence of the phrase'; + SearchNextSpeedButton.LoadGlyphFromLazarusResource('callstack_bottom'); SearchPrevSpeedButton.Hint:='Find the previous occurence of the phrase'; + SearchPrevSpeedButton.LoadGlyphFromLazarusResource('callstack_top'); end; destructor TMessagesFrame.Destroy; diff --git a/ide/etmessageswnd.pas b/ide/etmessageswnd.pas index 5f16e8b369..53f344ca9e 100644 --- a/ide/etmessageswnd.pas +++ b/ide/etmessageswnd.pas @@ -44,13 +44,6 @@ type procedure FormDestroy(Sender: TObject); function OnOpenMessage(Sender: TObject; Msg: TMessageLine): boolean; private - ImgIDNone: integer; - ImgIDInformation: integer; - ImgIDHint: integer; - ImgIDNote: integer; - ImgIDWarning: integer; - ImgIDError: integer; - ImgIDFatal: integer; function GetDblClickJumps: boolean; function GetHideMessagesIcons: boolean; procedure SetDblClickJumps(AValue: boolean); @@ -83,43 +76,46 @@ type var MessagesView: TMessagesView; -const - MessagesMenuRootName = 'Messages'; - -procedure RegisterStandardMessagesViewMenuItems; - implementation -procedure RegisterStandardMessagesViewMenuItems; -begin - -end; - {$R *.lfm} { TMessagesView } procedure TMessagesView.FormCreate(Sender: TObject); +var + ImgIDInfo: Integer; + ImgIDHint: Integer; + ImgIDNote: Integer; + ImgIDWarning: Integer; + ImgIDError: Integer; + ImgIDFatal: Integer; begin IDEMessagesWindow:=Self; SourceMarks:=TETMarks.Create(Self); + ImgIDInfo:=IDEImages.LoadImage(12, 'state12x12_information'); + ImgIDHint:=IDEImages.LoadImage(12, 'state12x12_hint'); + ImgIDNote:=IDEImages.LoadImage(12, 'state12x12_note'); + ImgIDWarning:=IDEImages.LoadImage(12, 'state12x12_warning'); + ImgIDError:=IDEImages.LoadImage(12, 'state12x12_error'); + ImgIDFatal:=IDEImages.LoadImage(12, 'state12x12_fatal'); with SourceMarks do begin ImageList:=IDEImages.Images_12; //OnGetSynEditOfFile:=@SourceMarksGetSynEditOfFile; MarkStyles[mluNone].ImageIndex:=-1; MarkStyles[mluProgress].ImageIndex:=-1; - MarkStyles[mluDebug].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_information'); - MarkStyles[mluVerbose3].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_information'); - MarkStyles[mluVerbose2].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_information'); - MarkStyles[mluVerbose].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_information'); - MarkStyles[mluHint].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_hint'); - MarkStyles[mluNote].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_note'); - MarkStyles[mluWarning].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_warning'); + MarkStyles[mluDebug].ImageIndex:= ImgIDInfo; + MarkStyles[mluVerbose3].ImageIndex:=ImgIDInfo; + MarkStyles[mluVerbose2].ImageIndex:=ImgIDInfo; + MarkStyles[mluVerbose].ImageIndex:=ImgIDInfo; + MarkStyles[mluHint].ImageIndex:=ImgIDHint; + MarkStyles[mluNote].ImageIndex:=ImgIDNote; + MarkStyles[mluWarning].ImageIndex:=ImgIDWarning; MarkStyles[mluImportant].ImageIndex:=-1; - MarkStyles[mluError].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_error'); - MarkStyles[mluFatal].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_fatal'); - MarkStyles[mluPanic].ImageIndex:=IDEImages.LoadImage(12, 'state12x12_fatal'); + MarkStyles[mluError].ImageIndex:=ImgIDError; + MarkStyles[mluFatal].ImageIndex:=ImgIDFatal; + MarkStyles[mluPanic].ImageIndex:=ImgIDFatal; end; MessagesFrame1.MessagesCtrl.SourceMarks:=SourceMarks; MessagesFrame1.MessagesCtrl.OnOpenMessage:=@OnOpenMessage; diff --git a/ide/main.pp b/ide/main.pp index 30ff073a00..3fa21339dd 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -108,7 +108,7 @@ uses CodeToolsDefines, DiffDialog, DiskDiffsDialog, UnitInfoDlg, EditorOptions, SourceEditProcs, ViewUnit_dlg, FPDocEditWindow, {$IFDEF EnableNewExtTools} - etQuickFixes, etMessagesWnd, + etQuickFixes, etMessageFrame, etMessagesWnd, {$ELSE} OutputFilter, MsgQuickFixes, MsgView, {$ENDIF} @@ -9032,6 +9032,9 @@ var begin Result:=false; + if Screen.GetCurrentModalForm<>nil then + exit; + {$IFDEF EnableNewExtTools} if Msg=nil then begin if MessagesView.SelectFirstUrgentMessage(mluError,true) then @@ -10598,7 +10601,8 @@ var Msg: TMessageLine; {$ENDIF} begin - if CodeToolBoss.ErrorMessage='' then begin + if (Screen.GetCurrentModalForm<>nil) or (CodeToolBoss.ErrorMessage='') then + begin SourceFileMgr.UpdateSourceNames; debugln('TMainIDE.DoJumpToCodeToolBossError No errormessage'); exit;