package dependencies: implemented storing default filename issue #1950

git-svn-id: trunk@9775 -
This commit is contained in:
mattias 2006-08-31 19:44:44 +00:00
parent c84cbe3ffb
commit 588a4a2408
5 changed files with 170 additions and 2 deletions

View File

@ -2658,6 +2658,8 @@ resourcestring
lisPckEditMoveDependencyUp = 'Move dependency up';
lisPckEditMoveDependencyDown = 'Move dependency down';
lisPckEditReAddDependency = 'Re-Add dependency';
lisPckEditSetDependencyDefaultFilename = 'Store dependency filename';
lisPckEditClearDependencyDefaultFilename = 'Clear dependency filename';
lisPckEditCompile = 'Compile';
lisPckEditRecompileClean = 'Recompile clean';
lisPckEditRecompileAllRequired = 'Recompile all required';

View File

@ -79,6 +79,8 @@ type
procedure ItemsTreeViewSelectionChanged(Sender: TObject);
procedure MoveDependencyUpClick(Sender: TObject);
procedure MoveDependencyDownClick(Sender: TObject);
procedure SetDependencyFilenameMenuItemClick(Sender: TObject);
procedure ClearDependencyFilenameMenuItemClick(Sender: TObject);
procedure OpenBitBtnClick(Sender: TObject);
procedure OptionsBitBtnClick(Sender: TObject);
procedure ProjectInspectorFormShow(Sender: TObject);
@ -202,6 +204,38 @@ begin
ItemsTreeView.EndUpdate;
end;
procedure TProjectInspectorForm.SetDependencyFilenameMenuItemClick(
Sender: TObject);
var
CurDependency: TPkgDependency;
NewFilename: String;
begin
CurDependency:=GetSelectedDependency;
if (CurDependency=nil) then exit;
if CurDependency.RequiredPackage=nil then exit;
NewFilename:=CurDependency.RequiredPackage.Filename;
if NewFilename=CurDependency.DefaultFilename then exit;
CurDependency.DefaultFilename:=NewFilename;
LazProject.Modified:=true;
UpdateRequiredPackages;
UpdateButtons;
end;
procedure TProjectInspectorForm.ClearDependencyFilenameMenuItemClick(
Sender: TObject);
var
CurDependency: TPkgDependency;
begin
CurDependency:=GetSelectedDependency;
if (CurDependency=nil) then exit;
if CurDependency.RequiredPackage=nil then exit;
if CurDependency.DefaultFilename='' then exit;
CurDependency.DefaultFilename:='';
LazProject.Modified:=true;
UpdateRequiredPackages;
UpdateButtons;
end;
procedure TProjectInspectorForm.AddBitBtnClick(Sender: TObject);
var
AddResult: TAddToProjectResult;
@ -293,6 +327,12 @@ begin
(CurDependency.PrevRequiresDependency<>nil));
AddPopupMenuItem(lisPckEditMoveDependencyDown, @MoveDependencyDownClick,
(CurDependency.NextRequiresDependency<>nil));
AddPopupMenuItem(lisPckEditSetDependencyDefaultFilename,
@SetDependencyFilenameMenuItemClick,
(CurDependency.RequiredPackage<>nil));
AddPopupMenuItem(lisPckEditClearDependencyDefaultFilename,
@ClearDependencyFilenameMenuItemClick,
(CurDependency.DefaultFilename<>''));
end;
end;
@ -468,6 +508,10 @@ begin
CurNode:=DependenciesNode.GetFirstChild;
while Dependency<>nil do begin
NodeText:=Dependency.AsString;
if Dependency.DefaultFilename<>'' then
NodeText:=NodeText+' in '
+Dependency.MakeFilenameRelativeToOwner(
Dependency.DefaultFilename);
if CurNode=nil then
CurNode:=ItemsTreeView.Items.AddChild(DependenciesNode,NodeText)
else

View File

@ -252,6 +252,7 @@ type
TPkgDependency = class
private
FDefaultFilename: string;
FFlags: TPkgDependencyFlags;
FHoldPackage: boolean;
FLoadPackageResult: TLoadPackageResult;
@ -276,7 +277,7 @@ type
destructor Destroy; override;
procedure Clear;
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string;
FileVersion: integer);
FileVersion: integer);
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
function MakeSense: boolean;
function IsCompatible(const Version: TPkgVersion): boolean;
@ -301,6 +302,7 @@ type
ListType: TPkgDependencyList);
procedure MoveDownInList(var FirstDependency: TPkgDependency;
ListType: TPkgDependencyList);
function MakeFilenameRelativeToOwner(const AFilename: string): string;
public
property PackageName: string read FPackageName write SetPackageName;
property Flags: TPkgDependencyFlags read FFlags write SetFlags;
@ -312,6 +314,7 @@ type
property LoadPackageResult: TLoadPackageResult read FLoadPackageResult write SetLoadPackageResult;
property HoldPackage: boolean read FHoldPackage write SetHoldPackage;
property MarkerFlags: TPKgMarkerFlags read FMarkerFlags write FMarkerFlags;
property DefaultFilename: string read FDefaultFilename write FDefaultFilename;
end;
PPkgDependency = ^TPkgDependency;
@ -1576,6 +1579,7 @@ begin
FPackageName:=AValue;
if (PackageDependencies<>nil) and (FPackageName<>'') then
PackageDependencies.Add(Self);
FDefaultFilename:='';
end;
procedure TPkgDependency.SetRemoved(const AValue: boolean);
@ -1623,6 +1627,20 @@ end;
procedure TPkgDependency.LoadFromXMLConfig(XMLConfig: TXMLConfig;
const Path: string; FileVersion: integer);
function LoadFilename(const SubPath: string): string;
var
BaseDir: String;
begin
Result:=SetDirSeparators(XMLConfig.GetValue(Path+SubPath,''));
if (Result<>'') and (Owner<>nil)
and (not FilenameIsAbsolute(Result)) then begin
BaseDir:=GetDependencyOwnerDirectory(Self);
if BaseDir<>'' then
Result:=TrimFilename(AppendPathDelim(BaseDir)+Result);
end;
end;
begin
if FileVersion=1 then ;
Clear;
@ -1633,16 +1651,32 @@ begin
Include(FFlags,pdfMaxVersion);
if XMLConfig.GetValue(Path+'MinVersion/Valid',false) then
Include(FFlags,pdfMinVersion);
FDefaultFilename:=LoadFilename('DefaultFilename/Value');
end;
procedure TPkgDependency.SaveToXMLConfig(XMLConfig: TXMLConfig;
const Path: string);
procedure SaveFilename(const aPath: string; AFilename: string);
var
BaseDir: String;
begin
if (AFilename<>'')
and (Owner<>nil) then begin
BaseDir:=GetDependencyOwnerDirectory(Self);
if BaseDir<>'' then
AFilename:=CreateRelativePath(AFilename,BaseDir);
end;
XMLConfig.SetDeleteValue(Path+aPath,AFilename,'');
end;
begin
XMLConfig.SetDeleteValue(Path+'PackageName/Value',PackageName,'');
MaxVersion.SaveToXMLConfig(XMLConfig,Path+'MaxVersion/');
MinVersion.SaveToXMLConfig(XMLConfig,Path+'MinVersion/');
XMLConfig.SetDeleteValue(Path+'MaxVersion/Valid',pdfMaxVersion in FFlags,false);
XMLConfig.SetDeleteValue(Path+'MinVersion/Valid',pdfMinVersion in FFlags,false);
SaveFilename('DefaultFilename/Value',FDefaultFilename);
end;
function TPkgDependency.MakeSense: boolean;
@ -1804,6 +1838,20 @@ begin
if FirstDependency=Self then FirstDependency:=OldNext;
end;
function TPkgDependency.MakeFilenameRelativeToOwner(const AFilename: string
): string;
var
BaseDir: String;
begin
Result:=AFilename;
if (Result<>'')
and (Owner<>nil) then begin
BaseDir:=GetDependencyOwnerDirectory(Self);
if BaseDir<>'' then
Result:=CreateRelativePath(Result,BaseDir);
end;
end;
{ TPkgVersion }
procedure TPkgVersion.Clear;

View File

@ -153,6 +153,8 @@ type
procedure MoveDependencyUpClick(Sender: TObject);
procedure MoveFileDownMenuItemClick(Sender: TObject);
procedure MoveFileUpMenuItemClick(Sender: TObject);
procedure SetDependencyFilenameMenuItemClick(Sender: TObject);
procedure ClearDependencyFilenameMenuItemClick(Sender: TObject);
procedure OpenFileMenuItemClick(Sender: TObject);
procedure OptionsBitBtnClick(Sender: TObject);
procedure PackageEditorFormClose(Sender: TObject; var CloseAction: TCloseAction);
@ -540,6 +542,12 @@ begin
AddPopupMenuItem(lisPckEditMoveDependencyDown, @MoveDependencyDownClick,
(CurDependency.NextRequiresDependency<>nil)
and Writable);
AddPopupMenuItem(lisPckEditSetDependencyDefaultFilename,
@SetDependencyFilenameMenuItemClick,
Writable and (CurDependency.RequiredPackage<>nil));
AddPopupMenuItem(lisPckEditClearDependencyDefaultFilename,
@ClearDependencyFilenameMenuItemClick,
Writable and (CurDependency.DefaultFilename<>''));
end else begin
AddPopupMenuItem(lisMenuOpenPackage, @OpenFileMenuItemClick, true);
AddPopupMenuItem(lisPckEditReAddDependency, @ReAddMenuItemClick,
@ -661,6 +669,42 @@ begin
DoMoveCurrentFile(-1);
end;
procedure TPackageEditorForm.SetDependencyFilenameMenuItemClick(Sender: TObject
);
var
Removed: boolean;
CurDependency: TPkgDependency;
NewFilename: String;
begin
CurDependency:=GetCurrentDependency(Removed);
if (CurDependency=nil) or Removed then exit;
if LazPackage.ReadOnly then exit;
if CurDependency.RequiredPackage=nil then exit;
NewFilename:=CurDependency.RequiredPackage.Filename;
if NewFilename=CurDependency.DefaultFilename then exit;
CurDependency.DefaultFilename:=NewFilename;
LazPackage.Modified:=true;
UpdateRequiredPkgs;
UpdateButtons;
end;
procedure TPackageEditorForm.ClearDependencyFilenameMenuItemClick(
Sender: TObject);
var
Removed: boolean;
CurDependency: TPkgDependency;
begin
CurDependency:=GetCurrentDependency(Removed);
if (CurDependency=nil) or Removed then exit;
if LazPackage.ReadOnly then exit;
if CurDependency.RequiredPackage=nil then exit;
if CurDependency.DefaultFilename='' then exit;
CurDependency.DefaultFilename:='';
LazPackage.Modified:=true;
UpdateRequiredPkgs;
UpdateButtons;
end;
procedure TPackageEditorForm.MoveFileDownMenuItemClick(Sender: TObject);
begin
DoMoveCurrentFile(1);
@ -1636,6 +1680,7 @@ var
CurNode: TTreeNode;
CurDependency: TPkgDependency;
NextNode: TTreeNode;
CurNodeText: String;
begin
if LazPackage=nil then exit;
FilesTreeView.BeginUpdate;
@ -1646,7 +1691,12 @@ begin
while CurDependency<>nil do begin
if CurNode=nil then
CurNode:=FilesTreeView.Items.AddChild(RequiredPackagesNode,'');
CurNode.Text:=CurDependency.AsString;
CurNodeText:=CurDependency.AsString;
if CurDependency.DefaultFilename<>'' then
CurNodeText:=CurNodeText+' in '
+CurDependency.MakeFilenameRelativeToOwner(
CurDependency.DefaultFilename);
CurNode.Text:=CurNodeText;
if CurDependency.LoadPackageResult=lprSuccess then
CurNode.ImageIndex:=ImageIndexRequired
else

View File

@ -2245,6 +2245,30 @@ begin
if OpenDependencyWithPackageLink(Dependency,PkgLink) then break;
PkgLinks.RemoveLink(PkgLink);
until false;
if (Dependency.LoadPackageResult=lprNotFound)
and (Dependency.DefaultFilename<>'') then begin
// try defaultfilename
AFilename:=Dependency.DefaultFilename;
if (CompareFileExt(AFilename,'lpk')=0)
and (CompareText(ExtractFileNameOnly(AFilename),Dependency.PackageName)=0)
then begin
if not FilenameIsAbsolute(AFilename) then begin
CurDir:=GetDependencyOwnerDirectory(Dependency);
if (CurDir<>'') then
AFilename:=AppendPathDelim(CurDir)+AFilename;
end;
if FilenameIsAbsolute(AFilename) then begin
AFilename:=FindDiskFileCaseInsensitive(AFilename);
if FileExistsCached(AFilename) then begin
PkgLink:=PkgLinks.AddUserLink(AFilename,Dependency.PackageName);
if (PkgLink<>nil) then begin
if not OpenDependencyWithPackageLink(Dependency,PkgLink) then
PkgLinks.RemoveLink(PkgLink);
end;
end;
end;
end;
end;
if Dependency.LoadPackageResult=lprNotFound then begin
// try in owner directory (some projects put all their packages into
// one directory)