Package editor: Update the image for dependent package after modifying min/max version. Issue #32546.

git-svn-id: trunk@56082 -
This commit is contained in:
juha 2017-10-16 13:31:15 +00:00
parent 6e4539b4b4
commit e05552a178

View File

@ -317,6 +317,7 @@ type
FShowDirectoryHierarchy: boolean; FShowDirectoryHierarchy: boolean;
FSortAlphabetically: boolean; FSortAlphabetically: boolean;
FDirSummaryLabel: TLabel; FDirSummaryLabel: TLabel;
FSingleSelectedNode: TTreeNode;
FSingleSelectedFile: TPkgFile; FSingleSelectedFile: TPkgFile;
FSingleSelectedDep: TPkgDependency; FSingleSelectedDep: TPkgDependency;
FFirstNodeData: array[TPENodeType] of TPENodeData; FFirstNodeData: array[TPENodeType] of TPENodeData;
@ -333,7 +334,8 @@ type
procedure SetupComponents; procedure SetupComponents;
function OnTreeViewGetImageIndex({%H-}Str: String; Data: TObject; var {%H-}AIsEnabled: Boolean): Integer; function OnTreeViewGetImageIndex({%H-}Str: String; Data: TObject; var {%H-}AIsEnabled: Boolean): Integer;
procedure ShowAddDialogEx(AType: TAddToPkgType); procedure ShowAddDialogEx(AType: TAddToPkgType);
procedure UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData); procedure UpdateNodeImage(TVNode: TTreeNode);
procedure UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData; Item: TObject);
procedure UpdatePending; procedure UpdatePending;
function CanUpdate(Flag: TPEFlag; Immediately: boolean): boolean; function CanUpdate(Flag: TPEFlag; Immediately: boolean): boolean;
procedure UpdateTitle(Immediately: boolean = false); procedure UpdateTitle(Immediately: boolean = false);
@ -651,11 +653,10 @@ end;
{ TPENodeData } { TPENodeData }
constructor TPENodeData.Create(aTyp: TPENodeType; aName: string; constructor TPENodeData.Create(aTyp: TPENodeType; aName: string; aRemoved: boolean);
aRemoved: boolean);
begin begin
Typ:=aTyp; Typ:=aTyp;
Name:=aName;; Name:=aName;
Removed:=aRemoved; Removed:=aRemoved;
end; end;
@ -1677,9 +1678,8 @@ var
Flags: TPkgDependencyFlags; Flags: TPkgDependencyFlags;
MinVers, MaxVers: TPkgVersion; MinVers, MaxVers: TPkgVersion;
begin begin
if LazPackage=nil then exit; if (LazPackage=nil) or (FSingleSelectedNode=nil) or (FSingleSelectedDep=nil)
if FSingleSelectedDep=nil then exit; or (LazPackage.FindDependencyByName(FSingleSelectedDep.PackageName)<>FSingleSelectedDep)
if LazPackage.FindDependencyByName(FSingleSelectedDep.PackageName)<>FSingleSelectedDep
then exit; then exit;
MinVers:=TPkgVersion.Create; MinVers:=TPkgVersion.Create;
@ -1723,7 +1723,8 @@ begin
FSingleSelectedDep.MinVersion.Assign(MinVers); FSingleSelectedDep.MinVersion.Assign(MinVers);
FSingleSelectedDep.MaxVersion.Assign(MaxVers); FSingleSelectedDep.MaxVersion.Assign(MaxVers);
fForcedFlags:=[pefNeedUpdateRequiredPkgs]; UpdateNodeImage(FSingleSelectedNode);
//fForcedFlags:=[pefNeedUpdateRequiredPkgs];
LazPackage.Modified:=True; LazPackage.Modified:=True;
finally finally
MaxVers.Free; MaxVers.Free;
@ -1750,7 +1751,7 @@ begin
CurFile.HasRegisterProc:=CallRegisterProcCheckBox.Checked; CurFile.HasRegisterProc:=CallRegisterProcCheckBox.Checked;
if not NodeData.Removed then if not NodeData.Removed then
LazPackage.ModifySilently; LazPackage.ModifySilently;
UpdateNodeImage(TVNode, NodeData); UpdateNodeImage(TVNode, NodeData, Item);
end; end;
end; end;
@ -2323,13 +2324,31 @@ begin
Caption:=NewCaption; Caption:=NewCaption;
end; end;
procedure TPackageEditorForm.UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData); procedure TPackageEditorForm.UpdateNodeImage(TVNode: TTreeNode);
var var
ena: Boolean; NodeData: TPENodeData;
ImgIndex: Integer; Item: TObject;
begin begin
ena := True; // String param is not used. if GetNodeDataItem(TVNode, NodeData, Item) then
ImgIndex:=OnTreeViewGetImageIndex('', NodeData, ena); UpdateNodeImage(TVNode, NodeData, Item);
end;
procedure TPackageEditorForm.UpdateNodeImage(TVNode: TTreeNode;
NodeData: TPENodeData; Item: TObject);
var
PkgDependency: TPkgDependency;
ImgIndex: Integer;
Ena: Boolean;
begin
Assert(Assigned(Item), 'TPackageEditorForm.UpdateNodeImage: Item = Nil.');
if Item is TPkgDependency then begin
PkgDependency:=TPkgDependency(Item);
// Try to load the package again. Min/max version may have changed.
PkgDependency.LoadPackageResult := lprUndefined;
PackageGraph.OpenDependency(PkgDependency, False);
end;
Ena := True; // Neither Ena nor the String param are used.
ImgIndex := OnTreeViewGetImageIndex('', NodeData, Ena);
TVNode.ImageIndex:=ImgIndex; TVNode.ImageIndex:=ImgIndex;
TVNode.SelectedIndex:=ImgIndex; TVNode.SelectedIndex:=ImgIndex;
end; end;
@ -2658,7 +2677,6 @@ var
TVNode: TTreeNode; TVNode: TTreeNode;
SingleSelectedDirectory: TTreeNode; SingleSelectedDirectory: TTreeNode;
SingleSelectedRemoved: Boolean; SingleSelectedRemoved: Boolean;
SingleSelected: TTreeNode;
FileCount: integer; FileCount: integer;
HasRegisterProcCount: integer; HasRegisterProcCount: integer;
AddToUsesPkgSectionCount: integer; AddToUsesPkgSectionCount: integer;
@ -2668,11 +2686,11 @@ begin
FPlugins.Clear; FPlugins.Clear;
// check selection // check selection
FSingleSelectedNode:=nil;
FSingleSelectedDep:=nil; FSingleSelectedDep:=nil;
FSingleSelectedFile:=nil; FSingleSelectedFile:=nil;
SingleSelectedDirectory:=nil; SingleSelectedDirectory:=nil;
SingleSelectedRemoved:=false; SingleSelectedRemoved:=false;
SingleSelected:=nil;
SelFileCount:=0; SelFileCount:=0;
SelDepCount:=0; SelDepCount:=0;
SelHasRegisterProc:=mubNone; SelHasRegisterProc:=mubNone;
@ -2688,7 +2706,7 @@ begin
CurFile:=TPkgFile(Item); CurFile:=TPkgFile(Item);
inc(SelFileCount); inc(SelFileCount);
FSingleSelectedFile:=CurFile; FSingleSelectedFile:=CurFile;
SingleSelected:=TVNode; FSingleSelectedNode:=TVNode;
SingleSelectedRemoved:=NodeData.Removed; SingleSelectedRemoved:=NodeData.Removed;
MergeMultiBool(SelHasRegisterProc,CurFile.HasRegisterProc); MergeMultiBool(SelHasRegisterProc,CurFile.HasRegisterProc);
if CurFile.FileType in PkgFileUnitTypes then begin if CurFile.FileType in PkgFileUnitTypes then begin
@ -2715,13 +2733,13 @@ begin
inc(SelDepCount); inc(SelDepCount);
CurDependency:=TPkgDependency(Item); CurDependency:=TPkgDependency(Item);
FSingleSelectedDep:=CurDependency; FSingleSelectedDep:=CurDependency;
SingleSelected:=TVNode; FSingleSelectedNode:=TVNode;
SingleSelectedRemoved:=NodeData.Removed; SingleSelectedRemoved:=NodeData.Removed;
end; end;
end else if IsDirectoryNode(TVNode) or (TVNode=FFilesNode) then begin end else if IsDirectoryNode(TVNode) or (TVNode=FFilesNode) then begin
inc(SelDirCount); inc(SelDirCount);
SingleSelectedDirectory:=TVNode; SingleSelectedDirectory:=TVNode;
SingleSelected:=TVNode; FSingleSelectedNode:=TVNode;
end; end;
end; end;
@ -2730,7 +2748,7 @@ begin
FSingleSelectedFile:=nil; FSingleSelectedFile:=nil;
FSingleSelectedDep:=nil; FSingleSelectedDep:=nil;
SingleSelectedDirectory:=nil; SingleSelectedDirectory:=nil;
SingleSelected:=nil; FSingleSelectedNode:=nil;
end; end;
OnlyFilesSelected:=(SelFileCount>0) and (SelDepCount=0) and (SelDirCount=0); OnlyFilesSelected:=(SelFileCount>0) and (SelDepCount=0) and (SelDirCount=0);
OnlyFilesWithUnitsSelected:=OnlyFilesSelected and (SelUnitCount>0); OnlyFilesWithUnitsSelected:=OnlyFilesSelected and (SelUnitCount>0);
@ -2743,8 +2761,8 @@ begin
// move up/down (only single selection) // move up/down (only single selection)
aVisible:=(not (SortAlphabetically or SingleSelectedRemoved)) aVisible:=(not (SortAlphabetically or SingleSelectedRemoved))
and ((FSingleSelectedFile<>nil) or (FSingleSelectedDep<>nil)); and ((FSingleSelectedFile<>nil) or (FSingleSelectedDep<>nil));
MoveUpBtn.Enabled :=aVisible and Assigned(SingleSelected.GetPrevVisibleSibling); MoveUpBtn.Enabled :=aVisible and Assigned(FSingleSelectedNode.GetPrevVisibleSibling);
MoveDownBtn.Enabled:=aVisible and Assigned(SingleSelected.GetNextVisibleSibling); MoveDownBtn.Enabled:=aVisible and Assigned(FSingleSelectedNode.GetNextVisibleSibling);
// Min/Max version of dependency (only single selection) // Min/Max version of dependency (only single selection)
aVisible:=FSingleSelectedDep<>nil; aVisible:=FSingleSelectedDep<>nil;