Separate TBaseComponentPalette and TComponentPalette more.

git-svn-id: trunk@48311 -
This commit is contained in:
juha 2015-03-12 23:01:57 +00:00
parent 1efe3b0e31
commit ac1b44a800
4 changed files with 75 additions and 105 deletions

View File

@ -25,6 +25,9 @@ interface
uses
Classes, SysUtils, typinfo, AVL_Tree, fgl,
{$IFDEF CustomIDEComps}
CustomIDEComps,
{$ENDIF}
Controls, Laz2_XMLCfg, LCLProc;
type
@ -184,21 +187,6 @@ type
TBaseComponentPalette = class
private
FHandlers: array[TComponentPaletteHandlerType] of TMethodList;
FComponentPageClass: TBaseComponentPageClass;
FOnBeginUpdate: TNotifyEvent;
FOnEndUpdate: TEndUpdatePaletteEvent;
FHideControls: boolean;
FUpdateLock: integer;
fChanged: boolean;
fChangeStamp: integer;
// Used to find names that differ in character case only.
fOrigPageHelper: TStringList;
procedure AddHandler(HandlerType: TComponentPaletteHandlerType;
const AMethod: TMethod; AsLast: boolean = false);
procedure RemoveHandler(HandlerType: TComponentPaletteHandlerType;
const AMethod: TMethod);
protected
// List of pages, created based on user ordered and original pages.
fPages: TBaseComponentPageList;
// List of all components in all pages.
@ -213,15 +201,25 @@ type
// Lists have page names. Object holds another StringList for component names.
fOrigComponentPageCache: TStringList; // Original
fUserComponentPageCache: TStringList; // User ordered
// Used to find names that differ in character case only.
fOrigPageHelper: TStringList;
fHandlers: array[TComponentPaletteHandlerType] of TMethodList;
fComponentPageClass: TBaseComponentPageClass;
fHideControls: boolean;
fUpdateLock: integer;
fChanged: boolean;
fChangeStamp: integer;
procedure AddHandler(HandlerType: TComponentPaletteHandlerType;
const AMethod: TMethod; AsLast: boolean = false);
procedure RemoveHandler(HandlerType: TComponentPaletteHandlerType;
const AMethod: TMethod);
procedure CacheOrigComponentPages;
function CreatePagesFromUserOrder: Boolean;
procedure DoChange; virtual;
procedure OnPageAddedComponent({%H-}Component: TRegisteredComponent); virtual;
procedure OnPageRemovedComponent({%H-}Page: TBaseComponentPage;
{%H-}Component: TRegisteredComponent); virtual;
procedure OnComponentVisibleChanged({%H-}AComponent: TRegisteredComponent); virtual;
procedure OnPageVisibleChanged({%H-}APage: TBaseComponentPage); virtual;
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean; virtual;
procedure DoChange;
procedure DoPageAddedComponent(Component: TRegisteredComponent);
procedure DoPageRemovedComponent(Component: TRegisteredComponent);
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean;
protected
function GetSelected: TRegisteredComponent; virtual;
procedure SetSelected(const AValue: TRegisteredComponent); virtual; abstract;
public
@ -235,7 +233,7 @@ type
procedure EndUpdate;
function IsUpdateLocked: boolean;
procedure IncChangeStamp;
procedure DoAfterComponentAdded; virtual;
procedure DoAfterComponentAdded;
function IndexOfPageName(const APageName: string): integer;
function IndexOfPageWithName(const APageName: string): integer;
function GetPage(const APageName: string; aCaseSens: Boolean = False): TBaseComponentPage;
@ -243,12 +241,9 @@ type
procedure RemoveComponent(AComponent: TRegisteredComponent);
function FindComponent(const CompClassName: string): TRegisteredComponent;
function CreateNewClassName(const Prefix: string): string;
procedure Update(ForceUpdateAll: Boolean); virtual; abstract;
procedure Update(ForceUpdateAll: Boolean); virtual;
procedure IterateRegisteredClasses(Proc: TGetComponentClassEvent);
{$IFDEF CustomIDEComps}
procedure RegisterCustomIDEComponents(
const RegisterProc: RegisterUnitComponentProc); virtual; abstract;
{$ENDIF}
// Registered handlers
procedure RemoveAllHandlersOfObject(AnObject: TObject);
procedure AddHandlerUpdateVisible(
const OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent;
@ -259,6 +254,9 @@ type
const OnComponentAddedEvent: TComponentAddedEvent);
procedure RemoveHandlerComponentAdded(
const OnComponentAddedEvent: TComponentAddedEvent);
{$IFDEF CustomIDEComps}
procedure RegisterCustomIDEComponents(const RegisterProc: RegisterUnitComponentProc);
{$ENDIF}
public
property Pages: TBaseComponentPageList read fPages;
property Comps: TRegisteredComponentList read fComps;
@ -642,14 +640,14 @@ procedure TBaseComponentPage.SetVisible(const AValue: boolean);
begin
if FVisible=AValue then exit;
FVisible:=AValue;
if (FPalette<>nil) then
FPalette.OnPageVisibleChanged(Self);
//if (FPalette<>nil) then
// FPalette.OnPageVisibleChanged(Self);
end;
procedure TBaseComponentPage.OnComponentVisibleChanged(AComponent: TRegisteredComponent);
begin
if FPalette<>nil then
FPalette.OnComponentVisibleChanged(AComponent);
//if FPalette<>nil then
// FPalette.OnComponentVisibleChanged(AComponent);
end;
{ TBaseComponentPalette }
@ -844,6 +842,11 @@ begin
Result := Nil;
end;
function TBaseComponentPalette.GetSelected: TRegisteredComponent;
begin
result := nil;
end;
procedure TBaseComponentPalette.AddHandler(HandlerType: TComponentPaletteHandlerType;
const AMethod: TMethod; AsLast: boolean);
begin
@ -852,11 +855,6 @@ begin
FHandlers[HandlerType].Add(AMethod,AsLast);
end;
function TBaseComponentPalette.GetSelected: TRegisteredComponent;
begin
result := nil;
end;
procedure TBaseComponentPalette.RemoveHandler(HandlerType: TComponentPaletteHandlerType;
const AMethod: TMethod);
begin
@ -871,27 +869,18 @@ begin
Update(False);
end;
procedure TBaseComponentPalette.OnPageAddedComponent(Component: TRegisteredComponent);
procedure TBaseComponentPalette.DoPageAddedComponent(Component: TRegisteredComponent);
begin
fComponentCache.Add(Component);
DoChange;
end;
procedure TBaseComponentPalette.OnPageRemovedComponent(Page: TBaseComponentPage;
Component: TRegisteredComponent);
procedure TBaseComponentPalette.DoPageRemovedComponent(Component: TRegisteredComponent);
begin
fComponentCache.Remove(Component);
DoChange;
end;
procedure TBaseComponentPalette.OnComponentVisibleChanged(AComponent: TRegisteredComponent);
begin
;
end;
procedure TBaseComponentPalette.OnPageVisibleChanged(APage: TBaseComponentPage);
begin
;
end;
function TBaseComponentPalette.VoteCompVisibility(AComponent: TRegisteredComponent): Boolean;
var
i, Vote: Integer;
@ -984,7 +973,7 @@ begin
and (ComparePriority(NewPriority,Comps[InsertIndex].GetPriority)<=0) do
inc(InsertIndex);
fComps.Insert(InsertIndex,NewComponent);
OnPageAddedComponent(NewComponent);
DoPageAddedComponent(NewComponent);
if NewComponent.FOrigPageName = '' then Exit;
@ -1011,7 +1000,7 @@ procedure TBaseComponentPalette.RemoveComponent(AComponent: TRegisteredComponent
begin
fComps.Remove(AComponent);
AComponent.RealPage:=nil;
//ToDo: fix OnPageRemovedComponent(AComponent.RealPage,AComponent);
//ToDo: fix DoPageRemovedComponent(AComponent);
end;
function TBaseComponentPalette.FindComponent(const CompClassName: string): TRegisteredComponent;
@ -1041,6 +1030,14 @@ begin
end;
end;
procedure TBaseComponentPalette.Update(ForceUpdateAll: Boolean);
begin
fUserOrder.SortPagesAndCompsUserOrder;
CreatePagesFromUserOrder;
//for Viewer in Viewers do
// Viewer.Update(ForceUpdateAll);
end;
procedure TBaseComponentPalette.IterateRegisteredClasses(Proc: TGetComponentClassEvent);
var
i: Integer;
@ -1057,6 +1054,8 @@ begin
FHandlers[HandlerType].RemoveAllMethodsOfObject(AnObject);
end;
// Add / Remove handlers
procedure TBaseComponentPalette.AddHandlerUpdateVisible(
const OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent; AsLast: boolean);
begin
@ -1081,5 +1080,13 @@ begin
RemoveHandler(cphtComponentAdded,TMethod(OnComponentAddedEvent));
end;
{$IFDEF CustomIDEComps}
procedure TBaseComponentPalette.RegisterCustomIDEComponents(
const RegisterProc: RegisterUnitComponentProc);
begin
CustomIDEComps.RegisterCustomComponents(RegisterProc);
end;
{$ENDIF}
end.

View File

@ -41,9 +41,6 @@ uses
Classes, SysUtils, AVL_Tree, fgl,
Controls, Forms, Graphics, ComCtrls, Buttons, Menus, ExtCtrls,
FileUtil, LazFileCache, PropEdits, LCLProc, FormEditingIntf, LazIDEIntf,
{$IFDEF CustomIDEComps}
CustomIDEComps,
{$ENDIF}
MainBase, LazarusIDEStrConsts, ComponentReg, DesignerProcs, PackageDefs, EnvironmentOpts;
const
@ -116,10 +113,8 @@ type
function FindCompByButton(Button: TSpeedButton): TRegisteredComponent;
function FindPkgCompByButton(Button: TComponent): TPkgComponent;
function IndexOfPageComponent(AComponent: TComponent): integer;
// Component layout :
procedure ReAlignButtons(aSheet: TCustomPage);
procedure UpdateNoteBookButtons(ForceUpdateAll: Boolean);
procedure RemoveUnneededPage(aSheet: TCustomPage);
procedure SetPageControl(const AValue: TPageControl);
procedure SelectionToolClick(Sender: TObject);
@ -135,24 +130,15 @@ type
function GetUnregisteredIcon: TCustomBitmap;
function GetSelectButtonIcon: TCustomBitmap;
function SelectAButton(Button: TSpeedButton): boolean;
protected
procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
procedure OnPageRemovedComponent(Page: TBaseComponentPage;
Component: TRegisteredComponent); override;
procedure CheckComponentDesignerVisible(AComponent: TComponent;
var Invisible: boolean);
procedure ComponentWasAdded;
procedure CheckComponentDesignerVisible(AComponent: TComponent; var Invisible: boolean);
procedure SetSelected(const AValue: TRegisteredComponent); override;
function GetSelected: TRegisteredComponent; override;
public
constructor Create;
destructor Destroy; override;
procedure DoAfterComponentAdded; override;
procedure OnGetNonVisualCompIcon(Sender: TObject;
AComponent: TComponent; var Icon: TCustomBitmap);
{$IFDEF CustomIDEComps}
procedure RegisterCustomIDEComponents(
const RegisterProc: RegisterUnitComponentProc); override;
{$ENDIF}
procedure Update(ForceUpdateAll: Boolean); override;
public
property PageControl: TPageControl read FPageControl write SetPageControl;
@ -809,21 +795,9 @@ begin
Handled := True;
end;
procedure TComponentPalette.OnPageAddedComponent(Component: TRegisteredComponent);
begin
fComponentCache.Add(Component);
inherited OnPageAddedComponent(Component);
end;
procedure TComponentPalette.OnPageRemovedComponent(Page: TBaseComponentPage;
Component: TRegisteredComponent);
begin
fComponentCache.Remove(Component);
inherited OnPageRemovedComponent(Page, Component);
end;
procedure TComponentPalette.Update(ForceUpdateAll: Boolean);
begin
inherited Update(ForceUpdateAll);
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.Update, calling UpdateNoteBookButtons, fUpdatingPageControl=', fUpdatingPageControl]);
{$ENDIF}
@ -852,6 +826,8 @@ begin
fComponentButtons:=TComponentButtonMap.Create;
fComponentButtons.Sorted:=True;
OnComponentIsInvisible:=@CheckComponentDesignerVisible;
{IDEComponentPalette.} AddHandlerComponentAdded(@ComponentWasAdded);
ComponentPageClass := TComponentPage; // Used by CreatePagesFromUserOrder
end;
destructor TComponentPalette.Destroy;
@ -885,13 +861,6 @@ begin
FPageControl.EnableAlign;
end;
procedure TComponentPalette.DoAfterComponentAdded;
begin
inherited DoAfterComponentAdded;
if not (ssShift in GetKeyShiftState) and (SelectionMode = csmSingle) then
Selected := nil;
end;
function TComponentPalette.GetUnregisteredIcon: TCustomBitmap;
begin
if fUnregisteredIcon = nil then
@ -919,6 +888,12 @@ begin
Result := (Selected = NewComponent);
end;
procedure TComponentPalette.ComponentWasAdded;
begin
if not (ssShift in GetKeyShiftState) and (SelectionMode = csmSingle) then
Selected := nil;
end;
procedure TComponentPalette.ReAlignButtons(aSheet: TCustomPage);
var
PageInd: Integer;
@ -966,11 +941,7 @@ begin
FPageControl.DisableAlign;
try
fOldActivePage:=FPageControl.ActivePage;
fUserOrder.SortPagesAndCompsUserOrder;
ComponentPageClass := TComponentPage; // Used by CreatePagesFromUserOrder
CreatePagesFromUserOrder;
CreatePopupMenu;
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.UpdateNoteBookButtons: FPageCount before=', FPageControl.PageCount]);
{$ENDIF}
@ -991,8 +962,8 @@ begin
fVisiblePageIndex := 0;
for i := 0 to Pages.Count-1 do
begin
// fPages and fUserOrder.ComponentPages are now synchronized, same index applies.
Assert(Pages[i].PageName=fUserOrder.ComponentPages[i],
// Pages and UserOrder.ComponentPages are now synchronized, same index applies.
Assert(Pages[i].PageName=UserOrder.ComponentPages[i],
'UpdateNoteBookButtons: Page names do not match.');
Pg := TComponentPage(Pages[i]);
{$IFDEF LCLQt} // Qt has some problems in moving existing tabs!
@ -1001,7 +972,7 @@ begin
Pg.RemoveSheet;
end;
{$ENDIF}
Pg.InsertVisiblePage(TStringList(fUserOrder.ComponentPages.Objects[i]));
Pg.InsertVisiblePage(TStringList(UserOrder.ComponentPages.Objects[i]));
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.UpdateNoteBookButtons: PageIndex=', i, ' PageName=',Pages[i].PageName]);
{$ENDIF}
@ -1073,13 +1044,5 @@ begin
Result := FindCompByButton(Button as TSpeedButton) as TPkgComponent;
end;
{$IFDEF CustomIDEComps}
procedure TComponentPalette.RegisterCustomIDEComponents(
const RegisterProc: RegisterUnitComponentProc);
begin
CustomIDEComps.RegisterCustomComponents(RegisterProc);
end;
{$ENDIF}
end.

View File

@ -1523,6 +1523,7 @@ begin
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.Create IDE COMPONENTS');{$ENDIF}
// load installed packages
TComponentPalette(IDEComponentPalette).PageControl:=MainIDEBar.ComponentPageControl;
PkgBoss.LoadInstalledPackages;
EditorMacroListViewer.LoadGlobalInfo; // Must be after packages are loaded/registered.
@ -8575,7 +8576,7 @@ var
Grid: TOICustomPropertyGrid;
Row: TOIPropertyGridRow;
begin
TComponentPalette(IDEComponentPalette).DoAfterComponentAdded;
IDEComponentPalette.DoAfterComponentAdded;
if EnvironmentOptions.CreateComponentFocusNameProperty
and (ObjectInspector1<>nil) then begin
if (ObjectInspector1.ShowFavorites) and (EnvironmentOptions.SwitchToFavoritesOITab) then

View File

@ -3078,7 +3078,6 @@ begin
PackageGraph.LoadStaticBasePackages;
LoadStaticCustomPackages;
LoadAutoInstallPackages;
TComponentPalette(IDEComponentPalette).PageControl:=MainIDEBar.ComponentPageControl;
finally
IDEComponentPalette.EndUpdate;
end;