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 SetSelected(const AValue: TRegisteredComponent);
procedure CreatePopupMenu; procedure CreatePopupMenu;
protected protected
procedure DoBeginUpdate; override;
procedure DoEndUpdate(Changed: boolean); override; procedure DoEndUpdate(Changed: boolean); override;
procedure OnPageAddedComponent(Component: TRegisteredComponent); override; procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
procedure OnPageRemovedComponent(Page: TBaseComponentPage; procedure OnPageRemovedComponent(Page: TBaseComponentPage;
@ -343,6 +344,11 @@ begin
PopupMenu.Items.Add(FindComponentMenuItem); PopupMenu.Items.Add(FindComponentMenuItem);
end; end;
procedure TComponentPalette.DoBeginUpdate;
begin
inherited DoBeginUpdate;
end;
procedure TComponentPalette.DoEndUpdate(Changed: boolean); procedure TComponentPalette.DoEndUpdate(Changed: boolean);
begin begin
if Changed or fNoteBookNeedsUpdate then UpdateNoteBookButtons; if Changed or fNoteBookNeedsUpdate then UpdateNoteBookButtons;
@ -461,6 +467,7 @@ var
ButtonCount: Integer; ButtonCount: Integer;
MaxBtnPerRow: Integer; MaxBtnPerRow: Integer;
begin begin
//DebugLn(['TComponentPalette.ReAlignButtons ',Page.Caption,' ',Page.ClientWidth]);
if FNoteBook<>nil then if FNoteBook<>nil then
NoteBook.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF}; NoteBook.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
try try
@ -471,6 +478,7 @@ begin
if not (CurButton is TSpeedButton) then continue; if not (CurButton is TSpeedButton) then continue;
inc(ButtonCount); inc(ButtonCount);
end; end;
if ButtonCount=0 then exit;
ButtonX:= ((ComponentPaletteBtnWidth*3) div 2) + 2; ButtonX:= ((ComponentPaletteBtnWidth*3) div 2) + 2;
@ -488,7 +496,8 @@ begin
CurButton.SetBounds( CurButton.SetBounds(
ButtonX + ((j-1) div Rows) * ComponentPaletteBtnWidth, ButtonX + ((j-1) div Rows) * ComponentPaletteBtnWidth,
((j-1) mod Rows) * ComponentPaletteBtnHeight, ((j-1) mod Rows) * ComponentPaletteBtnHeight,
CurButton.Width,CurButton.Height) CurButton.Width,CurButton.Height);
//DebugLn(['TComponentPalette.ReAlignButtons ',CurButton.Name,' ',dbgs(CurButton.BoundsRect)]);
end; end;
finally finally
if NoteBook<>nil then if NoteBook<>nil then
@ -527,8 +536,13 @@ begin
for i:=FNoteBook.PageCount-1 downto 0 do begin for i:=FNoteBook.PageCount-1 downto 0 do begin
PageIndex:=IndexOfPageComponent(FNoteBook.Page[i]); PageIndex:=IndexOfPageComponent(FNoteBook.Page[i]);
if (PageIndex<0) or (not Pages[PageIndex].Visible) then begin if (PageIndex<0) or (not Pages[PageIndex].Visible) then begin
if PageIndex>=0 then if PageIndex>=0 then begin
Pages[i].PageComponent:=nil; CurPage:=Pages[PageIndex];
CurBtn:=TSpeedButton(CurPage.SelectButton);
CurPage.SelectButton:=nil;
CurBtn.Free;
Pages[PageIndex].PageComponent:=nil;
end;
FNoteBook.Pages.Delete(i); FNoteBook.Pages.Delete(i);
end; end;
end; end;
@ -555,6 +569,7 @@ begin
CurNoteBookPage:=TPage(CurPage.PageComponent); CurNoteBookPage:=TPage(CurPage.PageComponent);
if not (CurNoteBookPage is TPage) then RaiseException('CurNoteBookPage'); if not (CurNoteBookPage is TPage) then RaiseException('CurNoteBookPage');
CurNoteBookPage.OnResize:=@OnPageResize; CurNoteBookPage.OnResize:=@OnPageResize;
//DebugLn(['TComponentPalette.UpdateNoteBookButtons PAGE=',CurPage.PageName,' PageIndex=',CurNoteBookPage.PageIndex]);
// create selection button // create selection button
if CurPage.SelectButton=nil if CurPage.SelectButton=nil
@ -579,6 +594,7 @@ begin
for j:=0 to CurPage.Count-1 do begin for j:=0 to CurPage.Count-1 do begin
CurComponent:=TPkgComponent(CurPage[j]); CurComponent:=TPkgComponent(CurPage[j]);
if CurComponent.Visible then begin if CurComponent.Visible then begin
//DebugLn(['TComponentPalette.UpdateNoteBookButtons ',DbgSName(CurComponent.ComponentClass),' ',CurComponent.Visible]);
if CurComponent.Button=nil then begin if CurComponent.Button=nil then begin
CurBtn:=TSpeedButton.Create(nil); CurBtn:=TSpeedButton.Create(nil);
CurComponent.Button:=CurBtn; CurComponent.Button:=CurBtn;
@ -598,15 +614,18 @@ begin
CurBtn.PopupMenu:=Self.PopupMenu; CurBtn.PopupMenu:=Self.PopupMenu;
Parent := CurNoteBookPage; Parent := CurNoteBookPage;
end; 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;
end else if CurComponent.Button<>nil then begin 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.Free;
CurComponent.Button:=nil; CurComponent.Button:=nil;
end; end;
end; end;
ReAlignButtons(CurNoteBookPage); ReAlignButtons(CurNoteBookPage);
end; end;
// restore active page // restore active page

View File

@ -162,12 +162,14 @@ type
procedure SetHideControls(const AValue: boolean); procedure SetHideControls(const AValue: boolean);
protected protected
procedure DoChange; virtual; procedure DoChange; virtual;
procedure DoBeginUpdate; virtual;
procedure DoEndUpdate(Changed: boolean); virtual; procedure DoEndUpdate(Changed: boolean); virtual;
procedure OnPageAddedComponent(Component: TRegisteredComponent); virtual; procedure OnPageAddedComponent(Component: TRegisteredComponent); virtual;
procedure OnPageRemovedComponent(Page: TBaseComponentPage; procedure OnPageRemovedComponent(Page: TBaseComponentPage;
Component: TRegisteredComponent); virtual; Component: TRegisteredComponent); virtual;
procedure OnComponentVisibleChanged( procedure OnComponentVisibleChanged(
AComponent: TRegisteredComponent); virtual; AComponent: TRegisteredComponent); virtual;
procedure OnPageVisibleChanged(APage: TBaseComponentPage); virtual;
procedure Update; virtual; procedure Update; virtual;
procedure UpdateVisible(AComponent: TRegisteredComponent); virtual; procedure UpdateVisible(AComponent: TRegisteredComponent); virtual;
procedure SetBaseComponentPageClass( procedure SetBaseComponentPageClass(
@ -328,6 +330,7 @@ procedure TBaseComponentPage.SetVisible(const AValue: boolean);
begin begin
if FVisible=AValue then exit; if FVisible=AValue then exit;
FVisible:=AValue; FVisible:=AValue;
if (FPalette<>nil) then FPalette.OnPageVisibleChanged(Self);
end; end;
procedure TBaseComponentPage.OnComponentVisibleChanged( procedure TBaseComponentPage.OnComponentVisibleChanged(
@ -435,10 +438,16 @@ end;
procedure TBaseComponentPage.UpdateVisible; procedure TBaseComponentPage.UpdateVisible;
var var
i: Integer; i: Integer;
HasVisibleComponents: Boolean;
begin begin
if Palette<>nil then if Palette<>nil then begin
for i:=0 to Count-1 do HasVisibleComponents:=false;
for i:=0 to Count-1 do begin
Palette.UpdateVisible(Items[i]); Palette.UpdateVisible(Items[i]);
if Items[i].Visible then HasVisibleComponents:=true;
end;
Visible:=HasVisibleComponents and (PageName<>'');
end;
end; end;
{ TBaseComponentPalette } { TBaseComponentPalette }
@ -478,6 +487,11 @@ begin
Update; Update;
end; end;
procedure TBaseComponentPalette.DoBeginUpdate;
begin
end;
procedure TBaseComponentPalette.DoEndUpdate(Changed: boolean); procedure TBaseComponentPalette.DoEndUpdate(Changed: boolean);
begin begin
if Assigned(OnEndUpdate) then OnEndUpdate(Self,Changed); if Assigned(OnEndUpdate) then OnEndUpdate(Self,Changed);
@ -501,6 +515,12 @@ begin
DoChange; DoChange;
end; end;
procedure TBaseComponentPalette.OnPageVisibleChanged(APage: TBaseComponentPage
);
begin
DoChange;
end;
procedure TBaseComponentPalette.Update; procedure TBaseComponentPalette.Update;
begin begin
@ -568,6 +588,7 @@ begin
inc(FUpdateLock); inc(FUpdateLock);
if FUpdateLock=1 then begin if FUpdateLock=1 then begin
fChanged:=Change; fChanged:=Change;
DoBeginUpdate;
if Assigned(OnBeginUpdate) then OnBeginUpdate(Self); if Assigned(OnBeginUpdate) then OnBeginUpdate(Self);
end else end else
fChanged:=fChanged or Change; fChanged:=fChanged or Change;