project dependencies are now added/removed/renamed in the project main uses section

git-svn-id: trunk@6804 -
This commit is contained in:
mattias 2005-02-18 18:08:20 +00:00
parent 5673f4846e
commit dc28842255
5 changed files with 155 additions and 14 deletions

View File

@ -2145,6 +2145,10 @@ resourcestring
lisPkgMangErrorWritingPackage = 'Error Writing Package';
lisPkgMangUnableToWritePackageToFileError = 'Unable to write package %s%s%s%'
+'sto file %s%s%s.%sError: %s';
lisTheFollowingPackageSFailedToLoad = 'The following package(s) failed to '
+'load:%s%s';
lisSeeProjectProjectInspector = '%sSee Project -> Project Inspector';
lisMissingPackages = 'Missing Packages';
lisPkgManginvalidCompilerFilename = 'invalid Compiler filename';
lisPkgMangTheCompilerFileForPackageIsNotAValidExecutable = 'The compiler '
+'file for package %s is not a valid executable:%s%s';

View File

@ -5971,7 +5971,12 @@ begin
ProjInspector.OnOpen:=@ProjInspectorOpen;
ProjInspector.OnShowOptions:=@mnuProjectOptionsClicked;
ProjInspector.OnAddUnitToProject:=@ProjInspectorAddUnitToProject;
ProjInspector.OnAddDependency:=@PkgBoss.OnProjectInspectorAddDependency;
ProjInspector.OnRemoveFile:=@ProjInspectorRemoveFile;
ProjInspector.OnRemoveDependency:=
@PkgBoss.OnProjectInspectorRemoveDependency;
ProjInspector.OnReAddDependency:=
@PkgBoss.OnProjectInspectorReAddDependency;
ProjInspector.LazProject:=Project1;
end;
@ -6054,8 +6059,8 @@ end;
function TMainIDE.DoAddActiveUnitToProject: TModalResult;
var
ActiveSourceEditor:TSourceEditor;
ActiveUnitInfo:TUnitInfo;
ActiveSourceEditor: TSourceEditor;
ActiveUnitInfo: TUnitInfo;
s, ShortUnitName: string;
begin
Result:=mrCancel;
@ -11397,6 +11402,9 @@ end.
{ =============================================================================
$Log$
Revision 1.846 2005/02/18 18:08:20 mattias
project dependencies are now added/removed/renamed in the project main uses section
Revision 1.845 2005/02/06 11:28:30 mattias
adding focus check for source editor shortcuts in IDE main menu

View File

@ -49,6 +49,10 @@ type
function(Sender: TObject; AnUnitInfo: TUnitInfo): TModalresult of object;
TRemoveProjInspFileEvent =
function(Sender: TObject; AnUnitInfo: TUnitInfo): TModalResult of object;
TRemoveProjInspDepEvent = function(Sender: TObject;
ADependency: TPkgDependency): TModalResult of object;
TAddProjInspDepEvent = function(Sender: TObject;
ADependency: TPkgDependency): TModalResult of object;
TProjectInspectorFlag = (
pifItemsChanged,
@ -57,6 +61,8 @@ type
);
TProjectInspectorFlags = set of TProjectInspectorFlag;
{ TProjectInspectorForm }
TProjectInspectorForm = class(TForm)
OpenBitBtn: TBitBtn;
AddBitBtn: TBitBtn;
@ -78,8 +84,11 @@ type
procedure ReAddMenuItemClick(Sender: TObject);
procedure RemoveBitBtnClick(Sender: TObject);
private
FOnAddDependency: TAddProjInspDepEvent;
FOnAddUnitToProject: TOnAddUnitToProject;
FOnOpen: TNotifyEvent;
FOnReAddDependency: TAddProjInspDepEvent;
FOnRemoveDependency: TRemoveProjInspDepEvent;
FOnRemoveFile: TRemoveProjInspFileEvent;
FOnShowOptions: TNotifyEvent;
FUpdateLock: integer;
@ -127,8 +136,14 @@ type
property OnShowOptions: TNotifyEvent read FOnShowOptions write FOnShowOptions;
property OnAddUnitToProject: TOnAddUnitToProject read FOnAddUnitToProject
write FOnAddUnitToProject;
property OnAddDependency: TAddProjInspDepEvent
read FOnAddDependency write FOnAddDependency;
property OnRemoveFile: TRemoveProjInspFileEvent read FOnRemoveFile
write FOnRemoveFile;
property OnRemoveDependency: TRemoveProjInspDepEvent
read FOnRemoveDependency write FOnRemoveDependency;
property OnReAddDependency: TAddProjInspDepEvent
read FOnReAddDependency write FOnReAddDependency;
end;
var
@ -248,8 +263,8 @@ begin
a2pRequiredPkg:
begin
BeginUpdate;
LazProject.AddRequiredDependency(AddResult.Dependency);
PackageGraph.OpenDependency(AddResult.Dependency);
if Assigned(OnAddDependency) then
OnAddDependency(Self,AddResult.Dependency);
UpdateItems;
EndUpdate;
end;
@ -334,8 +349,7 @@ begin
if (Dependency=nil) or (not Dependency.Removed)
or (not CheckAddingDependency(LazProject,Dependency)) then exit;
BeginUpdate;
LazProject.ReaddRemovedDependency(Dependency);
PackageGraph.OpenDependency(Dependency);
if Assigned(OnReAddDependency) then OnReAddDependency(Self,Dependency);
EndUpdate;
end;
@ -350,7 +364,7 @@ begin
Format(lisProjInspDeleteDependencyFor, [CurDependency.AsString]),
mtConfirmation,[mbYes,mbNo],0)<>mrYes
then exit;
LazProject.RemoveRequiredDependency(CurDependency);
if Assigned(OnRemoveDependency) then OnRemoveDependency(Self,CurDependency);
exit;
end;

View File

@ -100,6 +100,12 @@ type
function CheckProjectHasInstalledPackages(AProject: TProject): TModalResult; virtual; abstract;
function CanOpenDesignerForm(AnUnitInfo: TUnitInfo): TModalResult; virtual; abstract;
function OnProjectInspectorOpen(Sender: TObject): boolean; virtual; abstract;
function OnProjectInspectorAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult; virtual; abstract;
function OnProjectInspectorRemoveDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult; virtual; abstract;
function OnProjectInspectorReAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult; virtual; abstract;
// package editors
function DoNewPackage: TModalResult; virtual; abstract;

View File

@ -174,6 +174,8 @@ type
function LoadInstalledPackage(const PackageName: string): TLazPackage;
procedure LoadAutoInstallPackages;
procedure SortAutoInstallDependencies;
procedure AddUnitToProjectMainUsesSection(AProject: TProject;
const AnUnitName, AnUnitInFilename: string);
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
@ -219,10 +221,17 @@ type
function CanOpenDesignerForm(AnUnitInfo: TUnitInfo): TModalResult; override;
procedure AddDefaultDependencies(AProject: TProject); override;
procedure AddProjectDependency(AProject: TProject; APackage: TLazPackage); override;
function AddProjectDependency(AProject: TProject; ADependency: TPkgDependency): TModalResult;
procedure AddProjectRegCompDependency(AProject: TProject;
ARegisteredComponent: TRegisteredComponent); override;
procedure AddProjectLCLDependency(AProject: TProject); override;
function OnProjectInspectorOpen(Sender: TObject): boolean; override;
function OnProjectInspectorAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult; override;
function OnProjectInspectorRemoveDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult; override;
function OnProjectInspectorReAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult; override;
// package editors
function DoNewPackage: TModalResult; override;
@ -743,8 +752,33 @@ var
LowerFilename: String;
BrokenDependencies: TList;
RenameDependencies: Boolean;
OldPkgName: String;
procedure RenamePackageInProject;
var
AProject: TProject;
OldUnitName: String;
NewUnitName: String;
begin
AProject:=Project1;
if (pfMainUnitHasUsesSectionForAllUnits in AProject.Flags)
and (APackage.PackageType in [lptRunTime,lptRunAndDesignTime])
and (AProject.MainUnitInfo<>nil) then begin
OldUnitName:=OldPkgName;
NewUnitName:=APackage.Name;
if (OldUnitName<>NewUnitName) then begin
MainIDEInterface.SaveSourceEditorChangesToCodeCache(-1);
if CodeToolBoss.RenameUsedUnit(
AProject.MainUnitInfo.Source,OldUnitName,NewUnitName,'')
then
AProject.MainUnitInfo.Modified:=true;
end;
end;
end;
begin
OldPkgFilename:=APackage.Filename;
OldPkgName:=APackage.Name;
SaveDialog:=TSaveDialog.Create(nil);
try
@ -829,7 +863,7 @@ begin
continue; // try again
end;
// check file name conflicts with other packages
// check file name conflicts with files in other packages
PkgFile:=PackageGraph.FindFileInAllPackages(NewFilename,true,true);
if PkgFile<>nil then begin
Result:=MessageDlg(lisPkgMangFilenameIsUsedByOtherPackage,
@ -883,6 +917,7 @@ begin
PackageGraph.ChangePackageID(APackage,NewPkgName,APackage.Version,
RenameDependencies);
SaveAutoInstallDependencies(false);
RenamePackageInProject;
// clean up old package file to reduce ambigiousities
if FileExists(OldPkgFilename)
@ -1632,6 +1667,23 @@ begin
false);
end;
procedure TPkgManager.AddUnitToProjectMainUsesSection(AProject: TProject;
const AnUnitName, AnUnitInFilename: string);
begin
// add unit to project main source file
if (pfMainUnitHasUsesSectionForAllUnits in AProject.Flags)
and (AProject.MainUnitInfo<>nil) then begin
debugln('TPkgManager.AddUnitToProjectMainUsesSection B ',AnUnitName);
if (AnUnitName<>'') then begin
MainIDEInterface.SaveSourceEditorChangesToCodeCache(-1);
if CodeToolBoss.AddUnitToMainUsesSection(
AProject.MainUnitInfo.Source,AnUnitName,AnUnitInFilename)
then
AProject.MainUnitInfo.Modified:=true;
end;
end;
end;
constructor TPkgManager.Create(TheOwner: TComponent);
var
CompPalette: TComponentPalette;
@ -1930,8 +1982,19 @@ begin
exit;
// add a dependency for the package to the project
NewDependency:=APackage.CreateDependencyForThisPkg(AProject);
AProject.AddRequiredDependency(NewDependency);
PackageGraph.OpenDependency(NewDependency);
AddProjectDependency(AProject,NewDependency);
end;
function TPkgManager.AddProjectDependency(AProject: TProject;
ADependency: TPkgDependency): TModalResult;
begin
Result:=mrOk;
AProject.AddRequiredDependency(ADependency);
PackageGraph.OpenDependency(ADependency);
if (ADependency.RequiredPackage<>nil)
and (not ADependency.RequiredPackage.AutoCreated) then begin
AddUnitToProjectMainUsesSection(AProject,ADependency.PackageName,'');
end;
end;
procedure TPkgManager.AddProjectRegCompDependency(AProject: TProject;
@ -2250,8 +2313,7 @@ var
begin
Result:=mrOk;
if (Dependencies=nil) or (Dependencies.Count=0) then exit;
Msg:='The following package(s) failed to load:'#13
+#13;
Msg:=Format(lisTheFollowingPackageSFailedToLoad, [#13, #13]);
for i:=0 to Dependencies.Count-1 do begin
ADependency:=TPkgDependency(Dependencies[i]);
Msg:=Msg+ADependency.AsString+#13;
@ -2263,11 +2325,11 @@ begin
// broken dependency used by project -> show project inspector
if ADependency.Owner=Project1 then begin
Result:=MainIDE.DoShowProjectInspector;
Msg:=Msg+'See Project -> Project Inspector';
Msg:=Format(lisSeeProjectProjectInspector, [Msg]);
end;
end;
Result:=MessageDlg('Missing Packages',Msg,mtError,[mbOk],0);
Result:=MessageDlg(lisMissingPackages, Msg, mtError, [mbOk], 0);
end;
function TPkgManager.DoCompileProjectDependencies(AProject: TProject;
@ -3471,6 +3533,53 @@ begin
DoOpenPackage(Dependency.RequiredPackage);
end;
function TPkgManager.OnProjectInspectorAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult;
begin
Result:=AddProjectDependency(Project1,ADependency);
end;
function TPkgManager.OnProjectInspectorRemoveDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult;
var
ShortUnitName: String;
Dummy: Boolean;
begin
Result:=mrOk;
Project1.RemoveRequiredDependency(ADependency);
//debugln('TPkgManager.OnProjectInspectorRemoveDependency A');
if (Project1.MainUnitID>=0)
and (pfMainUnitHasUsesSectionForAllUnits in Project1.Flags)
then begin
MainIDEInterface.SaveSourceEditorChangesToCodeCache(-1);
ShortUnitName:=ADependency.PackageName;
//debugln('TPkgManager.OnProjectInspectorRemoveDependency B ShortUnitName="',ShortUnitName,'"');
if (ShortUnitName<>'') then begin
Dummy:=CodeToolBoss.RemoveUnitFromAllUsesSections(
Project1.MainUnitInfo.Source,ShortUnitName);
if Dummy then
Project1.MainUnitInfo.Modified:=true
else begin
MainIDEInterface.DoJumpToCodeToolBossError;
Result:=mrCancel;
exit;
end;
end;
end;
end;
function TPkgManager.OnProjectInspectorReAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult;
begin
Result:=mrOk;
Project1.ReaddRemovedDependency(ADependency);
PackageGraph.OpenDependency(ADependency);
if (ADependency.RequiredPackage<>nil)
and (not ADependency.RequiredPackage.AutoCreated) then begin
AddUnitToProjectMainUsesSection(Project1,ADependency.PackageName,'');
end;
end;
function TPkgManager.CanOpenDesignerForm(AnUnitInfo: TUnitInfo): TModalResult;
var
AProject: TProject;