Qt: simplify TQtWSStatusBar

git-svn-id: trunk@12037 -
This commit is contained in:
paul 2007-09-15 16:27:39 +00:00
parent fa25ff1432
commit 03a4859cb0
2 changed files with 50 additions and 56 deletions

View File

@ -345,6 +345,7 @@ type
function getText: WideString; override; function getText: WideString; override;
procedure setText(const W: WideString); override; procedure setText(const W: WideString); override;
procedure setMenuBar(AMenuBar: QMenuBarH); procedure setMenuBar(AMenuBar: QMenuBarH);
procedure setStatusBar(AStatusBar: QStatusBarH);
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override; function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
procedure OffsetMousePos(APoint: PQtPoint); override; procedure OffsetMousePos(APoint: PQtPoint); override;
procedure SlotWindowStateChange; cdecl; procedure SlotWindowStateChange; cdecl;
@ -3073,6 +3074,12 @@ begin
QLayout_setMenuBar(LayoutWidget, AMenuBar); QLayout_setMenuBar(LayoutWidget, AMenuBar);
end; end;
procedure TQtMainWindow.setStatusBar(AStatusBar: QStatusBarH);
begin
if IsMainForm then
QMainWindow_setStatusBar(QMainWindowH(Widget), AStatusBar);
end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Function: TQtMainWindow.EventFilter Function: TQtMainWindow.EventFilter
Params: None Params: None

View File

@ -33,7 +33,7 @@ uses
{$else} {$else}
qt4, qt4,
{$endif} {$endif}
qtwidgets, qtprivate, qtobjects, qtwidgets, qtprivate, qtobjects, qtproc, qtwscontrols,
// LCL // LCL
SysUtils, Classes, Types, ComCtrls, Controls, LCLType, Graphics, LCLProc, LCLIntf, Forms, SysUtils, Classes, Types, ComCtrls, Controls, LCLType, Graphics, LCLProc, LCLIntf, Forms,
// Widgetset // Widgetset
@ -47,12 +47,12 @@ type
private private
protected protected
public public
class procedure AddControl(const AControl: TControl); override;
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override;
class procedure DestroyHandle(const AWinControl: TWinControl); override; class procedure DestroyHandle(const AWinControl: TWinControl); override;
class procedure PanelUpdate(const AStatusBar: TStatusBar; PanelIndex: integer); override; class procedure PanelUpdate(const AStatusBar: TStatusBar; PanelIndex: integer); override;
class procedure SetPanelText(const AStatusBar: TStatusBar; PanelIndex: integer); override; class procedure SetPanelText(const AStatusBar: TStatusBar; PanelIndex: integer); override;
class procedure Update(const AStatusBar: TStatusBar); override; class procedure Update(const AStatusBar: TStatusBar); override;
class procedure ShowHide(const AWinControl: TWinControl); override;
end; end;
{ TQtWSTabSheet } { TQtWSTabSheet }
@ -239,7 +239,13 @@ type
implementation implementation
const
PanelBevelToQtFrameShapeMap: array[TStatusPanelBevel] of Integer =
(
{pbNone } Integer(QFrameNoFrame),
{pbLowered} Integer(QFramePanel) or Integer(QFrameSunken),
{pbRaised } Integer(QFramePanel) or Integer(QFrameRaised)
);
{ TQtWSToolButton } { TQtWSToolButton }
@ -452,8 +458,26 @@ end;
{ TQtWSStatusBar } { TQtWSStatusBar }
class procedure TQtWSStatusBar.AddControl(const AControl: TControl);
var
QtStatusBar: TQtStatusBar;
Parent: TQtWidget;
begin
if (AControl is TStatusBar) and WSCheckHandleAllocated(TStatusBar(AControl), 'AddControl') then
begin
TQtWSWinControl.AddControl(AControl);
QtStatusBar := TQtStatusBar(TWinControl(AControl).Handle);
Parent := TQtWidget(AControl.Parent.Handle);
if (Parent is TQtMainWindow) then
TQtMainWindow(Parent).setStatusBar(QStatusBarH(QtStatusBar.Widget));
end;
end;
class function TQtWSStatusBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; class function TQtWSStatusBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND;
var var
AStatusBar: TStatusBar absolute AWinControl;
QtStatusBar: TQtStatusBar; QtStatusBar: TQtStatusBar;
Str: WideString; Str: WideString;
i: Integer; i: Integer;
@ -462,36 +486,30 @@ begin
QtStatusBar := TQtStatusBar.Create(AWinControl, AParams); QtStatusBar := TQtStatusBar.Create(AWinControl, AParams);
QtStatusBar.AttachEvents; QtStatusBar.AttachEvents;
if TStatusBar(AWinControl).SimplePanel then if AStatusBar.SimplePanel then
begin begin
Str := UTF8Decode(TStatusBar(AWinControl).SimpleText); Str := UTF8Decode(AStatusBar.SimpleText);
QtStatusBar.showMessage(@Str); QtStatusBar.showMessage(@Str);
end else end else
if TStatusBar(AWinControl).Panels.Count > 0 then if AStatusBar.Panels.Count > 0 then
begin begin
SetLength(QtStatusBar.APanels, TStatusBar(AWinControl).Panels.Count); SetLength(QtStatusBar.APanels, AStatusBar.Panels.Count);
for i := 0 to TStatusBar(AWinControl).Panels.Count - 1 do for i := 0 to AStatusBar.Panels.Count - 1 do
begin begin
Str := UTF8Decode(TStatusBar(AWinControl).Panels[i].Text); Str := GetUtf8String(AStatusBar.Panels[i].Text);
QtStatusBar.APanels[i] := QLabel_create(@Str, QtStatusBar.Widget); QtStatusBar.APanels[i] := QLabel_create(@Str, QtStatusBar.Widget);
QFrame_setLineWidth(QFrameH(QtStatusBar.APanels[i]), 1); QFrame_setLineWidth(QFrameH(QtStatusBar.APanels[i]), 1);
QFrame_setMidLineWidth(QFrameH(QtStatusBar.APanels[i]), 0); QFrame_setMidLineWidth(QFrameH(QtStatusBar.APanels[i]), 0);
if TStatusBar(AWinControl).Panels[i].Bevel = pbNone then QFrame_setFrameStyle(QFrameH(QtStatusBar.APanels[i]),
QFrame_setFrameStyle(QFrameH(QtStatusBar.APanels[i]), Ord(QFrameNoFrame)) PanelBevelToQtFrameShapeMap[AStatusBar.Panels[i].Bevel]);
else
if TStatusBar(AWinControl).Panels[i].Bevel = pbLowered then
QFrame_setFrameStyle(QFrameH(QtStatusBar.APanels[i]),Ord(QFramePanel) or Ord(QFrameSunken))
else
if TStatusBar(AWinControl).Panels[i].Bevel = pbRaised then
QFrame_setFrameStyle(QFrameH(QtStatusBar.APanels[i]), Ord(QFramePanel) or Ord(QFrameRaised));
// QWidget_setContentsMargins(QtStatusBar.APanels[i], 0, 0, 2, 0); // QWidget_setContentsMargins(QtStatusBar.APanels[i], 0, 0, 2, 0);
QWidget_geometry(QtStatusBar.Widget, @R); QWidget_geometry(QtStatusBar.Widget, @R);
QWidget_setGeometry(QtStatusBar.APanels[i], 0, 0, TStatusBar(AWinControl).Panels[i].Width, R.Bottom); QWidget_setGeometry(QtStatusBar.APanels[i], 0, 0, AStatusBar.Panels[i].Width, R.Bottom);
QStatusBar_addWidget(QStatusBarH(QtStatusBar.Widget),QtStatusBar. APanels[i], 100); QStatusBar_addWidget(QStatusBarH(QtStatusBar.Widget), QtStatusBar.APanels[i], 100);
end; end;
end; end;
@ -532,7 +550,6 @@ begin
QtStatusBar := TQtStatusBar(AStatusBar.Handle); QtStatusBar := TQtStatusBar(AStatusBar.Handle);
if AStatusBar.SimplePanel then if AStatusBar.SimplePanel then
begin begin
if Length(QtStatusBar.APanels) > 0 then if Length(QtStatusBar.APanels) > 0 then
begin begin
for i := High(QtStatusBar.APanels) downto 0 do for i := High(QtStatusBar.APanels) downto 0 do
@ -549,25 +566,16 @@ begin
end else end else
if AStatusBar.Panels.Count > 0 then if AStatusBar.Panels.Count > 0 then
begin begin
QStatusBar_clearMessage(QStatusBarH(QtStatusBar.Widget)); QStatusBar_clearMessage(QStatusBarH(QtStatusBar.Widget));
if (PanelIndex >= Low(QtStatusBar.APanels)) and (PanelIndex <= High(QtStatusBar.APanels)) then if (PanelIndex >= Low(QtStatusBar.APanels)) and (PanelIndex <= High(QtStatusBar.APanels)) then
begin begin
Str := GetUtf8String(AStatusBar.Panels[PanelIndex].Text);
Str := UTF8Decode(AStatusBar.Panels[PanelIndex].Text);
QLabel_setText(QtStatusBar.APanels[PanelIndex], @Str); QLabel_setText(QtStatusBar.APanels[PanelIndex], @Str);
if AStatusBar.Panels[PanelIndex].Bevel = pbNone then QFrame_setFrameStyle(QFrameH(QtStatusBar.APanels[PanelIndex]),
QFrame_setFrameStyle(QFrameH(QtStatusBar.APanels[PanelIndex]), Ord(QFrameNoFrame)) PanelBevelToQtFrameShapeMap[AStatusBar.Panels[PanelIndex].Bevel]);
else
if AStatusBar.Panels[PanelIndex].Bevel = pbLowered then
QFrame_setFrameStyle(QFrameH(QtStatusBar.APanels[PanelIndex]),Ord(QFrameWinPanel) or Ord(QFrameSunken))
else
if AStatusBar.Panels[PanelIndex].Bevel = pbRaised then
QFrame_setFrameStyle(QFrameH(QtStatusBar.APanels[PanelIndex]), Ord(QFrameWinPanel) or Ord(QFrameRaised));
end; end;
end; end;
end; end;
@ -580,39 +588,18 @@ begin
QtStatusBar := TQtStatusBar(AStatusBar.Handle); QtStatusBar := TQtStatusBar(AStatusBar.Handle);
if AStatusBar.SimplePanel then if AStatusBar.SimplePanel then
begin begin
Str := UTF8Decode(AStatusBar.SimpleText); Str := GetUtf8String(AStatusBar.SimpleText);
QtStatusBar.showMessage(@Str); QtStatusBar.showMessage(@Str);
end else end else
begin begin
if (PanelIndex >= Low(QtStatusBar.APanels)) and (PanelIndex <= High(QtStatusBar.APanels)) then if (PanelIndex >= Low(QtStatusBar.APanels)) and (PanelIndex <= High(QtStatusBar.APanels)) then
begin begin
Str := UTF8Decode(AStatusBar.Panels[PanelIndex].Text); Str := GetUtf8String(AStatusBar.Panels[PanelIndex].Text);
QLabel_setText(QtStatusBar.APanels[PanelIndex], @Str); QLabel_setText(QtStatusBar.APanels[PanelIndex], @Str);
end; end;
end; end;
end; end;
class procedure TQtWSStatusBar.ShowHide(const AWinControl: TWinControl);
var
QtStatusBar: TQtStatusBar;
Parent: TQtWidget;
begin
{this routine should be removed as soon as we fix problem with invisible
TStatusBar while parent form isn't resized for the first time}
inherited ShowHide(AWinControl);
QtStatusBar := TQtStatusBar(AWinControl.Handle);
if Assigned(AWinControl.Parent) then
begin
Parent := TQtWidget(AWinControl.Parent.Handle);
if (Parent is TQtMainWindow)
and TQtMainWindow(Parent).IsMainForm then
QMainWindow_setStatusBar(QMainWindowH(Parent.Widget), QStatusBarH(QtStatusBar.Widget));
end;
end;
class procedure TQtWSStatusBar.Update(const AStatusBar: TStatusBar); class procedure TQtWSStatusBar.Update(const AStatusBar: TStatusBar);
var var
QtStatusBar: TQtStatusBar; QtStatusBar: TQtStatusBar;