mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-07 09:00:35 +02:00
package dependencies: implemented storing default filename issue #1950
git-svn-id: trunk@9775 -
This commit is contained in:
parent
c84cbe3ffb
commit
588a4a2408
@ -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';
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user