IDE: find missung unit: show each package only once

git-svn-id: trunk@22111 -
This commit is contained in:
mattias 2009-10-12 11:52:35 +00:00
parent cf4fc4c978
commit 532a45aca2

View File

@ -103,6 +103,7 @@ type
function MainOwnerHasRequirement(PackageName: string): boolean; function MainOwnerHasRequirement(PackageName: string): boolean;
procedure UpdateProgressBar; procedure UpdateProgressBar;
function CheckPackageOnDisk(PkgFilename: string): boolean; function CheckPackageOnDisk(PkgFilename: string): boolean;
function FindQuickFixAddRequirement(PkgName: string): TQuickFixMissingUnitAddRequirement;
public public
procedure InitWithMsg(Msg: TIDEMessageLine; Line: string; aCode: TCodeBuffer; procedure InitWithMsg(Msg: TIDEMessageLine; Line: string; aCode: TCodeBuffer;
aMissingUnitName: string); aMissingUnitName: string);
@ -275,7 +276,7 @@ begin
if APackage.FindUnit(MissingUnitName)<>nil then begin if APackage.FindUnit(MissingUnitName)<>nil then begin
if MainOwnerHasRequirement(APackage.Name) then begin if MainOwnerHasRequirement(APackage.Name) then begin
// already in requirements // already in requirements
end else begin end else if FindQuickFixAddRequirement(APackage.Name)=nil then begin
// not yet in requirements -> add a quick fix // not yet in requirements -> add a quick fix
AddQuickFix(TQuickFixMissingUnitAddRequirement.Create(Self,APackage.Name)); AddQuickFix(TQuickFixMissingUnitAddRequirement.Create(Self,APackage.Name));
end; end;
@ -359,10 +360,14 @@ procedure TFindUnitDialog.AddRequirement(
var var
AProject: TProject; AProject: TProject;
APackage: TLazPackage; APackage: TLazPackage;
NewDependency: TPkgDependency;
begin begin
if MainOwner is TProject then begin if MainOwner is TProject then begin
AProject:=TProject(MainOwner); AProject:=TProject(MainOwner);
if PkgBoss.AddProjectDependencies(AProject,Item.PackageName)=mrOk then //debugln(['TFindUnitDialog.AddRequirement project: ',Item.PackageName]);
NewDependency:=TPkgDependency.Create;
NewDependency.PackageName:=Item.PackageName;
if PkgBoss.AddProjectDependency(AProject,NewDependency)=mrOk then
ModalResult:=mrOK; ModalResult:=mrOK;
end else if MainOwner is TLazPackage then begin end else if MainOwner is TLazPackage then begin
APackage:=TLazPackage(MainOwner); APackage:=TLazPackage(MainOwner);
@ -426,11 +431,11 @@ var
PkgName: String; PkgName: String;
begin begin
Result:=false; Result:=false;
PkgName:=ExtractFileNameOnly(PkgFilename);
if FindQuickFixAddRequirement(PkgName)<>nil then exit;
if not FileExistsCached(PkgFilename) then exit; if not FileExistsCached(PkgFilename) then exit;
//DebugLn(['TFindUnitDialog.CheckPackageOnDisk ',PkgFilename]); //DebugLn(['TFindUnitDialog.CheckPackageOnDisk ',PkgFilename]);
PkgName:=ExtractFileNameOnly(PkgFilename);
XMLConfig:=nil; XMLConfig:=nil;
XMLCode:=nil; XMLCode:=nil;
try try
@ -463,6 +468,22 @@ begin
end; end;
end; end;
function TFindUnitDialog.FindQuickFixAddRequirement(PkgName: string
): TQuickFixMissingUnitAddRequirement;
var
i: Integer;
begin
Result:=nil;
if fQuickFixes=nil then exit;
for i:=0 to fQuickFixes.Count-1 do begin
if TObject(fQuickFixes[i]) is TQuickFixMissingUnitAddRequirement then begin
Result:=TQuickFixMissingUnitAddRequirement(fQuickFixes[i]);
if SysUtils.CompareText(Result.PackageName,PkgName)=0 then exit;
end;
end;
Result:=nil;
end;
procedure TFindUnitDialog.InitWithMsg(Msg: TIDEMessageLine; Line: string; procedure TFindUnitDialog.InitWithMsg(Msg: TIDEMessageLine; Line: string;
aCode: TCodeBuffer; aMissingUnitName: string); aCode: TCodeBuffer; aMissingUnitName: string);