mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-07 20:17:13 +01:00
Qt: removed previous patch for interacting with tabwidget during designtime, introduced getDesignInteractive().
git-svn-id: trunk@19093 -
This commit is contained in:
parent
f676add39f
commit
d8105e2133
@ -1290,8 +1290,6 @@ type
|
||||
{ TQtDesignWidget }
|
||||
|
||||
TQtDesignWidget = class(TQtMainWindow)
|
||||
private
|
||||
procedure DesignHookMouseClick(AControl: TControl ; APoint: TPoint);
|
||||
protected
|
||||
FDesignControlEventHook: QObject_hookH;
|
||||
FDesignControl: QWidgetH;
|
||||
@ -1328,7 +1326,8 @@ implementation
|
||||
uses
|
||||
LCLMessageGlue,
|
||||
qtCaret,
|
||||
qtproc;
|
||||
qtproc,
|
||||
WSControls;
|
||||
|
||||
const
|
||||
DblClickThreshold = 3;// max Movement between two clicks of a DblClick
|
||||
@ -9764,6 +9763,13 @@ begin
|
||||
end;
|
||||
|
||||
function TQtDesignWidget.DesignControlEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
||||
var
|
||||
p: TQtPoint;
|
||||
pt: TPoint;
|
||||
Control: TControl;
|
||||
MouseEvent: QMouseEventH;
|
||||
WidgetToNotify: QWidgetH;
|
||||
WSQtWidget: TWSWinControlClass;
|
||||
begin
|
||||
Result := False;
|
||||
QEvent_Accept(Event);
|
||||
@ -9771,47 +9777,48 @@ begin
|
||||
exit;
|
||||
BeginEventProcessing;
|
||||
case QEvent_type(Event) of
|
||||
QEventMouseButtonPress,
|
||||
QEventMouseButtonRelease:
|
||||
begin
|
||||
p := QMouseEvent_pos(QMouseEventH(Event))^;
|
||||
OffsetMousePos(@p);
|
||||
pt := Point(p.x, p.y);
|
||||
Control := LCLObject.ControlAtPos(pt, True, True);
|
||||
|
||||
if Assigned(Control) and (Control is TWinControl) then
|
||||
begin
|
||||
if Control is TCustomNotebook then
|
||||
WidgetToNotify := TQtTabWidget(TWinControl(Control).Handle).TabBar.Widget
|
||||
else
|
||||
WidgetToNotify := TQtWidget(TWinControl(Control).Handle).Widget;
|
||||
|
||||
p := QMouseEvent_pos(QMouseEventH(Event))^;
|
||||
QWidget_mapFrom(WidgetToNotify, @p, Widget, @p);
|
||||
Pt := Point(p.x, p.y);
|
||||
|
||||
WSQtWidget := TWSWinControlClass(TWinControl(Control).WidgetSetClass);
|
||||
|
||||
if WSQtWidget.GetDesignInteractive(TWinControl(Control), Pt) then
|
||||
begin
|
||||
MouseEvent := QMouseEvent_create(QEvent_type(Event), @p,
|
||||
QMouseEvent_globalpos(QMouseEventH(Event)),
|
||||
QMouseEvent_button(QMouseEventH(Event)),
|
||||
QMouseEvent_buttons(QMouseEventH(Event)),
|
||||
QInputEvent_modifiers(QInputEventH(Event))
|
||||
);
|
||||
QCoreApplication_postEvent(WidgetToNotify, MouseEvent, 1);
|
||||
end else
|
||||
Result := inherited EventFilter(Sender, Event);
|
||||
|
||||
end else
|
||||
Result := inherited EventFilter(Sender, Event);
|
||||
end;
|
||||
QEventPaint: SlotDesignControlPaint(Sender, Event);
|
||||
end;
|
||||
EndEventProcessing;
|
||||
end;
|
||||
|
||||
procedure TQtDesignWidget.DesignHookMouseClick(AControl: TControl;
|
||||
APoint: TPoint);
|
||||
var
|
||||
TabSheet: TTabSheet;
|
||||
TabWidget: TQtTabWidget;
|
||||
TabBar: TQtTabBar;
|
||||
TabIndex: Integer;
|
||||
R: TRect;
|
||||
p: TQtPoint;
|
||||
pt: TPoint;
|
||||
begin
|
||||
{TODO: add combobox too}
|
||||
if AControl is TCustomNoteBook then
|
||||
begin
|
||||
TabWidget := TQtTabWidget(TCustomNotebook(AControl).Handle);
|
||||
TabBar := TabWidget.TabBar;
|
||||
QWidget_geometry(TabWidget.Widget, @R);
|
||||
pt.X := APoint.X - R.Left;
|
||||
pt.Y := APoint.y - R.Top;
|
||||
QWidget_geometry(TabBar.Widget, @R);
|
||||
if LCLIntf.PtInRect(R, pt) then
|
||||
begin
|
||||
p.x := pt.X;
|
||||
p.y := pt.Y;
|
||||
TabIndex := QTabBar_tabAt(QTabBarH(TabBar.Widget), @p);
|
||||
if (TabIndex >= 0) and (TabWidget.getCurrentIndex <> TabIndex) then
|
||||
TabWidget.setCurrentIndex(TabIndex);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TQtDesignWidget.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl;
|
||||
var
|
||||
p: TQtPoint;
|
||||
pt: TPoint;
|
||||
Control: TControl;
|
||||
begin
|
||||
Result := False;
|
||||
QEvent_accept(Event);
|
||||
@ -9820,22 +9827,6 @@ begin
|
||||
|
||||
BeginEventProcessing;
|
||||
case QEvent_type(Event) of
|
||||
QEventMouseButtonPress,
|
||||
QEventMouseButtonRelease:
|
||||
begin
|
||||
Result := inherited EventFilter(Sender, Event);
|
||||
p := QMouseEvent_pos(QMouseEventH(Event))^;
|
||||
OffsetMousePos(@p);
|
||||
pt.X := P.x;
|
||||
pt.Y := P.y;
|
||||
Control := LCLObject.ControlAtPos(pt, True, True);
|
||||
if Assigned(Control) then
|
||||
begin
|
||||
{hook for TCustomNotebook}
|
||||
if (Control is TCustomNoteBook) then
|
||||
DesignHookMouseClick(Control, pt);
|
||||
end;
|
||||
end;
|
||||
QEventChildAdded,
|
||||
QEventChildRemoved: BringDesignerToFront;
|
||||
QEventResize:
|
||||
|
||||
@ -71,6 +71,7 @@ type
|
||||
class procedure AddControl(const AControl: TControl); override;
|
||||
class function GetClientBounds(const AWincontrol: TWinControl; var ARect: TRect): Boolean; override;
|
||||
class function GetClientRect(const AWincontrol: TWinControl; var ARect: TRect): Boolean; override;
|
||||
class function GetDesignInteractive(const AWinControl: TWinControl; AClientPos: TPoint): Boolean; override;
|
||||
|
||||
class procedure SetBiDiMode(const AWinControl: TWinControl; UseRightToLeftAlign, UseRightToLeftReading, UseRightToLeftScrollBar : Boolean); override;
|
||||
class procedure SetBounds(const AWinControl: TWinControl; const ALeft, ATop, AWidth, AHeight: Integer); override;
|
||||
@ -313,6 +314,15 @@ begin
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
class function TQtWSWinControl.GetDesignInteractive(
|
||||
const AWinControl: TWinControl; AClientPos: TPoint): Boolean;
|
||||
begin
|
||||
Result := False;
|
||||
if not WSCheckHandleAllocated(AWinControl, 'GetDesignInteractive') then
|
||||
Exit;
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
class procedure TQtWSWinControl.SetBiDiMode(const AWinControl : TWinControl;
|
||||
UseRightToLeftAlign, UseRightToLeftReading, UseRightToLeftScrollBar : Boolean
|
||||
);
|
||||
|
||||
@ -64,6 +64,7 @@ type
|
||||
class procedure RemovePage(const ANotebook: TCustomNotebook;
|
||||
const AIndex: integer); override;
|
||||
|
||||
class function GetDesignInteractive(const AWinControl: TWinControl; AClientPos: TPoint): Boolean; override;
|
||||
class function GetTabIndexAtPos(const ANotebook: TCustomNotebook; const AClientPos: TPoint): integer; override;
|
||||
class procedure SetPageIndex(const ANotebook: TCustomNotebook; const AIndex: integer); override;
|
||||
class procedure SetTabCaption(const ANotebook: TCustomNotebook; const AChild: TCustomPage; const AText: string); override;
|
||||
@ -343,6 +344,24 @@ begin
|
||||
TabWidget.setUpdatesEnabled(true);
|
||||
end;
|
||||
|
||||
class function TQtWSCustomNotebook.GetDesignInteractive(
|
||||
const AWinControl: TWinControl; AClientPos: TPoint): Boolean;
|
||||
var
|
||||
TabWidget: TQtTabWidget;
|
||||
TabBar: TQtTabBar;
|
||||
TabIndex: Integer;
|
||||
p: TQtPoint;
|
||||
begin
|
||||
Result := False;
|
||||
if not WSCheckHandleAllocated(AWinControl, 'GetDesignInteractive') then
|
||||
Exit;
|
||||
TabWidget := TQtTabWidget(AWinControl.Handle);
|
||||
TabBar := TabWidget.TabBar;
|
||||
p := QtPoint(AClientPos.x, AClientPos.y);
|
||||
TabIndex := QTabBar_tabAt(QTabBarH(TabBar.Widget), @p);
|
||||
Result := (TabIndex >= 0) and (TabWidget.getCurrentIndex <> TabIndex);
|
||||
end;
|
||||
|
||||
class function TQtWSCustomNotebook.GetTabIndexAtPos(
|
||||
const ANotebook: TCustomNotebook; const AClientPos: TPoint): integer;
|
||||
var
|
||||
|
||||
Loading…
Reference in New Issue
Block a user