From 6ffc05a7d93f149521d8a05a0520664e53abe7a3 Mon Sep 17 00:00:00 2001 From: mattias Date: Wed, 21 Apr 2010 17:39:09 +0000 Subject: [PATCH] IDE: update component palette button and page visibility git-svn-id: trunk@24795 - --- ide/componentpalette.pas | 31 +++++++++++++++++++++++++------ ideintf/componentreg.pas | 25 +++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/ide/componentpalette.pas b/ide/componentpalette.pas index 7485faa79b..6cba9b067b 100644 --- a/ide/componentpalette.pas +++ b/ide/componentpalette.pas @@ -84,6 +84,7 @@ type procedure SetSelected(const AValue: TRegisteredComponent); procedure CreatePopupMenu; protected + procedure DoBeginUpdate; override; procedure DoEndUpdate(Changed: boolean); override; procedure OnPageAddedComponent(Component: TRegisteredComponent); override; procedure OnPageRemovedComponent(Page: TBaseComponentPage; @@ -343,6 +344,11 @@ begin PopupMenu.Items.Add(FindComponentMenuItem); end; +procedure TComponentPalette.DoBeginUpdate; +begin + inherited DoBeginUpdate; +end; + procedure TComponentPalette.DoEndUpdate(Changed: boolean); begin if Changed or fNoteBookNeedsUpdate then UpdateNoteBookButtons; @@ -461,6 +467,7 @@ var ButtonCount: Integer; MaxBtnPerRow: Integer; begin + //DebugLn(['TComponentPalette.ReAlignButtons ',Page.Caption,' ',Page.ClientWidth]); if FNoteBook<>nil then NoteBook.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF}; try @@ -471,6 +478,7 @@ begin if not (CurButton is TSpeedButton) then continue; inc(ButtonCount); end; + if ButtonCount=0 then exit; ButtonX:= ((ComponentPaletteBtnWidth*3) div 2) + 2; @@ -488,7 +496,8 @@ begin CurButton.SetBounds( ButtonX + ((j-1) div Rows) * ComponentPaletteBtnWidth, ((j-1) mod Rows) * ComponentPaletteBtnHeight, - CurButton.Width,CurButton.Height) + CurButton.Width,CurButton.Height); + //DebugLn(['TComponentPalette.ReAlignButtons ',CurButton.Name,' ',dbgs(CurButton.BoundsRect)]); end; finally if NoteBook<>nil then @@ -527,8 +536,13 @@ begin for i:=FNoteBook.PageCount-1 downto 0 do begin PageIndex:=IndexOfPageComponent(FNoteBook.Page[i]); if (PageIndex<0) or (not Pages[PageIndex].Visible) then begin - if PageIndex>=0 then - Pages[i].PageComponent:=nil; + if PageIndex>=0 then begin + CurPage:=Pages[PageIndex]; + CurBtn:=TSpeedButton(CurPage.SelectButton); + CurPage.SelectButton:=nil; + CurBtn.Free; + Pages[PageIndex].PageComponent:=nil; + end; FNoteBook.Pages.Delete(i); end; end; @@ -555,6 +569,7 @@ begin CurNoteBookPage:=TPage(CurPage.PageComponent); if not (CurNoteBookPage is TPage) then RaiseException('CurNoteBookPage'); CurNoteBookPage.OnResize:=@OnPageResize; + //DebugLn(['TComponentPalette.UpdateNoteBookButtons PAGE=',CurPage.PageName,' PageIndex=',CurNoteBookPage.PageIndex]); // create selection button if CurPage.SelectButton=nil @@ -579,6 +594,7 @@ begin for j:=0 to CurPage.Count-1 do begin CurComponent:=TPkgComponent(CurPage[j]); if CurComponent.Visible then begin + //DebugLn(['TComponentPalette.UpdateNoteBookButtons ',DbgSName(CurComponent.ComponentClass),' ',CurComponent.Visible]); if CurComponent.Button=nil then begin CurBtn:=TSpeedButton.Create(nil); CurComponent.Button:=CurBtn; @@ -598,15 +614,18 @@ begin CurBtn.PopupMenu:=Self.PopupMenu; Parent := CurNoteBookPage; end; - //writeln('TComponentPalette.UpdateNoteBookButtons Created Button: ',CurComponent.ComponentClass.ClassName,' ',CurComponent.Button.Name); + //debugln(['TComponentPalette.UpdateNoteBookButtons Created Button: ',CurComponent.ComponentClass.ClassName,' ',CurComponent.Button.Name]); + end else begin + TControl(CurComponent.Button).Parent := CurNoteBookPage; + //DebugLn(['TComponentPalette.UpdateNoteBookButtons Keep Button: ',CurComponent.ComponentClass.ClassName,' ',CurComponent.Button.Name,' ',DbgSName(TControl(CurComponent.Button).Parent)]); end; end else if CurComponent.Button<>nil then begin - //writeln('TComponentPalette.UpdateNoteBookButtons Destroy Button: ',CurComponent.ComponentClass.ClassName,' ',CurComponent.Button.Name); + //debugln(['TComponentPalette.UpdateNoteBookButtons Destroy Button: ',CurComponent.ComponentClass.ClassName,' ',CurComponent.Button.Name]); CurComponent.Button.Free; CurComponent.Button:=nil; end; end; - + ReAlignButtons(CurNoteBookPage); end; // restore active page diff --git a/ideintf/componentreg.pas b/ideintf/componentreg.pas index 0edcce5d34..dd6c1f5a7f 100644 --- a/ideintf/componentreg.pas +++ b/ideintf/componentreg.pas @@ -162,12 +162,14 @@ type procedure SetHideControls(const AValue: boolean); protected procedure DoChange; virtual; + procedure DoBeginUpdate; virtual; procedure DoEndUpdate(Changed: boolean); virtual; procedure OnPageAddedComponent(Component: TRegisteredComponent); virtual; procedure OnPageRemovedComponent(Page: TBaseComponentPage; Component: TRegisteredComponent); virtual; procedure OnComponentVisibleChanged( AComponent: TRegisteredComponent); virtual; + procedure OnPageVisibleChanged(APage: TBaseComponentPage); virtual; procedure Update; virtual; procedure UpdateVisible(AComponent: TRegisteredComponent); virtual; procedure SetBaseComponentPageClass( @@ -328,6 +330,7 @@ procedure TBaseComponentPage.SetVisible(const AValue: boolean); begin if FVisible=AValue then exit; FVisible:=AValue; + if (FPalette<>nil) then FPalette.OnPageVisibleChanged(Self); end; procedure TBaseComponentPage.OnComponentVisibleChanged( @@ -435,10 +438,16 @@ end; procedure TBaseComponentPage.UpdateVisible; var i: Integer; + HasVisibleComponents: Boolean; begin - if Palette<>nil then - for i:=0 to Count-1 do + if Palette<>nil then begin + HasVisibleComponents:=false; + for i:=0 to Count-1 do begin Palette.UpdateVisible(Items[i]); + if Items[i].Visible then HasVisibleComponents:=true; + end; + Visible:=HasVisibleComponents and (PageName<>''); + end; end; { TBaseComponentPalette } @@ -478,6 +487,11 @@ begin Update; end; +procedure TBaseComponentPalette.DoBeginUpdate; +begin + +end; + procedure TBaseComponentPalette.DoEndUpdate(Changed: boolean); begin if Assigned(OnEndUpdate) then OnEndUpdate(Self,Changed); @@ -501,6 +515,12 @@ begin DoChange; end; +procedure TBaseComponentPalette.OnPageVisibleChanged(APage: TBaseComponentPage + ); +begin + DoChange; +end; + procedure TBaseComponentPalette.Update; begin @@ -568,6 +588,7 @@ begin inc(FUpdateLock); if FUpdateLock=1 then begin fChanged:=Change; + DoBeginUpdate; if Assigned(OnBeginUpdate) then OnBeginUpdate(Self); end else fChanged:=fChanged or Change;