mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 00:54:03 +02:00
IDE: Move ReAlignButtons logic to TComponentPage class.
git-svn-id: trunk@47127 -
This commit is contained in:
parent
8deedb773e
commit
df3f0370d6
@ -82,6 +82,7 @@ type
|
|||||||
TComponentPage = class(TBaseComponentPage)
|
TComponentPage = class(TBaseComponentPage)
|
||||||
private
|
private
|
||||||
fBtnIndex: integer;
|
fBtnIndex: integer;
|
||||||
|
procedure ReAlignButtons;
|
||||||
procedure RemoveSheet;
|
procedure RemoveSheet;
|
||||||
procedure InsertVisiblePage;
|
procedure InsertVisiblePage;
|
||||||
procedure CreateSelectionButton(aButtonUniqueName: string; aScrollBox: TScrollBox);
|
procedure CreateSelectionButton(aButtonUniqueName: string; aScrollBox: TScrollBox);
|
||||||
@ -149,7 +150,6 @@ type
|
|||||||
function GetUnregisteredIcon: TCustomBitmap;
|
function GetUnregisteredIcon: TCustomBitmap;
|
||||||
function GetSelectButtonIcon: TCustomBitmap;
|
function GetSelectButtonIcon: TCustomBitmap;
|
||||||
function SelectAButton(Button: TComponent): boolean;
|
function SelectAButton(Button: TComponent): boolean;
|
||||||
function IsSelectionToolBtn(aControl: TControl): boolean;
|
|
||||||
protected
|
protected
|
||||||
procedure DoBeginUpdate; override;
|
procedure DoBeginUpdate; override;
|
||||||
procedure DoEndUpdate(Changed: boolean); override;
|
procedure DoEndUpdate(Changed: boolean); override;
|
||||||
@ -299,6 +299,88 @@ begin
|
|||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function IsSelectionToolBtn(aControl: TControl): boolean;
|
||||||
|
begin
|
||||||
|
Result:=(aControl is TSpeedButton)
|
||||||
|
and (LeftStr(aControl.Name,length(CompPalSelectionToolBtnPrefix))=CompPalSelectionToolBtnPrefix);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TComponentPage.ReAlignButtons;
|
||||||
|
var
|
||||||
|
Pal: TComponentPalette;
|
||||||
|
CurButton: TSpeedButton;
|
||||||
|
ButtonTree: TAVLTree;
|
||||||
|
Node: TAVLTreeNode;
|
||||||
|
ScrollBox: TScrollBox;
|
||||||
|
buttonx, MaxBtnPerRow, i: integer;
|
||||||
|
begin
|
||||||
|
Pal := TComponentPalette(Palette);
|
||||||
|
if Pal.PageControl<>nil then
|
||||||
|
Pal.PageControl.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
|
||||||
|
ButtonTree:=nil;
|
||||||
|
try
|
||||||
|
if (PageComponent.ComponentCount=0) or not (PageComponent.Components[0] is TScrollBox) then
|
||||||
|
exit;
|
||||||
|
ScrollBox:=TScrollBox(PageComponent.Components[0]);
|
||||||
|
ButtonTree:=TAVLTree.Create(@CompareControlsWithTag);
|
||||||
|
for i:=0 to ScrollBox.ControlCount-1 do begin
|
||||||
|
CurButton:=TSpeedbutton(ScrollBox.Controls[i]);
|
||||||
|
if IsSelectionToolBtn(CurButton) then continue;
|
||||||
|
if (CurButton is TSpeedButton) and CurButton.Visible then
|
||||||
|
ButtonTree.Add(CurButton);
|
||||||
|
end;
|
||||||
|
if ButtonTree.Count=0 then exit;
|
||||||
|
|
||||||
|
ButtonX:= ((ComponentPaletteBtnWidth*3) div 2) + 2;
|
||||||
|
|
||||||
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if PageComponent.Caption = CompPalVerbPgName then
|
||||||
|
DebugLn(['TComponentPalette.ReAlignButtons',
|
||||||
|
' ButtonTree.Count=',ButtonTree.Count,
|
||||||
|
' ScrollBox.ControlCount=',ScrollBox.ControlCount,
|
||||||
|
' ScrollBox.Bounds=',dbgs(ScrollBox.BoundsRect),
|
||||||
|
' VertScrollBar.Size=',ScrollBox.VertScrollBar.Size,
|
||||||
|
' ClientSizeWithoutBar=',ScrollBox.VertScrollBar.ClientSizeWithoutBar,
|
||||||
|
' IsScrollBarVisible=',ScrollBox.VertScrollBar.IsScrollBarVisible,
|
||||||
|
' HorzScrollBar.Size=',ScrollBox.HorzScrollBar.Size,
|
||||||
|
' Page=',ScrollBox.HorzScrollBar.Page,
|
||||||
|
' Range=',ScrollBox.HorzScrollBar.Range,
|
||||||
|
' IsScrollBarVisible=',ScrollBox.HorzScrollBar.IsScrollBarVisible
|
||||||
|
]);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF LCLCarbon}
|
||||||
|
MaxBtnPerRow:=ButtonTree.Count;
|
||||||
|
{$ELSE}
|
||||||
|
MaxBtnPerRow:=((ScrollBox.VertScrollBar.ClientSizeWithoutBar - ButtonX) div ComponentPaletteBtnWidth);
|
||||||
|
{$ENDIF}
|
||||||
|
// If we need to wrap, make sure we have space for the scrollbar
|
||||||
|
if MaxBtnPerRow < ButtonTree.Count then
|
||||||
|
MaxBtnPerRow:=((ScrollBox.VertScrollBar.ClientSizeWithBar - ButtonX) div ComponentPaletteBtnWidth);
|
||||||
|
//debugln(['TComponentPalette.ReAlignButtons MaxBtnPerRow=',MaxBtnPerRow,' ButtonTree.Count=',ButtonTree.Count,' ',ButtonX + MaxBtnPerRow * ComponentPaletteBtnWidth]);
|
||||||
|
if MaxBtnPerRow<1 then MaxBtnPerRow:=1;
|
||||||
|
|
||||||
|
i:=0;
|
||||||
|
Node:=ButtonTree.FindLowest;
|
||||||
|
while Node<>nil do begin
|
||||||
|
CurButton:=TSpeedbutton(Node.Data);
|
||||||
|
CurButton.SetBounds(ButtonX + (i mod MaxBtnPerRow) * ComponentPaletteBtnWidth,
|
||||||
|
(i div MaxBtnPerRow) * ComponentPaletteBtnHeight,
|
||||||
|
CurButton.Width, CurButton.Height);
|
||||||
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if PageComponent.Caption = CompPalVerbPgName then
|
||||||
|
DebugLn(['TComponentPalette.ReAlignButtons ',CurButton.Name,' ',dbgs(CurButton.BoundsRect)]);
|
||||||
|
{$ENDIF}
|
||||||
|
inc(i);
|
||||||
|
Node:=ButtonTree.FindSuccessor(Node);
|
||||||
|
end;
|
||||||
|
PageComponent.Invalidate;
|
||||||
|
finally
|
||||||
|
if Pal.PageControl<>nil then
|
||||||
|
Pal.PageControl.EnableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
|
||||||
|
FreeAndNil(ButtonTree);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TComponentPage.RemoveSheet;
|
procedure TComponentPage.RemoveSheet;
|
||||||
var
|
var
|
||||||
Btn: TSpeedButton;
|
Btn: TSpeedButton;
|
||||||
@ -1053,89 +1135,16 @@ end;
|
|||||||
|
|
||||||
procedure TComponentPalette.ReAlignButtons(aSheet: TCustomPage);
|
procedure TComponentPalette.ReAlignButtons(aSheet: TCustomPage);
|
||||||
var
|
var
|
||||||
j: integer;
|
PageInd: Integer;
|
||||||
buttonx: integer;
|
|
||||||
CurButton: TSpeedButton;
|
|
||||||
MaxBtnPerRow: Integer;
|
|
||||||
ButtonTree: TAVLTree;
|
|
||||||
Node: TAVLTreeNode;
|
|
||||||
ScrollBox: TScrollBox;
|
|
||||||
begin
|
begin
|
||||||
if (aSheet=Nil) or not aSheet.Visible then
|
if (aSheet=Nil) or not aSheet.Visible then
|
||||||
exit;
|
exit;
|
||||||
{$IFDEF VerboseComponentPalette}
|
{$IFDEF VerboseComponentPalette}
|
||||||
DebugLn(['TComponentPalette.ReAlignButtons Visible="',aSheet.Caption,'", ClientWidth=',aSheet.ClientWidth]);
|
DebugLn(['TComponentPalette.ReAlignButtons Visible="',aSheet.Caption,'", ClientWidth=',aSheet.ClientWidth]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if PageControl<>nil then
|
PageInd:=IndexOfPageComponent(aSheet);
|
||||||
PageControl.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
|
if PageInd>=0 then
|
||||||
ButtonTree:=nil;
|
TComponentPage(Pages[PageInd]).ReAlignButtons;
|
||||||
try
|
|
||||||
if (aSheet.ComponentCount=0) or not (aSheet.Components[0] is TScrollBox) then
|
|
||||||
exit;
|
|
||||||
ScrollBox:=TScrollBox(aSheet.Components[0]);
|
|
||||||
ButtonTree:=TAVLTree.Create(@CompareControlsWithTag);
|
|
||||||
for j:=0 to ScrollBox.ControlCount-1 do begin
|
|
||||||
CurButton:=TSpeedbutton(ScrollBox.Controls[j]);
|
|
||||||
if IsSelectionToolBtn(CurButton) then continue;
|
|
||||||
if (CurButton is TSpeedButton) and CurButton.Visible then
|
|
||||||
ButtonTree.Add(CurButton);
|
|
||||||
end;
|
|
||||||
if ButtonTree.Count=0 then exit;
|
|
||||||
|
|
||||||
ButtonX:= ((ComponentPaletteBtnWidth*3) div 2) + 2;
|
|
||||||
|
|
||||||
{$IFDEF VerboseComponentPalette}
|
|
||||||
if aSheet.Caption = CompPalVerbPgName then
|
|
||||||
DebugLn(['TComponentPalette.ReAlignButtons',
|
|
||||||
' ButtonTree.Count=',ButtonTree.Count,
|
|
||||||
' ScrollBox.ControlCount=',ScrollBox.ControlCount,
|
|
||||||
' ScrollBox.Bounds=',dbgs(ScrollBox.BoundsRect),
|
|
||||||
' VertScrollBar.Size=',ScrollBox.VertScrollBar.Size,
|
|
||||||
' ClientSizeWithoutBar=',ScrollBox.VertScrollBar.ClientSizeWithoutBar,
|
|
||||||
' IsScrollBarVisible=',ScrollBox.VertScrollBar.IsScrollBarVisible,
|
|
||||||
' HorzScrollBar.Size=',ScrollBox.HorzScrollBar.Size,
|
|
||||||
' Page=',ScrollBox.HorzScrollBar.Page,
|
|
||||||
' Range=',ScrollBox.HorzScrollBar.Range,
|
|
||||||
' IsScrollBarVisible=',ScrollBox.HorzScrollBar.IsScrollBarVisible
|
|
||||||
]);
|
|
||||||
{$ENDIF}
|
|
||||||
{$IFDEF LCLCarbon}
|
|
||||||
MaxBtnPerRow:=ButtonTree.Count;
|
|
||||||
{$ELSE}
|
|
||||||
MaxBtnPerRow:=((ScrollBox.VertScrollBar.ClientSizeWithoutBar - ButtonX) div ComponentPaletteBtnWidth);
|
|
||||||
{$ENDIF}
|
|
||||||
// If we need to wrap, make sure we have space for the scrollbar
|
|
||||||
if MaxBtnPerRow < ButtonTree.Count then
|
|
||||||
MaxBtnPerRow:=((ScrollBox.VertScrollBar.ClientSizeWithBar - ButtonX) div ComponentPaletteBtnWidth);
|
|
||||||
//debugln(['TComponentPalette.ReAlignButtons MaxBtnPerRow=',MaxBtnPerRow,' ButtonTree.Count=',ButtonTree.Count,' ',ButtonX + MaxBtnPerRow * ComponentPaletteBtnWidth]);
|
|
||||||
if MaxBtnPerRow<1 then MaxBtnPerRow:=1;
|
|
||||||
|
|
||||||
j:=0;
|
|
||||||
Node:=ButtonTree.FindLowest;
|
|
||||||
while Node<>nil do begin
|
|
||||||
CurButton:=TSpeedbutton(Node.Data);
|
|
||||||
CurButton.SetBounds(ButtonX + (j mod MaxBtnPerRow) * ComponentPaletteBtnWidth,
|
|
||||||
(j div MaxBtnPerRow) * ComponentPaletteBtnHeight,
|
|
||||||
CurButton.Width, CurButton.Height);
|
|
||||||
{$IFDEF VerboseComponentPalette}
|
|
||||||
if aSheet.Caption = CompPalVerbPgName then
|
|
||||||
DebugLn(['TComponentPalette.ReAlignButtons ',CurButton.Name,' ',dbgs(CurButton.BoundsRect)]);
|
|
||||||
{$ENDIF}
|
|
||||||
inc(j);
|
|
||||||
Node:=ButtonTree.FindSuccessor(Node);
|
|
||||||
end;
|
|
||||||
aSheet.Invalidate;
|
|
||||||
finally
|
|
||||||
if PageControl<>nil then
|
|
||||||
PageControl.EnableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
|
|
||||||
FreeAndNil(ButtonTree);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TComponentPalette.IsSelectionToolBtn(aControl: TControl): boolean;
|
|
||||||
begin
|
|
||||||
Result:=(aControl is TSpeedButton)
|
|
||||||
and (LeftStr(aControl.Name,length(CompPalSelectionToolBtnPrefix))=CompPalSelectionToolBtnPrefix);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.RemoveUnneededPage(aSheet: TCustomPage);
|
procedure TComponentPalette.RemoveUnneededPage(aSheet: TCustomPage);
|
||||||
|
Loading…
Reference in New Issue
Block a user