diff --git a/ide/main.pp b/ide/main.pp index b31f659ca9..3e9d878d22 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -593,7 +593,6 @@ type procedure OnAfterCodeToolBossApplyChanges(Manager: TCodeToolManager); function OnCodeToolBossSearchUsedUnit(const SrcFilename: string; const TheUnitName, TheUnitInFilename: string): TCodeBuffer; - function OnCodeToolBossCheckAbort: boolean; procedure CodeToolBossGetVirtualDirectoryAlias(Sender: TObject; var RealDir: string); procedure CodeToolBossGetVirtualDirectoryDefines(DefTree: TDefineTree; @@ -903,10 +902,6 @@ type procedure AbortBuild; override; // useful frontend methods - procedure DoSwitchToFormSrc(var ActiveSourceEditor:TSourceEditor; - var ActiveUnitInfo:TUnitInfo); - procedure DoSwitchToFormSrc(ADesigner: TDesigner; - var ActiveSourceEditor:TSourceEditor; var ActiveUnitInfo:TUnitInfo); procedure UpdateCaption; override; procedure HideIDE; override; procedure HideUnmodifiedDesigners; @@ -914,15 +909,7 @@ type // methods for codetools function InitCodeToolBoss: boolean; - procedure ActivateCodeToolAbortableMode; function BeginCodeTools: boolean; override; - function BeginCodeTool(var ActiveSrcEdit: TSourceEditor; - out ActiveUnitInfo: TUnitInfo; - Flags: TCodeToolsFlags): boolean; - function BeginCodeTool(ADesigner: TDesigner; - var ActiveSrcEdit: TSourceEditor; - out ActiveUnitInfo: TUnitInfo; - Flags: TCodeToolsFlags): boolean; function DoJumpToSourcePosition(const Filename: string; NewX, NewY, NewTopLine: integer; Flags: TJumpToCodePosFlags = [jfFocusEditor]): TModalResult; override; @@ -10364,15 +10351,6 @@ begin {$ENDIF} end; -procedure TMainIDE.ActivateCodeToolAbortableMode; -begin - if ToolStatus=itNone then - RaiseException('TMainIDE.ActivateCodeToolAbortableMode Error 1'); - ToolStatus:=itCodeTools; - CodeToolBoss.OnCheckAbort:=@OnCodeToolBossCheckAbort; - CodeToolBoss.Abortable:=true; -end; - function TMainIDE.BeginCodeTools: boolean; var ActiveSrcEdit: TSourceEditor; @@ -10464,14 +10442,6 @@ begin Result:=AnUnitInfo.Source; end; -function TMainIDE.OnCodeToolBossCheckAbort: boolean; -begin - Result:=true; - if ToolStatus<>itCodeTools then exit; - Application.ProcessMessages; - Result:=ToolStatus<>itCodeTools; -end; - procedure TMainIDE.CodeToolBossGetVirtualDirectoryAlias(Sender: TObject; var RealDir: string); begin @@ -10699,67 +10669,6 @@ begin Result:=SourceFileMgr.SaveSourceEditorChangesToCodeCache(AEditor); end; -function TMainIDE.BeginCodeTool(var ActiveSrcEdit: TSourceEditor; - out ActiveUnitInfo: TUnitInfo; Flags: TCodeToolsFlags): boolean; -begin - Result:=BeginCodeTool(nil,ActiveSrcEdit,ActiveUnitInfo,Flags); -end; - -function TMainIDE.BeginCodeTool(ADesigner: TDesigner; - var ActiveSrcEdit: TSourceEditor; out ActiveUnitInfo: TUnitInfo; - Flags: TCodeToolsFlags): boolean; -begin - Result:=false; - if (ctfUseGivenSourceEditor in Flags) and (Project1<>nil) then begin - ActiveUnitInfo := Project1.EditorInfoWithEditorComponent(ActiveSrcEdit).UnitInfo; - end - else begin - ActiveSrcEdit:=nil; - ActiveUnitInfo:=nil; - end; - - // check global stati - if (ToolStatus in [itCodeTools,itCodeToolAborting]) then begin - debugln('TMainIDE.BeginCodeTool impossible ',dbgs(ord(ToolStatus))); - exit; - end; - if (not (ctfSourceEditorNotNeeded in Flags)) and (SourceEditorManager.SourceEditorCount=0) - then begin - DebugLn('TMainIDE.BeginCodeTool no source editor'); - exit; - end; - - // check source editor - if not (ctfUseGivenSourceEditor in Flags) then begin - if ctfSwitchToFormSource in Flags then - DoSwitchToFormSrc(ADesigner,ActiveSrcEdit,ActiveUnitInfo) - else if ADesigner<>nil then - GetDesignerUnit(ADesigner,ActiveSrcEdit,ActiveUnitInfo) - else - GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo); - end; - if (not (ctfSourceEditorNotNeeded in Flags)) and - ((ActiveSrcEdit=nil) or (ActiveUnitInfo=nil)) - then exit; - - // init codetools - SaveSourceEditorChangesToCodeCache(nil); - if ActiveSrcEdit<>nil then begin - CodeToolBoss.VisibleEditorLines:=ActiveSrcEdit.EditorComponent.LinesInWindow; - CodeToolBoss.TabWidth:=ActiveSrcEdit.EditorComponent.TabWidth; - CodeToolBoss.IndentSize:=ActiveSrcEdit.EditorComponent.BlockIndent; - end else begin - CodeToolBoss.VisibleEditorLines:=25; - CodeToolBoss.TabWidth:=EditorOpts.TabWidth; - CodeToolBoss.IndentSize:=EditorOpts.BlockIndent; - end; - - if ctfActivateAbortMode in Flags then - ActivateCodeToolAbortableMode; - - Result:=true; -end; - function TMainIDE.DoJumpToSourcePosition(const Filename: string; NewX, NewY, NewTopLine: integer; Flags: TJumpToCodePosFlags = [jfFocusEditor]): TModalResult; var @@ -13434,31 +13343,6 @@ begin Result := FOIHelpProvider; end; -procedure TMainIDE.DoSwitchToFormSrc(var ActiveSourceEditor: TSourceEditor; - var ActiveUnitInfo: TUnitInfo); -begin - DoSwitchToFormSrc(nil,ActiveSourceEditor,ActiveUnitInfo); -end; - -procedure TMainIDE.DoSwitchToFormSrc(ADesigner: TDesigner; - var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo); -begin - ActiveSourceEditor:=nil; - ActiveUnitInfo:=nil; - if (ADesigner<>nil) then - ActiveUnitInfo:=Project1.UnitWithComponent(ADesigner.LookupRoot) - else if (GlobalDesignHook.LookupRoot<>nil) - and (GlobalDesignHook.LookupRoot is TComponent) then - ActiveUnitInfo:=Project1.UnitWithComponent(TComponent(GlobalDesignHook.LookupRoot)) - else - ActiveUnitInfo:=nil; - if (ActiveUnitInfo<>nil) and (ActiveUnitInfo.OpenEditorInfoCount > 0) then begin - ActiveSourceEditor := TSourceEditor(ActiveUnitInfo.OpenEditorInfo[0].EditorComponent); - SourceEditorManagerIntf.ActiveEditor := ActiveSourceEditor; - exit; - end; -end; - function TMainIDE.GetDesignerFormOfSource(AnUnitInfo: TUnitInfo; LoadForm: boolean ): TCustomForm; begin diff --git a/ide/mainbase.pas b/ide/mainbase.pas index 2448cc43fb..bf0123b125 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -142,11 +142,24 @@ type function GetMainBar: TComponent; override; procedure SetRecentProjectFilesMenu; procedure SetRecentFilesMenu; + function BeginCodeTool(var ActiveSrcEdit: TSourceEditor; + out ActiveUnitInfo: TUnitInfo; + Flags: TCodeToolsFlags): boolean; + function BeginCodeTool(ADesigner: TDesigner; + var ActiveSrcEdit: TSourceEditor; + out ActiveUnitInfo: TUnitInfo; + Flags: TCodeToolsFlags): boolean; + procedure ActivateCodeToolAbortableMode; + function OnCodeToolBossCheckAbort: boolean; + + procedure DoSwitchToFormSrc(var ActiveSourceEditor:TSourceEditor; + var ActiveUnitInfo:TUnitInfo); + procedure DoSwitchToFormSrc(ADesigner: TDesigner; + var ActiveSourceEditor:TSourceEditor; var ActiveUnitInfo:TUnitInfo); procedure GetUnitInfoForDesigner(ADesigner: TIDesigner; out ActiveSourceEditor: TSourceEditorInterface; out ActiveUnitInfo: TUnitInfo); override; - procedure GetCurrentUnitInfo(out ActiveSourceEditor: TSourceEditorInterface; out ActiveUnitInfo: TUnitInfo); override; procedure GetCurrentUnit(out ActiveSourceEditor: TSourceEditor; @@ -304,6 +317,109 @@ begin @mnuOpenRecentClicked); end; +function TMainIDEBase.BeginCodeTool(var ActiveSrcEdit: TSourceEditor; + out ActiveUnitInfo: TUnitInfo; Flags: TCodeToolsFlags): boolean; +begin + Result:=BeginCodeTool(nil,ActiveSrcEdit,ActiveUnitInfo,Flags); +end; + +function TMainIDEBase.BeginCodeTool(ADesigner: TDesigner; + var ActiveSrcEdit: TSourceEditor; out ActiveUnitInfo: TUnitInfo; + Flags: TCodeToolsFlags): boolean; +begin + Result:=false; + if (ctfUseGivenSourceEditor in Flags) and (Project1<>nil) then begin + ActiveUnitInfo := Project1.EditorInfoWithEditorComponent(ActiveSrcEdit).UnitInfo; + end + else begin + ActiveSrcEdit:=nil; + ActiveUnitInfo:=nil; + end; + + // check global stati + if (ToolStatus in [itCodeTools,itCodeToolAborting]) then begin + debugln('TMainIDE.BeginCodeTool impossible ',dbgs(ord(ToolStatus))); + exit; + end; + if (not (ctfSourceEditorNotNeeded in Flags)) and (SourceEditorManager.SourceEditorCount=0) + then begin + DebugLn('TMainIDE.BeginCodeTool no source editor'); + exit; + end; + + // check source editor + if not (ctfUseGivenSourceEditor in Flags) then begin + if ctfSwitchToFormSource in Flags then + DoSwitchToFormSrc(ADesigner,ActiveSrcEdit,ActiveUnitInfo) + else if ADesigner<>nil then + GetDesignerUnit(ADesigner,ActiveSrcEdit,ActiveUnitInfo) + else + GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo); + end; + if (not (ctfSourceEditorNotNeeded in Flags)) and + ((ActiveSrcEdit=nil) or (ActiveUnitInfo=nil)) + then exit; + + // init codetools + SaveSourceEditorChangesToCodeCache(nil); + if ActiveSrcEdit<>nil then begin + CodeToolBoss.VisibleEditorLines:=ActiveSrcEdit.EditorComponent.LinesInWindow; + CodeToolBoss.TabWidth:=ActiveSrcEdit.EditorComponent.TabWidth; + CodeToolBoss.IndentSize:=ActiveSrcEdit.EditorComponent.BlockIndent; + end else begin + CodeToolBoss.VisibleEditorLines:=25; + CodeToolBoss.TabWidth:=EditorOpts.TabWidth; + CodeToolBoss.IndentSize:=EditorOpts.BlockIndent; + end; + + if ctfActivateAbortMode in Flags then + ActivateCodeToolAbortableMode; + + Result:=true; +end; + +procedure TMainIDEBase.ActivateCodeToolAbortableMode; +begin + if ToolStatus=itNone then + RaiseException('TMainIDEBase.ActivateCodeToolAbortableMode Error 1'); + ToolStatus:=itCodeTools; + CodeToolBoss.OnCheckAbort:=@OnCodeToolBossCheckAbort; + CodeToolBoss.Abortable:=true; +end; + +function TMainIDEBase.OnCodeToolBossCheckAbort: boolean; +begin + Result:=true; + if ToolStatus<>itCodeTools then exit; + Application.ProcessMessages; + Result:=ToolStatus<>itCodeTools; +end; + +procedure TMainIDEBase.DoSwitchToFormSrc(var ActiveSourceEditor: TSourceEditor; + var ActiveUnitInfo: TUnitInfo); +begin + DoSwitchToFormSrc(nil,ActiveSourceEditor,ActiveUnitInfo); +end; + +procedure TMainIDEBase.DoSwitchToFormSrc(ADesigner: TDesigner; + var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo); +begin + ActiveSourceEditor:=nil; + ActiveUnitInfo:=nil; + if (ADesigner<>nil) then + ActiveUnitInfo:=Project1.UnitWithComponent(ADesigner.LookupRoot) + else if (GlobalDesignHook.LookupRoot<>nil) + and (GlobalDesignHook.LookupRoot is TComponent) then + ActiveUnitInfo:=Project1.UnitWithComponent(TComponent(GlobalDesignHook.LookupRoot)) + else + ActiveUnitInfo:=nil; + if (ActiveUnitInfo<>nil) and (ActiveUnitInfo.OpenEditorInfoCount > 0) then begin + ActiveSourceEditor := TSourceEditor(ActiveUnitInfo.OpenEditorInfo[0].EditorComponent); + SourceEditorManagerIntf.ActiveEditor := ActiveSourceEditor; + exit; + end; +end; + procedure TMainIDEBase.DoMnuWindowClicked(Sender: TObject); begin UpdateWindowMenu(True); diff --git a/ide/sourcefilemanager.pas b/ide/sourcefilemanager.pas index 222b789938..f49a4526d6 100644 --- a/ide/sourcefilemanager.pas +++ b/ide/sourcefilemanager.pas @@ -1903,7 +1903,8 @@ begin {$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TLazSourceFileManager.CloseProject B');{$ENDIF} IncreaseCompilerParseStamp; // close Project - if ProjInspector<>nil then ProjInspector.LazProject:=nil; + if ProjInspector<>nil then + ProjInspector.LazProject:=nil; FreeThenNil(Project1); if IDEMessagesWindow<>nil then IDEMessagesWindow.Clear; @@ -2857,7 +2858,7 @@ var begin Result:=mrOk; if (AnUnitInfo.Component=nil) then exit; - if not TMainIDE(MainIDE).BeginCodeTool(ActiveSrcEdit,ActiveUnitInfo,[]) then exit; + if not MainIDE.BeginCodeTool(ActiveSrcEdit,ActiveUnitInfo,[]) then exit; // unselect methods in ObjectInspector1 if (ObjectInspector1<>nil) and (ObjectInspector1.PropertyEditorHook.LookupRoot=AnUnitInfo.Component) then @@ -4962,7 +4963,7 @@ begin // set new project filename Project1.ProjectInfoFile:=NewLPIFilename; EnvironmentOptions.AddToRecentProjectFiles(NewLPIFilename); - TMainIDE(MainIDE).SetRecentProjectFilesMenu; + MainIDE.SetRecentProjectFilesMenu; // change main source if (Project1.MainUnitID >= 0) then