mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-03 04:02:45 +02:00
Qt statusbar:
- simplify code a bit - take panels alignment into account - dont show size grip if parent is not a form (fixes #0010834) git-svn-id: trunk@14159 -
This commit is contained in:
parent
4b057149d8
commit
6c8377e7b0
@ -973,9 +973,11 @@ type
|
||||
protected
|
||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||
public
|
||||
APanels: Array of QLabelH;
|
||||
Panels: array of QLabelH;
|
||||
procedure showMessage(text: PWideString; timeout: Integer = 0);
|
||||
procedure addWidget(AWidget: QWidgetH; AStretch: Integer = 0);
|
||||
function isSizeGripEnabled: Boolean;
|
||||
procedure setSizeGripEnabled(const Value: Boolean);
|
||||
end;
|
||||
|
||||
{ TQtDialog }
|
||||
@ -6796,7 +6798,7 @@ end;
|
||||
|
||||
function TQtStatusBar.CreateWidget(const AParams: TCreateParams): QWidgetH;
|
||||
begin
|
||||
SetLength(APanels, 0);
|
||||
SetLength(Panels, 0);
|
||||
Result := QStatusBar_create();
|
||||
Widget := Result;
|
||||
end;
|
||||
@ -6811,6 +6813,16 @@ begin
|
||||
QStatusBar_addWidget(QStatusBarH(Widget), AWidget, AStretch);
|
||||
end;
|
||||
|
||||
function TQtStatusBar.isSizeGripEnabled: Boolean;
|
||||
begin
|
||||
Result := QStatusBar_isSizeGripEnabled(QStatusBarH(Widget));
|
||||
end;
|
||||
|
||||
procedure TQtStatusBar.setSizeGripEnabled(const Value: Boolean);
|
||||
begin
|
||||
QStatusBar_setSizeGripEnabled(QStatusBarH(Widget), Value);
|
||||
end;
|
||||
|
||||
{ TQtDialog }
|
||||
|
||||
function TQtDialog.CreateWidget(parent: QWidgetH; f: QtWindowFlags): QWidgetH;
|
||||
|
@ -44,6 +44,8 @@ type
|
||||
TQtWSStatusBar = class(TWSStatusBar)
|
||||
private
|
||||
protected
|
||||
class procedure ClearPanels(const Widget: TQtStatusBar);
|
||||
class procedure RecreatePanels(const AStatusBar: TStatusBar; const Widget: TQtStatusBar);
|
||||
public
|
||||
class procedure AddControl(const AControl: TControl); override;
|
||||
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||
@ -255,6 +257,13 @@ const
|
||||
{trVertical } QtVertical
|
||||
);
|
||||
|
||||
AlignmentToQtAlignmentMap: array[TAlignment] of QtAlignment =
|
||||
(
|
||||
{taLeftJustify } QtAlignLeft,
|
||||
{taRightJustify} QtAlignRight,
|
||||
{taCenter } QtAlignCenter
|
||||
);
|
||||
|
||||
|
||||
{ TQtWSToolButton }
|
||||
|
||||
@ -444,55 +453,82 @@ end;
|
||||
|
||||
{ TQtWSStatusBar }
|
||||
|
||||
class procedure TQtWSStatusBar.ClearPanels(const Widget: TQtStatusBar);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
if length(Widget.Panels) > 0 then
|
||||
begin
|
||||
for i := High(Widget.Panels) downto 0 do
|
||||
begin
|
||||
QStatusBar_removeWidget(QStatusBarH(Widget.Widget), Widget.Panels[i]);
|
||||
QLabel_destroy(Widget.Panels[i]);
|
||||
end;
|
||||
SetLength(Widget.Panels, 0);
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TQtWSStatusBar.RecreatePanels(const AStatusBar: TStatusBar;
|
||||
const Widget: TQtStatusBar);
|
||||
var
|
||||
Str: WideString;
|
||||
i: Integer;
|
||||
R: TRect;
|
||||
begin
|
||||
ClearPanels(Widget);
|
||||
if AStatusBar.SimplePanel then
|
||||
begin
|
||||
Str := GetUtf8String(AStatusBar.SimpleText);
|
||||
Widget.showMessage(@Str);
|
||||
end else
|
||||
if AStatusBar.Panels.Count > 0 then
|
||||
begin
|
||||
SetLength(Widget.Panels, AStatusBar.Panels.Count);
|
||||
for i := 0 to AStatusBar.Panels.Count - 1 do
|
||||
begin
|
||||
Str := GetUtf8String(AStatusBar.Panels[i].Text);
|
||||
Widget.Panels[i] := QLabel_create(@Str, Widget.Widget);
|
||||
QLabel_setAlignment(Widget.Panels[i],
|
||||
AlignmentToQtAlignmentMap[AStatusBar.Panels[i].Alignment]);
|
||||
R := Widget.getFrameGeometry;
|
||||
QWidget_setGeometry(Widget.Panels[i], 0, 0, AStatusBar.Panels[i].Width, R.Bottom);
|
||||
Widget.addWidget(Widget.Panels[i], AStatusBar.Panels[i].Width);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TQtWSStatusBar.AddControl(const AControl: TControl);
|
||||
var
|
||||
QtStatusBar: TQtStatusBar;
|
||||
Parent: TQtWidget;
|
||||
begin
|
||||
if (AControl is TStatusBar) and WSCheckHandleAllocated(TStatusBar(AControl), 'AddControl') then
|
||||
if not WSCheckHandleAllocated(TStatusBar(AControl), 'AddControl') then
|
||||
Exit;
|
||||
|
||||
TQtWSWinControl.AddControl(AControl);
|
||||
|
||||
QtStatusBar := TQtStatusBar(TWinControl(AControl).Handle);
|
||||
|
||||
Parent := TQtWidget(AControl.Parent.Handle);
|
||||
if (Parent is TQtMainWindow) and (TQtMainWindow(Parent).IsMainForm) and
|
||||
(TQtMainWindow(Parent).StatusBar = nil) then
|
||||
begin
|
||||
TQtWSWinControl.AddControl(AControl);
|
||||
|
||||
QtStatusBar := TQtStatusBar(TWinControl(AControl).Handle);
|
||||
|
||||
Parent := TQtWidget(AControl.Parent.Handle);
|
||||
if (Parent is TQtMainWindow) and (TQtMainWindow(Parent).IsMainForm)
|
||||
and (TQtMainWindow(Parent).StatusBar = nil) then
|
||||
begin
|
||||
TQtMainWindow(Parent).StatusBar := QtStatusBar;
|
||||
TQtMainWindow(Parent).setStatusBar(QStatusBarH(QtStatusBar.Widget));
|
||||
end;
|
||||
TQtMainWindow(Parent).StatusBar := QtStatusBar;
|
||||
TQtMainWindow(Parent).setStatusBar(QStatusBarH(QtStatusBar.Widget));
|
||||
end;
|
||||
// dont allow resize if parent is not form
|
||||
QtStatusBar.setSizeGripEnabled(AControl.Parent is TCustomForm);
|
||||
end;
|
||||
|
||||
class function TQtWSStatusBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
|
||||
var
|
||||
AStatusBar: TStatusBar absolute AWinControl;
|
||||
QtStatusBar: TQtStatusBar;
|
||||
Str: WideString;
|
||||
i: Integer;
|
||||
R: TRect;
|
||||
begin
|
||||
QtStatusBar := TQtStatusBar.Create(AWinControl, AParams);
|
||||
|
||||
if AStatusBar.SimplePanel then
|
||||
begin
|
||||
Str := GetUtf8String(AStatusBar.SimpleText);
|
||||
QtStatusBar.showMessage(@Str);
|
||||
end else
|
||||
if AStatusBar.Panels.Count > 0 then
|
||||
begin
|
||||
SetLength(QtStatusBar.APanels, AStatusBar.Panels.Count);
|
||||
for i := 0 to AStatusBar.Panels.Count - 1 do
|
||||
begin
|
||||
Str := GetUtf8String(AStatusBar.Panels[i].Text);
|
||||
QtStatusBar.APanels[i] := QLabel_create(@Str, QtStatusBar.Widget);
|
||||
R := QtStatusBar.getFrameGeometry;
|
||||
QWidget_setGeometry(QtStatusBar.APanels[i], 0, 0, AStatusBar.Panels[i].Width, R.Bottom);
|
||||
QtStatusBar.addWidget(QtStatusBar.APanels[i], AStatusBar.Panels[i].Width);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
RecreatePanels(TStatusBar(AWinControl), QtStatusBar);
|
||||
|
||||
QtStatusBar.AttachEvents;
|
||||
|
||||
// Return handle
|
||||
@ -503,24 +539,11 @@ end;
|
||||
class procedure TQtWSStatusBar.DestroyHandle(const AWinControl: TWinControl);
|
||||
var
|
||||
QtStatusBar: TQtStatusBar;
|
||||
i: Integer;
|
||||
begin
|
||||
|
||||
QtStatusBar := TQtStatusBar(AWinControl.Handle);
|
||||
|
||||
if length(QtStatusBar.APanels) > 0 then
|
||||
begin
|
||||
for i := High(QtStatusBar.APanels) downto 0 do
|
||||
begin
|
||||
QStatusBar_removeWidget(QStatusBarH(QtStatusBar.Widget), QtStatusBar.APanels[i]);
|
||||
QLabel_destroy(QtStatusBar.APanels[i]);
|
||||
end;
|
||||
SetLength(QtStatusBar.APanels, 0);
|
||||
end;
|
||||
|
||||
ClearPanels(QtStatusBar);
|
||||
TQtStatusBar(AWinControl.Handle).Release;
|
||||
|
||||
AWinControl.Handle := 0;
|
||||
end;
|
||||
|
||||
class procedure TQtWSStatusBar.PanelUpdate(const AStatusBar: TStatusBar; PanelIndex: integer);
|
||||
@ -532,28 +555,29 @@ begin
|
||||
QtStatusBar := TQtStatusBar(AStatusBar.Handle);
|
||||
if AStatusBar.SimplePanel then
|
||||
begin
|
||||
if Length(QtStatusBar.APanels) > 0 then
|
||||
if Length(QtStatusBar.Panels) > 0 then
|
||||
begin
|
||||
for i := High(QtStatusBar.APanels) downto 0 do
|
||||
for i := High(QtStatusBar.Panels) downto 0 do
|
||||
begin
|
||||
QStatusBar_removeWidget(QStatusBarH(QtStatusBar.Widget), QtStatusBar.APanels[i]);
|
||||
QLabel_destroy(QtStatusBar.APanels[i]);
|
||||
QStatusBar_removeWidget(QStatusBarH(QtStatusBar.Widget), QtStatusBar.Panels[i]);
|
||||
QLabel_destroy(QtStatusBar.Panels[i]);
|
||||
end;
|
||||
SetLength(QtStatusBar.APanels, 0);
|
||||
SetLength(QtStatusBar.Panels, 0);
|
||||
end;
|
||||
|
||||
Str := GetUtf8String(AStatusBar.SimpleText);
|
||||
QtStatusBar.showMessage(@Str);
|
||||
|
||||
end else
|
||||
if AStatusBar.Panels.Count > 0 then
|
||||
begin
|
||||
QStatusBar_clearMessage(QStatusBarH(QtStatusBar.Widget));
|
||||
|
||||
if (PanelIndex >= Low(QtStatusBar.APanels)) and (PanelIndex <= High(QtStatusBar.APanels)) then
|
||||
if (PanelIndex >= Low(QtStatusBar.Panels)) and (PanelIndex <= High(QtStatusBar.Panels)) then
|
||||
begin
|
||||
Str := GetUtf8String(AStatusBar.Panels[PanelIndex].Text);
|
||||
QLabel_setText(QtStatusBar.APanels[PanelIndex], @Str);
|
||||
QLabel_setText(QtStatusBar.Panels[PanelIndex], @Str);
|
||||
QLabel_setAlignment(QtStatusBar.Panels[PanelIndex],
|
||||
AlignmentToQtAlignmentMap[AStatusBar.Panels[PanelIndex].Alignment]);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -570,10 +594,10 @@ begin
|
||||
QtStatusBar.showMessage(@Str);
|
||||
end else
|
||||
begin
|
||||
if (PanelIndex >= Low(QtStatusBar.APanels)) and (PanelIndex <= High(QtStatusBar.APanels)) then
|
||||
if (PanelIndex >= Low(QtStatusBar.Panels)) and (PanelIndex <= High(QtStatusBar.Panels)) then
|
||||
begin
|
||||
Str := GetUtf8String(AStatusBar.Panels[PanelIndex].Text);
|
||||
QLabel_setText(QtStatusBar.APanels[PanelIndex], @Str);
|
||||
QLabel_setText(QtStatusBar.Panels[PanelIndex], @Str);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -581,55 +605,9 @@ end;
|
||||
class procedure TQtWSStatusBar.Update(const AStatusBar: TStatusBar);
|
||||
var
|
||||
QtStatusBar: TQtStatusBar;
|
||||
i: Integer;
|
||||
Str: WideString;
|
||||
R: TRect;
|
||||
begin
|
||||
QtStatusBar := TQtStatusBar(AStatusBar.Handle);
|
||||
if AStatusBar.SimplePanel then
|
||||
begin
|
||||
if Length(QtStatusBar.APanels) > 0 then
|
||||
begin
|
||||
|
||||
for i := High(QtStatusBar.APanels) downto 0 do
|
||||
begin
|
||||
QStatusBar_removeWidget(QStatusBarH(QtStatusBar.Widget), QtStatusBar.APanels[i]);
|
||||
QLabel_destroy(QtStatusBar.APanels[i]);
|
||||
end;
|
||||
|
||||
SetLength(QtStatusBar.APanels, 0);
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
if Length(QtStatusBar.APanels) <> AStatusBar.Panels.Count then
|
||||
begin
|
||||
|
||||
QStatusBar_clearMessage(QStatusBarH(QtStatusBar.Widget));
|
||||
|
||||
for i := High(QtStatusBar.APanels) downto 0 do
|
||||
begin
|
||||
QStatusBar_removeWidget(QStatusBarH(QtStatusBar.Widget), QtStatusBar.APanels[i]);
|
||||
QLabel_destroy(QtStatusBar.APanels[i]);
|
||||
end;
|
||||
|
||||
SetLength(QtStatusBar.APanels, 0);
|
||||
SetLength(QtStatusBar.APanels, AStatusBar.Panels.Count);
|
||||
|
||||
|
||||
for i := 0 to AStatusBar.Panels.Count - 1 do
|
||||
begin
|
||||
Str := GetUtf8String(AStatusBar.Panels[i].Text);
|
||||
|
||||
QtStatusBar.APanels[i] := QLabel_create(@Str, QtStatusBar.Widget);
|
||||
|
||||
R := QtStatusBar.getFrameGeometry;
|
||||
QWidget_setGeometry(QtStatusBar.APanels[i], 0, 0, AStatusBar.Panels[i].Width, R.Bottom);
|
||||
|
||||
QtStatusBar.addWidget(QtStatusBar.APanels[i], AStatusBar.Panels[i].Width);
|
||||
QWidget_show(QtStatusBar.APanels[i]);
|
||||
end;
|
||||
end
|
||||
end;
|
||||
RecreatePanels(AStatusBar, QtStatusBar);
|
||||
end;
|
||||
|
||||
{ TQtWSCustomListView }
|
||||
@ -749,24 +727,14 @@ class procedure TQtWSCustomListView.ColumnSetAlignment(const ALV: TCustomListVie
|
||||
var
|
||||
TW: QTreeWidgetH;
|
||||
TWI: QTreeWidgetItemH;
|
||||
FAlign: QtAlignment;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnSetAlignment') then
|
||||
Exit;
|
||||
|
||||
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
|
||||
TWI := QTreeWidget_headerItem(TW);
|
||||
|
||||
case AAlignment of
|
||||
taLeftJustify: FAlign := QtAlignLeft;
|
||||
taRightJustify: FAlign := QtAlignRight;
|
||||
taCenter: FAlign := QtAlignCenter;
|
||||
else
|
||||
FAlign := QtAlignLeft;
|
||||
end;
|
||||
|
||||
QTreeWidgetItem_setTextAlignment(TWI, AIndex, FAlign);
|
||||
|
||||
|
||||
QTreeWidgetItem_setTextAlignment(TWI, AIndex, AlignmentToQtAlignmentMap[AAlignment]);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user