IDE: update component palette button and page visibility

git-svn-id: trunk@24795 -
This commit is contained in:
mattias 2010-04-21 17:39:09 +00:00
parent 4338c54822
commit 6ffc05a7d9
2 changed files with 48 additions and 8 deletions

View File

@ -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

View File

@ -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;