Qt: removed previous patch for interacting with tabwidget during designtime, introduced getDesignInteractive().

git-svn-id: trunk@19093 -
This commit is contained in:
zeljko 2009-03-24 18:48:06 +00:00
parent f676add39f
commit d8105e2133
3 changed files with 74 additions and 54 deletions

View File

@ -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:

View File

@ -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
);

View File

@ -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