Packager: use the new ListFilterEdit control in Install Packages dialog

git-svn-id: trunk@31446 -
This commit is contained in:
juha 2011-06-29 00:04:58 +00:00
parent d23a3c8cc5
commit 53749f7249
2 changed files with 98 additions and 189 deletions

View File

@ -1,12 +1,12 @@
object InstallPkgSetDialog: TInstallPkgSetDialog object InstallPkgSetDialog: TInstallPkgSetDialog
Left = 292 Left = 292
Height = 550 Height = 562
Top = 240 Top = 240
Width = 572 Width = 587
BorderStyle = bsSizeToolWin BorderStyle = bsSizeToolWin
Caption = 'InstallPkgSetDialog' Caption = 'InstallPkgSetDialog'
ClientHeight = 550 ClientHeight = 562
ClientWidth = 572 ClientWidth = 587
Constraints.MinHeight = 400 Constraints.MinHeight = 400
Constraints.MinWidth = 450 Constraints.MinWidth = 450
OnCreate = InstallPkgSetDialogCreate OnCreate = InstallPkgSetDialogCreate
@ -21,23 +21,23 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
AnchorSideRight.Control = lblMiddle AnchorSideRight.Control = lblMiddle
AnchorSideBottom.Control = PkgInfoGroupBox AnchorSideBottom.Control = PkgInfoGroupBox
Left = 6 Left = 6
Height = 375 Height = 393
Top = 30 Top = 26
Width = 277 Width = 284
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 6 BorderSpacing.Left = 6
BorderSpacing.Top = 6 BorderSpacing.Top = 6
BorderSpacing.Right = 3 BorderSpacing.Right = 3
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
Caption = 'InstallPkgGroupBox' Caption = 'InstallPkgGroupBox'
ClientHeight = 354 ClientHeight = 376
ClientWidth = 269 ClientWidth = 280
TabOrder = 0 TabOrder = 0
object ImportButton: TButton object ImportButton: TButton
Left = 6 Left = 6
Height = 25 Height = 25
Top = 292 Top = 314
Width = 257 Width = 268
Align = alBottom Align = alBottom
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'ImportButton' Caption = 'ImportButton'
@ -47,8 +47,8 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
object ExportButton: TButton object ExportButton: TButton
Left = 6 Left = 6
Height = 25 Height = 25
Top = 323 Top = 345
Width = 257 Width = 268
Align = alBottom Align = alBottom
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'ExportButton' Caption = 'ExportButton'
@ -57,12 +57,12 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
end end
object InstallTreeView: TTreeView object InstallTreeView: TTreeView
Left = 6 Left = 6
Height = 249 Height = 271
Top = 6 Top = 6
Width = 257 Width = 268
Align = alClient Align = alClient
BorderSpacing.Around = 6 BorderSpacing.Around = 6
DefaultItemHeight = 19 DefaultItemHeight = 15
MultiSelect = True MultiSelect = True
ReadOnly = True ReadOnly = True
ShowButtons = False ShowButtons = False
@ -76,8 +76,8 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
object UninstallButton: TBitBtn object UninstallButton: TBitBtn
Left = 6 Left = 6
Height = 25 Height = 25
Top = 261 Top = 283
Width = 257 Width = 268
Align = alBottom Align = alBottom
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'UninstallButton' Caption = 'UninstallButton'
@ -92,29 +92,29 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
AnchorSideRight.Control = Owner AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = PkgInfoGroupBox AnchorSideBottom.Control = PkgInfoGroupBox
Left = 289 Left = 296
Height = 375 Height = 393
Top = 30 Top = 26
Width = 277 Width = 285
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 3 BorderSpacing.Left = 3
BorderSpacing.Top = 6 BorderSpacing.Top = 6
BorderSpacing.Right = 6 BorderSpacing.Right = 6
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
Caption = 'AvailablePkgGroupBox' Caption = 'AvailablePkgGroupBox'
ClientHeight = 354 ClientHeight = 376
ClientWidth = 269 ClientWidth = 281
TabOrder = 1 TabOrder = 1
object AvailableTreeView: TTreeView object AvailableTreeView: TTreeView
Left = 6 Left = 6
Height = 284 Height = 308
Top = 33 Top = 31
Width = 257 Width = 269
Align = alClient Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 6 BorderSpacing.Left = 6
BorderSpacing.Right = 6 BorderSpacing.Right = 6
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
DefaultItemHeight = 19 DefaultItemHeight = 15
MultiSelect = True MultiSelect = True
ReadOnly = True ReadOnly = True
ShowButtons = False ShowButtons = False
@ -128,46 +128,45 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
object AddToInstallButton: TBitBtn object AddToInstallButton: TBitBtn
Left = 6 Left = 6
Height = 25 Height = 25
Top = 323 Top = 345
Width = 257 Width = 269
Align = alBottom Align = alBottom
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'AddToInstallButton' Caption = 'AddToInstallButton'
OnClick = AddToInstallButtonClick OnClick = AddToInstallButtonClick
TabOrder = 1 TabOrder = 1
end end
object AvailableFilterEdit: TEdit object AvailableFilterEdit: TListFilterEdit
Left = 6 Left = 6
Height = 27 Height = 20
Top = 6 Top = 7
Width = 257 Width = 247
Align = alTop FilteredTreeview = AvailableTreeView
BorderSpacing.Left = 6 ButtonWidth = 23
BorderSpacing.Top = 6 NumGlyphs = 0
BorderSpacing.Right = 6 Anchors = [akTop, akLeft, akRight]
OnChange = AvailableFilterEditChange Font.Color = clBtnShadow
OnEnter = AvailableFilterEditEnter MaxLength = 0
OnExit = AvailableFilterEditExit ParentFont = False
TabOrder = 2 TabOrder = 2
Text = 'AvailableFilterEdit'
end end
end end
object PkgInfoGroupBox: TGroupBox object PkgInfoGroupBox: TGroupBox
AnchorSideBottom.Control = BtnPanel AnchorSideBottom.Control = BtnPanel
Left = 0 Left = 0
Height = 93 Height = 93
Top = 411 Top = 425
Width = 572 Width = 587
Align = alBottom Align = alBottom
Caption = 'PkgInfoGroupBox' Caption = 'PkgInfoGroupBox'
ClientHeight = 72 ClientHeight = 76
ClientWidth = 564 ClientWidth = 583
TabOrder = 2 TabOrder = 2
object PkgInfoMemo: TMemo object PkgInfoMemo: TMemo
Left = 6 Left = 6
Height = 60 Height = 64
Top = 6 Top = 6
Width = 552 Width = 571
Align = alClient Align = alClient
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Lines.Strings = ( Lines.Strings = (
@ -180,20 +179,20 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
end end
object BtnPanel: TPanel object BtnPanel: TPanel
Left = 0 Left = 0
Height = 46 Height = 44
Top = 504 Top = 518
Width = 572 Width = 587
Align = alBottom Align = alBottom
AutoSize = True AutoSize = True
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 46 ClientHeight = 44
ClientWidth = 572 ClientWidth = 587
TabOrder = 3 TabOrder = 3
object HelpButton: TBitBtn object HelpButton: TBitBtn
Left = 6 Left = 6
Height = 34 Height = 32
Top = 6 Top = 6
Width = 85 Width = 75
Align = alLeft Align = alLeft
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
@ -205,10 +204,10 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
TabOrder = 0 TabOrder = 0
end end
object CancelButton: TBitBtn object CancelButton: TBitBtn
Left = 102 Left = 201
Height = 34 Height = 32
Top = 6 Top = 6
Width = 89 Width = 75
Align = alRight Align = alRight
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
@ -221,10 +220,10 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
TabOrder = 1 TabOrder = 1
end end
object SaveAndExitButton: TBitBtn object SaveAndExitButton: TBitBtn
Left = 397 Left = 445
Height = 34 Height = 32
Top = 6 Top = 6
Width = 169 Width = 136
Align = alRight Align = alRight
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
@ -271,10 +270,10 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
TabOrder = 2 TabOrder = 2
end end
object SaveAndRebuildButton: TBitBtn object SaveAndRebuildButton: TBitBtn
Left = 197 Left = 282
Height = 34 Height = 32
Top = 6 Top = 6
Width = 194 Width = 157
Align = alRight Align = alRight
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
@ -323,9 +322,9 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
end end
object NoteLabel: TLabel object NoteLabel: TLabel
Left = 6 Left = 6
Height = 18 Height = 14
Top = 6 Top = 6
Width = 560 Width = 575
Align = alTop Align = alTop
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'NoteLabel' Caption = 'NoteLabel'
@ -336,9 +335,9 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
AnchorSideLeft.Side = asrCenter AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = Owner AnchorSideTop.Control = Owner
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
Left = 286 Left = 293
Height = 1 Height = 1
Top = 275 Top = 281
Width = 1 Width = 1
AutoSize = False AutoSize = False
ParentColor = False ParentColor = False

View File

@ -39,8 +39,8 @@ interface
uses uses
Classes, SysUtils, contnrs, LCLProc, Forms, Controls, Graphics, Dialogs, Classes, SysUtils, contnrs, LCLProc, Forms, Controls, Graphics, Dialogs,
KeywordFuncLists, StdCtrls, Buttons, FileUtil, ExtCtrls, ComCtrls, KeywordFuncLists, StdCtrls, Buttons, FileUtil, ExtCtrls, ComCtrls, EditBtn,
AVL_Tree, Laz_XMLCfg, AVL_Tree, Laz_XMLCfg, ListFilterEdit,
PackageIntf, IDEImagesIntf, IDEHelpIntf, PackageIntf, IDEImagesIntf, IDEHelpIntf,
LazarusIDEStrConsts, EnvironmentOpts, InputHistory, LazConf, IDEProcs, LazarusIDEStrConsts, EnvironmentOpts, InputHistory, LazConf, IDEProcs,
PackageDefs, PackageSystem, PackageLinks, IDEContextHelpEdit; PackageDefs, PackageSystem, PackageLinks, IDEContextHelpEdit;
@ -53,7 +53,6 @@ type
TInstallPkgSetDialog = class(TForm) TInstallPkgSetDialog = class(TForm)
AddToInstallButton: TBitBtn; AddToInstallButton: TBitBtn;
AvailableFilterEdit: TEdit;
AvailableTreeView: TTreeView; AvailableTreeView: TTreeView;
AvailablePkgGroupBox: TGroupBox; AvailablePkgGroupBox: TGroupBox;
HelpButton: TBitBtn; HelpButton: TBitBtn;
@ -62,6 +61,7 @@ type
BtnPanel: TPanel; BtnPanel: TPanel;
InstallTreeView: TTreeView; InstallTreeView: TTreeView;
lblMiddle: TLabel; lblMiddle: TLabel;
AvailableFilterEdit: TListFilterEdit;
NoteLabel: TLabel; NoteLabel: TLabel;
PkgInfoMemo: TMemo; PkgInfoMemo: TMemo;
PkgInfoGroupBox: TGroupBox; PkgInfoGroupBox: TGroupBox;
@ -71,9 +71,6 @@ type
SaveAndRebuildButton: TBitBtn; SaveAndRebuildButton: TBitBtn;
UninstallButton: TBitBtn; UninstallButton: TBitBtn;
procedure AddToInstallButtonClick(Sender: TObject); procedure AddToInstallButtonClick(Sender: TObject);
procedure AvailableFilterEditChange(Sender: TObject);
procedure AvailableFilterEditEnter(Sender: TObject);
procedure AvailableFilterEditExit(Sender: TObject);
procedure AvailableTreeViewDblClick(Sender: TObject); procedure AvailableTreeViewDblClick(Sender: TObject);
procedure AvailableTreeViewSelectionChanged(Sender: TObject); procedure AvailableTreeViewSelectionChanged(Sender: TObject);
procedure ExportButtonClick(Sender: TObject); procedure ExportButtonClick(Sender: TObject);
@ -88,9 +85,6 @@ type
procedure SaveAndExitButtonClick(Sender: TObject); procedure SaveAndExitButtonClick(Sender: TObject);
procedure UninstallButtonClick(Sender: TObject); procedure UninstallButtonClick(Sender: TObject);
private private
FIdleConnected: boolean;
FAvailableFilter: string;
fAvailablePackagesNeedUpdate: boolean;
FNewInstalledPackages: TObjectList; FNewInstalledPackages: TObjectList;
FOldInstalledPackages: TPkgDependency; FOldInstalledPackages: TPkgDependency;
FOnCheckInstallPackageList: TOnCheckInstallPackageList; FOnCheckInstallPackageList: TOnCheckInstallPackageList;
@ -103,12 +97,10 @@ type
ImgIndexUninstallPackage: integer; ImgIndexUninstallPackage: integer;
ImgIndexCirclePackage: integer; ImgIndexCirclePackage: integer;
ImgIndexMissingPackage: integer; ImgIndexMissingPackage: integer;
procedure OnIdle(Sender: TObject; var Done: Boolean);
procedure SetIdleConnected(const AValue: boolean);
procedure SetAvailableFilter(const AValue: string);
procedure SetOldInstalledPackages(const AValue: TPkgDependency); procedure SetOldInstalledPackages(const AValue: TPkgDependency);
procedure AssignOldInstalledPackagesToList; procedure AssignOldInstalledPackagesToList;
function PackageInInstallList(PkgName: string): boolean; function PackageInInstallList(PkgName: string): boolean;
function ChooseImageIndex(Str: String; Data: TObject): Integer;
procedure UpdateAvailablePackages(Immediately: boolean = false); procedure UpdateAvailablePackages(Immediately: boolean = false);
procedure UpdateNewInstalledPackages; procedure UpdateNewInstalledPackages;
procedure OnIteratePackages(APackageID: TLazPackageID); procedure OnIteratePackages(APackageID: TLazPackageID);
@ -125,8 +117,6 @@ type
function ExtractNameFromPkgID(ID: string): string; function ExtractNameFromPkgID(ID: string): string;
procedure AddToInstall; procedure AddToInstall;
procedure AddToUninstall; procedure AddToUninstall;
function FitsAvailableFilter(PkgName: string): boolean;
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
public public
function GetNewInstalledPackages: TObjectList; function GetNewInstalledPackages: TObjectList;
property OldInstalledPackages: TPkgDependency read FOldInstalledPackages property OldInstalledPackages: TPkgDependency read FOldInstalledPackages
@ -135,7 +125,6 @@ type
property RebuildIDE: boolean read FRebuildIDE write FRebuildIDE; property RebuildIDE: boolean read FRebuildIDE write FRebuildIDE;
property OnCheckInstallPackageList: TOnCheckInstallPackageList property OnCheckInstallPackageList: TOnCheckInstallPackageList
read FOnCheckInstallPackageList write FOnCheckInstallPackageList; read FOnCheckInstallPackageList write FOnCheckInstallPackageList;
property AvailableFilter: string read FAvailableFilter write SetAvailableFilter;
end; end;
function ShowEditInstallPkgsDialog(OldInstalledPackages: TPkgDependency; function ShowEditInstallPkgsDialog(OldInstalledPackages: TPkgDependency;
@ -185,8 +174,9 @@ begin
Caption:=lisInstallUninstallPackages; Caption:=lisInstallUninstallPackages;
NoteLabel.Caption:=lisToInstallYouMustCompileAndRestartTheIDE; NoteLabel.Caption:=lisToInstallYouMustCompileAndRestartTheIDE;
AvailableFilterEdit.Text:=lisCEFilter;
AvailablePkgGroupBox.Caption:=lisDoNotInstall; AvailablePkgGroupBox.Caption:=lisDoNotInstall;
AvailableFilterEdit.OnGetImageIndex:=@ChooseImageIndex;
ExportButton.Caption:=lisExportList; ExportButton.Caption:=lisExportList;
ImportButton.Caption:=lisImportList; ImportButton.Caption:=lisImportList;
UninstallButton.Caption:=lisUninstallSelection; UninstallButton.Caption:=lisUninstallSelection;
@ -202,7 +192,7 @@ begin
fAvailablePackages:=TAVLTree.Create(@CompareLazPackageIDNames); fAvailablePackages:=TAVLTree.Create(@CompareLazPackageIDNames);
FNewInstalledPackages:=TObjectList.Create(true); FNewInstalledPackages:=TObjectList.Create(true);
PkgInfoMemo.Clear; PkgInfoMemo.Clear;
end; end;
@ -278,23 +268,6 @@ begin
AddToInstall; AddToInstall;
end; end;
procedure TInstallPkgSetDialog.AvailableFilterEditChange(Sender: TObject);
begin
AvailableFilter:=AvailableFilterEdit.Text;
end;
procedure TInstallPkgSetDialog.AvailableFilterEditEnter(Sender: TObject);
begin
if AvailableFilterEdit.Text=lisCEFilter then
AvailableFilterEdit.Text:='';
end;
procedure TInstallPkgSetDialog.AvailableFilterEditExit(Sender: TObject);
begin
if AvailableFilterEdit.Text='' then
AvailableFilterEdit.Text:=lisCEFilter;
end;
procedure TInstallPkgSetDialog.AvailableTreeViewDblClick(Sender: TObject); procedure TInstallPkgSetDialog.AvailableTreeViewDblClick(Sender: TObject);
begin begin
AddToInstall; AddToInstall;
@ -302,7 +275,6 @@ end;
procedure TInstallPkgSetDialog.InstallPkgSetDialogDestroy(Sender: TObject); procedure TInstallPkgSetDialog.InstallPkgSetDialogDestroy(Sender: TObject);
begin begin
IdleConnected:=false;
ClearNewInstalledPackages; ClearNewInstalledPackages;
FNewInstalledPackages.Free; FNewInstalledPackages.Free;
fAvailablePackages.Free; fAvailablePackages.Free;
@ -335,23 +307,6 @@ begin
AddToUninstall; AddToUninstall;
end; end;
procedure TInstallPkgSetDialog.OnIdle(Sender: TObject; var Done: Boolean);
begin
if fAvailablePackagesNeedUpdate then
UpdateAvailablePackages(true);
IdleConnected:=false;
end;
procedure TInstallPkgSetDialog.SetIdleConnected(const AValue: boolean);
begin
if FIdleConnected=AValue then exit;
FIdleConnected:=AValue;
if FIdleConnected then
Application.AddOnIdleHandler(@OnIdle)
else
Application.RemoveOnIdleHandler(@OnIdle);
end;
procedure TInstallPkgSetDialog.SetOldInstalledPackages( procedure TInstallPkgSetDialog.SetOldInstalledPackages(
const AValue: TPkgDependency); const AValue: TPkgDependency);
begin begin
@ -360,23 +315,6 @@ begin
AssignOldInstalledPackagesToList; AssignOldInstalledPackagesToList;
end; end;
procedure TInstallPkgSetDialog.SetAvailableFilter(const AValue: string);
var
NewValue: String;
begin
NewValue:=AValue;
if NewValue=lisCEFilter then NewValue:='';
NewValue:=LowerCase(NewValue);
if FAvailableFilter=NewValue then exit;
FAvailableFilter:=NewValue;
if not AvailableFilterEdit.Focused then
if AvailableFilter='' then
AvailableFilterEdit.Text:=lisCEFilter
else
AvailableFilterEdit.Text:=AvailableFilter;
UpdateAvailablePackages(false);
end;
procedure TInstallPkgSetDialog.AssignOldInstalledPackagesToList; procedure TInstallPkgSetDialog.AssignOldInstalledPackagesToList;
var var
Dependency: TPkgDependency; Dependency: TPkgDependency;
@ -416,62 +354,44 @@ begin
Result:=false; Result:=false;
end; end;
function TInstallPkgSetDialog.ChooseImageIndex(Str: String; Data: TObject): Integer;
var
Pkg: TLazPackageID;
APackage: TLazPackage;
begin
Pkg:=TLazPackageID(Data);
Result:=ImgIndexPackage;
if (Pkg is TLazPackage) then begin
APackage:=TLazPackage(Pkg);
if APackage.Installed<>pitNope then
Result:=ImgIndexUninstallPackage; // is installed and will be uninstalled
end;
end;
procedure TInstallPkgSetDialog.UpdateAvailablePackages(Immediately: boolean); procedure TInstallPkgSetDialog.UpdateAvailablePackages(Immediately: boolean);
var var
ANode: TAVLTreeNode; ANode: TAVLTreeNode;
sl: TStringList;
PkgName: String;
Pkg: TLazPackageID; Pkg: TLazPackageID;
TVNode: TTreeNode; PkgName: String;
APackage: TLazPackage;
ImgIndex: LongInt;
i: Integer;
begin begin
if not Immediately then begin
if csDestroying in ComponentState then exit;
fAvailablePackagesNeedUpdate:=true;
IdleConnected:=true;
exit;
end;
fAvailablePackagesNeedUpdate:=false;
if fAvailablePackages.Count=0 then if fAvailablePackages.Count=0 then
PackageGraph.IteratePackages(fpfSearchAllExisting,@OnIteratePackages); PackageGraph.IteratePackages(fpfSearchAllExisting,@OnIteratePackages);
sl:=TStringList.Create; AvailableFilterEdit.Data.Clear;
ANode:=fAvailablePackages.FindLowest; ANode:=fAvailablePackages.FindLowest;
while ANode<>nil do begin while ANode<>nil do begin
Pkg:=TLazPackageID(ANode.Data); Pkg:=TLazPackageID(ANode.Data);
//debugln('TInstallPkgSetDialog.UpdateAvailablePackages ',Pkg.IDAsString,' Pkg.PackageType=',dbgs(ord(Pkg.PackageType)));
if (not (Pkg is TLazPackage)) if (not (Pkg is TLazPackage))
or (TLazPackage(Pkg).PackageType in [lptDesignTime,lptRunAndDesignTime]) or (TLazPackage(Pkg).PackageType in [lptDesignTime,lptRunAndDesignTime])
then begin then begin
if (not PackageInInstallList(Pkg.Name)) if (not PackageInInstallList(Pkg.Name)) then begin
and (FitsAvailableFilter(Pkg.Name)) then begin
PkgName:=Pkg.IDAsString; PkgName:=Pkg.IDAsString;
if (sl.IndexOf(PkgName)<0) then if (AvailableFilterEdit.Data.IndexOf(PkgName)<0) then
sl.AddObject(PkgName,Pkg); AvailableFilterEdit.Data.AddObject(PkgName,Pkg);
end; end;
end; end;
ANode:=fAvailablePackages.FindSuccessor(ANode); ANode:=fAvailablePackages.FindSuccessor(ANode);
end; end;
sl.Sort; AvailableFilterEdit.Invalidate;
AvailableTreeView.BeginUpdate;
AvailableTreeView.Items.Clear;
for i:=0 to sl.Count-1 do begin
TVNode:=AvailableTreeView.Items.Add(nil,sl[i]);
Pkg:=TLazPackageID(sl.Objects[i]);
ImgIndex:=ImgIndexPackage;
if (Pkg is TLazPackage) then begin
APackage:=TLazPackage(Pkg);
if APackage.Installed<>pitNope then begin
// is installed and will be uninstalled
ImgIndex:=ImgIndexUninstallPackage;
end;
end;
TVNode.ImageIndex:=ImgIndex;
TVNode.SelectedIndex:=ImgIndex;
end;
AvailableTreeView.EndUpdate;
sl.Free;
end; end;
procedure TInstallPkgSetDialog.UpdateNewInstalledPackages; procedure TInstallPkgSetDialog.UpdateNewInstalledPackages;
@ -500,20 +420,16 @@ begin
TVNode:=InstallTreeView.Items.Add(nil,sl[i]); TVNode:=InstallTreeView.Items.Add(nil,sl[i]);
NewPackageID:=TLazPackageID(sl.Objects[i]); NewPackageID:=TLazPackageID(sl.Objects[i]);
ImgIndex:=ImgIndexInstallPackage; ImgIndex:=ImgIndexInstallPackage;
//debugln(['TInstallPkgSetDialog.UpdateNewInstalledPackages ',NewPackageID.IDAsString,' ',DbgSName(NewPackageID)]);
if NewPackageID is TLazPackage then begin if NewPackageID is TLazPackage then begin
APackage:=TLazPackage(NewPackageID); APackage:=TLazPackage(NewPackageID);
if APackage.Installed<>pitNope then begin if APackage.Installed<>pitNope then
// stay installed ImgIndex:=ImgIndexInstalledPackage; // stay installed
ImgIndex:=ImgIndexInstalledPackage;
end;
end; end;
TVNode.ImageIndex:=ImgIndex; TVNode.ImageIndex:=ImgIndex;
TVNode.SelectedIndex:=ImgIndex; TVNode.SelectedIndex:=ImgIndex;
end; end;
InstallTreeView.EndUpdate; InstallTreeView.EndUpdate;
sl.Free; sl.Free;
//debugln(['TInstallPkgSetDialog.UpdateNewInstalledPackages END ',InstallTreeView.Items.TopLvlCount]);
UpdateAvailablePackages; UpdateAvailablePackages;
end; end;
@ -524,8 +440,7 @@ begin
fAvailablePackages.Add(APackageID); fAvailablePackages.Add(APackageID);
end; end;
function TInstallPkgSetDialog.DependencyToStr(Dependency: TPkgDependency function TInstallPkgSetDialog.DependencyToStr(Dependency: TPkgDependency): string;
): string;
begin begin
Result:=''; Result:='';
if Dependency=nil then exit; if Dependency=nil then exit;
@ -898,11 +813,6 @@ begin
end; end;
end; end;
function TInstallPkgSetDialog.FitsAvailableFilter(PkgName: string): boolean;
begin
Result:=(AvailableFilter='') or (System.Pos(AvailableFilter,lowercase(PkgName))>0);
end;
function TInstallPkgSetDialog.GetNewInstalledPackages: TObjectList; function TInstallPkgSetDialog.GetNewInstalledPackages: TObjectList;
var var
i: Integer; i: Integer;