mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 20:19:16 +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 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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user