IDE: Use the cache when writing component palette configuration.

git-svn-id: trunk@47001 -
This commit is contained in:
juha 2014-11-27 20:31:30 +00:00
parent 4ccb281acd
commit 8b4eac20a9
3 changed files with 31 additions and 28 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;