IDE: Save component palette options correctly when palette is filtered by DataModule.

git-svn-id: trunk@47074 -
This commit is contained in:
juha 2014-12-03 17:57:02 +00:00
parent cfcbe4b9c7
commit 51cdfe8e79
3 changed files with 46 additions and 30 deletions

View File

@ -213,7 +213,8 @@ type
procedure Clear; procedure Clear;
procedure AssignOrigCompsForPage(DestComps: TStringList; procedure AssignOrigCompsForPage(DestComps: TStringList;
PageName: string); virtual; abstract; PageName: string); virtual; abstract;
function RefOrigCompsForPage(PageName: string): TStringList; virtual; abstract; procedure AssignOrigVisibleCompsForPage(DestComps: TStringList;
PageName: string); virtual; abstract;
function RefUserCompsForPage(PageName: string): TStringList; virtual; abstract; function RefUserCompsForPage(PageName: string): TStringList; virtual; abstract;
procedure BeginUpdate(Change: boolean); procedure BeginUpdate(Change: boolean);
procedure EndUpdate; procedure EndUpdate;

View File

@ -157,9 +157,8 @@ type
procedure RegisterCustomIDEComponents( procedure RegisterCustomIDEComponents(
const RegisterProc: RegisterUnitComponentProc); override; const RegisterProc: RegisterUnitComponentProc); override;
procedure Update; override; procedure Update; override;
//procedure UpdateVisible; override;
procedure AssignOrigCompsForPage(DestComps: TStringList; PageName: string); override; procedure AssignOrigCompsForPage(DestComps: TStringList; PageName: string); override;
function RefOrigCompsForPage(PageName: string): TStringList; override; procedure AssignOrigVisibleCompsForPage(DestComps: TStringList; PageName: string); override;
function RefUserCompsForPage(PageName: string): TStringList; override; function RefUserCompsForPage(PageName: string): TStringList; override;
public public
property PageControl: TPageControl read FPageControl write SetPageControl; property PageControl: TPageControl read FPageControl write SetPageControl;
@ -603,17 +602,24 @@ begin
DestComps.Assign(sl); DestComps.Assign(sl);
end end
else else
raise Exception.Create(Format('AssignCompsFromCache: %s not found in cache.', [PageName])); raise Exception.Create(Format('AssignOrigCompsForPage: %s not found in cache.', [PageName]));
end; end;
function TComponentPalette.RefOrigCompsForPage(PageName: string): TStringList; procedure TComponentPalette.AssignOrigVisibleCompsForPage(DestComps: TStringList;
PageName: string);
var var
sl: TStringList;
i: Integer; i: Integer;
begin begin
if fOrigComponentPageCache.Find(PageName, i) then if fOrigComponentPageCache.Find(PageName, i) then
Result := fOrigComponentPageCache.Objects[i] as TStringList begin
sl := fOrigComponentPageCache.Objects[i] as TStringList;
for i := 0 to sl.Count-1 do
if FindComponent(sl[i]).Visible then
DestComps.Add(sl[i]);
end
else else
Result := Nil; raise Exception.Create(Format('AssignOrigVisibleCompsForPage: %s not found in cache.', [PageName]));
end; end;
function TComponentPalette.RefUserCompsForPage(PageName: string): TStringList; function TComponentPalette.RefUserCompsForPage(PageName: string): TStringList;

View File

@ -77,7 +77,7 @@ type
procedure WritePages(cpo: TCompPaletteOptions); procedure WritePages(cpo: TCompPaletteOptions);
procedure WriteComponents(cpo: TCompPaletteOptions); procedure WriteComponents(cpo: TCompPaletteOptions);
procedure FillPages; procedure FillPages;
procedure InitialComps(aPageName: string; aCompList: TStringList); procedure InitialComps(aPageInd: Integer; aCompList: TStringList);
procedure FillComponents(aPageName: string); procedure FillComponents(aPageName: string);
procedure MarkAsChanged; procedure MarkAsChanged;
procedure UpdatePageMoveButtons(ListIndex: integer); procedure UpdatePageMoveButtons(ListIndex: integer);
@ -189,9 +189,8 @@ begin
for i := 0 to IDEComponentPalette.OrigPagePriorities.Count-1 do for i := 0 to IDEComponentPalette.OrigPagePriorities.Count-1 do
begin begin
PgName := IDEComponentPalette.OrigPagePriorities.Keys[i]; PgName := IDEComponentPalette.OrigPagePriorities.Keys[i];
Pg := IDEComponentPalette.GetPage(PgName, True); Pg := IDEComponentPalette.GetPage(PgName);
Assert(Assigned(Pg), 'TCompPaletteOptionsFrame.WritePages: PageName "'+PgName+'" not found.'); if Assigned(Pg) and Pg.Visible then
if (Pg<>nil) and Pg.Visible then
OrigPages.Add(Pg.PageName); OrigPages.Add(Pg.PageName);
end; end;
// Collect user defined page names // Collect user defined page names
@ -215,6 +214,7 @@ var
PgName: String; PgName: String;
i: Integer; i: Integer;
begin begin
OrigComps := Nil;
cpo.ComponentPages.Clear; cpo.ComponentPages.Clear;
for i := 1 to PagesListBox.Count-1 do // Skip all components page for i := 1 to PagesListBox.Count-1 do // Skip all components page
begin begin
@ -222,14 +222,19 @@ begin
UserComps := PagesListBox.Items.Objects[i] as TStringList; UserComps := PagesListBox.Items.Objects[i] as TStringList;
Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: No UserComps for '+PgName); Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: No UserComps for '+PgName);
Pg := IDEComponentPalette.GetPage(PgName); Pg := IDEComponentPalette.GetPage(PgName);
if Assigned(Pg) then // Can be Nil if this page was added or renamed. try
// Collect original components from this page if Assigned(Pg) and Pg.Visible then // Can be Nil if this page was added or renamed.
OrigComps := IDEComponentPalette.RefOrigCompsForPage(PgName) begin
else OrigComps := TStringList.Create;
OrigComps := Nil; // Collect original visible components from this page.
// Differs from original order -> add configuration for components IDEComponentPalette.AssignOrigVisibleCompsForPage(OrigComps, PgName)
if (OrigComps=Nil) or not OrigComps.Equals(UserComps) then end;
cpo.AssignComponentPage(PgName, UserComps); // Differs from original order -> add configuration for components.
if (OrigComps=Nil) or not OrigComps.Equals(UserComps) then
cpo.AssignComponentPage(PgName, UserComps);
finally
FreeAndNil(OrigComps);
end;
end; end;
end; end;
@ -239,7 +244,9 @@ var
CompList: TStringList; CompList: TStringList;
i: Integer; i: Integer;
PgName: String; PgName: String;
Pg: TBaseComponentPage;
begin begin
// First clear existing items and add <All> page.
for i := 0 to PagesListBox.Items.Count-1 do for i := 0 to PagesListBox.Items.Count-1 do
PagesListBox.Items.Objects[i].Free; PagesListBox.Items.Objects[i].Free;
PagesListBox.Clear; PagesListBox.Clear;
@ -248,28 +255,30 @@ begin
begin begin
PgName := fLocalUserOrder.ComponentPages[i]; PgName := fLocalUserOrder.ComponentPages[i];
Assert(PgName<>'', 'TCompPaletteOptionsFrame.FillPages: PageName is empty.'); Assert(PgName<>'', 'TCompPaletteOptionsFrame.FillPages: PageName is empty.');
CompList := TStringList.Create; // StringList will hold components for this page. Pg := IDEComponentPalette.GetPage(PgName);
InitialComps(PgName, CompList); Assert(Assigned(Pg), 'TCompPaletteOptionsFrame.FillPages: Page is not assigned.');
PagesListBox.AddItem(PgName, CompList); if Pg.Visible then
begin
CompList := TStringList.Create; // StringList will hold components for this page.
InitialComps(i, CompList);
PagesListBox.AddItem(PgName, CompList);
end;
end; end;
PagesListBox.ItemIndex := 0; // Activate first item PagesListBox.ItemIndex := 0; // Activate first item
end; end;
procedure TCompPaletteOptionsFrame.InitialComps(aPageName: string; aCompList: TStringList); procedure TCompPaletteOptionsFrame.InitialComps(aPageInd: Integer; aCompList: TStringList);
var var
OrderedComps: TStringList; OrderedComps: TStringList;
Comp: TRegisteredComponent; Comp: TRegisteredComponent;
CompName: String;
i: Integer; i: Integer;
begin begin
i := fLocalUserOrder.ComponentPages.IndexOf(aPageName); OrderedComps := fLocalUserOrder.ComponentPages.Objects[aPageInd] as TStringList;
Assert(i > -1, 'TCompPaletteOptionsFrame.InitialComps: PageName "'+aPageName+'" not found');
OrderedComps := fLocalUserOrder.ComponentPages.Objects[i] as TStringList;
for i := 0 to OrderedComps.Count-1 do for i := 0 to OrderedComps.Count-1 do
begin begin
CompName := OrderedComps[i]; Comp := IDEComponentPalette.FindComponent(OrderedComps[i]);
Comp := IDEComponentPalette.FindComponent(CompName); Assert(Assigned(Comp), 'TCompPaletteOptionsFrame.InitialComps: Component "'+
Assert(Assigned(Comp), 'TCompPaletteOptionsFrame.InitialComps: Component "'+CompName+'" not found'); OrderedComps[i]+'" not found');
if Comp.Visible then if Comp.Visible then
aCompList.AddObject(Comp.ComponentClass.ClassName, Comp); aCompList.AddObject(Comp.ComponentClass.ClassName, Comp);
end; end;