From e05552a17879ce10c50f2551b06971e3cd8b4f80 Mon Sep 17 00:00:00 2001 From: juha Date: Mon, 16 Oct 2017 13:31:15 +0000 Subject: [PATCH] Package editor: Update the image for dependent package after modifying min/max version. Issue #32546. git-svn-id: trunk@56082 - --- packager/packageeditor.pas | 62 ++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index c8a546c416..ab8381c664 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -317,6 +317,7 @@ type FShowDirectoryHierarchy: boolean; FSortAlphabetically: boolean; FDirSummaryLabel: TLabel; + FSingleSelectedNode: TTreeNode; FSingleSelectedFile: TPkgFile; FSingleSelectedDep: TPkgDependency; FFirstNodeData: array[TPENodeType] of TPENodeData; @@ -333,7 +334,8 @@ type procedure SetupComponents; function OnTreeViewGetImageIndex({%H-}Str: String; Data: TObject; var {%H-}AIsEnabled: Boolean): Integer; procedure ShowAddDialogEx(AType: TAddToPkgType); - procedure UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData); + procedure UpdateNodeImage(TVNode: TTreeNode); + procedure UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData; Item: TObject); procedure UpdatePending; function CanUpdate(Flag: TPEFlag; Immediately: boolean): boolean; procedure UpdateTitle(Immediately: boolean = false); @@ -651,11 +653,10 @@ end; { TPENodeData } -constructor TPENodeData.Create(aTyp: TPENodeType; aName: string; - aRemoved: boolean); +constructor TPENodeData.Create(aTyp: TPENodeType; aName: string; aRemoved: boolean); begin Typ:=aTyp; - Name:=aName;; + Name:=aName; Removed:=aRemoved; end; @@ -1677,9 +1678,8 @@ var Flags: TPkgDependencyFlags; MinVers, MaxVers: TPkgVersion; begin - if LazPackage=nil then exit; - if FSingleSelectedDep=nil then exit; - if LazPackage.FindDependencyByName(FSingleSelectedDep.PackageName)<>FSingleSelectedDep + if (LazPackage=nil) or (FSingleSelectedNode=nil) or (FSingleSelectedDep=nil) + or (LazPackage.FindDependencyByName(FSingleSelectedDep.PackageName)<>FSingleSelectedDep) then exit; MinVers:=TPkgVersion.Create; @@ -1723,7 +1723,8 @@ begin FSingleSelectedDep.MinVersion.Assign(MinVers); FSingleSelectedDep.MaxVersion.Assign(MaxVers); - fForcedFlags:=[pefNeedUpdateRequiredPkgs]; + UpdateNodeImage(FSingleSelectedNode); + //fForcedFlags:=[pefNeedUpdateRequiredPkgs]; LazPackage.Modified:=True; finally MaxVers.Free; @@ -1750,7 +1751,7 @@ begin CurFile.HasRegisterProc:=CallRegisterProcCheckBox.Checked; if not NodeData.Removed then LazPackage.ModifySilently; - UpdateNodeImage(TVNode, NodeData); + UpdateNodeImage(TVNode, NodeData, Item); end; end; @@ -2323,13 +2324,31 @@ begin Caption:=NewCaption; end; -procedure TPackageEditorForm.UpdateNodeImage(TVNode: TTreeNode; NodeData: TPENodeData); +procedure TPackageEditorForm.UpdateNodeImage(TVNode: TTreeNode); var - ena: Boolean; - ImgIndex: Integer; + NodeData: TPENodeData; + Item: TObject; begin - ena := True; // String param is not used. - ImgIndex:=OnTreeViewGetImageIndex('', NodeData, ena); + if GetNodeDataItem(TVNode, NodeData, Item) then + 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.SelectedIndex:=ImgIndex; end; @@ -2658,7 +2677,6 @@ var TVNode: TTreeNode; SingleSelectedDirectory: TTreeNode; SingleSelectedRemoved: Boolean; - SingleSelected: TTreeNode; FileCount: integer; HasRegisterProcCount: integer; AddToUsesPkgSectionCount: integer; @@ -2668,11 +2686,11 @@ begin FPlugins.Clear; // check selection + FSingleSelectedNode:=nil; FSingleSelectedDep:=nil; FSingleSelectedFile:=nil; SingleSelectedDirectory:=nil; SingleSelectedRemoved:=false; - SingleSelected:=nil; SelFileCount:=0; SelDepCount:=0; SelHasRegisterProc:=mubNone; @@ -2688,7 +2706,7 @@ begin CurFile:=TPkgFile(Item); inc(SelFileCount); FSingleSelectedFile:=CurFile; - SingleSelected:=TVNode; + FSingleSelectedNode:=TVNode; SingleSelectedRemoved:=NodeData.Removed; MergeMultiBool(SelHasRegisterProc,CurFile.HasRegisterProc); if CurFile.FileType in PkgFileUnitTypes then begin @@ -2715,13 +2733,13 @@ begin inc(SelDepCount); CurDependency:=TPkgDependency(Item); FSingleSelectedDep:=CurDependency; - SingleSelected:=TVNode; + FSingleSelectedNode:=TVNode; SingleSelectedRemoved:=NodeData.Removed; end; end else if IsDirectoryNode(TVNode) or (TVNode=FFilesNode) then begin inc(SelDirCount); SingleSelectedDirectory:=TVNode; - SingleSelected:=TVNode; + FSingleSelectedNode:=TVNode; end; end; @@ -2730,7 +2748,7 @@ begin FSingleSelectedFile:=nil; FSingleSelectedDep:=nil; SingleSelectedDirectory:=nil; - SingleSelected:=nil; + FSingleSelectedNode:=nil; end; OnlyFilesSelected:=(SelFileCount>0) and (SelDepCount=0) and (SelDirCount=0); OnlyFilesWithUnitsSelected:=OnlyFilesSelected and (SelUnitCount>0); @@ -2743,8 +2761,8 @@ begin // move up/down (only single selection) aVisible:=(not (SortAlphabetically or SingleSelectedRemoved)) and ((FSingleSelectedFile<>nil) or (FSingleSelectedDep<>nil)); - MoveUpBtn.Enabled :=aVisible and Assigned(SingleSelected.GetPrevVisibleSibling); - MoveDownBtn.Enabled:=aVisible and Assigned(SingleSelected.GetNextVisibleSibling); + MoveUpBtn.Enabled :=aVisible and Assigned(FSingleSelectedNode.GetPrevVisibleSibling); + MoveDownBtn.Enabled:=aVisible and Assigned(FSingleSelectedNode.GetNextVisibleSibling); // Min/Max version of dependency (only single selection) aVisible:=FSingleSelectedDep<>nil;