From 9ce85ae018a70db0189be8e617b86906db3974f6 Mon Sep 17 00:00:00 2001 From: balazs Date: Thu, 23 Jul 2020 14:07:21 +0000 Subject: [PATCH] Opkman: Add a new node("Orphaned package") to the package tree. The node describe if the node is actively maintained. git-svn-id: trunk@63634 - --- .../onlinepackagemanager/opkman_const.pas | 2 + .../opkman_createrepositoryfrm.lfm | 12 ++--- .../opkman_createrepositoryfrm.pas | 44 ++++++++++++++++++- .../opkman_createrepositorypackagefrm.lfm | 43 +++++++++++------- .../opkman_createrepositorypackagefrm.pas | 38 +++++++++++++++- .../opkman_serializablepackages.pas | 4 ++ .../onlinepackagemanager/opkman_showhint.pas | 5 ++- .../opkman_visualtree.pas | 26 +++++++++-- 8 files changed, 142 insertions(+), 32 deletions(-) diff --git a/components/onlinepackagemanager/opkman_const.pas b/components/onlinepackagemanager/opkman_const.pas index ce39a30495..9aeee9793e 100644 --- a/components/onlinepackagemanager/opkman_const.pas +++ b/components/onlinepackagemanager/opkman_const.pas @@ -89,6 +89,8 @@ resourcestring rsMainFrm_VSTText_Category = 'Category'; rsMainFrm_VSTText_CommunityDescription = 'Community description'; rsMainFrm_VSTText_ExternalDeps = 'External dependencies'; + rsMainFrm_VSTText_OrphanedPackage1 = 'Orphaned package'; + rsMainFrm_VSTText_OrphanedPackage2 = 'currently has no active maintainer'; rsMainFrm_VSTText_RepositoryFilename = 'Repository filename'; rsMainFrm_VSTText_RepositoryFileSize = 'Repository filesize'; rsMainFrm_VSTText_RepositoryFileHash = 'Repository filehash'; diff --git a/components/onlinepackagemanager/opkman_createrepositoryfrm.lfm b/components/onlinepackagemanager/opkman_createrepositoryfrm.lfm index 85a452a542..92d9aa5a03 100644 --- a/components/onlinepackagemanager/opkman_createrepositoryfrm.lfm +++ b/components/onlinepackagemanager/opkman_createrepositoryfrm.lfm @@ -139,12 +139,12 @@ object CreateRepositoryFrm: TCreateRepositoryFrm Enabled = False Interval = 100 OnTimer = tmWaitTimer - left = 85 - top = 32 + Left = 85 + Top = 32 end object pm: TPopupMenu - left = 139 - top = 37 + Left = 139 + Top = 37 object miRepDetails: TMenuItem Caption = 'Repository details' OnClick = miRepDetailsClick @@ -153,7 +153,7 @@ object CreateRepositoryFrm: TCreateRepositoryFrm object ODRep: TOpenDialog DefaultExt = '.opmrep' Filter = '*.opmrep|*.opmrep' - left = 85 - top = 104 + Left = 85 + Top = 104 end end diff --git a/components/onlinepackagemanager/opkman_createrepositoryfrm.pas b/components/onlinepackagemanager/opkman_createrepositoryfrm.pas index f1b1be14b6..04a745a93f 100644 --- a/components/onlinepackagemanager/opkman_createrepositoryfrm.pas +++ b/components/onlinepackagemanager/opkman_createrepositoryfrm.pas @@ -156,6 +156,8 @@ type FDownloadURL: String; FSVNURL: String; FCommunityDescription: String; + FExternalDependencies: String; + FOrphanPackage: Integer; end; procedure TCreateRepositoryFrm.FormCreate(Sender: TObject); @@ -700,6 +702,8 @@ begin Data^.FHomePageURL := MetaPackage.HomePageURL; Data^.FDownloadURL := MetaPackage.DownloadURL; Data^.FCommunityDescription := MetaPackage.CommunityDescription; + Data^.FExternalDependencies := MetaPackage.ExternalDependecies; + Data^.FOrphanPackage := MetaPackage.OrphanedPackage; Data^.FDataType := 1; for J := 0 to MetaPackage.LazarusPackages.Count - 1 do begin @@ -813,7 +817,15 @@ var Data: PData; begin Data := FVSTPackages.GetNodeData(Node); - ImageIndex := Data^.FDataType; + case Data^.FDataType of + 0: ImageIndex := 0; + 1: if Data^.FOrphanPackage = 1 then + ImageIndex := 36 + else + ImageIndex := 1; + + 2: ImageIndex := 0; + end; end; procedure TCreateRepositoryFrm.VSTPackagesHeaderClick(Sender: TVTHeader; HitInfo: TVTHeaderHitInfo); @@ -926,6 +938,18 @@ begin DetailData := FVSTDetails.GetNodeData(DetailNode); DetailData^.FCommunityDescription := Data^.FCommunityDescription; DetailData^.FDataType := 19; + //add ExternalDependencies(DataType = 20) + DetailNode := FVSTDetails.AddChild(nil); + DetailData := FVSTDetails.GetNodeData(DetailNode); + DetailData^.FExternalDependencies := Data^.FExternalDependencies; + DetailData^.FDataType := 20; + //add OrphanedPackage(DataType = 21) + DetailNode := FVSTDetails.AddChild(nil); + DetailData := FVSTDetails.GetNodeData(DetailNode); + DetailData^.FOrphanPackage := Data^.FOrphanPackage; + DetailData^.FDataType := 21; + + end; 2: begin //add description(DataType = 2) @@ -1052,6 +1076,17 @@ begin CellText := rsMainFrm_VSTText_CommunityDescription else CellText := DetailData^.FCommunityDescription; + 20: if Column = 0 then + CellText := rsMainFrm_VSTText_ExternalDeps + else + CellText := DetailData^.FExternalDependencies; + 21: if Column = 0 then + CellText := rsMainFrm_VSTText_OrphanedPackage1 + else + case DetailData^.FOrphanPackage of + 0: CellText := rsMainFrm_VSTText_Install0; + 1: CellText := rsMainFrm_VSTText_Install1; + end; end; end; 2: begin @@ -1113,7 +1148,12 @@ begin if Column = 0 then begin Data := FVSTDetails.GetNodeData(Node); - ImageIndex := Data^.FDataType; + case Data^.FDataType of + 20: ImageIndex := 10; + 21: ImageIndex := 36; + else + ImageIndex := Data^.FDataType; + end; end; end; diff --git a/components/onlinepackagemanager/opkman_createrepositorypackagefrm.lfm b/components/onlinepackagemanager/opkman_createrepositorypackagefrm.lfm index 74e034dd55..87d911e978 100644 --- a/components/onlinepackagemanager/opkman_createrepositorypackagefrm.lfm +++ b/components/onlinepackagemanager/opkman_createrepositorypackagefrm.lfm @@ -106,13 +106,13 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm TabOrder = 3 object pnPackageData: TPanel Left = 0 - Height = 110 - Top = 479 + Height = 77 + Top = 512 Width = 657 Align = alClient BevelOuter = bvNone BorderStyle = bsSingle - ClientHeight = 106 + ClientHeight = 73 ClientWidth = 653 TabOrder = 1 Visible = False @@ -290,13 +290,13 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm end object pnCategory: TPanel Left = 0 - Height = 479 + Height = 512 Top = 0 Width = 657 Align = alTop BevelOuter = bvNone BorderStyle = bsSingle - ClientHeight = 475 + ClientHeight = 508 ClientWidth = 653 TabOrder = 0 Visible = False @@ -323,7 +323,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object lbHomePageURL: TLabel Left = 9 Height = 15 - Top = 87 + Top = 89 Width = 90 Caption = 'lbHomePageURL' ParentColor = False @@ -331,7 +331,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object lbDownloadURL: TLabel Left = 9 Height = 15 - Top = 123 + Top = 125 Width = 85 Caption = 'lbDownloadURL' ParentColor = False @@ -339,7 +339,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object edHomePageURL: TEdit Left = 170 Height = 23 - Top = 83 + Top = 84 Width = 454 Anchors = [akTop, akLeft, akRight] TabOrder = 2 @@ -347,7 +347,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object edDownloadURL: TEdit Left = 170 Height = 23 - Top = 118 + Top = 120 Width = 454 Anchors = [akTop, akLeft, akRight] TabOrder = 3 @@ -355,7 +355,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object lbSVNURL: TLabel Left = 9 Height = 15 - Top = 154 + Top = 156 Width = 53 Caption = 'lbSVNURL' ParentColor = False @@ -364,7 +364,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object edSVNURL: TEdit Left = 170 Height = 23 - Top = 152 + Top = 155 Width = 454 Anchors = [akTop, akLeft, akRight] TabOrder = 4 @@ -427,14 +427,14 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object mComDescr: TMemo Left = 170 Height = 152 - Top = 152 + Top = 156 Width = 454 TabOrder = 5 end object lbComDescr: TLabel Left = 9 Height = 15 - Top = 154 + Top = 156 Width = 65 Caption = 'lbComDescr' ParentColor = False @@ -442,7 +442,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object lbExternalDependencies: TLabel Left = 9 Height = 15 - Top = 314 + Top = 316 Width = 125 Caption = 'lbExternalDependencies' ParentColor = False @@ -450,10 +450,19 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm object mExternalDependencies: TMemo Left = 170 Height = 152 - Top = 314 + Top = 319 Width = 454 TabOrder = 6 end + object cbOrphanedPackage: TCheckBox + Left = 9 + Height = 19 + Top = 481 + Width = 294 + Caption = 'Orphan package(currently has no active maintainer)' + OnClick = cbOrphanedPackageClick + TabOrder = 7 + end end end object spMain: TSplitter @@ -590,7 +599,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm end end object SDD: TSelectDirectoryDialog - left = 88 - top = 88 + Left = 88 + Top = 88 end end diff --git a/components/onlinepackagemanager/opkman_createrepositorypackagefrm.pas b/components/onlinepackagemanager/opkman_createrepositorypackagefrm.pas index a051b7b1a3..37b36b3da6 100644 --- a/components/onlinepackagemanager/opkman_createrepositorypackagefrm.pas +++ b/components/onlinepackagemanager/opkman_createrepositorypackagefrm.pas @@ -50,6 +50,7 @@ type bOptions: TButton; bSubmit: TButton; cbJSONForUpdates: TCheckBox; + cbOrphanedPackage: TCheckBox; edCategories: TEdit; edFPCCompatibility: TEdit; edSupportedWidgetset: TEdit; @@ -99,6 +100,7 @@ type procedure bHelpClick(Sender: TObject); procedure bOptionsClick(Sender: TObject); procedure bSubmitClick(Sender: TObject); + procedure cbOrphanedPackageClick(Sender: TObject); procedure edDisplayNameKeyPress(Sender: TObject; var Key: char); procedure edPackageDirAcceptDirectory(Sender: TObject; Var Value: String); procedure edPackageDirButtonClick(Sender: TObject); @@ -197,6 +199,7 @@ type FSVNURL: String; FCommunityDescription: String; FExternalDependencies: String; + FOrphanedPackage: Integer; end; procedure TCreateRepositoryPackagesFrm.FormCreate(Sender: TObject); @@ -215,7 +218,7 @@ begin lbSVNURL.Caption := rsCreateRepositoryPackageFrm_lbSVNURL_Caption; lbComDescr.Caption := rsMainFrm_VSTText_CommunityDescription + ':'; lbExternalDependencies.Caption := rsMainFrm_VSTText_ExternalDeps + ':'; - + cbOrphanedPackage.Caption := rsMainFrm_VSTText_OrphanedPackage1 + '(' + rsMainFrm_VSTText_OrphanedPackage2 + ')'; bHelp.Caption := rsCreateRepositoryPackageFrm_bHelp_Caption; bHelp.Hint := rsCreateRepositoryPackageFrm_bHelp_Hint; bOptions.Caption := rsCreateRepositoryPackageFrm_bOptions_Caption; @@ -693,6 +696,22 @@ begin fPackageZipper.StartZip(FPackageDir, FPackageFile); end; +procedure TCreateRepositoryPackagesFrm.cbOrphanedPackageClick(Sender: TObject); +var + Node: PVirtualNode; + Data: PData; +begin + Node := FVSTPackages.GetFirstSelected; + if Node = nil then + Exit; + if FVSTPackages.GetNodeLevel(Node) <> 0 then + Exit; + Data := FVSTPackages.GetNodeData(Node); + Data^.FOrphanedPackage := Ord(cbOrphanedPackage.Checked); + FVSTPackages.ReinitNode(Node, False); + FVSTPackages.RepaintNode(Node); +end; + procedure TCreateRepositoryPackagesFrm.edDisplayNameKeyPress(Sender: TObject; var Key: char); begin @@ -735,9 +754,22 @@ end; procedure TCreateRepositoryPackagesFrm.VSTPackagesGetImageIndex( Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer); +var + Data: PData; begin if Column = 0 then - ImageIndex := IMAGE_INDEX_MAP[FVSTPackages.GetNodeLevel(Node)]; + begin + Data := FVSTPackages.GetNodeData(Node); + if FVSTPackages.GetNodeLevel(Node) = 0 then + begin + if Data^.FOrphanedPackage = 1 then + ImageIndex := 36 + else + ImageIndex := 1; + end + else + ImageIndex := IMAGE_INDEX_MAP[FVSTPackages.GetNodeLevel(Node)]; + end; end; procedure TCreateRepositoryPackagesFrm.SaveExtraInfo(const ANode: PVirtualNode); @@ -754,6 +786,7 @@ begin Data^.FSVNURL := edSVNURL.Text; Data^.FCommunityDescription := mComDescr.Text; Data^.FExternalDependencies := mExternalDependencies.Text; + Data^.FOrphanedPackage := Ord(cbOrphanedPackage.Checked); end; 1: begin Data^.FLazCompatibility := edLazCompatibility.Text; @@ -804,6 +837,7 @@ begin edSVNURL.Text := Data^.FSVNURL; mComDescr.Text := Data^.FCommunityDescription; mExternalDependencies.Text := Data^.FExternalDependencies; + cbOrphanedPackage.Checked := Data^.FOrphanedPackage = 1; end else if Level = 1 then begin diff --git a/components/onlinepackagemanager/opkman_serializablepackages.pas b/components/onlinepackagemanager/opkman_serializablepackages.pas index b9dc3eb162..9950b1de50 100644 --- a/components/onlinepackagemanager/opkman_serializablepackages.pas +++ b/components/onlinepackagemanager/opkman_serializablepackages.pas @@ -173,6 +173,7 @@ type FCategory: String; FCommunityDescription: String; FExternalDependencies: String; + FOrphanedPackage: Integer; FRepositoryFileName: String; FRepositoryFileSize: Int64; FRepositoryFileHash: String; @@ -217,6 +218,7 @@ type property Category: String read FCategory write FCategory; property CommunityDescription: String read FCommunityDescription write FCommunityDescription; property ExternalDependecies: String read FExternalDependencies write FExternalDependencies; + property OrphanedPackage: Integer read FOrphanedPackage write FOrphanedPackage; property Checked: Boolean read FChecked write FChecked; property RepositoryFileName: String read FRepositoryFileName write FRepositoryFileName; property RepositoryFileSize: int64 read FRepositoryFileSize write FRepositoryFileSize; @@ -859,6 +861,7 @@ begin AMetaPackage.Category := PackageData.Get('Category'); AMetaPackage.CommunityDescription := PackageData.Get('CommunityDescription'); AMetaPackage.ExternalDependecies := PackageData.Get('ExternalDependecies'); + AMetaPackage.OrphanedPackage := PackageData.Get('OrphanedPackage'); AMetaPackage.RepositoryFileName := PackageData.Get('RepositoryFileName'); AMetaPackage.RepositoryFileSize := PackageData.Get('RepositoryFileSize'); AMetaPackage.RepositoryFileHash := PackageData.Get('RepositoryFileHash'); @@ -1315,6 +1318,7 @@ begin APackageData.Add('Category', AMetaPackage.Category); APackageData.Add('CommunityDescription', AMetaPackage.CommunityDescription); APackageData.Add('ExternalDependecies', AMetaPackage.ExternalDependecies); + APackageData.Add('OrphanedPackage', AMetaPackage.OrphanedPackage); APackageData.Add('RepositoryFileName', AMetaPackage.RepositoryFileName); APackageData.Add('RepositoryFileSize', AMetaPackage.RepositoryFileSize); APackageData.Add('RepositoryFileHash', AMetaPackage.RepositoryFileHash); diff --git a/components/onlinepackagemanager/opkman_showhint.pas b/components/onlinepackagemanager/opkman_showhint.pas index 3130a4ca60..fc6018c9f4 100644 --- a/components/onlinepackagemanager/opkman_showhint.pas +++ b/components/onlinepackagemanager/opkman_showhint.pas @@ -172,7 +172,10 @@ var begin Data := VisualTree.VST.GetNodeData(ANode); Caption := Format(rsMainFrm_rsPackageInformation, [Data^.PackageDisplayName]); - pnPackageName.Caption := Data^.PackageDisplayName; + if Data^.OrphanedPackage = 0 then + pnPackageName.Caption := Data^.PackageDisplayName + else + pnPackageName.Caption := Data^.PackageDisplayName + '(' + rsMainFrm_VSTText_OrphanedPackage1 + ' - ' + rsMainFrm_VSTText_OrphanedPackage2 + ')'; CalcHeight(mDescription, Data^.CommunityDescription); for I := FFrames.Count - 1 downto 0 do begin diff --git a/components/onlinepackagemanager/opkman_visualtree.pas b/components/onlinepackagemanager/opkman_visualtree.pas index 22ffc8a796..ceafe61544 100644 --- a/components/onlinepackagemanager/opkman_visualtree.pas +++ b/components/onlinepackagemanager/opkman_visualtree.pas @@ -76,6 +76,7 @@ type SVNURL: String; CommunityDescription: String; ExternalDependencies: String; + OrphanedPackage: Integer; InstallState: Integer; ButtonID: Integer; Button: TSpeedButton; @@ -501,7 +502,13 @@ begin Inc(UniqueID); GrandChildData^.ButtonID := UniqueID; Data^.ExternalDependencies := SerializablePackages.Items[I].ExternalDependecies; - + //add orphaned package(DataType = 21) - added 2020.07.23 + GrandChildNode := FVST.AddChild(ChildNode); + FVST.IsDisabled[GrandChildNode] := FVST.IsDisabled[GrandChildNode^.Parent]; + GrandChildData := FVST.GetNodeData(GrandChildNode); + GrandChildData^.OrphanedPackage := SerializablePackages.Items[I].OrphanedPackage; + GrandChildData^.DataType := 21; + Data^.OrphanedPackage := SerializablePackages.Items[I].OrphanedPackage; end; FVST.SortTree(0, laz.VirtualTrees.sdAscending); ExpandEx; @@ -1476,8 +1483,14 @@ begin ((not Options.ShowRegularIcons) or ((Options.ShowRegularIcons) and (Data^.InstallState = 0))) then ImageIndex := 25 else - ImageIndex := 1; - 20: ImageIndex := 10 + begin + if Data^.OrphanedPackage = 0 then + ImageIndex := 1 + else + ImageIndex := 36; + end; + 20: ImageIndex := 10; + 21: ImageIndex := 36; else ImageIndex := Data^.DataType end; @@ -1550,7 +1563,8 @@ begin 17: CellText := rsMainFrm_VSTText_HomePageURL; 18: CellText := rsMainFrm_VSTText_DownloadURL; 19: CellText := rsMainFrm_VSTText_CommunityDescription; - 20: CellText := rsMainFrm_VSTText_ExternalDeps + 20: CellText := rsMainFrm_VSTText_ExternalDeps; + 21: CellText := rsMainFrm_VSTText_OrphanedPackage1; end; end else if Column = 1 then @@ -1654,6 +1668,10 @@ begin 18: CellText := Data^.DownloadURL; 19: CellText := GetDisplayString(Data^.CommunityDescription); 20: CellText := GetDisplayString(Data^.ExternalDependencies); + 21: case Data^.OrphanedPackage of + 0: CellText := rsMainFrm_VSTText_Install0; + 1: CellText := rsMainFrm_VSTText_Install1; + end; end; end else if Column = 5 then