From ffa4d82af851e5253817605d92e86017c686a1d1 Mon Sep 17 00:00:00 2001 From: juha Date: Fri, 14 Nov 2014 01:40:21 +0000 Subject: [PATCH] IDE: Fix loading user configuration for component palette. git-svn-id: trunk@46843 - --- components/ideintf/componentreg.pas | 11 ++++----- ide/componentpalette.pas | 30 ++++++++++++------------- ide/frames/componentpalette_options.pas | 22 +++++------------- 3 files changed, 27 insertions(+), 36 deletions(-) diff --git a/components/ideintf/componentreg.pas b/components/ideintf/componentreg.pas index 37db8bf5ac..3937058fa7 100644 --- a/components/ideintf/componentreg.pas +++ b/components/ideintf/componentreg.pas @@ -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; diff --git a/ide/componentpalette.pas b/ide/componentpalette.pas index b4666c3399..29a4064978 100644 --- a/ide/componentpalette.pas +++ b/ide/componentpalette.pas @@ -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 diff --git a/ide/frames/componentpalette_options.pas b/ide/frames/componentpalette_options.pas index 7afd42af25..3e50652730 100644 --- a/ide/frames/componentpalette_options.pas +++ b/ide/frames/componentpalette_options.pas @@ -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;