IDE: fixed project inspector/package editor requirement Apply Changes

git-svn-id: trunk@64758 -
This commit is contained in:
mattias 2021-03-06 20:45:38 +00:00
parent 07895b46b1
commit 8981264152
6 changed files with 52 additions and 41 deletions

View File

@ -69,7 +69,7 @@ uses
IDEHelpIntf, IDECommands, IDEDialogs, IDEImagesIntf, LazIDEIntf, ToolBarIntf,
// IDE
LazarusIDEStrConsts, MainBase, IDEProcs, DialogProcs, IDEOptionDefs, Project,
InputHistory, TransferMacros, EnvironmentOpts, BuildManager,
InputHistory, TransferMacros, EnvironmentOpts, BuildManager, BasePkgManager,
ProjPackChecks, ProjPackEditing, ProjPackFilePropGui, PackageDefs, PackageSystem,
AddToProjectDlg, AddPkgDependencyDlg, AddFPMakeDependencyDlg, LResources;
@ -1100,13 +1100,8 @@ begin
CurDependency:=GetSingleSelectedDependency;
if (LazProject=nil) or (CurDependency=nil)
or not FPropGui.CheckApplyDependency(CurDependency) then exit;
// Try to load the package again. Min/max version may have changed.
CurDependency.LoadPackageResult := lprUndefined;
// This calls UpdateRequiredPackages from PackageGraph.OnEndUpdate,
// and also updates all package editors which is useless here.
PackageGraph.OpenDependency(CurDependency, False);
//fForcedFlags:=[pefNeedUpdateRequiredPkgs];
LazProject.Modified:=True;
PkgBoss.ApplyDependency(CurDependency);
end;
function TProjectInspectorForm.CreateToolButton(AName, ACaption, AHint, AImageName: String;

View File

@ -118,6 +118,7 @@ type
function DoCloseAllPackageEditors: TModalResult; virtual; abstract;
function AddPackageDependency(APackage: TLazPackage; const ReqPackage: string;
OnlyTestIfPossible: boolean = false): TModalResult; virtual; abstract;
function ApplyDependency(CurDependency: TPkgDependency): TModalResult; virtual; abstract;
function IsPackageEditorForm(AForm: TCustomForm): boolean; virtual; abstract;
procedure OpenHiddenModifiedPackages; virtual; abstract;

View File

@ -53,7 +53,8 @@ uses
MainBase, IDEProcs, DialogProcs, LazarusIDEStrConsts, IDEDefs, CompilerOptions,
EnvironmentOpts, InputHistory, PackageSystem, PackageDefs, AddToPackageDlg,
AddPkgDependencyDlg, AddFPMakeDependencyDlg, ProjPackChecks, PkgVirtualUnitEditor,
MissingPkgFilesDlg, CleanPkgDeps, ProjPackFilePropGui, ProjPackEditing;
MissingPkgFilesDlg, CleanPkgDeps, ProjPackFilePropGui, ProjPackEditing,
BasePkgManager;
const
PackageEditorMenuRootName = 'PackageEditor';
@ -1538,11 +1539,8 @@ begin
CurDependency:=GetSingleSelectedDependency;
if (LazPackage=nil) or (CurDependency=nil)
or not FPropGui.CheckApplyDependency(CurDependency) then exit;
// Try to load the package again. Min/max version may have changed.
CurDependency.LoadPackageResult := lprUndefined;
PackageGraph.OpenDependency(CurDependency, False);
//fForcedFlags:=[pefNeedUpdateRequiredPkgs];
LazPackage.Modified:=True;
PkgBoss.ApplyDependency(CurDependency);
end;
procedure TPackageEditorForm.CallRegisterProcCheckBoxChange(Sender: TObject);
@ -3051,7 +3049,9 @@ begin
//debugln(['TPackageEditorForm.CanCloseEditor ',Caption]);
if (LazPackage<>nil) and (not (lpfDestroying in LazPackage.Flags)) then
begin
if (not LazPackage.ReadOnly) and LazPackage.Modified then
if LazPackage.ReadOnly then
LazPackage.Modified:=false // clear modified flag, so that it will be closed
else if LazPackage.Modified then
begin
MsgResult:=MessageDlg(lisPkgMangSavePackage,
Format(lisPckEditPackageHasChangedSavePackage, [LazPackage.IDAsString, LineEnding]),

View File

@ -446,9 +446,8 @@ type
procedure AddDependencyToPackage(APackage, RequiredPackage: TLazPackage);
procedure RemoveDependencyFromPackage(APackage: TLazPackage;
Dependency: TPkgDependency; AddToRemovedList: boolean);
//procedure ChangeDependency(Dependency, NewDependency: TPkgDependency);
function OpenDependency(Dependency: TPkgDependency;
ShowAbort: boolean): TLoadPackageResult;
ShowAbort: boolean; IgnorePackage: TLazPackage = nil): TLoadPackageResult;
function FindAlternativeLPK(APackage: TLazPackage): string;
procedure OpenInstalledDependency(Dependency: TPkgDependency;
InstallType: TPackageInstallType; var Quiet: boolean);
@ -5757,21 +5756,9 @@ begin
IncreaseBuildMacroChangeStamp;
EndUpdate;
end;
{
procedure TLazPackageGraph.ChangeDependency(Dependency, NewDependency: TPkgDependency);
begin
if Dependency.Compare(NewDependency)=0 then exit;
BeginUpdate(true);
Dependency.Assign(NewDependency);
Dependency.LoadPackageResult:=lprUndefined;
IncreaseBuildMacroChangeStamp;
OpenDependency(Dependency,false);
DoDependencyChanged(Dependency);
EndUpdate;
end;
}
function TLazPackageGraph.OpenDependency(Dependency: TPkgDependency;
ShowAbort: boolean): TLoadPackageResult;
ShowAbort: boolean; IgnorePackage: TLazPackage): TLoadPackageResult;
procedure OpenFile(AFilename: string);
var
@ -5808,7 +5795,7 @@ begin
// search compatible package in opened packages
ANode:=FindNodeOfDependency(Dependency,fpfSearchEverywhere);
if (ANode<>nil) then begin
// there is already a package that fits name and version
// there is already a loaded package that fits name and version
APackage:=TLazPackage(ANode.Data);
Dependency.RequiredPackage:=APackage;
Dependency.LoadPackageResult:=lprSuccess;
@ -5831,12 +5818,12 @@ begin
end;
end;
if Dependency.LoadPackageResult=lprUndefined then begin
// no compatible package yet open
// no compatible package open yet
Dependency.RequiredPackage:=nil;
Dependency.LoadPackageResult:=lprNotFound;
APackage:=FindPackageWithName(Dependency.PackageName,nil);
APackage:=FindPackageWithName(Dependency.PackageName,IgnorePackage);
if APackage=nil then begin
// no package with same name open
// no compatible package with same name open
if Dependency.DependencyType=pdtLazarus then begin
// -> try package links
IgnoreFiles:=nil;

View File

@ -323,6 +323,7 @@ type
function WarnAboutMissingPackageFiles(APackage: TLazPackage): TModalResult;
function AddPackageDependency(APackage: TLazPackage; const ReqPackage: string;
OnlyTestIfPossible: boolean = false): TModalResult; override;
function ApplyDependency(CurDependency: TPkgDependency): TModalResult; override;
function GetPackageOfEditorItem(Sender: TObject): TIDEPackage; override;
// package compilation
@ -5370,6 +5371,34 @@ begin
end;
end;
function TPkgManager.ApplyDependency(CurDependency: TPkgDependency
): TModalResult;
// apply
var
OldPkg: TLazPackage;
PkgEdit: TPackageEditorForm;
begin
Result:=mrOk;
OldPkg:=CurDependency.RequiredPackage;
if (OldPkg<>nil) and CurDependency.IsCompatible(OldPkg) then
exit(mrOk);
PkgEdit:=PackageEditors.FindEditor(OldPkg);
if PkgEdit<>nil then
begin
if PkgEdit.CanCloseEditor<>mrOk then
exit(mrCancel);
end;
// Try to load the package again. Min/max version may have changed.
CurDependency.LoadPackageResult := lprUndefined;
// This calls UpdateRequiredPackages from PackageGraph.OnEndUpdate,
// and also updates all package editors which is useless here.
if PackageGraph.OpenDependency(CurDependency, False, OldPkg)<>lprSuccess then
Result:=mrCancel;
//fForcedFlags:=[pefNeedUpdateRequiredPkgs];
end;
function TPkgManager.GetPackageOfEditorItem(Sender: TObject): TIDEPackage;
begin
Result:=nil;

View File

@ -99,13 +99,12 @@ type
property OnGetPkgDep: TGetPkgDepEvent read fOnGetPkgDep write fOnGetPkgDep;
end;
function GetNodeData(TVNode: TTreeNode): TPENodeData;
function NodeTreeIsIn(xIterNode, xParentNode: TTreeNode): Boolean;
function FindOPLink(const ADependency: TPkgDependencyID): TPackageLink;
function OPNote(ADep: TPkgDependencyID): string;
function OpmAddOrOpenDependency(ADep: TPkgDependencyID): Boolean;
procedure OpmInstallPendingDependencies;
function GetNodeData(TVNode: TTreeNode): TPENodeData;
function NodeTreeIsIn(xIterNode, xParentNode: TTreeNode): Boolean;
function FindOPLink(const ADependency: TPkgDependencyID): TPackageLink;
function OPNote(ADep: TPkgDependencyID): string;
function OpmAddOrOpenDependency(ADep: TPkgDependencyID): Boolean;
procedure OpmInstallPendingDependencies;
implementation
@ -459,7 +458,7 @@ begin
// Assign relevant data to temp variables
Flags:=aDep.Flags;
MinVers.Assign(aDep.MinVersion);
MaxVers.Assign(aDep.MinVersion);
MaxVers.Assign(aDep.MaxVersion);
// read minimum version
if UseMinVersionCheckBox.Checked then begin