mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 16:19:36 +02:00
Separate TBaseComponentPalette and TComponentPalette more.
git-svn-id: trunk@48311 -
This commit is contained in:
parent
1efe3b0e31
commit
ac1b44a800
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -3078,7 +3078,6 @@ begin
|
||||
PackageGraph.LoadStaticBasePackages;
|
||||
LoadStaticCustomPackages;
|
||||
LoadAutoInstallPackages;
|
||||
TComponentPalette(IDEComponentPalette).PageControl:=MainIDEBar.ComponentPageControl;
|
||||
finally
|
||||
IDEComponentPalette.EndUpdate;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user