implemented removing and readding package items

git-svn-id: trunk@4031 -
This commit is contained in:
mattias 2003-04-09 23:36:33 +00:00
parent a7ca5dc013
commit 6212168efc
5 changed files with 679 additions and 236 deletions

View File

@ -134,8 +134,6 @@ type
procedure OnIteratePackages(APackageID: TLazPackageID);
procedure AutoCompleteNewComponent;
procedure AutoCompleteNewComponentUnitName;
function CheckUnitFilename(AddFileType: TAddToPkgType;
var AFilename: string): boolean;
procedure UpdateAddUnitInfo;
public
Params: TAddToPkgResult;
@ -155,6 +153,11 @@ type
function ShowAddToPackageDlg(Pkg: TLazPackage; var Params: TAddToPkgResult;
OnGetIDEFileInfo: TGetIDEFileStateEvent;
OnGetUnitRegisterInfo: TOnGetUnitRegisterInfo): TModalResult;
function CheckAddingUnitFilename(LazPackage: TLazPackage;
AddFileType: TAddToPkgType; OnGetIDEFileInfo: TGetIDEFileStateEvent;
var AFilename: string): boolean;
function CheckAddingDependency(LazPackage: TLazPackage;
NewDependency: TPkgDependency): boolean;
implementation
@ -177,6 +180,169 @@ begin
AddDlg.Free;
end;
function CheckAddingUnitFilename(LazPackage: TLazPackage;
AddFileType: TAddToPkgType; OnGetIDEFileInfo: TGetIDEFileStateEvent;
var AFilename: string): boolean;
var
AnUnitName: String;
PkgFile: TPkgFile;
Msg: String;
IDEFileFlags: TIDEFileStateFlags;
begin
Result:=false;
// normalize filename
AFilename:=TrimFilename(AFilename);
if (not FilenameIsAbsolute(AFilename)) then begin
if LazPackage.HasDirectory then
AFilename:=LazPackage.Directory+AFilename
else begin
MessageDlg('Invalid filename',
'The filename "'+AFilename+'" is ambigious.'#13
+'Please specifiy a filename with full path.',
mtError,[mbCancel],0);
exit;
end;
end;
// check if file exists
if not FileExists(AFilename) then begin
if AddFileType=d2ptUnit then begin
MessageDlg('File not found',
'File "'+AFilename+'" not found.',mtError,[mbCancel],0);
exit;
end;
end;
// check file extension
if not FilenameIsPascalUnit(AFilename) then begin
MessageDlg('File not unit',
'Pascal units must have the extension .pp or .pas',
mtWarning,[mbCancel],0);
exit;
end;
// check unitname
AnUnitName:=ExtractFileNameOnly(AFilename);
if not IsValidIdent(AnUnitName) then begin
MessageDlg('File not unit',
+'"'+AnUnitName+'" is not a valid unit name.',
mtWarning,[mbCancel],0);
exit;
end;
// check if unitname already exists in package
PkgFile:=PackageGraph.FindUnit(LazPackage,AnUnitName,true,true);
if PkgFile<>nil then begin
if PkgFile.LazPackage=LazPackage then begin
MessageDlg('Unitname already exists',
'The unitname "'+AnUnitName+'" already exists in this package.',
mtError,[mbCancel],0);
exit;
end else begin
if MessageDlg('Unitname already exists',
'The unitname "'+AnUnitName+'" already exists in the package:'#13
+PkgFile.LazPackage.IDAsString,
mtWarning,[mbCancel,mbIgnore],0)<>mrIgnore then exit;
end;
end;
// check if unitname is a componentclass
if IDEComponentPalette.FindComponent(AnUnitName)<>nil then begin
if MessageDlg('Ambigious Unit Name',
'The unit name "'+AnUnitName+'" is the same as an registered component.'#13
+'Using this can cause strange error messages.',
mtWarning,[mbCancel,mbIgnore],0)<>mrIgnore
then
exit;
end;
// check if file already exists in package
PkgFile:=LazPackage.FindPkgFile(AFilename,true,true);
if PkgFile<>nil then begin
Msg:='File "'+AFilename+'" already exists in the project.';
if PkgFile.Filename<>AFilename then
Msg:=#13+'Existing file: "'+PkgFile.Filename+'"';
MessageDlg('File already exists',Msg,mtError,[mbCancel],0);
exit;
end;
// check if file is part of project or marked readonly
if Assigned(OnGetIDEFileInfo) then begin
IDEFileFlags:=[];
OnGetIDEFileInfo(nil,AFilename,[ifsPartOfProject,ifsReadOnly],
IDEFileFlags);
if (ifsPartOfProject in IDEFileFlags) then begin
MessageDlg('File is used',
'The file "'+AFilename+'" is part of the current project.'#13
+'It is a bad idea to share files between projects and packages.',
mtError,[mbCancel],0);
exit;
end;
if (ifsReadOnly in IDEFileFlags) then begin
MessageDlg('File is readonly',
'The file "'+AFilename+'" is marked as readonly.',
mtError,[mbCancel],0);
exit;
end;
end;
// ok
Result:=true;
end;
function CheckAddingDependency(LazPackage: TLazPackage;
NewDependency: TPkgDependency): boolean;
var
NewPckName: String;
begin
Result:=false;
NewPckName:=NewDependency.PackageName;
// check Max-Min version
if (pdfMinVersion in NewDependency.Flags)
and (pdfMaxVersion in NewDependency.Flags)
and (NewDependency.MaxVersion.Compare(NewDependency.MinVersion)<0) then
begin
MessageDlg('Invalid Min-Max version',
'The Maximum Version is lower than the Minimim Version.',
mtError,[mbCancel],0);
exit;
end;
// check packagename
if not IsValidIdent(NewPckName) then begin
MessageDlg('Invalid packagename',
'The package name "'+NewPckName+'" is invalid.'#13
+'Plase choose an existing package.',
mtError,[mbCancel],0);
exit;
end;
// check if package is already required
if LazPackage.FindDependencyByName(NewPckName)<>nil then begin
MessageDlg('Dependency already exists',
'The package has already a dependency for the package "'+NewPckName+'".',
mtError,[mbCancel],0);
exit;
end;
// check if required package exists
if PackageGraph.FindWithDependency(NewDependency,fpfSearchPackageEverywhere)
=nil then
begin
MessageDlg('Package not found',
'The packagename "'+NewPckName+'" was not found.'#13
+'Please choose an existing package.',
mtError,[mbCancel],0);
exit;
end;
Result:=true;
end;
{ TAddToPackageDlg }
procedure TAddToPackageDlg.AddUnitButtonClick(Sender: TObject);
@ -191,7 +357,8 @@ begin
Include(Params.PkgFileFlags,pffHasRegisterProc);
// check filename
if not CheckUnitFilename(Params.AddType,Params.UnitFilename) then exit;
if not CheckAddingUnitFilename(LazPackage,Params.AddType,
OnGetIDEFileInfo,Params.UnitFilename) then exit;
// check unitname
if AnsiCompareText(Params.UnitName,ExtractFileNameOnly(Params.UnitFilename))<>0
@ -428,7 +595,8 @@ begin
end;
// check filename
if not CheckUnitFilename(Params.AddType,Params.UnitFilename) then exit;
if not CheckAddingUnitFilename(LazPackage,Params.AddType,
OnGetIDEFileInfo,Params.UnitFilename) then exit;
// create dependency if needed
PkgComponent:=
@ -517,7 +685,6 @@ end;
procedure TAddToPackageDlg.NewDependButtonClick(Sender: TObject);
var
NewDependency: TPkgDependency;
NewPckName: String;
begin
NewDependency:=TPkgDependency.Create;
try
@ -547,26 +714,10 @@ begin
end;
NewDependency.Flags:=NewDependency.Flags+[pdfMaxVersion];
end;
// check packagename
NewPckName:=DependPkgNameComboBox.Text;
if not IsValidIdent(NewPckName) then begin
MessageDlg('Invalid packagename',
'The packagename "'+NewPckName+'" is invalid.'#13
+'Plase choose an existing package.',
mtError,[mbCancel],0);
exit;
end;
NewDependency.PackageName:=NewPckName;
if PackageGraph.FindWithDependency(NewDependency,fpfSearchPackageEverywhere)
=nil then
begin
MessageDlg('Package not found',
'The packagename "'+DependPkgNameComboBox.Text+'" was not found.'#13
+'Please choose an existing package.',
mtError,[mbCancel],0);
exit;
end;
NewDependency.PackageName:=DependPkgNameComboBox.Text;
if not CheckAddingDependency(LazPackage,NewDependency) then exit;
// ok
Params.Dependency:=NewDependency;
NewDependency:=nil;
@ -950,116 +1101,6 @@ begin
ComponentUnitFileEdit.Text:=NewFileName;
end;
function TAddToPackageDlg.CheckUnitFilename(AddFileType: TAddToPkgType;
var AFilename: string): boolean;
var
AnUnitName: String;
PkgFile: TPkgFile;
Msg: String;
IDEFileFlags: TIDEFileStateFlags;
begin
Result:=false;
// normalize filename
AFilename:=TrimFilename(AFilename);
if (not FilenameIsAbsolute(AFilename)) then begin
if LazPackage.HasDirectory then
AFilename:=LazPackage.Directory+AFilename
else begin
MessageDlg('Invalid filename',
'The filename "'+AFilename+'" is ambigious.'#13
+'Please specifiy a filename with full path.',
mtError,[mbCancel],0);
exit;
end;
end;
// check if file exists
if not FileExists(AFilename) then begin
if AddFileType=d2ptUnit then begin
MessageDlg('File not found',
'File "'+AFilename+'" not found.',mtError,[mbCancel],0);
exit;
end;
end;
// check file extension
if not FilenameIsPascalUnit(AFilename) then begin
MessageDlg('File not unit',
'Pascal units must have the extension .pp or .pas',
mtWarning,[mbCancel],0);
exit;
end;
// check unitname
AnUnitName:=ExtractFileNameOnly(AFilename);
if not IsValidIdent(AnUnitName) then begin
MessageDlg('File not unit',
+'"'+AnUnitName+'" is not a valid unit name.',
mtWarning,[mbCancel],0);
exit;
end;
// check if unitname already exists in package
PkgFile:=PackageGraph.FindUnit(LazPackage,AnUnitName,true,true);
if PkgFile<>nil then begin
if PkgFile.LazPackage=LazPackage then begin
MessageDlg('Unitname already exists',
'The unitname "'+AnUnitName+'" already exists in this package.',
mtError,[mbCancel],0);
exit;
end else begin
if MessageDlg('Unitname already exists',
'The unitname "'+AnUnitName+'" already exists in the package:'#13
+PkgFile.LazPackage.IDAsString,
mtWarning,[mbCancel,mbIgnore],0)<>mrIgnore then exit;
end;
end;
// check if unitname is a componentclass
if IDEComponentPalette.FindComponent(AnUnitName)<>nil then begin
if MessageDlg('Ambigious Unit Name',
'The unit name "'+AnUnitName+'" is the same as an registered component.'#13
+'Using this can cause strange error messages.',
mtWarning,[mbCancel,mbIgnore],0)<>mrIgnore
then
exit;
end;
// check if file already exists in package
PkgFile:=LazPackage.FindPkgFile(AFilename,true,true);
if PkgFile<>nil then begin
Msg:='File "'+AFilename+'" already exists in the project.';
if PkgFile.Filename<>AFilename then
Msg:=#13+'Existing file: "'+PkgFile.Filename+'"';
MessageDlg('File already exists',Msg,mtError,[mbCancel],0);
exit;
end;
// check if file is part of project or marked readonly
if Assigned(OnGetIDEFileInfo) then begin
IDEFileFlags:=[];
OnGetIDEFileInfo(Self,AFilename,[ifsPartOfProject,ifsReadOnly],
IDEFileFlags);
if (ifsPartOfProject in IDEFileFlags) then begin
MessageDlg('File is used',
'The file "'+AFilename+'" is part of the current project.'#13
+'It is a bad idea to share files between projects and packages.',
mtError,[mbCancel],0);
exit;
end;
if (ifsReadOnly in IDEFileFlags) then begin
MessageDlg('File is readonly',
'The file "'+AFilename+'" is marked as readonly.',
mtError,[mbCancel],0);
exit;
end;
end;
// ok
Result:=true;
end;
procedure TAddToPackageDlg.UpdateAddUnitInfo;
var
AnUnitName: string;

View File

@ -116,7 +116,7 @@ type
private
FComponentPriority: TComponentPriority;
FComponents: TList; // list of TPkgComponent
FDeleted: boolean;
FRemoved: boolean;
FFilename: string;
FFileType: TPkgFileType;
FFlags: TPkgFileFlags;
@ -124,7 +124,7 @@ type
FUnitName: string;
function GetComponents(Index: integer): TPkgComponent;
function GetHasRegisteredProc: boolean;
procedure SetDeleted(const AValue: boolean);
procedure SetRemoved(const AValue: boolean);
procedure SetFilename(const AValue: string);
procedure SetFileType(const AValue: TPkgFileType);
procedure SetFlags(const AValue: TPkgFileFlags);
@ -145,8 +145,9 @@ type
procedure AddPkgComponent(APkgComponent: TPkgComponent);
procedure RemovePkgComponent(APkgComponent: TPkgComponent);
function GetResolvedFilename: string;
function HasRegisteredPlugins: boolean;
public
property Deleted: boolean read FDeleted write SetDeleted;
property Removed: boolean read FRemoved write SetRemoved;
property Filename: string read FFilename write SetFilename;
property FileType: TPkgFileType read FFileType write SetFileType;
property Flags: TPkgFileFlags read FFlags write SetFlags;
@ -175,10 +176,12 @@ type
FMaxVersion: TPkgVersion;
FMinVersion: TPkgVersion;
FPackageName: string;
FRemoved: boolean;
procedure SetFlags(const AValue: TPkgDependencyFlags);
procedure SetMaxVersion(const AValue: TPkgVersion);
procedure SetMinVersion(const AValue: TPkgVersion);
procedure SetPackageName(const AValue: string);
procedure SetRemoved(const AValue: boolean);
public
constructor Create;
destructor Destroy; override;
@ -199,6 +202,7 @@ type
property Flags: TPkgDependencyFlags read FFlags write SetFlags;
property MinVersion: TPkgVersion read FMinVersion write SetMinVersion;
property MaxVersion: TPkgVersion read FMaxVersion write SetMaxVersion;
property Removed: boolean read FRemoved write SetRemoved;
end;
@ -258,7 +262,6 @@ type
FAutoInstall: TPackageInstallType;
FCompilerOptions: TPkgCompilerOptions;
FComponents: TList; // TList of TPkgComponent
FDeletedFiles: TList; // TList of TPkgFile
FDependingPkgs: TList; // TList of TLazPackage
FDescription: string;
FDirectory: string;
@ -272,6 +275,8 @@ type
FPackageEditor: TBasePackageEditor;
FPackageType: TLazPackageType;
FReadOnly: boolean;
FRemovedFiles: TList; // TList of TPkgFile
FRemovedRequiredPkgs: TList; // TList of TPkgDependency
FRegistered: boolean;
FRequiredPkgs: TList; // TList of TPkgDependency
FTitle: string;
@ -281,13 +286,15 @@ type
function GetAutoUpdate: boolean;
function GetComponentCount: integer;
function GetComponents(Index: integer): TPkgComponent;
function GetDeletedCount: integer;
function GetDeletedFiles(Index: integer): TPkgFile;
function GetRemovedCount: integer;
function GetRemovedFiles(Index: integer): TPkgFile;
function GetDependingPkgCount: integer;
function GetDependingPkgs(Index: integer): TLazPackage;
function GetFileCount: integer;
function GetFiles(Index: integer): TPkgFile;
function GetModified: boolean;
function GetRemovedRequiredPkgCount: integer;
function GetRemovedRequiredPkgs(Index: integer): TPkgDependency;
function GetRequiredPkgCount: integer;
function GetRequiredPkgs(Index: integer): TPkgDependency;
function GetUsedPkgCount: integer;
@ -329,14 +336,19 @@ type
procedure ConsistencyCheck;
function IndexOfPkgComponent(PkgComponent: TPkgComponent): integer;
function FindPkgFile(const AFilename: string;
ResolveLinks, IgnoreDeleted: boolean): TPkgFile;
function FindUnit(const TheUnitName: string; IgnoreDeleted: boolean): TPkgFile;
ResolveLinks, IgnoreRemoved: boolean): TPkgFile;
function FindUnit(const TheUnitName: string; IgnoreRemoved: boolean): TPkgFile;
function FindRemovedPkgFile(const AFilename: string): TPkgFile;
function FindDependencyByName(const PkgName: string): TPkgDependency;
function NameAndVersion: string;
function AddFile(const NewFilename, NewUnitName: string;
NewFileType: TPkgFileType; NewFlags: TPkgFileFlags;
CompPriorityCat: TComponentPriorityCategory): TPkgFile;
procedure DeleteFile(PkgFile: TPkgFile);
procedure RemoveFile(PkgFile: TPkgFile);
procedure UnremovePkgFile(PkgFile: TPkgFile);
procedure UnremoveRequiredPkg(Dependency: TPkgDependency);
procedure AddRequiredDependency(Dependency: TPkgDependency);
procedure RemoveRequiredDependency(Dependency: TPkgDependency);
function CreateDependencyForThisPkg: TPkgDependency;
function AddComponent(PkgFile: TPkgFile; const Page: string;
TheComponentClass: TComponentClass): TPkgComponent;
@ -354,8 +366,6 @@ type
read FCompilerOptions;
property ComponentCount: integer read GetComponentCount;
property Components[Index: integer]: TPkgComponent read GetComponents;
property DeletedCount: integer read GetDeletedCount;
property DeletedFiles[Index: integer]: TPkgFile read GetDeletedFiles;
property DependingPkgCount: integer read GetDependingPkgCount;
property DependingPkgs[Index: integer]: TLazPackage read GetDependingPkgs;
property Description: string read FDescription write SetDescription;
@ -373,6 +383,10 @@ type
property PackageType: TLazPackageType
read FPackageType write SetPackageType;
property ReadOnly: boolean read FReadOnly write SetReadOnly;
property RemovedFilesCount: integer read GetRemovedCount;
property RemovedFiles[Index: integer]: TPkgFile read GetRemovedFiles;
property RemovedRequiredPkgCount: integer read GetRemovedRequiredPkgCount;
property RemovedRequiredPkgs[Index: integer]: TPkgDependency read GetRemovedRequiredPkgs;
property RequiredPkgCount: integer read GetRequiredPkgCount;
property RequiredPkgs[Index: integer]: TPkgDependency read GetRequiredPkgs;
property Title: string read FTitle write SetTitle;
@ -519,10 +533,10 @@ begin
Result:=pffHasRegisterProc in FFlags;
end;
procedure TPkgFile.SetDeleted(const AValue: boolean);
procedure TPkgFile.SetRemoved(const AValue: boolean);
begin
if FDeleted=AValue then exit;
FDeleted:=AValue;
if FRemoved=AValue then exit;
FRemoved:=AValue;
end;
function TPkgFile.GetComponents(Index: integer): TPkgComponent;
@ -569,6 +583,11 @@ begin
Result:=FComponents;
end;
function TPkgFile.HasRegisteredPlugins: boolean;
begin
Result:=ComponentCount>0;
end;
constructor TPkgFile.Create(ThePackage: TLazPackage);
begin
Clear;
@ -583,7 +602,7 @@ end;
procedure TPkgFile.Clear;
begin
FDeleted:=false;
FRemoved:=false;
FFilename:='';
FFlags:=[];
FFileType:=pftUnit;
@ -694,6 +713,12 @@ begin
FPackageName:=AValue;
end;
procedure TPkgDependency.SetRemoved(const AValue: boolean);
begin
if FRemoved=AValue then exit;
FRemoved:=AValue;
end;
constructor TPkgDependency.Create;
begin
MinVersion:=TPkgVersion.Create;
@ -710,6 +735,7 @@ end;
procedure TPkgDependency.Clear;
begin
FRemoved:=false;
FFlags:=[];
FMaxVersion.Clear;
FMinVersion.Clear;
@ -909,14 +935,14 @@ begin
Result:=TPkgComponent(FComponents[Index]);
end;
function TLazPackage.GetDeletedCount: integer;
function TLazPackage.GetRemovedCount: integer;
begin
Result:=FDeletedFiles.Count;
Result:=FRemovedFiles.Count;
end;
function TLazPackage.GetDeletedFiles(Index: integer): TPkgFile;
function TLazPackage.GetRemovedFiles(Index: integer): TPkgFile;
begin
Result:=TPkgFile(FDeletedFiles[Index]);
Result:=TPkgFile(FRemovedFiles[Index]);
end;
function TLazPackage.GetDependingPkgCount: integer;
@ -944,6 +970,16 @@ begin
Result:=lpfModified in FFlags;
end;
function TLazPackage.GetRemovedRequiredPkgCount: integer;
begin
Result:=FRemovedRequiredPkgs.Count;
end;
function TLazPackage.GetRemovedRequiredPkgs(Index: integer): TPkgDependency;
begin
Result:=TPkgDependency(FRemovedRequiredPkgs[Index]);
end;
function TLazPackage.GetRequiredPkgCount: integer;
begin
Result:=FRequiredPkgs.Count;
@ -1028,6 +1064,7 @@ begin
FDirectory:=FFilename
else
FDirectory:=ExtractFilePath(FFilename);
writeln('TLazPackage.SetFilename A "',FFilename,'" "',FDirectory,'" HasDirectory=',HasDirectory);
Modified:=true;
end;
@ -1106,7 +1143,8 @@ begin
FDependingPkgs:=Tlist.Create;
FRequiredPkgs:=TList.Create;
FFiles:=TList.Create;
FDeletedFiles:=TList.Create;
FRemovedFiles:=TList.Create;
FRemovedRequiredPkgs:=TList.Create;
FCompilerOptions:=TPkgCompilerOptions.Create;
FUsageOptions:=TAdditionalCompilerOptions.Create;
FUsedPkgs:=TList.Create;
@ -1118,7 +1156,8 @@ end;
destructor TLazPackage.Destroy;
begin
Clear;
FreeAndNil(FDeletedFiles);
FreeAndNil(FRemovedFiles);
FreeAndNil(FRemovedRequiredPkgs);
FreeAndNil(FFiles);
FreeAndNil(FComponents);
FreeAndNil(FCompilerOptions);
@ -1143,8 +1182,8 @@ begin
FDirectory:='';
FVersion.Clear;
FFilename:='';
for i:=FDeletedFiles.Count-1 downto 0 do DeletedFiles[i].Free;
FDeletedFiles.Clear;
for i:=FRemovedFiles.Count-1 downto 0 do RemovedFiles[i].Free;
FRemovedFiles.Clear;
for i:=FFiles.Count-1 downto 0 do Files[i].Free;
FFiles.Clear;
FFlags:=[lpfAutoIncrementVersionOnBuild,lpfAutoUpdate];
@ -1153,6 +1192,8 @@ begin
FName:='';
FPackageType:=lptRunTime;
FRegistered:=false;
for i:=FRemovedRequiredPkgs.Count-1 downto 0 do RemovedRequiredPkgs[i].Free;
FRemovedRequiredPkgs.Clear;
for i:=FRequiredPkgs.Count-1 downto 0 do RequiredPkgs[i].Free;
FRequiredPkgs.Clear;
FTitle:='';
@ -1176,6 +1217,7 @@ procedure TLazPackage.LoadFromXMLConfig(XMLConfig: TXMLConfig;
const Path: string);
var
FileVersion: integer;
OldFilename: String;
procedure LoadPkgDependencyList(const ThePath: string; List: TList);
var
@ -1202,7 +1244,7 @@ var
NewCount:=XMLConfig.GetValue(ThePath+'Count',0);
for i:=0 to NewCount-1 do begin
PkgFile:=TPkgFile.Create(Self);
PkgFile.LoadFromXMLConfig(XMLConfig,ThePath+'Item'+IntToStr(i)+'/',
PkgFile.LoadFromXMLConfig(XMLConfig,ThePath+'Item'+IntToStr(i+1)+'/',
FileVersion);
List.Add(PkgFile);
end;
@ -1223,7 +1265,9 @@ var
begin
FileVersion:=XMLConfig.GetValue(Path+'Version',0);
if FileVersion=1 then ;
OldFilename:=Filename;
Clear;
Filename:=OldFilename;
LockModified;
FName:=XMLConfig.GetValue(Path+'Name/Value','');
FAuthor:=XMLConfig.GetValue(Path+'Author/Value','');
@ -1262,10 +1306,10 @@ procedure TLazPackage.SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string
i: Integer;
PkgFile: TPkgFile;
begin
XMLConfig.SetDeleteValue(Path+'Count',List.Count,0);
XMLConfig.SetDeleteValue(ThePath+'Count',List.Count,0);
for i:=0 to List.Count-1 do begin
PkgFile:=TPkgFile(List[i]);
PkgFile.SaveToXMLConfig(XMLConfig,ThePath+'Item'+IntToStr(i)+'/');
PkgFile.SaveToXMLConfig(XMLConfig,ThePath+'Item'+IntToStr(i+1)+'/');
end;
end;
@ -1359,7 +1403,7 @@ begin
CheckList(FUsedPkgs,true,true,true);
CheckList(FDependingPkgs,true,true,true);
CheckList(FRequiredPkgs,true,true,true);
CheckList(FDeletedFiles,true,true,true);
CheckList(FRemovedFiles,true,true,true);
CheckList(FFiles,true,true,true);
CheckList(FComponents,true,true,true);
CheckEmptyListCut(FDependingPkgs,FUsedPkgs);
@ -1371,7 +1415,7 @@ begin
end;
function TLazPackage.FindPkgFile(const AFilename: string;
ResolveLinks, IgnoreDeleted: boolean): TPkgFile;
ResolveLinks, IgnoreRemoved: boolean): TPkgFile;
var
TheFilename: String;
Cnt: Integer;
@ -1394,10 +1438,10 @@ begin
exit;
end;
end;
if not IgnoreDeleted then begin
Cnt:=DeletedCount;
if not IgnoreRemoved then begin
Cnt:=RemovedFilesCount;
for i:=0 to Cnt-1 do begin
Result:=DeletedFiles[i];
Result:=RemovedFiles[i];
if ResolveLinks then begin
if CompareFilenames(Result.GetResolvedFilename,TheFilename)=0 then
exit;
@ -1411,7 +1455,7 @@ begin
end;
function TLazPackage.FindUnit(const TheUnitName: string;
IgnoreDeleted: boolean): TPkgFile;
IgnoreRemoved: boolean): TPkgFile;
var
Cnt: Integer;
i: Integer;
@ -1422,10 +1466,10 @@ begin
Result:=Files[i];
if AnsiCompareText(Result.UnitName,TheUnitName)=0 then exit;
end;
if not IgnoreDeleted then begin
Cnt:=DeletedCount;
if not IgnoreRemoved then begin
Cnt:=RemovedFilesCount;
for i:=0 to Cnt-1 do begin
Result:=DeletedFiles[i];
Result:=RemovedFiles[i];
if AnsiCompareText(Result.UnitName,TheUnitName)=0 then exit;
end;
end;
@ -1433,6 +1477,33 @@ begin
Result:=nil;
end;
function TLazPackage.FindRemovedPkgFile(const AFilename: string): TPkgFile;
var
Cnt: Integer;
i: Integer;
begin
Cnt:=RemovedFilesCount;
for i:=0 to Cnt-1 do begin
Result:=RemovedFiles[i];
if CompareFilenames(Result.Filename,AFilename)=0 then exit;
end;
Result:=nil;
end;
function TLazPackage.FindDependencyByName(const PkgName: string
): TPkgDependency;
var
Cnt: Integer;
i: Integer;
begin
Cnt:=RequiredPkgCount;
for i:=0 to Cnt-1 do begin
Result:=RequiredPkgs[i];
if AnsiCompareText(Result.PackageName,PkgName)=0 then exit;
end;
Result:=nil;
end;
function TLazPackage.NameAndVersion: string;
begin
Result:=Name+' '+Version.AsString;
@ -1442,7 +1513,13 @@ function TLazPackage.AddFile(const NewFilename, NewUnitName: string;
NewFileType: TPkgFileType; NewFlags: TPkgFileFlags;
CompPriorityCat: TComponentPriorityCategory): TPkgFile;
begin
Result:=TPkgFile.Create(Self);
Result:=FindRemovedPkgFile(NewFilename);
if Result=nil then
Result:=TPkgFile.Create(Self)
else begin
FRemovedFiles.Remove(Result);
Result.Removed:=false;
end;
with Result do begin
Filename:=NewFilename;
UnitName:=NewUnitName;
@ -1454,11 +1531,26 @@ begin
FFiles.Add(Result);
end;
procedure TLazPackage.DeleteFile(PkgFile: TPkgFile);
procedure TLazPackage.RemoveFile(PkgFile: TPkgFile);
begin
FFiles.Remove(PkgFile);
FDeletedFiles.Add(PkgFile);
PkgFile.Deleted:=true;
FRemovedFiles.Add(PkgFile);
PkgFile.Removed:=true;
Modified:=true;
end;
procedure TLazPackage.UnremovePkgFile(PkgFile: TPkgFile);
begin
FFiles.Add(PkgFile);
FRemovedFiles.Remove(PkgFile);
PkgFile.Removed:=false;
end;
procedure TLazPackage.UnremoveRequiredPkg(Dependency: TPkgDependency);
begin
FRequiredPkgs.Add(Dependency);
FRemovedRequiredPkgs.Remove(Dependency);
Dependency.Removed:=false;
end;
procedure TLazPackage.AddRequiredDependency(Dependency: TPkgDependency);
@ -1466,6 +1558,14 @@ begin
FRequiredPkgs.Add(Dependency);
end;
procedure TLazPackage.RemoveRequiredDependency(Dependency: TPkgDependency);
begin
FRequiredPkgs.Remove(Dependency);
FRemovedRequiredPkgs.Add(Dependency);
Dependency.Removed:=true;
Modified:=true;
end;
function TLazPackage.CreateDependencyForThisPkg: TPkgDependency;
begin
Result:=TPkgDependency.Create;
@ -1585,7 +1685,7 @@ end;
function TPkgComponent.Createable: boolean;
begin
Result:=not PkgFile.Deleted;
Result:=not PkgFile.Removed;
end;
{ TLazPackageID }

View File

@ -56,34 +56,51 @@ type
{ TPackageEditorForm }
TPackageEditorForm = class(TBasePackageEditor)
// buttons
SaveBitBtn: TBitBtn;
CompileBitBtn: TBitBtn;
AddBitBtn: TBitBtn;
RemoveBitBtn: TBitBtn;
InstallBitBtn: TBitBtn;
OptionsBitBtn: TBitBtn;
// items
FilesTreeView: TTreeView;
// properties
FilePropsGroupBox: TGroupBox;
// file properties
CallRegisterProcCheckBox: TCheckBox;
RegisteredPluginsGroupBox: TGroupBox;
RegisteredListBox: TListBox;
// dependency properties
UseMinVersionCheckBox: TCheckBox;
MinVersionEdit: TEdit;
UseMaxVersionCheckBox: TCheckBox;
MaxVersionEdit: TEdit;
// statusbar
StatusBar: TStatusBar;
// hidden components
ImageList: TImageList;
FilesPopupMenu: TPopupMenu;
procedure AddBitBtnClick(Sender: TObject);
procedure CallRegisterProcCheckBoxClick(Sender: TObject);
procedure FilePropsGroupBoxResize(Sender: TObject);
procedure FilesPopupMenuPopup(Sender: TObject);
procedure FilesTreeViewSelectionChanged(Sender: TObject);
procedure OpenFileMenuItemClick(Sender: TObject);
procedure PackageEditorFormResize(Sender: TObject);
procedure ReAddMenuItemClick(Sender: TObject);
procedure RegisteredListBoxDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
procedure RemoveBitBtnClick(Sender: TObject);
procedure SaveBitBtnClick(Sender: TObject);
procedure UseMaxVersionCheckBoxClick(Sender: TObject);
procedure UseMinVersionCheckBoxClick(Sender: TObject);
private
FLazPackage: TLazPackage;
FilesNode: TTreeNode;
RequiredPackagesNode: TTreeNode;
RemovedFilesNode: TTreeNode;
RemovedRequiredNode: TTreeNode;
FPlugins: TStringList;
procedure SetLazPackage(const AValue: TLazPackage);
procedure SetupComponents;
@ -94,10 +111,10 @@ type
procedure UpdateRequiredPkgs;
procedure UpdateSelectedFile;
procedure UpdateStatusBar;
procedure DoSave;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure DoSave;
public
property LazPackage: TLazPackage read FLazPackage write SetLazPackage;
end;
@ -149,9 +166,19 @@ var
implementation
uses Math;
var
ImageIndexFiles: integer;
ImageIndexRemovedFiles: integer;
ImageIndexRequired: integer;
ImageIndexRemovedRequired: integer;
ImageIndexUnit: integer;
ImageIndexRegisterUnit: integer;
ImageIndexText: integer;
ImageIndexBinary: integer;
{ TPackageEditorForm }
procedure TPackageEditorForm.PackageEditorFormResize(Sender: TObject);
@ -193,6 +220,37 @@ begin
FilePropsGroupBox.SetBounds(x,y,w,h);
end;
procedure TPackageEditorForm.ReAddMenuItemClick(Sender: TObject);
var
CurNode: TTreeNode;
NodeIndex: Integer;
PkgFile: TPkgFile;
AFilename: String;
Dependency: TPkgDependency;
begin
CurNode:=FilesTreeView.Selected;
if CurNode=nil then exit;
NodeIndex:=CurNode.Index;
if CurNode.Parent<>nil then begin
if (CurNode.Parent=RemovedFilesNode) then begin
// re-add file
PkgFile:=LazPackage.RemovedFiles[NodeIndex];
AFilename:=PkgFile.Filename;
if not CheckAddingUnitFilename(LazPackage,d2ptUnit,
PackageEditors.OnGetIDEFileInfo,AFilename) then exit;
PkgFile.Filename:=AFilename;
LazPackage.UnremovePkgFile(PkgFile);
UpdateAll;
end else if (CurNode.Parent=RemovedRequiredNode) then begin
// re-add dependency
Dependency:=LazPackage.RemovedRequiredPkgs[NodeIndex];
if not CheckAddingDependency(LazPackage,Dependency) then exit;
LazPackage.UnremoveRequiredPkg(Dependency);
UpdateAll;
end;
end;
end;
procedure TPackageEditorForm.FilesPopupMenuPopup(Sender: TObject);
var
CurNode: TTreeNode;
@ -206,7 +264,7 @@ var
CurMenuItem:=TMenuItem.Create(Self);
FilesPopupMenu.Items.Add(CurMenuItem);
end else
CurMenuItem:=FilesPopupMenu.Items[FilesPopupMenu.Items.Count-1];
CurMenuItem:=FilesPopupMenu.Items[ItemCnt];
CurMenuItem.Caption:=ACaption;
CurMenuItem.OnClick:=AnEvent;
inc(ItemCnt);
@ -216,10 +274,20 @@ begin
CurNode:=FilesTreeView.Selected;
ItemCnt:=0;
if CurNode<>nil then begin
if CurNode.Parent=FilesNode then begin
AddPopupMenuItem('Open file',@OpenFileMenuItemClick);
end else if (CurNode.Parent=RequiredPackagesNode) then begin
AddPopupMenuItem('Open package',@OpenFileMenuItemClick);
if CurNode.Parent<>nil then begin
if CurNode.Parent=FilesNode then begin
AddPopupMenuItem('Open file',@OpenFileMenuItemClick);
AddPopupMenuItem('Remove file from package',@RemoveBitBtnClick);
end else if (CurNode.Parent=RequiredPackagesNode) then begin
AddPopupMenuItem('Open package',@OpenFileMenuItemClick);
AddPopupMenuItem('Remove dependency from package',@RemoveBitBtnClick);
end else if (CurNode.Parent=RemovedFilesNode) then begin
AddPopupMenuItem('Open file',@OpenFileMenuItemClick);
AddPopupMenuItem('Add file to package',@ReAddMenuItemClick);
end else if (CurNode.Parent=RemovedRequiredNode) then begin
AddPopupMenuItem('Open package',@OpenFileMenuItemClick);
AddPopupMenuItem('Add dependency to package',@ReAddMenuItemClick);
end;
end;
end else begin
@ -244,12 +312,20 @@ begin
CurNode:=FilesTreeView.Selected;
if CurNode=nil then exit;
NodeIndex:=CurNode.Index;
if CurNode.Parent=FilesNode then begin
CurFile:=LazPackage.Files[NodeIndex];
PackageEditors.OpenFile(Self,CurFile.Filename);
end else if CurNode.Parent=RequiredPackagesNode then begin
CurDependency:=LazPackage.RequiredPkgs[NodeIndex];
PackageEditors.OpenDependency(Self,CurDependency);
if CurNode.Parent<>nil then begin
if CurNode.Parent=FilesNode then begin
CurFile:=LazPackage.Files[NodeIndex];
PackageEditors.OpenFile(Self,CurFile.Filename);
end else if CurNode.Parent=RequiredPackagesNode then begin
CurDependency:=LazPackage.RequiredPkgs[NodeIndex];
PackageEditors.OpenDependency(Self,CurDependency);
end else if CurNode.Parent=RemovedFilesNode then begin
CurFile:=LazPackage.RemovedFiles[NodeIndex];
PackageEditors.OpenFile(Self,CurFile.Filename);
end else if CurNode.Parent=RemovedRequiredNode then begin
CurDependency:=LazPackage.RemovedRequiredPkgs[NodeIndex];
PackageEditors.OpenDependency(Self,CurDependency);
end;
end;
end;
@ -301,6 +377,7 @@ var
ANode: TTreeNode;
NodeIndex: Integer;
CurFile: TPkgFile;
CurDependency: TPkgDependency;
begin
ANode:=FilesTreeView.Selected;
if (ANode=nil) or LazPackage.ReadOnly then begin
@ -319,11 +396,23 @@ begin
mtConfirmation,[mbYes,mbNo],0)=mrNo
then
exit;
LazPackage.DeleteFile(CurFile);
LazPackage.RemoveFile(CurFile);
end;
UpdateFiles;
UpdateAll;
end else if ANode.Parent=RequiredPackagesNode then begin
// get current dependency
CurDependency:=LazPackage.RequiredPkgs[NodeIndex];
if CurDependency<>nil then begin
// confirm deletion
if MessageDlg('Remove Dependency?',
'Remove dependency "'+CurDependency.AsString+'"'#13
+'from package "'+LazPackage.IDAsString+'"?',
mtConfirmation,[mbYes,mbNo],0)=mrNo
then
exit;
LazPackage.RemoveRequiredDependency(CurDependency);
end;
UpdateAll;
end;
end;
@ -332,23 +421,58 @@ begin
DoSave;
end;
procedure TPackageEditorForm.UseMaxVersionCheckBoxClick(Sender: TObject);
begin
MaxVersionEdit.Enabled:=UseMaxVersionCheckBox.Checked;
end;
procedure TPackageEditorForm.UseMinVersionCheckBoxClick(Sender: TObject);
begin
MinVersionEdit.Enabled:=UseMinVersionCheckBox.Checked;
end;
procedure TPackageEditorForm.FilePropsGroupBoxResize(Sender: TObject);
var
y: Integer;
x: Integer;
begin
// components for files
with CallRegisterProcCheckBox do
SetBounds(3,0,Parent.ClientWidth,Height);
y:=CallRegisterProcCheckBox.Top+CallRegisterProcCheckBox.Height+3;
with RegisteredPluginsGroupBox do begin
with RegisteredPluginsGroupBox do
SetBounds(0,y,Parent.ClientWidth,Parent.ClientHeight-y);
end;
// components for dependencies
x:=5;
y:=5;
with UseMinVersionCheckBox do
SetBounds(x,y,150,MinVersionEdit.Height);
inc(x,UseMinVersionCheckBox.Width+5);
with MinVersionEdit do
SetBounds(x,y,120,Height);
x:=5;
inc(y,MinVersionEdit.Height+5);
with UseMaxVersionCheckBox do
SetBounds(x,y,UseMinVersionCheckBox.Width,MaxVersionEdit.Height);
inc(x,UseMaxVersionCheckBox.Width+5);
with MaxVersionEdit do
SetBounds(x,y,MinVersionEdit.Width,Height);
end;
procedure TPackageEditorForm.AddBitBtnClick(Sender: TObject);
var
AddParams: TAddToPkgResult;
begin
if LazPackage.ReadOnly then begin
UpdateButtons;
exit;
end;
if ShowAddToPackageDlg(LazPackage,AddParams,PackageEditors.OnGetIDEFileInfo,
PackageEditors.OnGetUnitRegisterInfo)
<>mrOk
@ -361,7 +485,6 @@ begin
// add file
with AddParams do
LazPackage.AddFile(UnitFilename,UnitName,FileType,PkgFileFlags,cpNormal);
UpdateFiles;
end;
d2ptNewComponent:
@ -369,11 +492,9 @@ begin
// add file
with AddParams do
LazPackage.AddFile(UnitFilename,UnitName,FileType,PkgFileFlags,cpNormal);
UpdateFiles;
// add dependency
if AddParams.Dependency<>nil then begin
LazPackage.AddRequiredDependency(AddParams.Dependency);
UpdateRequiredPkgs;
end;
// open file in editor
PackageEditors.CreateNewFile(Self,AddParams);
@ -383,13 +504,37 @@ begin
begin
// add dependency
LazPackage.AddRequiredDependency(AddParams.Dependency);
UpdateRequiredPkgs;
end;
end;
LazPackage.Modified:=true;
UpdateSelectedFile;
UpdateStatusBar;
UpdateAll;
end;
procedure TPackageEditorForm.CallRegisterProcCheckBoxClick(Sender: TObject);
var
CurNode: TTreeNode;
NodeIndex: Integer;
CurFile: TPkgFile;
begin
CurNode:=FilesTreeView.Selected;
if (CurNode=nil) then exit;
if (CurNode.Parent=FilesNode) then begin
NodeIndex:=CurNode.Index;
if NodeIndex>=LazPackage.FileCount then exit;
CurFile:=LazPackage.Files[NodeIndex];
CurFile.HasRegisteredProc:=CallRegisterProcCheckBox.Checked;
LazPackage.Modified:=true;
UpdateAll;
end;
if (RemovedFilesNode<>nil) and (CurNode.Parent=RemovedFilesNode) then begin
NodeIndex:=CurNode.Index;
if NodeIndex>=LazPackage.RemovedFilesCount then exit;
CurFile:=LazPackage.RemovedFiles[NodeIndex];
CurFile.HasRegisteredProc:=CallRegisterProcCheckBox.Checked;
UpdateAll;
end;
end;
procedure TPackageEditorForm.SetLazPackage(const AValue: TLazPackage);
@ -437,11 +582,21 @@ begin
Width:=16;
Height:=16;
Name:='ImageList';
ImageIndexFiles:=Count;
AddResImg('pkg_files');
ImageIndexRemovedFiles:=Count;
AddResImg('pkg_removedfiles');
ImageIndexRequired:=Count;
AddResImg('pkg_required');
AddResImg('pkg_conflict');
ImageIndexRemovedRequired:=Count;
AddResImg('pkg_removedrequired');
ImageIndexUnit:=Count;
AddResImg('pkg_unit');
ImageIndexRegisterUnit:=Count;
AddResImg('pkg_registerunit');
ImageIndexText:=Count;
AddResImg('pkg_text');
ImageIndexBinary:=Count;
AddResImg('pkg_binary');
end;
@ -502,10 +657,10 @@ begin
BeginUpdate;
Images:=ImageList;
FilesNode:=Items.Add(nil,'Files');
FilesNode.ImageIndex:=0;
FilesNode.ImageIndex:=ImageIndexFiles;
FilesNode.SelectedIndex:=FilesNode.ImageIndex;
RequiredPackagesNode:=Items.Add(nil,'Required Packages');
RequiredPackagesNode.ImageIndex:=1;
RequiredPackagesNode.ImageIndex:=ImageIndexRequired;
RequiredPackagesNode.SelectedIndex:=RequiredPackagesNode.ImageIndex;
EndUpdate;
PopupMenu:=FilesPopupMenu;
@ -526,6 +681,7 @@ begin
Name:='CallRegisterProcCheckBox';
Parent:=FilePropsGroupBox;
Caption:='Register unit';
OnClick:=@CallRegisterProcCheckBoxClick;
end;
RegisteredPluginsGroupBox:=TGroupBox.Create(Self);
@ -543,6 +699,36 @@ begin
ItemHeight:=23;
OnDrawItem:=@RegisteredListBoxDrawItem;
end;
UseMinVersionCheckBox:=TCheckBox.Create(Self);
with UseMinVersionCheckBox do begin
Name:='UseMinVersionCheckBox';
Parent:=FilePropsGroupBox;
Caption:='Minimum Version:';
OnClick:=@UseMinVersionCheckBoxClick;
end;
MinVersionEdit:=TEdit.Create(Self);
with MinVersionEdit do begin
Name:='MinVersionEdit';
Parent:=FilePropsGroupBox;
Text:='';
end;
UseMaxVersionCheckBox:=TCheckBox.Create(Self);
with UseMaxVersionCheckBox do begin
Name:='UseMaxVersionCheckBox';
Parent:=FilePropsGroupBox;
Caption:='Maximum Version:';
OnClick:=@UseMaxVersionCheckBoxClick;
end;
MaxVersionEdit:=TEdit.Create(Self);
with MaxVersionEdit do begin
Name:='MaxVersionEdit';
Parent:=FilePropsGroupBox;
Text:='';
end;
StatusBar:=TStatusBar.Create(Self);
with StatusBar do begin
@ -565,8 +751,13 @@ begin
end;
procedure TPackageEditorForm.UpdateTitle;
var
NewCaption: String;
begin
Caption:='Package '+FLazPackage.Name;
NewCaption:='Package '+FLazPackage.Name;
if LazPackage.Modified then
NewCaption:=NewCaption+'*';
Caption:=NewCaption;
end;
procedure TPackageEditorForm.UpdateButtons;
@ -576,12 +767,31 @@ begin
CompileBitBtn.Enabled:=(not LazPackage.IsVirtual);
AddBitBtn.Enabled:=not LazPackage.ReadOnly;
RemoveBitBtn.Enabled:=(not LazPackage.ReadOnly)
and (FilesTreeView.Selected<>nil) and (FilesTreeView.Selected.Parent<>nil);
InstallBitBtn.Enabled:=(not LazPackage.IsVirtual);
and (FilesTreeView.Selected<>nil)
and ((FilesTreeView.Selected.Parent=FilesNode)
or (FilesTreeView.Selected.Parent=RequiredPackagesNode));
InstallBitBtn.Enabled:=true;
OptionsBitBtn.Enabled:=true;
end;
procedure TPackageEditorForm.UpdateFiles;
procedure SetImageIndex(ANode: TTreeNode; PkgFile: TPkgFile);
begin
case PkgFile.FileType of
pftUnit:
if PkgFile.HasRegisteredProc then
ANode.ImageIndex:=ImageIndexRegisterUnit
else
ANode.ImageIndex:=ImageIndexUnit;
pftText: ANode.ImageIndex:=ImageIndexText;
pftBinary: ANode.ImageIndex:=ImageIndexBinary;
else
ANode.ImageIndex:=-1;
end;
ANode.SelectedIndex:=ANode.ImageIndex;
end;
var
Cnt: Integer;
i: Integer;
@ -589,22 +799,17 @@ var
CurNode: TTreeNode;
NextNode: TTreeNode;
begin
Cnt:=LazPackage.FileCount;
FilesTreeView.BeginUpdate;
// files
CurNode:=FilesNode.GetFirstChild;
Cnt:=LazPackage.FileCount;
for i:=0 to Cnt-1 do begin
if CurNode=nil then
CurNode:=FilesTreeView.Items.AddChild(FilesNode,'');
CurFile:=LazPackage.Files[i];
CurNode.Text:=CurFile.GetShortFilename;
case CurFile.FileType of
pftUnit: CurNode.ImageIndex:=3;
pftText: CurNode.ImageIndex:=4;
pftBinary: CurNode.ImageIndex:=5;
else
CurNode.ImageIndex:=-1;
end;
CurNode.SelectedIndex:=CurNode.ImageIndex;
SetImageIndex(CurNode,CurFile);
CurNode:=CurNode.GetNextSibling;
end;
while CurNode<>nil do begin
@ -613,6 +818,36 @@ begin
CurNode:=NextNode;
end;
FilesNode.Expanded:=true;
// removed files
if LazPackage.RemovedFilesCount>0 then begin
if RemovedFilesNode=nil then begin
RemovedFilesNode:=
FilesTreeView.Items.Add(RequiredPackagesNode,
'Removed Files (are not saved)');
RemovedFilesNode.ImageIndex:=ImageIndexRemovedFiles;
RemovedFilesNode.SelectedIndex:=RemovedFilesNode.ImageIndex;
end;
CurNode:=RemovedFilesNode.GetFirstChild;
Cnt:=LazPackage.RemovedFilesCount;
for i:=0 to Cnt-1 do begin
if CurNode=nil then
CurNode:=FilesTreeView.Items.AddChild(RemovedFilesNode,'');
CurFile:=LazPackage.RemovedFiles[i];
CurNode.Text:=CurFile.GetShortFilename;
SetImageIndex(CurNode,CurFile);
CurNode:=CurNode.GetNextSibling;
end;
while CurNode<>nil do begin
NextNode:=CurNode.GetNextSibling;
CurNode.Free;
CurNode:=NextNode;
end;
RemovedFilesNode.Expanded:=true;
end else begin
FreeAndNil(RemovedFilesNode);
end;
FilesTreeView.EndUpdate;
end;
@ -624,9 +859,11 @@ var
CurDependency: TPkgDependency;
NextNode: TTreeNode;
begin
Cnt:=LazPackage.RequiredPkgCount;
FilesTreeView.BeginUpdate;
// required packages
CurNode:=RequiredPackagesNode.GetFirstChild;
Cnt:=LazPackage.RequiredPkgCount;
for i:=0 to Cnt-1 do begin
if CurNode=nil then
CurNode:=FilesTreeView.Items.AddChild(RequiredPackagesNode,'');
@ -642,6 +879,36 @@ begin
CurNode:=NextNode;
end;
RequiredPackagesNode.Expanded:=true;
// removed required packages
Cnt:=LazPackage.RemovedRequiredPkgCount;
if Cnt>0 then begin
if RemovedRequiredNode=nil then begin
RemovedRequiredNode:=
FilesTreeView.Items.Add(nil,'Removed required packages (are not saved)');
RemovedRequiredNode.ImageIndex:=ImageIndexRemovedRequired;
RemovedRequiredNode.StateIndex:=RemovedRequiredNode.ImageIndex;
end;
CurNode:=RemovedRequiredNode.GetFirstChild;
for i:=0 to Cnt-1 do begin
if CurNode=nil then
CurNode:=FilesTreeView.Items.AddChild(RemovedRequiredNode,'');
CurDependency:=LazPackage.RemovedRequiredPkgs[i];
CurNode.Text:=CurDependency.AsString;
CurNode.ImageIndex:=RemovedRequiredNode.ImageIndex;
CurNode.SelectedIndex:=CurNode.ImageIndex;
CurNode:=CurNode.GetNextSibling;
end;
while CurNode<>nil do begin
NextNode:=CurNode.GetNextSibling;
CurNode.Free;
CurNode:=NextNode;
end;
RemovedRequiredNode.Expanded:=true;
end else begin
FreeAndNil(RemovedRequiredNode);
end;
FilesTreeView.EndUpdate;
end;
@ -655,34 +922,68 @@ var
CurLine: string;
CurListIndex: Integer;
RegCompCnt: Integer;
Dependency: TPkgDependency;
begin
CurNode:=FilesTreeView.Selected;
FilePropsGroupBox.Enabled:=(CurNode<>nil) and (CurNode.Parent=FilesNode);
FPlugins.Clear;
CurFile:=nil;
Dependency:=nil;
if CurNode<>nil then begin
CallRegisterProcCheckBox.Enabled:=not LazPackage.ReadOnly;
NodeIndex:=CurNode.Index;
if CurNode.Parent=FilesNode then begin
// get current package file
CurFile:=LazPackage.Files[NodeIndex];
// set Register Unit checkbox
CallRegisterProcCheckBox.Checked:=pffHasRegisterProc in CurFile.Flags;
// fetch all registered plugins
CurListIndex:=0;
RegCompCnt:=CurFile.ComponentCount;
for i:=0 to RegCompCnt-1 do begin
CurComponent:=CurFile.Components[i];
CurLine:=CurComponent.ComponentClass.ClassName;
FPlugins.AddObject(CurLine,CurComponent);
inc(CurListIndex);
if CurNode.Parent<>nil then begin
if CurNode.Parent=FilesNode then begin
// get current file
CurFile:=LazPackage.Files[NodeIndex];
end else if (CurNode.Parent=RequiredPackagesNode) then begin
// get current dependency
Dependency:=LazPackage.RequiredPkgs[NodeIndex];
end else if (CurNode.Parent=RemovedFilesNode) then begin
// get current removed file
CurFile:=LazPackage.RemovedFiles[NodeIndex];
end else if (CurNode.Parent=RemovedRequiredNode) then begin
// get current removed dependency
Dependency:=LazPackage.RemovedRequiredPkgs[NodeIndex];
end;
// put them in the RegisteredListBox
RegisteredListBox.Items.Assign(FPlugins);
end else begin
CallRegisterProcCheckBox.Checked:=false;
RegisteredListBox.Items.Clear;
end;
end;
// make components visible
UseMinVersionCheckBox.Visible:=Dependency<>nil;
MinVersionEdit.Visible:=Dependency<>nil;
UseMaxVersionCheckBox.Visible:=Dependency<>nil;
MaxVersionEdit.Visible:=Dependency<>nil;
CallRegisterProcCheckBox.Visible:=CurFile<>nil;
RegisteredPluginsGroupBox.Visible:=CurFile<>nil;
if CurFile<>nil then begin
FilePropsGroupBox.Enabled:=true;
FilePropsGroupBox.Caption:='File Properties';
// set Register Unit checkbox
CallRegisterProcCheckBox.Enabled:=not LazPackage.ReadOnly;
CallRegisterProcCheckBox.Checked:=pffHasRegisterProc in CurFile.Flags;
// fetch all registered plugins
CurListIndex:=0;
RegCompCnt:=CurFile.ComponentCount;
for i:=0 to RegCompCnt-1 do begin
CurComponent:=CurFile.Components[i];
CurLine:=CurComponent.ComponentClass.ClassName;
FPlugins.AddObject(CurLine,CurComponent);
inc(CurListIndex);
end;
// put them in the RegisteredListBox
RegisteredListBox.Items.Assign(FPlugins);
end else if Dependency<>nil then begin
FilePropsGroupBox.Enabled:=true;
FilePropsGroupBox.Caption:='Dependency Properties';
UseMinVersionCheckBox.Checked:=pdfMinVersion in Dependency.Flags;
MinVersionEdit.Text:=Dependency.MinVersion.AsString;
MinVersionEdit.Enabled:=pdfMinVersion in Dependency.Flags;
UseMaxVersionCheckBox.Checked:=pdfMaxVersion in Dependency.Flags;
MaxVersionEdit.Text:=Dependency.MaxVersion.AsString;
MaxVersionEdit.Enabled:=pdfMaxVersion in Dependency.Flags;
end else begin
FilePropsGroupBox.Enabled:=false;
end;
end;
procedure TPackageEditorForm.UpdateStatusBar;

View File

@ -572,6 +572,7 @@ begin
try
XMLConfig:=TXMLConfig.Create(AFilename);
try
APackage.Filename:=AFilename;
APackage.LoadFromXMLConfig(XMLConfig,'Package/');
finally
XMLConfig.Free;
@ -584,7 +585,6 @@ begin
exit;
end;
end;
APackage.Filename:=AFilename;
APackage.Modified:=false;
Result:=AddPackageToGraph(APackage);
@ -635,6 +635,7 @@ begin
try
XMLConfig:=TXMLConfig.Create(APackage.Filename);
try
XMLConfig.Clear;
APackage.SaveToXMLConfig(XMLConfig,'Package/');
XMLConfig.Flush;
finally

View File

@ -4,7 +4,7 @@ Section: devel
Priority: optional
Maintainer: Mattias Gaertner <mattias@cvs.freepascal.org>
Architecture: i386
Depends: fp-compiler (>=FPCVERSION), fp-docs (>=FPCVERSION),
Depends: fp-compiler (>=FPCVERSION),
fp-units-base (>=FPCVERSION), fp-units-db (>=FPCVERSION),
fp-units-fcl (>=FPCVERSION), fp-units-gfx (>=FPCVERSION),
fp-units-gtk (>=FPCVERSION), fp-units-misc (>=FPCVERSION),