diff --git a/components/ideintf/componentreg.pas b/components/ideintf/componentreg.pas index d28cbdb616..e157d2038f 100644 --- a/components/ideintf/componentreg.pas +++ b/components/ideintf/componentreg.pas @@ -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; diff --git a/ide/componentpalette.pas b/ide/componentpalette.pas index 3228b7eb64..73deaaaa91 100644 --- a/ide/componentpalette.pas +++ b/ide/componentpalette.pas @@ -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; diff --git a/ide/mainbar.pas b/ide/mainbar.pas index e21fb857c7..2c9eb8e585 100644 --- a/ide/mainbar.pas +++ b/ide/mainbar.pas @@ -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 } diff --git a/packager/pkgmanager.pas b/packager/pkgmanager.pas index a41b8ad86b..12d885e4d6 100644 --- a/packager/pkgmanager.pas +++ b/packager/pkgmanager.pas @@ -3041,7 +3041,7 @@ end; procedure TPkgManager.LoadInstalledPackages; begin - IDEComponentPalette.BeginUpdate(true); + IDEComponentPalette.BeginUpdate; try PackageGraph.LoadStaticBasePackages; LoadStaticCustomPackages;