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 private
FPages: TList; // list of TBaseComponentPage FPages: TList; // list of TBaseComponentPage
FComps: TList; // list of all TRegisteredComponent in all pages 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; FHandlers: array[TComponentPaletteHandlerType] of TMethodList;
FBaseComponentPageClass: TBaseComponentPageClass; FBaseComponentPageClass: TBaseComponentPageClass;
FRegisteredComponentClass: TRegisteredComponentClass; FRegisteredComponentClass: TRegisteredComponentClass;
@ -181,11 +186,6 @@ type
const AMethod: TMethod); const AMethod: TMethod);
procedure SetHideControls(const AValue: boolean); procedure SetHideControls(const AValue: boolean);
protected 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 DoChange; virtual;
procedure DoBeginUpdate; virtual; procedure DoBeginUpdate; virtual;
procedure DoEndUpdate(Changed: boolean); virtual; procedure DoEndUpdate(Changed: boolean); virtual;
@ -247,6 +247,7 @@ type
property OnEndUpdate: TEndUpdatePaletteEvent read FOnEndUpdate write FOnEndUpdate; property OnEndUpdate: TEndUpdatePaletteEvent read FOnEndUpdate write FOnEndUpdate;
property HideControls: boolean read FHideControls write SetHideControls; property HideControls: boolean read FHideControls write SetHideControls;
property Selected: TRegisteredComponent read GetSelected write SetSelected; property Selected: TRegisteredComponent read GetSelected write SetSelected;
property OrigPagePriorities: TPagePriorityList read fOrigPagePriorities;
property PagesUserOrder: TStringList read fPagesUserOrder; property PagesUserOrder: TStringList read fPagesUserOrder;
end; end;

View File

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

View File

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