diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 0f8b855eaf..4d09c40b12 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -3087,6 +3087,7 @@ resourcestring lisPckEditInstall = 'Install'; lisPckEditUninstall = 'Uninstall'; lisPckEditViewPackgeSource = 'View Package Source'; + lisPEViewToDoList = 'View ToDo list'; lisPckEditGeneralOptions = 'General Options'; lisPckEditSaveChanges = 'Save Changes?'; lisPckEditPackageHasChangedSavePackage = 'Package %s%s%s has changed.%sSave ' diff --git a/ide/main.pp b/ide/main.pp index b85a9b2a78..dedeba3c7b 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -471,10 +471,6 @@ type procedure OnCodeExplorerJumpToCode(Sender: TObject; const Filename: string; const Caret: TPoint; TopLine: integer); - // view project ToDo list events - procedure ViewProjectTodosOpenFile(Sender: TObject; - const Filename: string; const LineNumber: integer); - // CodeToolBoss events procedure OnCodeToolNeedsExternalChanges(Manager: TCodeToolManager; var Abort: boolean); @@ -8376,7 +8372,6 @@ function TMainIDE.DoShowToDoList: TModalResult; begin if not Assigned(frmToDo) then begin frmToDo:=TfrmToDo.Create(OwningComponent); - frmToDo.OnOpenFile:=@ViewProjectTodosOpenFile; end; if Project1.MainUnitInfo<>nil then @@ -10762,12 +10757,6 @@ begin DoJumpToSourcePosition(Filename,Caret.X,Caret.Y,TopLine,true); end; -procedure TMainIDE.ViewProjectTodosOpenFile(Sender: TObject; - const Filename: string; const LineNumber: integer); -begin - DoJumpToSourcePosition(Filename,1,LineNumber,-1,true); -end; - procedure TMainIDE.OnCodeToolNeedsExternalChanges(Manager: TCodeToolManager; var Abort: boolean); var diff --git a/ide/mainbase.pas b/ide/mainbase.pas index 5bd1d697ef..c96809bc7c 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -77,8 +77,6 @@ type private FToolStatus: TIDEToolStatus; protected - OwningComponent: TComponent; - function GetMainBar: TComponent; override; function CreateMenuSeparator : TMenuItem; @@ -217,7 +215,7 @@ begin MainIDE:=Self; // Do not own everything in one big component hierachy. Otherwise the // notifications slow down everything - OwningComponent:=TComponent.Create(nil); + fOwningComponent:=TComponent.Create(nil); inherited Create(TheOwner); end; diff --git a/ide/todolist.pas b/ide/todolist.pas index 369840435d..a84bee2c31 100644 --- a/ide/todolist.pas +++ b/ide/todolist.pas @@ -59,7 +59,7 @@ uses // Codetools CodeAtom, CodeCache, CodeToolManager, BasicCodeTools, FileProcs, // IDEIntf - IDEImagesIntf, PackageIntf, ProjectIntf, + LazIDEIntf, IDEImagesIntf, PackageIntf, ProjectIntf, // IDE LazarusIDEStrConsts, PackageDefs; @@ -214,6 +214,7 @@ procedure TfrmTodo.SetMainSourceFilename(const AValue: String); begin if fMainSourceFilename=AValue then exit; fMainSourceFilename:=AValue; + Caption:=lisTodoListCaption+' '+fMainSourceFilename; acRefresh.Execute; end; @@ -451,7 +452,11 @@ begin end; end; end; - if Assigned(OnOpenFile) then OnOpenFile(Self,CurFilename,TheLine); + if Assigned(OnOpenFile) then + OnOpenFile(Self,CurFilename,TheLine) + else + LazarusIDE.DoOpenFileAndJumpToPos(CurFilename,Point(1,TheLine),-1,-1, + [ofOnlyIfExists,ofRegularFile,ofVirtualFile,ofDoNotLoadResource]); end; end; @@ -533,8 +538,10 @@ begin end; if CurPackage<>nil then begin // scan all units of package + DebugLn(['TfrmTodo.acRefreshExecute AAA1 ',CurPackage.Filename]); for i:=0 to CurPackage.FileCount-1 do begin CurPkgFile:=CurPackage.Files[i]; + DebugLn(['TfrmTodo.acRefreshExecute AAA2 ',i,' ',CurPkgFile.Filename]); if FilenameIsPascalUnit(CurPkgFile.Filename) then ScanFile(CurPkgFile.Filename); end; @@ -582,7 +589,7 @@ var CodeXYPosition: TCodeXYPosition; i: Integer; begin - DebugLn(['TfrmTodo.LoadFile ',aFileName]); + DebugLn(['TfrmTodo.ScanFile ',aFileName]); ExpandedFilename:=TrimFilename(aFileName); if not FilenameIsPascalUnit(ExpandedFilename) then exit; diff --git a/ideintf/lazideintf.pas b/ideintf/lazideintf.pas index 808cc04c4c..1ec732ccdc 100644 --- a/ideintf/lazideintf.pas +++ b/ideintf/lazideintf.pas @@ -133,6 +133,8 @@ type procedure RemoveHandler(HandlerType: TLazarusIDEHandlerType; const AMethod: TMethod); protected + fOwningComponent: TComponent; + function GetActiveProject: TLazProject; virtual; abstract; procedure DoCallNotifyHandler(HandlerType: TLazarusIDEHandlerType); function DoCallModalFunctionHandler(HandlerType: TLazarusIDEHandlerType @@ -141,6 +143,7 @@ type public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; + property OwningComponent: TComponent read fOwningComponent; // the main window with the IDE menu function GetMainBar: TComponent; virtual; abstract; diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index e56091ed86..7136f4a3c6 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -74,6 +74,8 @@ type function(Sender: TObject; APackage: TLazPackage): TModalResult of object; TOnViewPackageSource = function(Sender: TObject; APackage: TLazPackage): TModalResult of object; + TOnViewPackageToDos = + function(Sender: TObject; APackage: TLazPackage): TModalResult of object; TOnCreateNewPkgFile = function(Sender: TObject; Params: TAddToPkgResult): TModalResult of object; TOnDeleteAmbiguousFiles = @@ -173,6 +175,7 @@ type procedure UseMaxVersionCheckBoxChange(Sender: TObject); procedure UseMinVersionCheckBoxChange(Sender: TObject); procedure ViewPkgSourceClick(Sender: TObject); + procedure ViewPkgTodosClick(Sender: TObject); private FLazPackage: TLazPackage; FilesNode: TTreeNode; @@ -238,6 +241,7 @@ type FOnSavePackage: TOnSavePackage; FOnUninstallPackage: TOnUninstallPackage; FOnViewPackageSource: TOnViewPackageSource; + FOnViewPackageToDos: TOnViewPackageToDos; function GetEditors(Index: integer): TPackageEditorForm; procedure ApplyLayout(AnEditor: TPackageEditorForm); procedure SaveLayout(AnEditor: TPackageEditorForm); @@ -267,7 +271,8 @@ type procedure UpdateAllEditors; function InstallPackage(APackage: TLazPackage): TModalResult; function UninstallPackage(APackage: TLazPackage): TModalResult; - function ViewPkgSourcePackage(APackage: TLazPackage): TModalResult; + function ViewPkgSource(APackage: TLazPackage): TModalResult; + function ViewPkgToDos(APackage: TLazPackage): TModalResult; function DeleteAmbiguousFiles(APackage: TLazPackage; const Filename: string): TModalResult; function AddToProject(APackage: TLazPackage; @@ -302,6 +307,8 @@ type write FOnUninstallPackage; property OnViewPackageSource: TOnViewPackageSource read FOnViewPackageSource write FOnViewPackageSource; + property OnViewPackageToDos: TOnViewPackageToDos read FOnViewPackageToDos + write FOnViewPackageToDos; property OnDeleteAmbiguousFiles: TOnDeleteAmbiguousFiles read FOnDeleteAmbiguousFiles write FOnDeleteAmbiguousFiles; property OnImExportCompilerOptions: TNotifyEvent @@ -588,6 +595,7 @@ begin AddPopupMenuItem(dlgCompilerOptions, @CompilerOptionsBitBtnClick, CompilerOptionsBitBtn.Enabled); AddPopupMenuItem(lisPckEditViewPackgeSource, @ViewPkgSourceClick,true); + AddPopupMenuItem(lisPEViewToDoList, @ViewPkgTodosClick, true); // remove unneeded menu items while FilesPopupMenu.Items.Count>ItemCnt do @@ -895,7 +903,12 @@ end; procedure TPackageEditorForm.ViewPkgSourceClick(Sender: TObject); begin - PackageEditors.ViewPkgSourcePackage(LazPackage); + PackageEditors.ViewPkgSource(LazPackage); +end; + +procedure TPackageEditorForm.ViewPkgTodosClick(Sender: TObject); +begin + PackageEditors.ViewPkgToDos(LazPackage); end; procedure TPackageEditorForm.UseMaxVersionCheckBoxChange(Sender: TObject); @@ -2362,7 +2375,7 @@ begin Result:=mrCancel; end; -function TPackageEditors.ViewPkgSourcePackage(APackage: TLazPackage +function TPackageEditors.ViewPkgSource(APackage: TLazPackage ): TModalResult; begin if Assigned(OnViewPackageSource) then @@ -2371,6 +2384,14 @@ begin Result:=mrCancel; end; +function TPackageEditors.ViewPkgToDos(APackage: TLazPackage): TModalResult; +begin + if Assigned(OnViewPackageToDos) then + Result:=OnViewPackageToDos(Self,APackage) + else + Result:=mrCancel; +end; + function TPackageEditors.DeleteAmbiguousFiles(APackage: TLazPackage; const Filename: string): TModalResult; begin diff --git a/packager/pkgmanager.pas b/packager/pkgmanager.pas index 2dfb1c9d8a..e23ba6e029 100644 --- a/packager/pkgmanager.pas +++ b/packager/pkgmanager.pas @@ -59,7 +59,7 @@ uses ComponentReg, UComponentManMain, PackageEditor, AddToPackageDlg, PackageDefs, PackageLinks, PackageSystem, OpenInstalledPkgDlg, PkgGraphExplorer, BrokenDependenciesDlg, CompilerOptions, ExtToolEditDlg, IDETranslations, - TransferMacros, MsgView, BuildLazDialog, NewDialog, IDEDialogs, + TransferMacros, MsgView, BuildLazDialog, NewDialog, IDEDialogs, TodoList, ProjectInspector, ComponentPalette, UnitEditor, AddFileToAPackageDlg, LazarusPackageIntf, PublishProjectDlg, PkgLinksDlg, InstallPkgSetDlg, // bosses @@ -97,8 +97,10 @@ type ): TModalResult; function OnPackageEditorSavePackage(Sender: TObject; APackage: TLazPackage; SaveAs: boolean): TModalResult; - function OnPackageEditorViewPkgSourcePackage(Sender: TObject; - APackage: TLazPackage): TModalResult; + function OnPackageEditorViewPkgSource(Sender: TObject; + APackage: TLazPackage): TModalResult; + function OnPackageEditorViewPkgToDos(Sender: TObject; + APackage: TLazPackage): TModalResult; procedure OnPackageEditorFreeEditor(APackage: TLazPackage); procedure OnPackageEditorGetUnitRegisterInfo(Sender: TObject; const AFilename: string; var TheUnitName: string; @@ -284,6 +286,7 @@ type Flags: TPkgUninstallFlags): TModalResult; procedure DoTranslatePackage(APackage: TLazPackage); function DoOpenPackageSource(APackage: TLazPackage): TModalResult; + function DoViewPackageToDos(APackage: TLazPackage): TModalResult; function DoCompileAutoInstallPackages(Flags: TPkgCompileFlags ): TModalResult; override; function DoSaveAutoInstallConfig: TModalResult; override; @@ -849,12 +852,18 @@ begin Result:=DoSavePackage(APackage,[]); end; -function TPkgManager.OnPackageEditorViewPkgSourcePackage(Sender: TObject; +function TPkgManager.OnPackageEditorViewPkgSource(Sender: TObject; APackage: TLazPackage): TModalResult; begin Result:=DoOpenPackageSource(APackage); end; +function TPkgManager.OnPackageEditorViewPkgToDos(Sender: TObject; + APackage: TLazPackage): TModalResult; +begin + Result:=DoViewPackageToDos(APackage); +end; + procedure TPkgManager.PackageGraphBeginUpdate(Sender: TObject); begin if PackageGraphExplorer<>nil then PackageGraphExplorer.BeginUpdate; @@ -1765,7 +1774,8 @@ begin PackageEditors.OnAddToProject:=@OnPackageEditorAddToProject; PackageEditors.OnInstallPackage:=@OnPackageEditorInstallPackage; PackageEditors.OnUninstallPackage:=@OnPackageEditorUninstallPackage; - PackageEditors.OnViewPackageSource:=@OnPackageEditorViewPkgSourcePackage; + PackageEditors.OnViewPackageSource:=@OnPackageEditorViewPkgSource; + PackageEditors.OnViewPackageToDos:=@OnPackageEditorViewPkgToDos; PackageEditors.OnDeleteAmbiguousFiles:=@OnPackageEditorDeleteAmbiguousFiles; PackageEditors.OnImExportCompilerOptions:=@OnPackageEditorImExportCompilerOptions; PackageEditors.OnCreateMakefile:=@OnPackageEditorCreateMakefile; @@ -3117,6 +3127,8 @@ var var PkgFile: TPkgFile; + CurPackage: TLazPackage; + i: Integer; begin //DebugLn(['TPkgManager.GetPossibleOwnersOfUnit ',UnitFilename]); Result:=TFPList.Create; @@ -3132,6 +3144,13 @@ begin PkgFile:=PackageGraph.FindFileInAllPackages(UnitFilename,false,true,true); if (PkgFile<>nil) and (PkgFile.LazPackage<>nil) then Result.Add(PkgFile.LazPackage); + // check package source files (they usually do not have a TPkgFile) + for i:=0 to PackageGraph.Count-1 do begin + CurPackage:=PackageGraph.Packages[i]; + if (CompareFilenames(UnitFilename,CurPackage.GetSrcFilename)=0) + and (Result.IndexOf(CurPackage)<0) then + Result.Add(CurPackage); + end; end; // clean up @@ -3608,6 +3627,21 @@ begin Result:=MainIDE.DoOpenEditorFile(Filename,-1,[ofRegularFile]); end; +function TPkgManager.DoViewPackageToDos(APackage: TLazPackage): TModalResult; +begin + Result:=mrOk; + if not Assigned(frmToDo) then begin + frmToDo:=TfrmToDo.Create(LazarusIDE.OwningComponent); + end; + if APackage.GetSrcFilename<>'' then + frmToDo.MainSourceFilename:=APackage.GetSrcFilename + else + frmToDo.MainSourceFilename:=''; + + frmToDo.ShowOnTop; + Result:=mrOk; +end; + function TPkgManager.DoCompileAutoInstallPackages( Flags: TPkgCompileFlags): TModalResult; var