IDE: Fix loading user configuration for component palette.

git-svn-id: trunk@46843 -
This commit is contained in:
juha 2014-11-14 01:40:21 +00:00
parent 908e26c65b
commit ffa4d82af8
3 changed files with 27 additions and 36 deletions

View File

@ -165,6 +165,11 @@ type
private
FPages: TList; // list of TBaseComponentPage
FComps: TList; // list of all TRegisteredComponent in all pages
// New pages added and their priorities, ordered by priority.
fOrigPagePriorities: TPagePriorityList;
// Pages ordered by user. Contains page name + another StringList
// for component names, just like TCompPaletteOptions.ComponentPages.
fPagesUserOrder: TStringList;
FHandlers: array[TComponentPaletteHandlerType] of TMethodList;
FBaseComponentPageClass: TBaseComponentPageClass;
FRegisteredComponentClass: TRegisteredComponentClass;
@ -181,11 +186,6 @@ type
const AMethod: TMethod);
procedure SetHideControls(const AValue: boolean);
protected
// New pages added and their priorities, ordered by priority.
fOrigPagePriorities: TPagePriorityList;
// Pages ordered by user. Contains page name + another StringList
// for component names, just like TCompPaletteOptions.ComponentPages.
fPagesUserOrder: TStringList;
procedure DoChange; virtual;
procedure DoBeginUpdate; virtual;
procedure DoEndUpdate(Changed: boolean); virtual;
@ -247,6 +247,7 @@ type
property OnEndUpdate: TEndUpdatePaletteEvent read FOnEndUpdate write FOnEndUpdate;
property HideControls: boolean read FHideControls write SetHideControls;
property Selected: TRegisteredComponent read GetSelected write SetSelected;
property OrigPagePriorities: TPagePriorityList read fOrigPagePriorities;
property PagesUserOrder: TStringList read fPagesUserOrder;
end;

View File

@ -634,24 +634,24 @@ var
PgName, CompName: String;
begin
Result := True;
for i:=0 to fPagesUserOrder.Count-1 do
fPagesUserOrder.Objects[i].Free; // Free also the contained StringList.
fPagesUserOrder.Clear;
for i:=0 to PagesUserOrder.Count-1 do
PagesUserOrder.Objects[i].Free; // Free also the contained StringList.
PagesUserOrder.Clear;
with EnvironmentOptions do begin
// First add user defined page order from EnvironmentOptions,
fPagesUserOrder.Assign(ComponentPaletteOptions.PageNames);
PagesUserOrder.Assign(ComponentPaletteOptions.PageNames);
// then add other pages which don't have user configuration
for DefPgInd := 0 to fOrigPagePriorities.Count-1 do
for DefPgInd := 0 to OrigPagePriorities.Count-1 do
begin
PgName:=fOrigPagePriorities.Keys[DefPgInd];
if (fPagesUserOrder.IndexOf(PgName) = -1)
PgName:=OrigPagePriorities.Keys[DefPgInd];
if (PagesUserOrder.IndexOf(PgName) = -1)
and (ComponentPaletteOptions.HiddenPageNames.IndexOf(PgName) = -1) then
fPagesUserOrder.Add(PgName);
PagesUserOrder.Add(PgName);
end;
// Add pages and components for them
for i := 0 to fPagesUserOrder.Count-1 do
for i := 0 to PagesUserOrder.Count-1 do
begin
PgName := fPagesUserOrder[i];
PgName := PagesUserOrder[i];
DefPgInd := IndexOfPageWithName(PgName);
if DefPgInd >= 0 then
Pg:=Pages[DefPgInd]
@ -659,7 +659,7 @@ begin
Pg:=CreateNewPage(PgName, ComponentPriorityNormal);
end;
DstComps := TStringList.Create;
fPagesUserOrder.Objects[i] := DstComps;
PagesUserOrder.Objects[i] := DstComps;
OptPgInd := ComponentPaletteOptions.ComponentPages.IndexOf(PgName);
if OptPgInd >= 0 then
begin
@ -883,20 +883,20 @@ begin
FPageControl.DisableAlign;
try
OldActivePage:=FPageControl.ActivePage;
SortPagesAndCompsUserOrder; // Updates fPagesUserOrder
SortPagesAndCompsUserOrder; // Updates PagesUserOrder
// remove every page in the PageControl without a visible page
for i:=FPageControl.PageCount-1 downto 0 do
RemoveUnneededPage(FPageControl.Pages[i]);
// insert a PageControl page for every visible palette page
VisPageIndex := 0;
for i := 0 to fPagesUserOrder.Count-1 do
for i := 0 to PagesUserOrder.Count-1 do
begin
PgName := fPagesUserOrder[i];
PgName := PagesUserOrder[i];
PgInd := IndexOfPageName(PgName);
if PgInd >= 0 then
begin
InsertVisiblePage(Pages[PgInd], VisPageIndex);
CreateButtons(PgInd, fPagesUserOrder.Objects[i] as TStringList);
CreateButtons(PgInd, PagesUserOrder.Objects[i] as TStringList);
end;
end;
// restore active page

View File

@ -68,7 +68,6 @@ type
procedure PagesListBoxSelectionChange(Sender: TObject; User: boolean);
procedure RestoreButtonClick(Sender: TObject);
private
FLoaded: Boolean;
procedure WritePages(cpo: TCompPaletteOptions);
procedure WriteComponents(cpo: TCompPaletteOptions);
procedure FillPages;
@ -136,20 +135,15 @@ begin
CompMoveUpBtn.Hint:=lisMoveSelectedUp;
CompMoveDownBtn.Hint:=lisMoveSelectedDown;
FillPages;
UpdateButtons;
UpdatePageMoveButtons(PagesListBox.ItemIndex);
UpdateCompMoveButtons(ComponentsListView.ItemIndex);
FLoaded := False;
end;
procedure TCompPaletteOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
cpo: TCompPaletteOptions;
begin
cpo:=(AOptions as TEnvironmentOptions).ComponentPaletteOptions;
// --- ToDo ---
FLoaded := True;
// AOptions is not needed because data is already loaded to IDEComponentPalette.
FillPages;
end;
procedure TCompPaletteOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
@ -174,9 +168,9 @@ begin
UserPages := TStringList.Create;
try
// Collect original page names
for i := 0 to IDEComponentPalette.PagesUserOrder.Count-1 do
for i := 0 to IDEComponentPalette.OrigPagePriorities.Count-1 do
begin
PgName := IDEComponentPalette.PagesUserOrder[i];
PgName := IDEComponentPalette.OrigPagePriorities.Keys[i];
Pg := IDEComponentPalette.GetPage(PgName, True);
Assert(Assigned(Pg), 'TCompPaletteOptionsFrame.WritePages: PageName "'+PgName+'" not found.');
if (Pg<>nil) and Pg.Visible then
@ -217,7 +211,7 @@ begin
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.PageCount-1 do
for CompCnt := 0 to IDEComponentPalette.CompCount-1 do
begin
Comp := IDEComponentPalette.Comps[CompCnt];
if Comp.RealPage = Pg then
@ -244,7 +238,7 @@ begin
if Assigned(IDEComponentPalette) then
begin
PagesListBox.Clear;
PagesListBox.AddItem(AllComponentsHeader, Nil);
PagesListBox.Items.Add(AllComponentsHeader);
for i := 0 to IDEComponentPalette.PagesUserOrder.Count-1 do
begin
PgName := IDEComponentPalette.PagesUserOrder[i];
@ -324,8 +318,6 @@ procedure TCompPaletteOptionsFrame.PagesListBoxSelectionChange(Sender: TObject;
var
lb: TListBox;
begin
//if not (FLoaded and User) then
// Exit;
lb := Sender as TListBox;
FillComponents(lb.Items[lb.ItemIndex]);
UpdateButtons;
@ -605,8 +597,6 @@ begin
end;
end;
///
procedure TCompPaletteOptionsFrame.UpdateButtons;
begin
RestoreButton.Visible := PagesListBox.ItemIndex = 0;