IDE: Optimize Component Palette's update logic a little.

git-svn-id: trunk@64183 -
This commit is contained in:
juha 2020-12-08 19:34:42 +00:00
parent ce1d8c1014
commit 96027c20c3
4 changed files with 64 additions and 49 deletions

View File

@ -235,8 +235,6 @@ type
fSelected: TRegisteredComponent;
fSelectionMode: TComponentSelectionMode;
fHideControls: boolean;
fUpdateLock: integer;
fChanged: boolean;
fChangeStamp: integer;
fOnClassSelected: TNotifyEvent;
fLastFoundCompClassName: String;
@ -247,14 +245,17 @@ type
const AMethod: TMethod);
procedure CacheOrigComponentPages;
function CreatePagesFromUserOrder: Boolean;
procedure DoChange;
procedure DoPageAddedComponent(Component: TRegisteredComponent);
procedure DoPageRemovedComponent(Component: TRegisteredComponent);
procedure SetHideControls(AValue: boolean);
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean;
function GetSelected: TRegisteredComponent;
function GetMultiSelect: boolean;
procedure SetSelected(const AValue: TRegisteredComponent);
procedure SetMultiSelect(AValue: boolean);
protected
FChanged: boolean;
procedure DoChange; virtual; abstract;
public
constructor Create(EnvPaletteOptions: TCompPaletteOptions);
destructor Destroy; override;
@ -264,9 +265,8 @@ type
function AssignOrigVisibleCompNames(PageName: string;
DestCompNames: TStringList): Boolean;
function RefUserCompsForPage(PageName: string): TRegisteredCompList;
procedure BeginUpdate(Change: boolean);
procedure EndUpdate;
function IsUpdateLocked: boolean;
procedure BeginUpdate; virtual; abstract;
procedure EndUpdate; virtual; abstract;
procedure IncChangeStamp;
function IndexOfPageName(const APageName: string; ACaseSensitive: Boolean): integer;
function GetPage(const APageName: string; ACaseSensitive: Boolean=False): TBaseComponentPage;
@ -296,7 +296,7 @@ type
property ComponentPageClass: TBaseComponentPageClass read FComponentPageClass
write FComponentPageClass;
property ChangeStamp: integer read fChangeStamp;
property HideControls: boolean read FHideControls write FHideControls;
property HideControls: boolean read FHideControls write SetHideControls;
property Selected: TRegisteredComponent read GetSelected write SetSelected;
property MultiSelect: boolean read GetMultiSelect write SetMultiSelect;
property SelectionMode: TComponentSelectionMode read FSelectionMode write FSelectionMode;
@ -1028,14 +1028,6 @@ begin
FHandlers[HandlerType].Remove(AMethod);
end;
procedure TBaseComponentPalette.DoChange;
begin
if FUpdateLock>0 then
fChanged:=true
else
Update(False);
end;
procedure TBaseComponentPalette.DoPageAddedComponent(Component: TRegisteredComponent);
begin
fComponentCache.Add(Component);
@ -1048,27 +1040,11 @@ begin
DoChange;
end;
procedure TBaseComponentPalette.BeginUpdate(Change: boolean);
procedure TBaseComponentPalette.SetHideControls(AValue: boolean);
begin
inc(FUpdateLock);
if FUpdateLock=1 then
fChanged:=Change
else
fChanged:=fChanged or Change;
end;
procedure TBaseComponentPalette.EndUpdate;
begin
if FUpdateLock<=0 then
raise Exception.Create('TBaseComponentPalette.EndUpdate');
dec(FUpdateLock);
if (FUpdateLock=0) and fChanged then
Update(False);
end;
function TBaseComponentPalette.IsUpdateLocked: boolean;
begin
Result:=FUpdateLock>0;
if FHideControls=AValue then Exit;
FHideControls:=AValue;
FChanged:=True;
end;
procedure TBaseComponentPalette.IncChangeStamp;

View File

@ -106,6 +106,7 @@ type
FOnChangeActivePage: TNotifyEvent;
fSelectButtonIcon: TCustomBitmap;
fUpdatingPageControl: boolean;
fUpdateLock: integer;
// Used by UpdateNoteBookButtons
fOldActivePage: TTabSheet;
fVisiblePageIndex: integer;
@ -133,11 +134,16 @@ type
function SelectAButton(Button: TSpeedButton): boolean;
procedure ComponentWasAdded({%H-}ALookupRoot, {%H-}AComponent: TComponent;
{%H-}ARegisteredComponent: TRegisteredComponent);
protected
procedure DoChange; override;
public
constructor Create;
destructor Destroy; override;
procedure OnGetNonVisualCompIcon(Sender: TObject;
AComponent: TComponent; var ImageList: TCustomImageList; var ImageIndex: TImageIndex);
procedure BeginUpdate; override;
procedure EndUpdate; override;
function IsUpdateLocked: boolean;
procedure Update(ForceUpdateAll: Boolean); override;
public
property PageControl: TPageControl read FPageControl write SetPageControl;
@ -820,15 +826,6 @@ begin
Handled := True;
end;
procedure TComponentPalette.Update(ForceUpdateAll: Boolean);
begin
inherited Update(ForceUpdateAll);
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.Update, calling UpdateNoteBookButtons, fUpdatingPageControl=', fUpdatingPageControl]);
{$ENDIF}
UpdateNoteBookButtons(ForceUpdateAll);
end;
constructor TComponentPalette.Create;
begin
inherited Create(EnvironmentOptions.Desktop.ComponentPaletteOptions);
@ -853,6 +850,36 @@ begin
inherited Destroy;
end;
procedure TComponentPalette.BeginUpdate;
begin
inc(FUpdateLock);
end;
procedure TComponentPalette.EndUpdate;
begin
if FUpdateLock<=0 then
raise Exception.Create('TBaseComponentPalette.EndUpdate: FUpdateLock<=0');
dec(FUpdateLock);
if (FUpdateLock=0) and FChanged then
Update(False);
end;
function TComponentPalette.IsUpdateLocked: boolean;
begin
Result:=FUpdateLock>0;
end;
procedure TComponentPalette.Update(ForceUpdateAll: Boolean);
begin
if not FChanged then Exit;
inherited Update(ForceUpdateAll);
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.Update, calling UpdateNoteBookButtons, fUpdatingPageControl=', fUpdatingPageControl]);
{$ENDIF}
UpdateNoteBookButtons(ForceUpdateAll);
FChanged:=False;
end;
procedure TComponentPalette.ClearButtons;
begin
if FPageControl<>nil then
@ -902,6 +929,14 @@ begin
Selected := nil;
end;
procedure TComponentPalette.DoChange;
begin
if FUpdateLock>0 then
FChanged:=true
else
Update(False);
end;
procedure TComponentPalette.ReAlignButtons(aSheet: TCustomPage);
var
PageInd: Integer;

View File

@ -38,11 +38,15 @@ uses
{$IFDEF IDE_MEM_CHECK}
MemCheck,
{$ENDIF}
Classes, SysUtils, Math, Forms, Controls, Buttons, Menus,
ComCtrls, ExtCtrls, LMessages, LCLIntf, LCLType, LCLProc,
Classes, SysUtils, Math,
// LCL
Forms, Controls, Menus, ComCtrls, ExtCtrls, LMessages, LCLIntf, LCLType, LCLProc,
// LazUtils
LazFileCache,
// IDEIntf
ProjectIntf, MenuIntf, LazIDEIntf, IDEWindowIntf, IDEImagesIntf,
LazFileCache, EnvironmentOpts, LazarusIDEStrConsts, ComponentReg, IdeCoolbarData;
MenuIntf, LazIDEIntf, IDEWindowIntf, IDEImagesIntf, ComponentReg,
// IDE
EnvironmentOpts, LazarusIDEStrConsts, IdeCoolbarData;
type
{ TMainIDEBar }

View File

@ -3041,7 +3041,7 @@ end;
procedure TPkgManager.LoadInstalledPackages;
begin
IDEComponentPalette.BeginUpdate(true);
IDEComponentPalette.BeginUpdate;
try
PackageGraph.LoadStaticBasePackages;
LoadStaticCustomPackages;