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".'; +'already exists in the selection%swith file: "%s".';
lisProjAddToProject = 'Add to Project'; lisProjAddToProject = 'Add to Project';
lisProjAddNewRequirement = 'New Requirement'; lisProjAddNewRequirement = 'New Requirement';
lisProjAddNewFPMakeRequirement = 'New FPMake Requirement';
lisProjAddEditorFile = 'Add Editor Files'; lisProjAddEditorFile = 'Add Editor Files';
lisProjFiles = 'Files:'; lisProjFiles = 'Files:';
lisProjAddAddFilesToProject = 'Add Files to Project'; lisProjAddAddFilesToProject = 'Add Files to Project';

View File

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

View File

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

View File

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