From bf805c48fb70444d9fd181b92830747e4b6bb338 Mon Sep 17 00:00:00 2001 From: balazs Date: Mon, 28 Nov 2016 21:21:13 +0000 Subject: [PATCH] Bug fix: button is wrongly displayed in the tree when scrolling/collapsing items. git-svn-id: trunk@53473 - --- .../opkman_categoriesfrm.lfm | 1 - .../opkman_packagedetailsfrm.lfm | 42 +++++-- .../opkman_packagedetailsfrm.pas | 5 +- .../opkman_visualtree.pas | 107 ++++++++++-------- 4 files changed, 97 insertions(+), 58 deletions(-) diff --git a/components/onlinepackagemanager/opkman_categoriesfrm.lfm b/components/onlinepackagemanager/opkman_categoriesfrm.lfm index 946c8b428a..fbc45171b6 100644 --- a/components/onlinepackagemanager/opkman_categoriesfrm.lfm +++ b/components/onlinepackagemanager/opkman_categoriesfrm.lfm @@ -4,7 +4,6 @@ object CategoriesFrm: TCategoriesFrm Top = 265 Width = 343 BorderIcons = [biSystemMenu] - BorderStyle = bsSingle Caption = 'CategoriesFrm' ClientHeight = 383 ClientWidth = 343 diff --git a/components/onlinepackagemanager/opkman_packagedetailsfrm.lfm b/components/onlinepackagemanager/opkman_packagedetailsfrm.lfm index b6bd133cc0..fbbf1c19c5 100644 --- a/components/onlinepackagemanager/opkman_packagedetailsfrm.lfm +++ b/components/onlinepackagemanager/opkman_packagedetailsfrm.lfm @@ -1,24 +1,46 @@ object PackageDetailsFrm: TPackageDetailsFrm Left = 455 - Height = 490 + Height = 310 Top = 264 - Width = 735 - BorderIcons = [biSystemMenu, biMaximize] - ClientHeight = 490 - ClientWidth = 735 + Width = 477 + BorderIcons = [biSystemMenu] + ClientHeight = 310 + ClientWidth = 477 Color = clBtnFace PopupMode = pmExplicit Position = poOwnerFormCenter LCLVersion = '1.7' object mDetails: TMemo - Left = 0 - Height = 490 - Top = 0 - Width = 735 + Left = 5 + Height = 259 + Top = 5 + Width = 467 Align = alClient - Color = clBtnFace + BorderSpacing.Around = 5 + ParentColor = True ReadOnly = True ScrollBars = ssBoth TabOrder = 0 end + object pnButtons: TPanel + Left = 0 + Height = 41 + Top = 269 + Width = 477 + Align = alBottom + BevelOuter = bvNone + ClientHeight = 41 + ClientWidth = 477 + TabOrder = 1 + object bOk: TButton + Left = 390 + Height = 26 + Top = 8 + Width = 75 + Anchors = [akTop, akRight] + Caption = 'Ok' + ModalResult = 1 + TabOrder = 0 + end + end end diff --git a/components/onlinepackagemanager/opkman_packagedetailsfrm.pas b/components/onlinepackagemanager/opkman_packagedetailsfrm.pas index 9bd3faf523..07f592fab0 100644 --- a/components/onlinepackagemanager/opkman_packagedetailsfrm.pas +++ b/components/onlinepackagemanager/opkman_packagedetailsfrm.pas @@ -5,14 +5,17 @@ unit opkman_packagedetailsfrm; interface uses - Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, + ExtCtrls; type { TPackageDetailsFrm } TPackageDetailsFrm = class(TForm) + bOk: TButton; mDetails: TMemo; + pnButtons: TPanel; private public diff --git a/components/onlinepackagemanager/opkman_visualtree.pas b/components/onlinepackagemanager/opkman_visualtree.pas index c99b4a1036..ed62eacf14 100644 --- a/components/onlinepackagemanager/opkman_visualtree.pas +++ b/components/onlinepackagemanager/opkman_visualtree.pas @@ -111,8 +111,10 @@ type Node: PVirtualNode; Column: TColumnIndex; const {%H-}CellRect: TRect); procedure VSTCollapsed(Sender: TBaseVirtualTree; {%H-}Node: PVirtualNode); procedure VSTOnDblClick(Sender: TObject); + procedure VSTScroll(Sender: TBaseVirtualTree; {%H-}DeltaX, {%H-}DeltaY: Integer); function IsAllChecked(const AChecking: PVirtualNode): Boolean; procedure ButtonClick(Sender: TObject); + procedure ShowHideButtons; public constructor Create(const AParent: TWinControl; const AImgList: TImageList; APopupMenu: TPopupMenu); @@ -157,7 +159,7 @@ begin Indent := 22; TabOrder := 1; DefaultText := ''; - Header.AutoSizeIndex := 3; + Header.AutoSizeIndex := 4; Header.Height := 25; with Header.Columns.Add do begin @@ -222,6 +224,7 @@ begin OnGetHint := @VSTGetHint; OnAfterCellPaint := @VSTAfterCellPaint; OnCollapsed := @VSTCollapsed; + OnScroll := @VSTScroll; OnFreeNode := @VSTFreeNode; end; end; @@ -311,16 +314,11 @@ begin GrandChildData := FVST.GetNodeData(GrandChildNode); GrandChildData^.PackageType := PackageFile.PackageType; GrandChildData^.DataType := 8; - //add dependencies(DataType = 9) - GrandChildNode := FVST.AddChild(ChildNode); - GrandChildData := FVST.GetNodeData(GrandChildNode); - GrandChildData^.Dependencies := PackageFile.DependenciesAsString; - GrandChildData^.DataType := 9; - //add license(DataType = 10) + //add license(DataType = 9) GrandChildNode := FVST.AddChild(ChildNode); GrandChildData := FVST.GetNodeData(GrandChildNode); GrandChildData^.License := PackageFile.License; - GrandChildData^.DataType := 10; + GrandChildData^.DataType := 9; GrandChildData^.Button := TSpeedButton.Create(FVST); with GrandChildData^.Button do begin @@ -333,6 +331,11 @@ begin end; GrandChildData^.ButtonID := UniqueID; end; + //add dependencies(DataType = 10) + GrandChildNode := FVST.AddChild(ChildNode); + GrandChildData := FVST.GetNodeData(GrandChildNode); + GrandChildData^.Dependencies := PackageFile.DependenciesAsString; + GrandChildData^.DataType := 10; //add miscellaneous(DataType = 11) ChildNode := FVST.AddChild(Node); ChildData := FVST.GetNodeData(ChildNode); @@ -422,7 +425,7 @@ begin Text := Data^.Description; FrmCaption := rsMainFrm_VSTText_Desc + ' "' + ParentData^.PackageFileName + '"'; end; - 10: begin + 9: begin Text := Data^.License; FrmCaption := rsMainFrm_VSTText_Lic + ' "' + ParentData^.PackageFileName + '"'; end; @@ -442,6 +445,42 @@ begin end; end; +procedure TVisualTree.ShowHideButtons; +var + ChildNode: PVirtualNode; + ChildData: PData; + R: TRect; + Text: String; +begin + ChildNode := VST.GetFirst; + while Assigned(ChildNode) do + begin + ChildData := VST.GetNodeData(ChildNode); + if Assigned(ChildData^.Button) then + begin + case ChildData^.DataType of + 3: Text := ChildData^.Description; + 9: Text := ChildData^.License; + end; + R := FVST.GetDisplayRect(ChildNode, 5, false); + ChildData^.Button.Visible := ((R.Bottom > FVST.Top) and (R.Bottom < FVST.Top + FVST.Height)) and (Trim(Text) <> ''); + FVST.InvalidateNode(ChildNode); + end; + ChildNode := VST.GetNext(ChildNode); + end; +end; + +procedure TVisualTree.VSTScroll(Sender: TBaseVirtualTree; DeltaX, + DeltaY: Integer); +begin + ShowHideButtons; +end; + +procedure TVisualTree.VSTCollapsed(Sender: TBaseVirtualTree; Node: PVirtualNode); +begin + ShowHideButtons; +end; + procedure TVisualTree.VSTAfterCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const CellRect: TRect); @@ -462,37 +501,13 @@ begin Data^.Button.Height := R.Bottom - R.Top - 2; case Data^.DataType of 3: Text := Data^.Description; - 10: Text := Data^.License; + 9: Text := Data^.License; end; - Data^.Button.Visible := ((R.Bottom > FVST.Top) and (R.Bottom < FVST.Top + FVST.Height)) and (Trim(Text) <> '') + Data^.Button.Visible := ((R.Bottom > FVST.Top) and (R.Bottom < FVST.Top + FVST.Height)) and (Trim(Text) <> ''); end; end; end; -procedure TVisualTree.VSTCollapsed(Sender: TBaseVirtualTree; Node: PVirtualNode); -var - ChildNode: PVirtualNode; - ChildData: PData; - R: TRect; - Text: String; -begin - ChildNode := VST.GetFirst; - while Assigned(ChildNode) do - begin - ChildData := VST.GetNodeData(ChildNode); - if Assigned(ChildData^.Button) then - begin - case ChildData^.DataType of - 3: Text := ChildData^.Description; - 10: Text := ChildData^.License; - end; - R := FVST.GetDisplayRect(ChildNode, 5, false); - ChildData^.Button.Visible := ((R.Bottom > FVST.Top) and (R.Bottom < FVST.Top + FVST.Height)) and (Trim(Text) <> '') - end; - ChildNode := VST.GetNext(ChildNode); - end; -end; - procedure TVisualTree.CheckNodes(const Checked: Boolean); var Node: PVirtualNode; @@ -715,16 +730,16 @@ begin FilterNode(Node, ''); end; end; - fbDependecies: - begin - if Data^.DataType = 9 then - FilterNode(Node, Data^.Dependencies); - end; fbLicense: begin - if Data^.DataType = 10 then + if Data^.DataType = 9 then FilterNode(Node, Data^.License); end; + fbDependecies: + begin + if Data^.DataType = 10 then + FilterNode(Node, Data^.Dependencies); + end; end; Node := FVST.GetNext(Node); end; @@ -1052,8 +1067,8 @@ begin 6: CellText := rsMainFrm_VSTText_FPCCompatibility; 7: CellText := rsMainFrm_VSTText_SupportedWidgetsets; 8: CellText := rsMainFrm_VSTText_Packagetype; - 9: CellText := rsMainFrm_VSTText_Dependecies; - 10: CellText := rsMainFrm_VSTText_License; + 9: CellText := rsMainFrm_VSTText_License; + 10: CellText := rsMainFrm_VSTText_Dependecies; 11: CellText := rsMainFrm_VSTText_PackageInfo; 12: CellText := rsMainFrm_VSTText_Category; 13: CellText := rsMainFrm_VSTText_RepositoryFilename; @@ -1063,7 +1078,6 @@ begin 17: CellText := rsMainFrm_VSTText_HomePageURL; 18: CellText := rsMainFrm_VSTText_DownloadURL; 19: CellText := rsMainFrm_VSTText_SVNURL; - end; end else if Column = 1 then @@ -1114,8 +1128,8 @@ begin ptRunTime: CellText := rsMainFrm_VSTText_PackageType2; ptRunTimeOnly: CellText := rsMainFrm_VSTText_PackageType3; end; - 9: CellText := Data^.Dependencies; - 10: CellText := Data^.License; + 9: CellText := Data^.License; + 10: CellText := Data^.Dependencies; 11: CellText := ''; 12: CellText := Data^.Category; 13: CellText := Data^.RepositoryFileName; @@ -1285,5 +1299,6 @@ begin end; end; + end.