IdeIntf: A new ProjectOpening event. Triggered before a project opens. Issue #36899.

git-svn-id: trunk@63085 -
This commit is contained in:
juha 2020-04-26 19:58:32 +00:00
parent bc9d1a87a3
commit 7ef32e6a3a
3 changed files with 29 additions and 6 deletions

View File

@ -1402,8 +1402,7 @@ begin
Result:=nil; Result:=nil;
end; end;
function TAbstractExternalTool.FindParser(const SubTool: string function TAbstractExternalTool.FindParser(const SubTool: string): TExtToolParser;
): TExtToolParser;
var var
i: Integer; i: Integer;
ParserClass: TExtToolParserClass; ParserClass: TExtToolParserClass;

View File

@ -236,6 +236,7 @@ type
lihtSaveAsEditorFile, // called after user selected a new filename for an editor file 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) 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) 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 lihtProjectOpened,// called after IDE opened a project
lihtProjectClose, // called before IDE closes a project lihtProjectClose, // called before IDE closes a project
lihtProjectBuilding, // called before IDE builds the project lihtProjectBuilding, // called before IDE builds the project
@ -470,6 +471,11 @@ type
procedure AddHandlerOnIDEClose(const OnIDECloseEvent: TNotifyEvent; procedure AddHandlerOnIDEClose(const OnIDECloseEvent: TNotifyEvent;
AsLast: boolean = false); AsLast: boolean = false);
procedure RemoveHandlerOnIDEClose(const OnIDECloseEvent: TNotifyEvent); procedure RemoveHandlerOnIDEClose(const OnIDECloseEvent: TNotifyEvent);
procedure AddHandlerOnProjectOpening(
const OnProjectOpeningEvent: TLazProjectChangedFunction;
AsLast: boolean = false);
procedure RemoveHandlerOnProjectOpening(
const OnProjectOpeningEvent: TLazProjectChangedFunction);
procedure AddHandlerOnProjectOpened( procedure AddHandlerOnProjectOpened(
const OnProjectOpenedEvent: TLazProjectChangedFunction; const OnProjectOpenedEvent: TLazProjectChangedFunction;
AsLast: boolean = false); AsLast: boolean = false);
@ -900,6 +906,18 @@ begin
RemoveHandler(lihtIDEClose,TMethod(OnIDECloseEvent)); RemoveHandler(lihtIDEClose,TMethod(OnIDECloseEvent));
end; 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( procedure TLazIDEInterface.AddHandlerOnProjectOpened(
const OnProjectOpenedEvent: TLazProjectChangedFunction; AsLast: boolean); const OnProjectOpenedEvent: TLazProjectChangedFunction; AsLast: boolean);
begin begin

View File

@ -3611,8 +3611,11 @@ begin
Project1.Flags:=Project1.Flags-[pfUseDefaultCompilerOptions]; Project1.Flags:=Project1.Flags-[pfUseDefaultCompilerOptions];
end; end;
Project1.AutoAddOutputDirToIncPath; Project1.AutoAddOutputDirToIncPath;
// call ProjectOpening handlers
HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpening, Project1);
MainIDE.UpdateCaption; MainIDE.UpdateCaption;
if ProjInspector<>nil then ProjInspector.LazProject:=Project1; if ProjInspector<>nil then
ProjInspector.LazProject:=Project1;
// add and load default required packages // add and load default required packages
PkgBoss.OpenProjectDependencies(Project1,true); PkgBoss.OpenProjectDependencies(Project1,true);
// rebuild codetools defines // rebuild codetools defines
@ -3653,7 +3656,7 @@ begin
for i:=0 to Project1.UnitCount-1 do for i:=0 to Project1.UnitCount-1 do
Project1.Units[i].ClearModifieds; Project1.Units[i].ClearModifieds;
Project1.Modified:=false; Project1.Modified:=false;
// call handlers // call ProjectOpened handlers
HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpened, Project1); HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpened, Project1);
if not (HandlerResult in [mrOk,mrCancel,mrAbort]) then if not (HandlerResult in [mrOk,mrCancel,mrAbort]) then
HandlerResult:=mrCancel; HandlerResult:=mrCancel;
@ -3676,7 +3679,10 @@ begin
try try
Project1.BeginUpdate(true); Project1.BeginUpdate(true);
try 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 // read project info file
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('InitOpenedProjectFile B3');{$ENDIF} {$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('InitOpenedProjectFile B3');{$ENDIF}
@ -3810,7 +3816,7 @@ begin
AnUnitInfo.Loaded := false; AnUnitInfo.Loaded := false;
end; end;
end; end;
// call handlers // call ProjectOpened handlers
HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpened, Project1); HandlerResult:=MainIDE.DoCallProjectChangedHandler(lihtProjectOpened, Project1);
if not (HandlerResult in [mrOk,mrCancel,mrAbort]) then if not (HandlerResult in [mrOk,mrCancel,mrAbort]) then
HandlerResult:=mrCancel; HandlerResult:=mrCancel;