diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 91fdf7a7db..4ce2b3440e 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -5665,6 +5665,7 @@ resourcestring +'dependencies are not needed, because of the automatic transitivity ' +'between package dependencies.'; lisPkgDeleteDependencies = 'Delete dependencies'; + lisPkgClearSelection = 'Clear Selection'; implementation diff --git a/packager/cleanpkgdeps.lfm b/packager/cleanpkgdeps.lfm index 9c582fd58d..12447f1518 100644 --- a/packager/cleanpkgdeps.lfm +++ b/packager/cleanpkgdeps.lfm @@ -10,35 +10,19 @@ object CleanPkgDepsDlg: TCleanPkgDepsDlg OnDestroy = FormDestroy Position = poScreenCenter LCLVersion = '1.1' - object ButtonPanel1: TButtonPanel - Left = 6 - Height = 36 - Top = 338 - Width = 510 - OKButton.Name = 'OKButton' - OKButton.DefaultCaption = True - HelpButton.Name = 'HelpButton' - HelpButton.DefaultCaption = True - CloseButton.Name = 'CloseButton' - CloseButton.DefaultCaption = True - CancelButton.Name = 'CancelButton' - CancelButton.DefaultCaption = True - TabOrder = 0 - ShowButtons = [pbOK, pbCancel] - end object TransitivityGroupBox: TGroupBox Left = 0 - Height = 332 + Height = 338 Top = 0 Width = 522 Align = alClient Caption = 'TransitivityGroupBox' - ClientHeight = 315 + ClientHeight = 321 ClientWidth = 518 - TabOrder = 1 + TabOrder = 0 object TransitivityTreeView: TTreeView Left = 0 - Height = 300 + Height = 306 Top = 15 Width = 518 Align = alClient @@ -59,4 +43,63 @@ object CleanPkgDepsDlg: TCleanPkgDepsDlg WordWrap = True end end + object BtnPanel: TPanel + Left = 0 + Height = 42 + Top = 338 + Width = 522 + Align = alBottom + AutoSize = True + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.HorizontalSpacing = 6 + ClientHeight = 42 + ClientWidth = 522 + TabOrder = 1 + object DeleteSelectedBitBtn: TBitBtn + Left = 308 + Height = 28 + Top = 7 + Width = 134 + Align = alRight + AutoSize = True + Caption = 'DeleteSelectedBitBtn' + ModalResult = 1 + TabOrder = 0 + end + object CancelBitBtn: TBitBtn + Left = 448 + Height = 28 + Top = 7 + Width = 67 + Align = alRight + AutoSize = True + Cancel = True + Default = True + DefaultCaption = True + Kind = bkCancel + ModalResult = 2 + TabOrder = 1 + end + object SelectAllBitBtn: TBitBtn + Left = 88 + Height = 28 + Top = 7 + Width = 75 + Align = alLeft + Caption = 'SelectAllBitBtn' + OnClick = SelectAllBitBtnClick + TabOrder = 2 + end + object SelectNoneBitBtn: TBitBtn + Left = 7 + Height = 28 + Top = 7 + Width = 75 + Align = alLeft + Caption = 'SelectNoneBitBtn' + OnClick = SelectNoneBitBtnClick + TabOrder = 3 + end + end end diff --git a/packager/cleanpkgdeps.pas b/packager/cleanpkgdeps.pas index 57f7819a1c..27938e257c 100644 --- a/packager/cleanpkgdeps.pas +++ b/packager/cleanpkgdeps.pas @@ -29,7 +29,7 @@ interface uses Classes, SysUtils, contnrs, FileUtil, AvgLvlTree, LazLogger, LvlGraphCtrl, Forms, Controls, Graphics, Dialogs, ButtonPanel, ComCtrls, ExtCtrls, StdCtrls, - LazarusIDEStrConsts, Project, PackageDefs, IDEImagesIntf; + Buttons, LazarusIDEStrConsts, Project, PackageDefs, IDEImagesIntf; const CPDProjectName = '-Project-'; @@ -46,13 +46,18 @@ type { TCleanPkgDepsDlg } TCleanPkgDepsDlg = class(TForm) - ButtonPanel1: TButtonPanel; + CancelBitBtn: TBitBtn; + DeleteSelectedBitBtn: TBitBtn; + BtnPanel: TPanel; + SelectAllBitBtn: TBitBtn; + SelectNoneBitBtn: TBitBtn; TransitivityGroupBox: TGroupBox; TransitivityLabel: TLabel; TransitivityTreeView: TTreeView; - procedure ButtonPanel1OKButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); + procedure SelectAllBitBtnClick(Sender: TObject); + procedure SelectNoneBitBtnClick(Sender: TObject); procedure TransitivityTreeViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private @@ -141,8 +146,10 @@ begin TransitivityLabel.Caption:= lisPkgTheFollowingDependenciesAreNotNeededBecauseOfTheAu; TransitivityTreeView.Images:=IDEImages.Images_16; - ButtonPanel1.OKButton.Caption:=lisPkgDeleteDependencies; - ButtonPanel1.OKButton.OnClick:=@ButtonPanel1OKButtonClick; + + SelectAllBitBtn.Caption:=lisMenuSelectAll; + SelectNoneBitBtn.Caption:=lisPkgClearSelection; + DeleteSelectedBitBtn.Caption:=lisPkgDeleteDependencies; end; procedure TCleanPkgDepsDlg.FormDestroy(Sender: TObject); @@ -150,6 +157,22 @@ begin ClearTreeData; end; +procedure TCleanPkgDepsDlg.SelectAllBitBtnClick(Sender: TObject); +var + i: Integer; +begin + for i:=0 to TransitivityTreeView.Items.Count-1 do + TVNodeChecked[TransitivityTreeView.Items[i]]:=true; +end; + +procedure TCleanPkgDepsDlg.SelectNoneBitBtnClick(Sender: TObject); +var + i: Integer; +begin + for i:=0 to TransitivityTreeView.Items.Count-1 do + TVNodeChecked[TransitivityTreeView.Items[i]]:=false; +end; + procedure TCleanPkgDepsDlg.TransitivityTreeViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var @@ -164,11 +187,13 @@ end; function TCleanPkgDepsDlg.GetTVNodeChecked(TVNode: TTreeNode): boolean; begin - Result:=(TVNode<>nil) and (TVNode.ImageIndex=ImgIndexDelete); + Result:=(TVNode<>nil) and (TVNode.Data<>nil) and (TVNode.ImageIndex=ImgIndexDelete); end; procedure TCleanPkgDepsDlg.SetTVNodeChecked(TVNode: TTreeNode; AValue: boolean); begin + if TVNode.Data=nil then exit; + if TVNodeChecked[TVNode]=AValue then exit; if AValue then TVNode.ImageIndex:=ImgIndexDelete else @@ -177,10 +202,6 @@ begin UpdateButtons; end; -procedure TCleanPkgDepsDlg.ButtonPanel1OKButtonClick(Sender: TObject); -begin -end; - procedure TCleanPkgDepsDlg.SetOwners(AValue: TFPList); begin if FOwners=AValue then Exit; @@ -238,7 +259,7 @@ begin if TVNodeChecked[TVNode] then CheckCnt+=1; end; - ButtonPanel1.OKButton.Enabled:=CheckCnt>0; + DeleteSelectedBitBtn.Enabled:=CheckCnt>0; end; procedure TCleanPkgDepsDlg.AddTransitivities(NodeCaption: string; diff --git a/packager/pkggraphexplorer.pas b/packager/pkggraphexplorer.pas index a49caf209b..5c6c05206e 100644 --- a/packager/pkggraphexplorer.pas +++ b/packager/pkggraphexplorer.pas @@ -178,6 +178,9 @@ begin end else begin Pkg:=PackageGraph.FindPackageWithName(Info.Owner,nil); if Pkg<>nil then begin + // open package editor + if Assigned(OnOpenPackage) then + OnOpenPackage(Self,Pkg); end; end;