IDE: install pkg dlg: added filter for available

git-svn-id: trunk@31026 -
This commit is contained in:
mattias 2011-06-03 18:28:20 +00:00
parent 76c27fe938
commit 945625f788
2 changed files with 143 additions and 49 deletions

View File

@ -1,7 +1,7 @@
object InstallPkgSetDialog: TInstallPkgSetDialog
Left = 300
Left = 292
Height = 550
Top = 95
Top = 240
Width = 572
BorderStyle = bsSizeToolWin
Caption = 'InstallPkgSetDialog'
@ -21,8 +21,8 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
AnchorSideRight.Control = lblMiddle
AnchorSideBottom.Control = PkgInfoGroupBox
Left = 6
Height = 379
Top = 28
Height = 375
Top = 30
Width = 277
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 6
@ -30,14 +30,14 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
BorderSpacing.Right = 3
BorderSpacing.Bottom = 6
Caption = 'InstallPkgGroupBox'
ClientHeight = 360
ClientWidth = 273
ClientHeight = 354
ClientWidth = 269
TabOrder = 0
object ImportButton: TButton
Left = 6
Height = 25
Top = 298
Width = 261
Top = 292
Width = 257
Align = alBottom
BorderSpacing.Around = 6
Caption = 'ImportButton'
@ -47,8 +47,8 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
object ExportButton: TButton
Left = 6
Height = 25
Top = 329
Width = 261
Top = 323
Width = 257
Align = alBottom
BorderSpacing.Around = 6
Caption = 'ExportButton'
@ -57,12 +57,12 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
end
object InstallTreeView: TTreeView
Left = 6
Height = 255
Height = 249
Top = 6
Width = 261
Width = 257
Align = alClient
BorderSpacing.Around = 6
DefaultItemHeight = 17
DefaultItemHeight = 19
MultiSelect = True
ReadOnly = True
ShowButtons = False
@ -76,8 +76,8 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
object UninstallButton: TBitBtn
Left = 6
Height = 25
Top = 267
Width = 261
Top = 261
Width = 257
Align = alBottom
BorderSpacing.Around = 6
Caption = 'UninstallButton'
@ -93,8 +93,8 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = PkgInfoGroupBox
Left = 289
Height = 379
Top = 28
Height = 375
Top = 30
Width = 277
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 3
@ -102,17 +102,19 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
BorderSpacing.Right = 6
BorderSpacing.Bottom = 6
Caption = 'AvailablePkgGroupBox'
ClientHeight = 360
ClientWidth = 273
ClientHeight = 354
ClientWidth = 269
TabOrder = 1
object AvailableTreeView: TTreeView
Left = 6
Height = 317
Top = 6
Width = 261
Height = 284
Top = 33
Width = 257
Align = alClient
BorderSpacing.Around = 6
DefaultItemHeight = 17
BorderSpacing.Left = 6
BorderSpacing.Right = 6
BorderSpacing.Bottom = 6
DefaultItemHeight = 19
MultiSelect = True
ReadOnly = True
ShowButtons = False
@ -126,31 +128,46 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
object AddToInstallButton: TBitBtn
Left = 6
Height = 25
Top = 329
Width = 261
Top = 323
Width = 257
Align = alBottom
BorderSpacing.Around = 6
Caption = 'AddToInstallButton'
OnClick = AddToInstallButtonClick
TabOrder = 1
end
object AvailableFilterEdit: TEdit
Left = 6
Height = 27
Top = 6
Width = 257
Align = alTop
BorderSpacing.Left = 6
BorderSpacing.Top = 6
BorderSpacing.Right = 6
OnChange = AvailableFilterEditChange
OnEnter = AvailableFilterEditEnter
OnExit = AvailableFilterEditExit
TabOrder = 2
Text = 'AvailableFilterEdit'
end
end
object PkgInfoGroupBox: TGroupBox
AnchorSideBottom.Control = BtnPanel
Left = 0
Height = 93
Top = 413
Top = 411
Width = 572
Align = alBottom
Caption = 'PkgInfoGroupBox'
ClientHeight = 74
ClientWidth = 568
ClientHeight = 72
ClientWidth = 564
TabOrder = 2
object PkgInfoMemo: TMemo
Left = 6
Height = 62
Height = 60
Top = 6
Width = 556
Width = 552
Align = alClient
BorderSpacing.Around = 6
Lines.Strings = (
@ -163,20 +180,20 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
end
object BtnPanel: TPanel
Left = 0
Height = 44
Top = 506
Height = 46
Top = 504
Width = 572
Align = alBottom
AutoSize = True
BevelOuter = bvNone
ClientHeight = 44
ClientHeight = 46
ClientWidth = 572
TabOrder = 3
object HelpButton: TBitBtn
Left = 6
Height = 32
Height = 34
Top = 6
Width = 75
Width = 85
Align = alLeft
AutoSize = True
BorderSpacing.Around = 6
@ -188,10 +205,10 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
TabOrder = 0
end
object CancelButton: TBitBtn
Left = 162
Height = 32
Left = 102
Height = 34
Top = 6
Width = 77
Width = 89
Align = alRight
AutoSize = True
BorderSpacing.Around = 6
@ -204,10 +221,10 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
TabOrder = 1
end
object SaveAndExitButton: TBitBtn
Left = 420
Height = 32
Left = 397
Height = 34
Top = 6
Width = 146
Width = 169
Align = alRight
AutoSize = True
BorderSpacing.Around = 6
@ -254,10 +271,10 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
TabOrder = 2
end
object SaveAndRebuildButton: TBitBtn
Left = 245
Height = 32
Left = 197
Height = 34
Top = 6
Width = 169
Width = 194
Align = alRight
AutoSize = True
BorderSpacing.Around = 6
@ -306,7 +323,7 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
end
object NoteLabel: TLabel
Left = 6
Height = 16
Height = 18
Top = 6
Width = 560
Align = alTop

View File

@ -53,6 +53,7 @@ type
TInstallPkgSetDialog = class(TForm)
AddToInstallButton: TBitBtn;
AvailableFilterEdit: TEdit;
AvailableTreeView: TTreeView;
AvailablePkgGroupBox: TGroupBox;
HelpButton: TBitBtn;
@ -70,6 +71,9 @@ type
SaveAndRebuildButton: TBitBtn;
UninstallButton: TBitBtn;
procedure AddToInstallButtonClick(Sender: TObject);
procedure AvailableFilterEditChange(Sender: TObject);
procedure AvailableFilterEditEnter(Sender: TObject);
procedure AvailableFilterEditExit(Sender: TObject);
procedure AvailableTreeViewDblClick(Sender: TObject);
procedure AvailableTreeViewSelectionChanged(Sender: TObject);
procedure ExportButtonClick(Sender: TObject);
@ -84,6 +88,9 @@ type
procedure SaveAndExitButtonClick(Sender: TObject);
procedure UninstallButtonClick(Sender: TObject);
private
FIdleConnected: boolean;
FAvailableFilter: string;
fAvailablePackagesNeedUpdate: boolean;
FNewInstalledPackages: TObjectList;
FOldInstalledPackages: TPkgDependency;
FOnCheckInstallPackageList: TOnCheckInstallPackageList;
@ -96,10 +103,13 @@ type
ImgIndexUninstallPackage: integer;
ImgIndexCirclePackage: 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 AssignOldInstalledPackagesToList;
function PackageInInstallList(PkgName: string): boolean;
procedure UpdateAvailablePackages;
procedure UpdateAvailablePackages(Immediately: boolean = false);
procedure UpdateNewInstalledPackages;
procedure OnIteratePackages(APackageID: TLazPackageID);
function DependencyToStr(Dependency: TPkgDependency): string;
@ -115,6 +125,8 @@ type
function ExtractNameFromPkgID(ID: string): string;
procedure AddToInstall;
procedure AddToUninstall;
function FitsAvailableFilter(PkgName: string): boolean;
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
public
function GetNewInstalledPackages: TObjectList;
property OldInstalledPackages: TPkgDependency read FOldInstalledPackages
@ -123,6 +135,7 @@ type
property RebuildIDE: boolean read FRebuildIDE write FRebuildIDE;
property OnCheckInstallPackageList: TOnCheckInstallPackageList
read FOnCheckInstallPackageList write FOnCheckInstallPackageList;
property AvailableFilter: string read FAvailableFilter write SetAvailableFilter;
end;
function ShowEditInstallPkgsDialog(OldInstalledPackages: TPkgDependency;
@ -172,6 +185,7 @@ begin
Caption:=lisInstallUninstallPackages;
NoteLabel.Caption:=lisToInstallYouMustCompileAndRestartTheIDE;
AvailableFilterEdit.Text:=lisCEFilter;
AvailablePkgGroupBox.Caption:=lisDoNotInstall;
ExportButton.Caption:=lisExportList;
ImportButton.Caption:=lisImportList;
@ -264,6 +278,23 @@ begin
AddToInstall;
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);
begin
AddToInstall;
@ -271,6 +302,7 @@ end;
procedure TInstallPkgSetDialog.InstallPkgSetDialogDestroy(Sender: TObject);
begin
IdleConnected:=false;
ClearNewInstalledPackages;
FNewInstalledPackages.Free;
fPackages.Free;
@ -303,6 +335,21 @@ begin
AddToUninstall;
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 IdleConnected then
Application.AddOnIdleHandler(@OnIdle);
end;
procedure TInstallPkgSetDialog.SetOldInstalledPackages(
const AValue: TPkgDependency);
begin
@ -311,6 +358,23 @@ begin
AssignOldInstalledPackagesToList;
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;
var
Dependency: TPkgDependency;
@ -350,7 +414,7 @@ begin
Result:=false;
end;
procedure TInstallPkgSetDialog.UpdateAvailablePackages;
procedure TInstallPkgSetDialog.UpdateAvailablePackages(Immediately: boolean);
var
ANode: TAVLTreeNode;
sl: TStringList;
@ -361,6 +425,13 @@ var
ImgIndex: LongInt;
i: Integer;
begin
if not Immediately then begin
if csDestroying in ComponentState then exit;
fAvailablePackagesNeedUpdate:=true;
IdleConnected:=true;
exit;
end;
fAvailablePackagesNeedUpdate:=false;
fPackages.Clear;
PackageGraph.IteratePackages(fpfSearchAllExisting,@OnIteratePackages);
sl:=TStringList.Create;
@ -371,7 +442,8 @@ begin
if (not (Pkg is TLazPackage))
or (TLazPackage(Pkg).PackageType in [lptDesignTime,lptRunAndDesignTime])
then begin
if not PackageInInstallList(Pkg.Name) then begin
if (not PackageInInstallList(Pkg.Name))
and (FitsAvailableFilter(Pkg.Name)) then begin
PkgName:=Pkg.IDAsString;
if (sl.IndexOf(PkgName)<0) then
sl.AddObject(PkgName,Pkg);
@ -824,6 +896,11 @@ begin
end;
end;
function TInstallPkgSetDialog.FitsAvailableFilter(PkgName: string): boolean;
begin
Result:=(AvailableFilter='') or (System.Pos(AvailableFilter,lowercase(PkgName))>0);
end;
function TInstallPkgSetDialog.GetNewInstalledPackages: TObjectList;
var
i: Integer;