mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-28 03:19:07 +01:00
IDE: install pkg dlg: added filter for available
git-svn-id: trunk@31026 -
This commit is contained in:
parent
76c27fe938
commit
945625f788
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user