ide: Added ability to add fpmake-dependencies to packages

git-svn-id: trunk@58382 -
This commit is contained in:
joost 2018-06-22 19:19:18 +00:00
parent 4d46bbfd23
commit 00e814dac8
4 changed files with 71 additions and 13 deletions

View File

@ -4004,6 +4004,7 @@ resourcestring
+'already exists in the selection%swith file: "%s".';
lisProjAddToProject = 'Add to Project';
lisProjAddNewRequirement = 'New Requirement';
lisProjAddNewFPMakeRequirement = 'New FPMake Requirement';
lisProjAddEditorFile = 'Add Editor Files';
lisProjFiles = 'Files:';
lisProjAddAddFilesToProject = 'Add Files to Project';

View File

@ -375,5 +375,9 @@ object PackageEditorForm: TPackageEditorForm
Caption = 'New requirement...'
OnClick = mnuAddNewReqrClick
end
object mnuAddFPMakeReq: TMenuItem
Caption = 'New FPMake requirement...'
OnClick = mnuAddFPMakeReqClick
end
end
end

View File

@ -47,8 +47,8 @@ uses
// IDE
MainBase, IDEProcs, LazarusIDEStrConsts, IDEDefs, CompilerOptions,
EnvironmentOpts, DialogProcs, InputHistory, PackageDefs, AddToPackageDlg,
AddPkgDependencyDlg, ProjPackChecks, PkgVirtualUnitEditor, MissingPkgFilesDlg,
PackageSystem, CleanPkgDeps, ImgList;
AddPkgDependencyDlg, AddFPMakeDependencyDlg, ProjPackChecks, PkgVirtualUnitEditor,
MissingPkgFilesDlg, PackageSystem, CleanPkgDeps, ImgList;
const
PackageEditorMenuRootName = 'PackageEditor';
@ -62,6 +62,7 @@ var
PkgEditMenuAddNewFile: TIDEMenuCommand;
PkgEditMenuAddNewComp: TIDEMenuCommand;
PkgEditMenuAddNewReqr: TIDEMenuCommand;
PkgEditMenuAddNewFPMakeReqr: TIDEMenuCommand;
// selected files
PkgEditMenuOpenFile: TIDEMenuCommand;
@ -186,6 +187,7 @@ type
TPackageEditorForm = class(TBasePackageEditor,IFilesEditorInterface)
MenuItem1: TMenuItem;
mnuAddFPMakeReq: TMenuItem;
mnuAddDiskFile: TMenuItem;
mnuAddDiskFiles: TMenuItem;
mnuAddNewFile: TMenuItem;
@ -266,6 +268,7 @@ type
procedure ItemsTreeViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure mnuAddDiskFileClick(Sender: TObject);
procedure mnuAddDiskFilesClick(Sender: TObject);
procedure mnuAddFPMakeReqClick(Sender: TObject);
procedure mnuAddNewCompClick(Sender: TObject);
procedure mnuAddNewReqrClick(Sender: TObject);
procedure mnuAddNewFileClick(Sender: TObject);
@ -377,6 +380,7 @@ type
function DoOpenPkgFile(PkgFile: TPkgFile): TModalResult;
function ShowAddDialog(var DlgPage: TAddToPkgType): TModalResult;
function ShowAddDepDialog: TModalResult;
function ShowAddFPMakeDepDialog: TModalResult;
function PkgNameToFormName(const PkgName: string): string;
public
// IFilesEditorInterface
@ -572,6 +576,7 @@ begin
PkgEditMenuAddNewFile:=RegisterIDEMenuCommand(AParent,'New file',lisA2PNewFile);
PkgEditMenuAddNewComp:=RegisterIDEMenuCommand(AParent,'New component',lisA2PNewComponent);
PkgEditMenuAddNewReqr:=RegisterIDEMenuCommand(AParent,'New requirement',lisProjAddNewRequirement);
PkgEditMenuAddNewFPMakeReqr:=RegisterIDEMenuCommand(AParent,'New FPMake requirement',lisProjAddNewFPMakeRequirement);
//
PkgEditMenuOpenFile:=RegisterIDEMenuCommand(AParent,'Open File',lisOpen);
PkgEditMenuRemoveFile:=RegisterIDEMenuCommand(AParent,'Remove File',lisPckEditRemoveFile);
@ -650,6 +655,8 @@ begin
else
Result:=Format(lisPckEditDefault, [Result, aFilename]);
end;
if ADependency.DependencyType=pdtFPMake then
Result:=Result+' '+lisPckEditFPMakePackage;
end;
{ TPENodeData }
@ -717,8 +724,8 @@ begin
end;
type
PackageSelType = (pstFile, pstDir, pstDep, pstFilesNode, pstReqPackNode,
pstRemFile, pstRemDep);
PackageSelType = (pstFile, pstDir, pstDep, pstFPMake, pstFilesNode,
pstReqPackNode, pstRemFile, pstRemDep);
PackageSelTypes = set of PackageSelType;
procedure TPackageEditorForm.ItemsPopupMenuPopup(Sender: TObject);
@ -752,6 +759,8 @@ var
CurDependency := TPkgDependency(Item);
if (ItemsTreeView.SelectionCount=1) and Assigned(CurDependency.RequiredPackage) then
FSingleSelectedDep:=CurDependency;
if CurDependency.DependencyType=pdtFPMake then
Include(UserSelection, pstFPMake);
if NodeData.Removed then
Include(UserSelection, pstRemDep)
else
@ -840,9 +849,11 @@ begin
Writable);
SetItem(PkgEditMenuAddNewReqr, @mnuAddNewReqrClick, UserSelection=[pstReqPackNode],
Writable);
SetItem(PkgEditMenuAddNewFPMakeReqr, @mnuAddFPMakeReqClick, UserSelection=[pstReqPackNode],
Writable);
// selected files
SetItem(PkgEditMenuOpenFile, @OpenFileMenuItemClick,
UserSelection*[pstFilesNode,pstReqPackNode]=[]);
UserSelection*[pstFilesNode,pstReqPackNode,pstFPMake]=[]);
SetItem(PkgEditMenuReAddFile, @ReAddMenuItemClick, UserSelection=[pstRemFile]);
SetItem(PkgEditMenuCopyMoveToDirectory, @CopyMoveToDirMenuItemClick,
(UserSelection=[pstFile]) and LazPackage.HasDirectory);
@ -870,9 +881,9 @@ begin
if PkgEditMenuSectionDependency.Visible then
begin
SetItem(PkgEditMenuRemoveDependency, @RemoveBitBtnClick,
UserSelection=[pstDep], Writable);
pstdep in UserSelection, Writable);
SetItem(PkgEditMenuReAddDependency,@ReAddMenuItemClick,
UserSelection=[pstRemDep], Writable);
pstRemDep in UserSelection, Writable);
SetItem(PkgEditMenuDepStoreFileNameDefault, @SetDepDefaultFilenameMenuItemClick,
Assigned(FSingleSelectedDep), Writable);
SetItem(PkgEditMenuDepStoreFileNamePreferred, @SetDepPreferredFilenameMenuItemClick,
@ -1080,6 +1091,11 @@ begin
ShowAddDialogEx(d2ptFiles);
end;
procedure TPackageEditorForm.mnuAddFPMakeReqClick(Sender: TObject);
begin
ShowAddFPMakeDepDialog
end;
procedure TPackageEditorForm.mnuAddNewCompClick(Sender: TObject);
begin
ShowAddDialogEx(d2ptNewComponent);
@ -1968,6 +1984,7 @@ begin
mnuAddNewFile.Caption := lisA2PNewFile;
mnuAddNewComp.Caption := lisA2PNewComponent;
mnuAddNewReqr.Caption := lisProjAddNewRequirement;
mnuAddFPMakeReq.Caption := lisProjAddNewFPMakeRequirement;
// Buttons on FilterPanel
IDEImages.AssignImage(OpenButton, 'laz_open');
@ -2292,6 +2309,37 @@ begin
end;
end;
function TPackageEditorForm.ShowAddFPMakeDepDialog: TModalResult;
var
Deps: TPkgDependencyList;
i: Integer;
begin
if LazPackage.ReadOnly then begin
UpdateButtons;
exit(mrCancel);
end;
Result:=ShowAddFPMakeDependencyDlg(LazPackage, Deps);
try
if (Result<>mrOk) or (Deps.Count=0) then exit;
PackageGraph.BeginUpdate(false);
try
// add all dependencies
fForcedFlags := [pefNeedUpdateRequiredPkgs];
FreeAndNil(FNextSelectedPart);
for i := 0 to Deps.Count-1 do
PackageGraph.AddDependencyToPackage(LazPackage, Deps[i]);
FNextSelectedPart := TPENodeData.Create(penDependency,
Deps[Deps.Count-1].PackageName, false);
Assert(LazPackage.Modified, 'TPackageEditorForm.ShowAddFPMakeDepDialog: LazPackage.Modified = False');
finally
PackageGraph.EndUpdate;
end;
finally
Deps.Free;
end;
end;
function TPackageEditorForm.PkgNameToFormName(const PkgName: string): string;
begin
Result:=PackageEditorWindowPrefix+StringReplace(PkgName,'.','_',[rfReplaceAll]);
@ -3460,8 +3508,13 @@ begin
Result:=mrCancel;
if PackageGraph.OpenDependency(Dependency,false)=lprSuccess then
begin
APackage:=Dependency.RequiredPackage;
if Assigned(OnOpenPackage) then Result:=OnOpenPackage(Sender,APackage);
if Dependency.DependencyType=pdtLazarus then
begin
APackage:=Dependency.RequiredPackage;
if Assigned(OnOpenPackage) then Result:=OnOpenPackage(Sender,APackage);
end
else
ShowMessage('It is not possible to open FPMake packages.');
end;
end;

View File

@ -2403,7 +2403,7 @@ begin
// put all required packages on stack
Dependency:=Pkg.FirstRequiredDependency;
while Dependency<>nil do begin
if Dependency.LoadPackageResult=lprSuccess then begin
if (Dependency.DependencyType=pdtLazarus) and (Dependency.LoadPackageResult=lprSuccess) then begin
RequiredPackage:=Dependency.RequiredPackage;
if (not (lpfNeeded in RequiredPackage.Flags)) then begin
RequiredPackage.Flags:=RequiredPackage.Flags+[lpfNeeded];
@ -2690,7 +2690,7 @@ function TLazPackageGraph.FindUnsavedDependencyPath(APackage: TLazPackage;
RequiredPackage: TLazPackage;
begin
while Dependency<>nil do begin
if Dependency.LoadPackageResult=lprSuccess then begin
if (Dependency.DependencyType=pdtLazarus) and (Dependency.LoadPackageResult=lprSuccess) then begin
// dependency ok
RequiredPackage:=Dependency.RequiredPackage;
if RequiredPackage.Modified then begin
@ -2740,7 +2740,7 @@ function TLazPackageGraph.FindNotInstalledRegisterUnits(
APkgFile: TPkgFile;
begin
while Dependency<>nil do begin
if Dependency.LoadPackageResult=lprSuccess then begin
if (Dependency.DependencyType=pdtLazarus) and (Dependency.LoadPackageResult=lprSuccess) then begin
// dependency ok
RequiredPackage:=Dependency.RequiredPackage;
if not (lpfVisited in RequiredPackage.Flags) then begin
@ -3042,7 +3042,7 @@ var
begin
Dependency:=FirstDependency;
while Dependency<>nil do begin
if Dependency.LoadPackageResult=lprSuccess then begin
if (Dependency.DependencyType=pdtLazarus) and (Dependency.LoadPackageResult=lprSuccess) then begin
RequiredPackage:=Dependency.RequiredPackage;
if not (lpfVisited in RequiredPackage.Flags) then begin
RequiredPackage.Flags:=RequiredPackage.Flags+[lpfVisited];