mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 06:56:10 +02:00
IDE: update component palette button and page visibility
git-svn-id: trunk@24795 -
This commit is contained in:
parent
4338c54822
commit
6ffc05a7d9
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user