mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-13 14:59:11 +02:00
Qt: Introduced new class - TQtViewPort. Known problems: Mouse wheel does not work inside some TCustomControls (eg.SynEdit, TTreeView), but works inside eg. TStringGrid.
git-svn-id: trunk@12312 -
This commit is contained in:
parent
b872b7d1f0
commit
913a6539fa
@ -42,6 +42,7 @@ uses
|
|||||||
type
|
type
|
||||||
// forward declarations
|
// forward declarations
|
||||||
TQtListWidget = class;
|
TQtListWidget = class;
|
||||||
|
TQtViewPort = class;
|
||||||
|
|
||||||
TByteSet = set of byte;
|
TByteSet = set of byte;
|
||||||
|
|
||||||
@ -107,7 +108,7 @@ type
|
|||||||
LCLObject: TWinControl;
|
LCLObject: TWinControl;
|
||||||
public
|
public
|
||||||
constructor Create(const AWinControl: TWinControl; const AParams: TCreateParams); virtual; reintroduce;
|
constructor Create(const AWinControl: TWinControl; const AParams: TCreateParams); virtual; reintroduce;
|
||||||
constructor CreateFrom(const AWinControl: TWinControl; AWidget: QWidgetH);
|
constructor CreateFrom(const AWinControl: TWinControl; AWidget: QWidgetH); virtual;
|
||||||
procedure InitializeWidget;
|
procedure InitializeWidget;
|
||||||
procedure DeInitializeWidget;
|
procedure DeInitializeWidget;
|
||||||
procedure RecreateWidget;
|
procedure RecreateWidget;
|
||||||
@ -274,7 +275,7 @@ type
|
|||||||
TQtAbstractScrollArea = class(TQtFrame)
|
TQtAbstractScrollArea = class(TQtFrame)
|
||||||
private
|
private
|
||||||
FCornerWidget: TQtWidget;
|
FCornerWidget: TQtWidget;
|
||||||
FViewPortWidget: TQtWidget;
|
FViewPortWidget: TQtViewPort;
|
||||||
FHScrollbar: TQtScrollBar;
|
FHScrollbar: TQtScrollBar;
|
||||||
FVScrollbar: TQtScrollbar;
|
FVScrollbar: TQtScrollbar;
|
||||||
protected
|
protected
|
||||||
@ -289,7 +290,7 @@ type
|
|||||||
function cornerWidget: TQtWidget;
|
function cornerWidget: TQtWidget;
|
||||||
function horizontalScrollBar: TQtScrollBar;
|
function horizontalScrollBar: TQtScrollBar;
|
||||||
function verticalScrollBar: TQtScrollBar;
|
function verticalScrollBar: TQtScrollBar;
|
||||||
function viewport: TQtWidget;
|
function viewport: TQtViewPort;
|
||||||
function getClientBounds: TRect; override;
|
function getClientBounds: TRect; override;
|
||||||
procedure grabMouse; override;
|
procedure grabMouse; override;
|
||||||
procedure SetColor(const Value: PQColor); override;
|
procedure SetColor(const Value: PQColor); override;
|
||||||
@ -303,6 +304,17 @@ type
|
|||||||
procedure viewportNeeded;
|
procedure viewportNeeded;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TQtViewPort }
|
||||||
|
TQtViewPort = class(TQtWidget)
|
||||||
|
public
|
||||||
|
ParentArea: TQtAbstractScrollArea;
|
||||||
|
constructor Create(const AWinControl: TWinControl; const AParams: TCreateParams); override;
|
||||||
|
constructor CreateFrom(const AWinControl: TWinControl; AWidget: QWidgetH); override;
|
||||||
|
function getClientBounds: TRect; override;
|
||||||
|
procedure OffsetMousePos(APoint: PQtPoint); override;
|
||||||
|
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TQtGraphicView }
|
{ TQtGraphicView }
|
||||||
|
|
||||||
TQtGraphicsView = class(TQtAbstractScrollArea)
|
TQtGraphicsView = class(TQtAbstractScrollArea)
|
||||||
@ -6365,6 +6377,47 @@ begin
|
|||||||
QDialog_setSizeGripEnabled(QDialogH(Widget), AEnabled);
|
QDialog_setSizeGripEnabled(QDialogH(Widget), AEnabled);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TQtViewPort }
|
||||||
|
constructor TQtViewPort.Create(const AWinControl: TWinControl; const AParams: TCreateParams);
|
||||||
|
begin
|
||||||
|
inherited Create(AWinControl, AParams);
|
||||||
|
ParentArea := TQtAbstractScrollArea(AWinControl.Handle);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TQtViewPort.CreateFrom(const AWinControl: TWinControl; AWidget: QWidgetH);
|
||||||
|
begin
|
||||||
|
inherited CreateFrom(AWinControl, AWidget);
|
||||||
|
ParentArea := TQtAbstractScrollArea(AWinControl.Handle);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TQtViewPort.getClientBounds: TRect;
|
||||||
|
begin
|
||||||
|
Result := inherited getClientBounds;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TQtViewPort.OffsetMousePos(APoint: PQtPoint);
|
||||||
|
begin
|
||||||
|
inherited OffsetMousePos(APoint);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TQtViewPort.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
||||||
|
var
|
||||||
|
R: TRect;
|
||||||
|
begin
|
||||||
|
case QEvent_type(Event) of
|
||||||
|
QEventResize: Result := False;
|
||||||
|
QEventLayoutRequest:
|
||||||
|
begin
|
||||||
|
{TODO: we'll never catch this place, since layout request comes
|
||||||
|
into scrollarea only. arghhh ?!$Q#$!#!# }
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
Result := inherited EventFilter(Sender, Event);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TQtAbstractScrollArea }
|
{ TQtAbstractScrollArea }
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
@ -6403,18 +6456,29 @@ end;
|
|||||||
|
|
||||||
function TQtAbstractScrollArea.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
function TQtAbstractScrollArea.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
||||||
begin
|
begin
|
||||||
if QEvent_type(Event) = QEventPaint then
|
case QEvent_type(Event) of
|
||||||
Result := False
|
QEventPaint,
|
||||||
else
|
QEventMouseButtonPress,
|
||||||
Result := inherited EventFilter(Sender, Event);
|
QEventMouseButtonRelease,
|
||||||
|
QEventMouseButtonDblClick: Result := False;
|
||||||
|
QEventLayoutRequest:
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
{TODO: Check what we can do here with viewport, seem that this
|
||||||
|
comes too late (after few resize events ...) }
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
Result := inherited EventFilter(Sender, Event);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TQtAbstractScrollArea.ViewPortEventFilter(event: QEventH; retval: PBoolean); cdecl;
|
procedure TQtAbstractScrollArea.ViewPortEventFilter(event: QEventH; retval: PBoolean); cdecl;
|
||||||
begin
|
begin
|
||||||
{$ifdef VerboseViewPortEventFilter}
|
{$ifdef VerboseViewPortEventFilter}
|
||||||
WriteLn(QEvent_type(Event));
|
WriteLn('ViewPortEventFilter ',QEvent_type(Event));
|
||||||
{$endif}
|
{$endif}
|
||||||
retval^ := QLCLAbstractScrollArea_InheritedViewportEvent(QLCLAbstractScrollAreaH(Widget), event);
|
retval^ := false;
|
||||||
|
// QLCLAbstractScrollArea_InheritedViewportEvent(QLCLAbstractScrollAreaH(Widget), event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TQtAbstractScrollArea.DestroyNotify(AWidget: TQtWidget);
|
procedure TQtAbstractScrollArea.DestroyNotify(AWidget: TQtWidget);
|
||||||
@ -6573,7 +6637,7 @@ end;
|
|||||||
Params: None
|
Params: None
|
||||||
Returns: viewport widget of QAbstractScrollArea
|
Returns: viewport widget of QAbstractScrollArea
|
||||||
------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
function TQtAbstractScrollArea.viewport: TQtWidget;
|
function TQtAbstractScrollArea.viewport: TQtViewport;
|
||||||
begin
|
begin
|
||||||
viewportNeeded;
|
viewportNeeded;
|
||||||
Result := FViewPortWidget;
|
Result := FViewPortWidget;
|
||||||
@ -6617,13 +6681,13 @@ begin
|
|||||||
if AViewPort = nil then
|
if AViewPort = nil then
|
||||||
begin
|
begin
|
||||||
FillChar(AParams, SizeOf(AParams), #0);
|
FillChar(AParams, SizeOf(AParams), #0);
|
||||||
FViewPortWidget := TQtWidget.Create(LCLObject, AParams);
|
FViewPortWidget := TQtViewPort.Create(LCLObject, AParams);
|
||||||
FViewPortWidget.setFocusProxy(Widget);
|
FViewPortWidget.setFocusProxy(Widget);
|
||||||
FViewPortWidget.setBackgroundRole(QPaletteNoRole);
|
FViewPortWidget.setBackgroundRole(QPaletteNoRole);
|
||||||
FViewPortWidget.setAutoFillBackground(False);
|
FViewPortWidget.setAutoFillBackground(False);
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
FViewPortWidget := TQtWidget.CreateFrom(LCLObject, AViewPort);
|
FViewPortWidget := TQtViewPort.CreateFrom(LCLObject, AViewPort);
|
||||||
end;
|
end;
|
||||||
FViewPortWidget.FOwner := Self;
|
FViewPortWidget.FOwner := Self;
|
||||||
FViewPortWidget.AttachEvents; // some event will be redirected to scroll area
|
FViewPortWidget.AttachEvents; // some event will be redirected to scroll area
|
||||||
|
Loading…
Reference in New Issue
Block a user