diff --git a/components/buildintf/ideexterntoolintf.pas b/components/buildintf/ideexterntoolintf.pas index dc99bdf593..fcc1b58d53 100644 --- a/components/buildintf/ideexterntoolintf.pas +++ b/components/buildintf/ideexterntoolintf.pas @@ -1402,8 +1402,7 @@ begin Result:=nil; end; -function TAbstractExternalTool.FindParser(const SubTool: string - ): TExtToolParser; +function TAbstractExternalTool.FindParser(const SubTool: string): TExtToolParser; var i: Integer; ParserClass: TExtToolParserClass; diff --git a/components/ideintf/lazideintf.pas b/components/ideintf/lazideintf.pas index 776b7e49bd..dfc8ecd2d4 100644 --- a/components/ideintf/lazideintf.pas +++ b/components/ideintf/lazideintf.pas @@ -236,6 +236,7 @@ type lihtSaveAsEditorFile, // called after user selected a new filename for an editor file lihtIDERestoreWindows, // called when IDE is restoring the windows (before opening the first project) lihtIDEClose, // called when IDE is shutting down (after closequery, so no more interactivity) + lihtProjectOpening,// called before IDE opens a project lihtProjectOpened,// called after IDE opened a project lihtProjectClose, // called before IDE closes a project lihtProjectBuilding, // called before IDE builds the project @@ -470,6 +471,11 @@ type procedure AddHandlerOnIDEClose(const OnIDECloseEvent: TNotifyEvent; AsLast: boolean = false); procedure RemoveHandlerOnIDEClose(const OnIDECloseEvent: TNotifyEvent); + procedure AddHandlerOnProjectOpening( + const OnProjectOpeningEvent: TLazProjectChangedFunction; + AsLast: boolean = false); + procedure RemoveHandlerOnProjectOpening( + const OnProjectOpeningEvent: TLazProjectChangedFunction); procedure AddHandlerOnProjectOpened( const OnProjectOpenedEvent: TLazProjectChangedFunction; AsLast: boolean = false); @@ -900,6 +906,18 @@ begin RemoveHandler(lihtIDEClose,TMethod(OnIDECloseEvent)); end; +procedure TLazIDEInterface.AddHandlerOnProjectOpening( + const OnProjectOpeningEvent: TLazProjectChangedFunction; AsLast: boolean); +begin + AddHandler(lihtProjectOpening,TMethod(OnProjectOpeningEvent),AsLast); +end; + +procedure TLazIDEInterface.RemoveHandlerOnProjectOpening( + const OnProjectOpeningEvent: TLazProjectChangedFunction); +begin + RemoveHandler(lihtProjectOpening,TMethod(OnProjectOpeningEvent)); +end; + procedure TLazIDEInterface.AddHandlerOnProjectOpened( const OnProjectOpenedEvent: TLazProjectChangedFunction; AsLast: boolean); begin diff --git a/ide/sourcefilemanager.pas b/ide/sourcefilemanager.pas index 02db108aa4..e25f5b8428 100644 --- a/ide/sourcefilemanager.pas +++ b/ide/sourcefilemanager.pas @@ -3611,8 +3611,11 @@ begin Project1.Flags:=Project1.Flags-[pfUseDefaultCompilerOptions]; end; Project1.AutoAddOutputDirToIncPath; + // call ProjectOpening handlers + HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpening, Project1); MainIDE.UpdateCaption; - if ProjInspector<>nil then ProjInspector.LazProject:=Project1; + if ProjInspector<>nil then + ProjInspector.LazProject:=Project1; // add and load default required packages PkgBoss.OpenProjectDependencies(Project1,true); // rebuild codetools defines @@ -3653,7 +3656,7 @@ begin for i:=0 to Project1.UnitCount-1 do Project1.Units[i].ClearModifieds; Project1.Modified:=false; - // call handlers + // call ProjectOpened handlers HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpened, Project1); if not (HandlerResult in [mrOk,mrCancel,mrAbort]) then HandlerResult:=mrCancel; @@ -3676,7 +3679,10 @@ begin try Project1.BeginUpdate(true); try - if ProjInspector<>nil then ProjInspector.LazProject:=Project1; + // call ProjectOpening handlers + HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpening, Project1); + if ProjInspector<>nil then + ProjInspector.LazProject:=Project1; // read project info file {$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('InitOpenedProjectFile B3');{$ENDIF} @@ -3810,7 +3816,7 @@ begin AnUnitInfo.Loaded := false; end; end; - // call handlers + // call ProjectOpened handlers HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpened, Project1); if not (HandlerResult in [mrOk,mrCancel,mrAbort]) then HandlerResult:=mrCancel;