mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-25 01:08:21 +02:00
IDE: Use the cache when writing component palette configuration.
git-svn-id: trunk@47001 -
This commit is contained in:
parent
4ccb281acd
commit
8b4eac20a9
@ -199,7 +199,6 @@ type
|
||||
fComps: TRegisteredComponentList;
|
||||
// New pages added and their priorities, ordered by priority.
|
||||
fOrigPagePriorities: TPagePriorityList;
|
||||
procedure AssignCompsForPage(DestComps: TStringList; PageName: string); virtual; abstract;
|
||||
procedure DoChange; virtual;
|
||||
procedure DoBeginUpdate; virtual;
|
||||
procedure DoEndUpdate(Changed: boolean); virtual;
|
||||
@ -218,6 +217,8 @@ type
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Clear;
|
||||
procedure AssignCompsForPage(DestComps: TStringList; PageName: string); virtual; abstract;
|
||||
function RefCompsForPage(PageName: string): TStringList; virtual; abstract;
|
||||
procedure BeginUpdate(Change: boolean);
|
||||
procedure EndUpdate;
|
||||
function IsUpdateLocked: boolean;
|
||||
|
@ -116,6 +116,7 @@ type
|
||||
procedure UnselectAllButtons;
|
||||
protected
|
||||
procedure AssignCompsForPage(DestComps: TStringList; PageName: string); override;
|
||||
function RefCompsForPage(PageName: string): TStringList; override;
|
||||
procedure DoBeginUpdate; override;
|
||||
procedure DoEndUpdate(Changed: boolean); override;
|
||||
procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
|
||||
@ -584,6 +585,16 @@ begin
|
||||
raise Exception.Create(Format('AssignCompsFromCache: %s not found in cache.', [PageName]));
|
||||
end;
|
||||
|
||||
function TComponentPalette.RefCompsForPage(PageName: string): TStringList;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
if fComponentPageCache.Find(PageName, i) then
|
||||
Result := fComponentPageCache.Objects[i] as TStringList
|
||||
else
|
||||
Result := Nil;
|
||||
end;
|
||||
|
||||
procedure TComponentPalette.Update;
|
||||
begin
|
||||
inherited Update;
|
||||
|
@ -211,36 +211,27 @@ procedure TCompPaletteOptionsFrame.WriteComponents(cpo: TCompPaletteOptions);
|
||||
var
|
||||
UserComps, OrigComps: TStringList;
|
||||
Pg: TBaseComponentPage;
|
||||
Comp: TRegisteredComponent;
|
||||
i, CompCnt: Integer;
|
||||
PgName: String;
|
||||
i: Integer;
|
||||
begin
|
||||
OrigComps := TStringList.Create;
|
||||
try
|
||||
cpo.ClearComponentPages;
|
||||
for i := 1 to PagesListBox.Count-1 do // Skip all components page
|
||||
cpo.ClearComponentPages;
|
||||
for i := 1 to PagesListBox.Count-1 do // Skip all components page
|
||||
begin
|
||||
PgName := PagesListBox.Items[i];
|
||||
UserComps := PagesListBox.Items.Objects[i] as TStringList;
|
||||
Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: UserComps not assigned');
|
||||
Pg := IDEComponentPalette.GetPage(PgName);
|
||||
if Assigned(Pg) then // Can be Nil if this page was added or renamed.
|
||||
begin
|
||||
PgName := PagesListBox.Items[i];
|
||||
UserComps := PagesListBox.Items.Objects[i] as TStringList;
|
||||
Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: UserComps not assigned');
|
||||
OrigComps.Clear;
|
||||
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
|
||||
for CompCnt := 0 to IDEComponentPalette.Comps.Count-1 do
|
||||
begin
|
||||
Comp := IDEComponentPalette.Comps[CompCnt];
|
||||
if Comp.OrigPageName = PgName then
|
||||
OrigComps.Add(Comp.ComponentClass.ClassName);
|
||||
end;
|
||||
end;
|
||||
// Differs from original order -> add configuration for components
|
||||
if not OrigComps.Equals(UserComps) then
|
||||
cpo.AssignComponentPage(PgName, UserComps);
|
||||
end;
|
||||
finally
|
||||
OrigComps.Free;
|
||||
// Collect original components from this page
|
||||
OrigComps := IDEComponentPalette.RefCompsForPage(PgName);
|
||||
Assert(Assigned(OrigComps), 'TCompPaletteOptionsFrame.WriteComponents: OrigComps not assigned');
|
||||
end
|
||||
else
|
||||
OrigComps := Nil;
|
||||
// Differs from original order -> add configuration for components
|
||||
if (OrigComps=Nil) or not OrigComps.Equals(UserComps) then
|
||||
cpo.AssignComponentPage(PgName, UserComps);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user