mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-28 18:40:52 +02:00
IDE: Cache also user ordered pages in component palette, use it in UpdateVisible method.
git-svn-id: trunk@47005 -
This commit is contained in:
parent
c7486b1bf9
commit
76602fb2f4
@ -218,6 +218,7 @@ type
|
||||
procedure AssignOrigCompsForPage(DestComps: TStringList;
|
||||
PageName: string); virtual; abstract;
|
||||
function RefOrigCompsForPage(PageName: string): TStringList; virtual; abstract;
|
||||
function RefUserCompsForPage(PageName: string): TStringList; virtual; abstract;
|
||||
procedure BeginUpdate(Change: boolean);
|
||||
procedure EndUpdate;
|
||||
function IsUpdateLocked: boolean;
|
||||
@ -590,14 +591,26 @@ procedure TBaseComponentPage.UpdateVisible;
|
||||
var
|
||||
i: Integer;
|
||||
HasVisibleComponents: Boolean;
|
||||
sl: TStringList;
|
||||
Comp: TRegisteredComponent;
|
||||
begin
|
||||
if Palette = nil then Exit;
|
||||
if PageName = '' then begin
|
||||
Visible := False;
|
||||
Exit;
|
||||
end;
|
||||
HasVisibleComponents:=false;
|
||||
for i:=0 to Palette.Comps.Count-1 do
|
||||
if (Palette.Comps[i].RealPage = Self) then
|
||||
if Palette.VoteCompVisibility(Palette.Comps[i]) then
|
||||
HasVisibleComponents:=true;
|
||||
Visible:=HasVisibleComponents and (PageName<>'');
|
||||
sl := Palette.RefUserCompsForPage(FPageName);
|
||||
Assert(sl.Count > 0, 'TBaseComponentPage.UpdateVisible: ComponentCount = 0');
|
||||
for i:=0 to sl.Count-1 do begin
|
||||
Comp := sl.Objects[i] as TRegisteredComponent;
|
||||
if Palette.VoteCompVisibility(Comp) then
|
||||
begin
|
||||
HasVisibleComponents:=true;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
Visible:=HasVisibleComponents;
|
||||
end;
|
||||
|
||||
function TBaseComponentPage.GetScrollBox: TScrollBox;
|
||||
|
@ -86,10 +86,13 @@ type
|
||||
procedure PalettePopupMenuPopup(Sender: TObject);
|
||||
procedure PopupMenuPopup(Sender: TObject);
|
||||
private
|
||||
// Tree of TRegisteredComponent sorted for componentclass
|
||||
// Component cache, a tree of TRegisteredComponent sorted for componentclass
|
||||
fComponentCache: TAVLTree;
|
||||
// List of original page names. Object holds another StringList for component names.
|
||||
fComponentPageCache: TStringList;
|
||||
// Two page caches, one for original pages, one for user ordered pages.
|
||||
// Lists have page names. Object holds another StringList for component names.
|
||||
fOrigComponentPageCache: TStringList; // Original
|
||||
fUserComponentPageCache: TStringList; // User ordered
|
||||
//
|
||||
FPageControl: TPageControl;
|
||||
fNoteBookNeedsUpdate: boolean;
|
||||
FOnOpenPackage: TNotifyEvent;
|
||||
@ -117,6 +120,7 @@ type
|
||||
protected
|
||||
procedure AssignOrigCompsForPage(DestComps: TStringList; PageName: string); override;
|
||||
function RefOrigCompsForPage(PageName: string): TStringList; override;
|
||||
function RefUserCompsForPage(PageName: string): TStringList; override;
|
||||
procedure DoBeginUpdate; override;
|
||||
procedure DoEndUpdate(Changed: boolean); override;
|
||||
procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
|
||||
@ -552,15 +556,15 @@ var
|
||||
PgName: string;
|
||||
Comp: TRegisteredComponent;
|
||||
begin
|
||||
if fComponentPageCache.Count > 0 then Exit; // Cache only once.
|
||||
if fOrigComponentPageCache.Count > 0 then Exit; // Cache only once.
|
||||
for PageI := 0 to fOrigPagePriorities.Count-1 do
|
||||
begin
|
||||
PgName:=fOrigPagePriorities.Keys[PageI];
|
||||
Assert((PgName <> '') and not fComponentPageCache.Find(PgName, CompI),
|
||||
Assert((PgName <> '') and not fOrigComponentPageCache.Find(PgName, CompI),
|
||||
Format('CacheComponentPages: %s already cached.', [PgName]));
|
||||
// Add a cache StringList for this page name.
|
||||
sl := TStringList.Create;
|
||||
fComponentPageCache.AddObject(PgName, sl);
|
||||
fOrigComponentPageCache.AddObject(PgName, sl);
|
||||
// Find all components for this page and add them to cache.
|
||||
for CompI := 0 to fComps.Count-1 do begin
|
||||
Comp := fComps[CompI];
|
||||
@ -575,8 +579,8 @@ var
|
||||
sl: TStringList;
|
||||
i: Integer;
|
||||
begin
|
||||
if fComponentPageCache.Find(PageName, i) then begin
|
||||
sl := fComponentPageCache.Objects[i] as TStringList;
|
||||
if fOrigComponentPageCache.Find(PageName, i) then begin
|
||||
sl := fOrigComponentPageCache.Objects[i] as TStringList;
|
||||
DestComps.Assign(sl);
|
||||
end
|
||||
else
|
||||
@ -587,8 +591,18 @@ function TComponentPalette.RefOrigCompsForPage(PageName: string): TStringList;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
if fComponentPageCache.Find(PageName, i) then
|
||||
Result := fComponentPageCache.Objects[i] as TStringList
|
||||
if fOrigComponentPageCache.Find(PageName, i) then
|
||||
Result := fOrigComponentPageCache.Objects[i] as TStringList
|
||||
else
|
||||
Result := Nil;
|
||||
end;
|
||||
|
||||
function TComponentPalette.RefUserCompsForPage(PageName: string): TStringList;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
if fUserComponentPageCache.Find(PageName, i) then
|
||||
Result := fUserComponentPageCache.Objects[i] as TStringList
|
||||
else
|
||||
Result := Nil;
|
||||
end;
|
||||
@ -621,21 +635,22 @@ begin
|
||||
fUserOrder:=TCompPaletteUserOrder.Create(Self);
|
||||
fUserOrder.Options:=EnvironmentOptions.ComponentPaletteOptions;
|
||||
fComponentCache:=TAVLTree.Create(@CompareRegisteredComponents);
|
||||
fComponentPageCache:=TStringList.Create;
|
||||
fComponentPageCache.Sorted:=True;
|
||||
fOrigComponentPageCache:=TStringList.Create;
|
||||
fOrigComponentPageCache.OwnsObjects:=True;
|
||||
fOrigComponentPageCache.Sorted:=True;
|
||||
fUserComponentPageCache:=TStringList.Create;
|
||||
fUserComponentPageCache.OwnsObjects:=True;
|
||||
fUserComponentPageCache.Sorted:=True;
|
||||
OnComponentIsInvisible:=@CheckComponentDesignerVisible;
|
||||
end;
|
||||
|
||||
destructor TComponentPalette.Destroy;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
if OnComponentIsInvisible=@CheckComponentDesignerVisible then
|
||||
OnComponentIsInvisible:=nil;
|
||||
PageControl:=nil;
|
||||
for i := 0 to fComponentPageCache.Count-1 do
|
||||
fComponentPageCache.Objects[i].Free; // Free also the contained StringList.
|
||||
FreeAndNil(fComponentPageCache);
|
||||
FreeAndNil(fUserComponentPageCache);
|
||||
FreeAndNil(fOrigComponentPageCache);
|
||||
FreeAndNil(fComponentCache);
|
||||
FreeAndNil(fUserOrder);
|
||||
FreeAndNil(fUnregisteredIcon);
|
||||
@ -671,16 +686,20 @@ var
|
||||
i, j: Integer;
|
||||
PgName: String;
|
||||
Pg: TBaseComponentPage;
|
||||
CompNames: TStringList;
|
||||
CompNames, UserComps: TStringList;
|
||||
Comp: TRegisteredComponent;
|
||||
begin
|
||||
Result := True;
|
||||
for i:=0 to fPages.Count-1 do
|
||||
fPages[i].Free;
|
||||
fPages.Clear;
|
||||
fUserComponentPageCache.Clear;
|
||||
for i := 0 to fUserOrder.ComponentPages.Count-1 do
|
||||
begin
|
||||
PgName := fUserOrder.ComponentPages[i];
|
||||
// New cache page
|
||||
UserComps := TStringList.Create;
|
||||
fUserComponentPageCache.AddObject(PgName, UserComps);
|
||||
// Create a new page
|
||||
Pg:=TBaseComponentPage.Create(PgName);
|
||||
fPages.Add(Pg);
|
||||
@ -692,8 +711,10 @@ begin
|
||||
for j := 0 to CompNames.Count-1 do
|
||||
begin
|
||||
Comp := FindComponent(CompNames[j]);
|
||||
if Assigned(Comp) then
|
||||
Comp.RealPage := Pg;
|
||||
Assert(Assigned(Comp),
|
||||
Format('TComponentPalette.CreatePagesFromUserOrder: Comp %s not found.',[CompNames[j]]));
|
||||
Comp.RealPage := Pg;
|
||||
UserComps.AddObject(CompNames[j], Comp);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
@ -219,14 +219,11 @@ begin
|
||||
begin
|
||||
PgName := PagesListBox.Items[i];
|
||||
UserComps := PagesListBox.Items.Objects[i] as TStringList;
|
||||
Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: UserComps not assigned');
|
||||
Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: No UserComps for '+PgName);
|
||||
Pg := IDEComponentPalette.GetPage(PgName);
|
||||
if Assigned(Pg) then // Can be Nil if this page was added or renamed.
|
||||
begin
|
||||
// Collect original components from this page
|
||||
OrigComps := IDEComponentPalette.RefOrigCompsForPage(PgName);
|
||||
Assert(Assigned(OrigComps), 'TCompPaletteOptionsFrame.WriteComponents: OrigComps not assigned');
|
||||
end
|
||||
OrigComps := IDEComponentPalette.RefOrigCompsForPage(PgName)
|
||||
else
|
||||
OrigComps := Nil;
|
||||
// Differs from original order -> add configuration for components
|
||||
|
Loading…
Reference in New Issue
Block a user