mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-09 06:18:17 +02:00
IDE: Optimize Component Palette's update logic a little.
git-svn-id: trunk@64183 -
This commit is contained in:
parent
ce1d8c1014
commit
96027c20c3
@ -235,8 +235,6 @@ type
|
|||||||
fSelected: TRegisteredComponent;
|
fSelected: TRegisteredComponent;
|
||||||
fSelectionMode: TComponentSelectionMode;
|
fSelectionMode: TComponentSelectionMode;
|
||||||
fHideControls: boolean;
|
fHideControls: boolean;
|
||||||
fUpdateLock: integer;
|
|
||||||
fChanged: boolean;
|
|
||||||
fChangeStamp: integer;
|
fChangeStamp: integer;
|
||||||
fOnClassSelected: TNotifyEvent;
|
fOnClassSelected: TNotifyEvent;
|
||||||
fLastFoundCompClassName: String;
|
fLastFoundCompClassName: String;
|
||||||
@ -247,14 +245,17 @@ type
|
|||||||
const AMethod: TMethod);
|
const AMethod: TMethod);
|
||||||
procedure CacheOrigComponentPages;
|
procedure CacheOrigComponentPages;
|
||||||
function CreatePagesFromUserOrder: Boolean;
|
function CreatePagesFromUserOrder: Boolean;
|
||||||
procedure DoChange;
|
|
||||||
procedure DoPageAddedComponent(Component: TRegisteredComponent);
|
procedure DoPageAddedComponent(Component: TRegisteredComponent);
|
||||||
procedure DoPageRemovedComponent(Component: TRegisteredComponent);
|
procedure DoPageRemovedComponent(Component: TRegisteredComponent);
|
||||||
|
procedure SetHideControls(AValue: boolean);
|
||||||
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean;
|
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean;
|
||||||
function GetSelected: TRegisteredComponent;
|
function GetSelected: TRegisteredComponent;
|
||||||
function GetMultiSelect: boolean;
|
function GetMultiSelect: boolean;
|
||||||
procedure SetSelected(const AValue: TRegisteredComponent);
|
procedure SetSelected(const AValue: TRegisteredComponent);
|
||||||
procedure SetMultiSelect(AValue: boolean);
|
procedure SetMultiSelect(AValue: boolean);
|
||||||
|
protected
|
||||||
|
FChanged: boolean;
|
||||||
|
procedure DoChange; virtual; abstract;
|
||||||
public
|
public
|
||||||
constructor Create(EnvPaletteOptions: TCompPaletteOptions);
|
constructor Create(EnvPaletteOptions: TCompPaletteOptions);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -264,9 +265,8 @@ type
|
|||||||
function AssignOrigVisibleCompNames(PageName: string;
|
function AssignOrigVisibleCompNames(PageName: string;
|
||||||
DestCompNames: TStringList): Boolean;
|
DestCompNames: TStringList): Boolean;
|
||||||
function RefUserCompsForPage(PageName: string): TRegisteredCompList;
|
function RefUserCompsForPage(PageName: string): TRegisteredCompList;
|
||||||
procedure BeginUpdate(Change: boolean);
|
procedure BeginUpdate; virtual; abstract;
|
||||||
procedure EndUpdate;
|
procedure EndUpdate; virtual; abstract;
|
||||||
function IsUpdateLocked: boolean;
|
|
||||||
procedure IncChangeStamp;
|
procedure IncChangeStamp;
|
||||||
function IndexOfPageName(const APageName: string; ACaseSensitive: Boolean): integer;
|
function IndexOfPageName(const APageName: string; ACaseSensitive: Boolean): integer;
|
||||||
function GetPage(const APageName: string; ACaseSensitive: Boolean=False): TBaseComponentPage;
|
function GetPage(const APageName: string; ACaseSensitive: Boolean=False): TBaseComponentPage;
|
||||||
@ -296,7 +296,7 @@ type
|
|||||||
property ComponentPageClass: TBaseComponentPageClass read FComponentPageClass
|
property ComponentPageClass: TBaseComponentPageClass read FComponentPageClass
|
||||||
write FComponentPageClass;
|
write FComponentPageClass;
|
||||||
property ChangeStamp: integer read fChangeStamp;
|
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 Selected: TRegisteredComponent read GetSelected write SetSelected;
|
||||||
property MultiSelect: boolean read GetMultiSelect write SetMultiSelect;
|
property MultiSelect: boolean read GetMultiSelect write SetMultiSelect;
|
||||||
property SelectionMode: TComponentSelectionMode read FSelectionMode write FSelectionMode;
|
property SelectionMode: TComponentSelectionMode read FSelectionMode write FSelectionMode;
|
||||||
@ -1028,14 +1028,6 @@ begin
|
|||||||
FHandlers[HandlerType].Remove(AMethod);
|
FHandlers[HandlerType].Remove(AMethod);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPalette.DoChange;
|
|
||||||
begin
|
|
||||||
if FUpdateLock>0 then
|
|
||||||
fChanged:=true
|
|
||||||
else
|
|
||||||
Update(False);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TBaseComponentPalette.DoPageAddedComponent(Component: TRegisteredComponent);
|
procedure TBaseComponentPalette.DoPageAddedComponent(Component: TRegisteredComponent);
|
||||||
begin
|
begin
|
||||||
fComponentCache.Add(Component);
|
fComponentCache.Add(Component);
|
||||||
@ -1048,27 +1040,11 @@ begin
|
|||||||
DoChange;
|
DoChange;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPalette.BeginUpdate(Change: boolean);
|
procedure TBaseComponentPalette.SetHideControls(AValue: boolean);
|
||||||
begin
|
begin
|
||||||
inc(FUpdateLock);
|
if FHideControls=AValue then Exit;
|
||||||
if FUpdateLock=1 then
|
FHideControls:=AValue;
|
||||||
fChanged:=Change
|
FChanged:=True;
|
||||||
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;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPalette.IncChangeStamp;
|
procedure TBaseComponentPalette.IncChangeStamp;
|
||||||
|
@ -106,6 +106,7 @@ type
|
|||||||
FOnChangeActivePage: TNotifyEvent;
|
FOnChangeActivePage: TNotifyEvent;
|
||||||
fSelectButtonIcon: TCustomBitmap;
|
fSelectButtonIcon: TCustomBitmap;
|
||||||
fUpdatingPageControl: boolean;
|
fUpdatingPageControl: boolean;
|
||||||
|
fUpdateLock: integer;
|
||||||
// Used by UpdateNoteBookButtons
|
// Used by UpdateNoteBookButtons
|
||||||
fOldActivePage: TTabSheet;
|
fOldActivePage: TTabSheet;
|
||||||
fVisiblePageIndex: integer;
|
fVisiblePageIndex: integer;
|
||||||
@ -133,11 +134,16 @@ type
|
|||||||
function SelectAButton(Button: TSpeedButton): boolean;
|
function SelectAButton(Button: TSpeedButton): boolean;
|
||||||
procedure ComponentWasAdded({%H-}ALookupRoot, {%H-}AComponent: TComponent;
|
procedure ComponentWasAdded({%H-}ALookupRoot, {%H-}AComponent: TComponent;
|
||||||
{%H-}ARegisteredComponent: TRegisteredComponent);
|
{%H-}ARegisteredComponent: TRegisteredComponent);
|
||||||
|
protected
|
||||||
|
procedure DoChange; override;
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure OnGetNonVisualCompIcon(Sender: TObject;
|
procedure OnGetNonVisualCompIcon(Sender: TObject;
|
||||||
AComponent: TComponent; var ImageList: TCustomImageList; var ImageIndex: TImageIndex);
|
AComponent: TComponent; var ImageList: TCustomImageList; var ImageIndex: TImageIndex);
|
||||||
|
procedure BeginUpdate; override;
|
||||||
|
procedure EndUpdate; override;
|
||||||
|
function IsUpdateLocked: boolean;
|
||||||
procedure Update(ForceUpdateAll: Boolean); override;
|
procedure Update(ForceUpdateAll: Boolean); override;
|
||||||
public
|
public
|
||||||
property PageControl: TPageControl read FPageControl write SetPageControl;
|
property PageControl: TPageControl read FPageControl write SetPageControl;
|
||||||
@ -820,15 +826,6 @@ begin
|
|||||||
Handled := True;
|
Handled := True;
|
||||||
end;
|
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;
|
constructor TComponentPalette.Create;
|
||||||
begin
|
begin
|
||||||
inherited Create(EnvironmentOptions.Desktop.ComponentPaletteOptions);
|
inherited Create(EnvironmentOptions.Desktop.ComponentPaletteOptions);
|
||||||
@ -853,6 +850,36 @@ begin
|
|||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
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;
|
procedure TComponentPalette.ClearButtons;
|
||||||
begin
|
begin
|
||||||
if FPageControl<>nil then
|
if FPageControl<>nil then
|
||||||
@ -902,6 +929,14 @@ begin
|
|||||||
Selected := nil;
|
Selected := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TComponentPalette.DoChange;
|
||||||
|
begin
|
||||||
|
if FUpdateLock>0 then
|
||||||
|
FChanged:=true
|
||||||
|
else
|
||||||
|
Update(False);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.ReAlignButtons(aSheet: TCustomPage);
|
procedure TComponentPalette.ReAlignButtons(aSheet: TCustomPage);
|
||||||
var
|
var
|
||||||
PageInd: Integer;
|
PageInd: Integer;
|
||||||
|
@ -38,11 +38,15 @@ uses
|
|||||||
{$IFDEF IDE_MEM_CHECK}
|
{$IFDEF IDE_MEM_CHECK}
|
||||||
MemCheck,
|
MemCheck,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Classes, SysUtils, Math, Forms, Controls, Buttons, Menus,
|
Classes, SysUtils, Math,
|
||||||
ComCtrls, ExtCtrls, LMessages, LCLIntf, LCLType, LCLProc,
|
// LCL
|
||||||
|
Forms, Controls, Menus, ComCtrls, ExtCtrls, LMessages, LCLIntf, LCLType, LCLProc,
|
||||||
|
// LazUtils
|
||||||
|
LazFileCache,
|
||||||
// IDEIntf
|
// IDEIntf
|
||||||
ProjectIntf, MenuIntf, LazIDEIntf, IDEWindowIntf, IDEImagesIntf,
|
MenuIntf, LazIDEIntf, IDEWindowIntf, IDEImagesIntf, ComponentReg,
|
||||||
LazFileCache, EnvironmentOpts, LazarusIDEStrConsts, ComponentReg, IdeCoolbarData;
|
// IDE
|
||||||
|
EnvironmentOpts, LazarusIDEStrConsts, IdeCoolbarData;
|
||||||
|
|
||||||
type
|
type
|
||||||
{ TMainIDEBar }
|
{ TMainIDEBar }
|
||||||
|
@ -3041,7 +3041,7 @@ end;
|
|||||||
|
|
||||||
procedure TPkgManager.LoadInstalledPackages;
|
procedure TPkgManager.LoadInstalledPackages;
|
||||||
begin
|
begin
|
||||||
IDEComponentPalette.BeginUpdate(true);
|
IDEComponentPalette.BeginUpdate;
|
||||||
try
|
try
|
||||||
PackageGraph.LoadStaticBasePackages;
|
PackageGraph.LoadStaticBasePackages;
|
||||||
LoadStaticCustomPackages;
|
LoadStaticCustomPackages;
|
||||||
|
Loading…
Reference in New Issue
Block a user