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; fComps: TRegisteredComponentList;
// New pages added and their priorities, ordered by priority. // New pages added and their priorities, ordered by priority.
fOrigPagePriorities: TPagePriorityList; fOrigPagePriorities: TPagePriorityList;
procedure AssignCompsForPage(DestComps: TStringList; PageName: string); virtual; abstract;
procedure DoChange; virtual; procedure DoChange; virtual;
procedure DoBeginUpdate; virtual; procedure DoBeginUpdate; virtual;
procedure DoEndUpdate(Changed: boolean); virtual; procedure DoEndUpdate(Changed: boolean); virtual;
@ -218,6 +217,8 @@ type
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
procedure Clear; procedure Clear;
procedure AssignCompsForPage(DestComps: TStringList; PageName: string); virtual; abstract;
function RefCompsForPage(PageName: string): TStringList; virtual; abstract;
procedure BeginUpdate(Change: boolean); procedure BeginUpdate(Change: boolean);
procedure EndUpdate; procedure EndUpdate;
function IsUpdateLocked: boolean; function IsUpdateLocked: boolean;

View File

@ -116,6 +116,7 @@ type
procedure UnselectAllButtons; procedure UnselectAllButtons;
protected protected
procedure AssignCompsForPage(DestComps: TStringList; PageName: string); override; procedure AssignCompsForPage(DestComps: TStringList; PageName: string); override;
function RefCompsForPage(PageName: string): TStringList; override;
procedure DoBeginUpdate; override; procedure DoBeginUpdate; override;
procedure DoEndUpdate(Changed: boolean); override; procedure DoEndUpdate(Changed: boolean); override;
procedure OnPageAddedComponent(Component: TRegisteredComponent); override; procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
@ -584,6 +585,16 @@ begin
raise Exception.Create(Format('AssignCompsFromCache: %s not found in cache.', [PageName])); raise Exception.Create(Format('AssignCompsFromCache: %s not found in cache.', [PageName]));
end; 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; procedure TComponentPalette.Update;
begin begin
inherited Update; inherited Update;

View File

@ -211,36 +211,27 @@ procedure TCompPaletteOptionsFrame.WriteComponents(cpo: TCompPaletteOptions);
var var
UserComps, OrigComps: TStringList; UserComps, OrigComps: TStringList;
Pg: TBaseComponentPage; Pg: TBaseComponentPage;
Comp: TRegisteredComponent;
i, CompCnt: Integer;
PgName: String; PgName: String;
i: Integer;
begin begin
OrigComps := TStringList.Create; cpo.ClearComponentPages;
try for i := 1 to PagesListBox.Count-1 do // Skip all components page
cpo.ClearComponentPages; begin
for i := 1 to PagesListBox.Count-1 do // Skip all components page 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 begin
PgName := PagesListBox.Items[i]; // Collect original components from this page
UserComps := PagesListBox.Items.Objects[i] as TStringList; OrigComps := IDEComponentPalette.RefCompsForPage(PgName);
Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: UserComps not assigned'); Assert(Assigned(OrigComps), 'TCompPaletteOptionsFrame.WriteComponents: OrigComps not assigned');
OrigComps.Clear; end
Pg := IDEComponentPalette.GetPage(PgName); else
if Assigned(Pg) then // Can be Nil if this page was added or renamed. OrigComps := Nil;
begin // Differs from original order -> add configuration for components
// Collect original components from this page if (OrigComps=Nil) or not OrigComps.Equals(UserComps) then
for CompCnt := 0 to IDEComponentPalette.Comps.Count-1 do cpo.AssignComponentPage(PgName, UserComps);
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;
end; end;
end; end;