qgraphicsproxywidget.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/graphicsview/qgraphicsproxywidget.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2015 The Qt Company Ltd.-
4** Contact: http://www.qt.io/licensing/-
5**-
6** This file is part of the QtWidgets module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL21$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see http://www.qt.io/terms-conditions. For further-
15** information use the contact form at http://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 2.1 or version 3 as published by the Free-
20** Software Foundation and appearing in the file LICENSE.LGPLv21 and-
21** LICENSE.LGPLv3 included in the packaging of this file. Please review the-
22** following information to ensure the GNU Lesser General Public License-
23** requirements will be met: https://www.gnu.org/licenses/lgpl.html and-
24** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.-
25**-
26** As a special exception, The Qt Company gives you certain additional-
27** rights. These rights are described in The Qt Company LGPL Exception-
28** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.-
29**-
30** $QT_END_LICENSE$-
31**-
32****************************************************************************/-
33-
34#include "qglobal.h"-
35-
36#ifndef QT_NO_GRAPHICSVIEW-
37-
38#include "qgraphicslayout.h"-
39#include "qgraphicsproxywidget.h"-
40#include "private/qgraphicsproxywidget_p.h"-
41#include "private/qwidget_p.h"-
42#include "private/qapplication_p.h"-
43-
44#include <QtCore/qdebug.h>-
45#include <QtGui/qevent.h>-
46#include <QtWidgets/qgraphicsscene.h>-
47#include <QtWidgets/qgraphicssceneevent.h>-
48#include <QtWidgets/qlayout.h>-
49#include <QtGui/qpainter.h>-
50#include <QtWidgets/qstyleoption.h>-
51#include <QtWidgets/qgraphicsview.h>-
52#include <QtWidgets/qlistview.h>-
53#include <QtWidgets/qlineedit.h>-
54#include <QtWidgets/qtextedit.h>-
55-
56QT_BEGIN_NAMESPACE-
57-
58//#define GRAPHICSPROXYWIDGET_DEBUG-
59-
60/*!-
61 \class QGraphicsProxyWidget-
62 \brief The QGraphicsProxyWidget class provides a proxy layer for embedding-
63 a QWidget in a QGraphicsScene.-
64 \since 4.4-
65 \ingroup graphicsview-api-
66 \inmodule QtWidgets-
67-
68 QGraphicsProxyWidget embeds QWidget-based widgets, for example, a-
69 QPushButton, QFontComboBox, or even QFileDialog, into-
70 QGraphicsScene. It forwards events between the two objects and-
71 translates between QWidget's integer-based geometry and-
72 QGraphicsWidget's qreal-based geometry. QGraphicsProxyWidget-
73 supports all core features of QWidget, including tab focus,-
74 keyboard input, Drag & Drop, and popups. You can also embed-
75 complex widgets, e.g., widgets with subwidgets.-
76-
77 Example:-
78-
79 \snippet code/src_gui_graphicsview_qgraphicsproxywidget.cpp 0-
80-
81 QGraphicsProxyWidget takes care of automatically embedding popup children-
82 of embedded widgets through creating a child proxy for each popup. This-
83 means that when an embedded QComboBox shows its popup list, a new-
84 QGraphicsProxyWidget is created automatically, embedding the popup, and-
85 positioning it correctly. This only works if the popup is child of the-
86 embedded widget (for example QToolButton::setMenu() requires the QMenu instance-
87 to be child of the QToolButton).-
88-
89 \section1 Embedding a Widget with QGraphicsProxyWidget-
90-
91 There are two ways to embed a widget using QGraphicsProxyWidget. The most-
92 common way is to pass a widget pointer to QGraphicsScene::addWidget()-
93 together with any relevant \l Qt::WindowFlags. This function returns a-
94 pointer to a QGraphicsProxyWidget. You can then choose to reparent or-
95 position either the proxy, or the embedded widget itself.-
96-
97 For example, in the code snippet below, we embed a group box into the proxy:-
98-
99 \snippet code/src_gui_graphicsview_qgraphicsproxywidget.cpp 1-
100-
101 The image below is the output obtained with its contents margin and-
102 contents rect labeled.-
103-
104 \image qgraphicsproxywidget-embed.png-
105-
106 Alternatively, you can start by creating a new QGraphicsProxyWidget item,-
107 and then call setWidget() to embed a QWidget later. The widget() function-
108 returns a pointer to the embedded widget. QGraphicsProxyWidget shares-
109 ownership with QWidget, so if either of the two widgets are destroyed, the-
110 other widget will be automatically destroyed as well.-
111-
112 \section1 Synchronizing Widget States-
113-
114 QGraphicsProxyWidget keeps its state in sync with the embedded widget. For-
115 example, if the proxy is hidden or disabled, the embedded widget will be-
116 hidden or disabled as well, and vice versa. When the widget is embedded by-
117 calling addWidget(), QGraphicsProxyWidget copies the state from the widget-
118 into the proxy, and after that, the two will stay synchronized where-
119 possible. By default, when you embed a widget into a proxy, both the widget-
120 and the proxy will be visible because a QGraphicsWidget is visible when-
121 created (you do not have to call show()). If you explicitly hide the-
122 embedded widget, the proxy will also become invisible.-
123-
124 Example:-
125-
126 \snippet code/src_gui_graphicsview_qgraphicsproxywidget.cpp 2-
127-
128 QGraphicsProxyWidget maintains symmetry for the following states:-
129-
130 \table-
131 \header \li QWidget state \li QGraphicsProxyWidget state \li Notes-
132 \row \li QWidget::enabled-
133 \li QGraphicsProxyWidget::enabled-
134 \li-
135 \row \li QWidget::visible-
136 \li QGraphicsProxyWidget::visible-
137 \li The explicit state is also symmetric.-
138 \row \li QWidget::geometry-
139 \li QGraphicsProxyWidget::geometry-
140 \li Geometry is only guaranteed to be symmetric while-
141 the embedded widget is visible.-
142 \row \li QWidget::layoutDirection-
143 \li QGraphicsProxyWidget::layoutDirection-
144 \li-
145 \row \li QWidget::style-
146 \li QGraphicsProxyWidget::style-
147 \li-
148 \row \li QWidget::palette-
149 \li QGraphicsProxyWidget::palette-
150 \li-
151 \row \li QWidget::font-
152 \li QGraphicsProxyWidget::font-
153 \li-
154 \row \li QWidget::cursor-
155 \li QGraphicsProxyWidget::cursor-
156 \li The embedded widget overrides the proxy widget-
157 cursor. The proxy cursor changes depending on-
158 which embedded subwidget is currently under the-
159 mouse.-
160 \row \li QWidget::sizeHint()-
161 \li QGraphicsProxyWidget::sizeHint()-
162 \li All size hint functionality from the embedded-
163 widget is forwarded by the proxy.-
164 \row \li QWidget::getContentsMargins()-
165 \li QGraphicsProxyWidget::getContentsMargins()-
166 \li Updated once by setWidget().-
167 \row \li QWidget::windowTitle-
168 \li QGraphicsProxyWidget::windowTitle-
169 \li Updated once by setWidget().-
170 \endtable-
171-
172 \note QGraphicsScene keeps the embedded widget in a special state that-
173 prevents it from disturbing other widgets (both embedded and not embedded)-
174 while the widget is embedded. In this state, the widget may differ slightly-
175 in behavior from when it is not embedded.-
176-
177 \warning This class is provided for convenience when bridging-
178 QWidgets and QGraphicsItems, it should not be used for-
179 high-performance scenarios.-
180-
181 \sa QGraphicsScene::addWidget(), QGraphicsWidget-
182*/-
183-
184extern bool qt_sendSpontaneousEvent(QObject *, QEvent *);-
185Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets();-
186-
187/*!-
188 \internal-
189*/-
190void QGraphicsProxyWidgetPrivate::init()-
191{-
192 Q_Q(QGraphicsProxyWidget);-
193 q->setFocusPolicy(Qt::WheelFocus);-
194 q->setAcceptDrops(true);-
195}
never executed: end of block
0
196-
197/*!-
198 \internal-
199*/-
200void QGraphicsProxyWidgetPrivate::sendWidgetMouseEvent(QGraphicsSceneHoverEvent *event)-
201{-
202 QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMouseMove);-
203 mouseEvent.setPos(event->pos());-
204 mouseEvent.setScreenPos(event->screenPos());-
205 mouseEvent.setButton(Qt::NoButton);-
206 mouseEvent.setButtons(0);-
207 mouseEvent.setModifiers(event->modifiers());-
208 sendWidgetMouseEvent(&mouseEvent);-
209 event->setAccepted(mouseEvent.isAccepted());-
210}
never executed: end of block
0
211-
212/*!-
213 \internal-
214*/-
215void QGraphicsProxyWidgetPrivate::sendWidgetMouseEvent(QGraphicsSceneMouseEvent *event)-
216{-
217 if (!event || !widget || !widget->isVisible())
!eventDescription
TRUEnever evaluated
FALSEnever evaluated
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!widget->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
218 return;
never executed: return;
0
219 Q_Q(QGraphicsProxyWidget);-
220-
221 // Find widget position and receiver.-
222 QPointF pos = event->pos();-
223 QPointer<QWidget> alienWidget = widget->childAt(pos.toPoint());-
224 QPointer<QWidget> receiver = alienWidget ? alienWidget : widget;
alienWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
225-
226 if (QWidgetPrivate::nearestGraphicsProxyWidget(receiver) != q)
QWidgetPrivate...receiver) != qDescription
TRUEnever evaluated
FALSEnever evaluated
0
227 return; //another proxywidget will handle the events
never executed: return;
0
228-
229 // Translate QGraphicsSceneMouse events to QMouseEvents.-
230 QEvent::Type type = QEvent::None;-
231 switch (event->type()) {-
232 case QEvent::GraphicsSceneMousePress:
never executed: case QEvent::GraphicsSceneMousePress:
0
233 type = QEvent::MouseButtonPress;-
234 if (!embeddedMouseGrabber)
!embeddedMouseGrabberDescription
TRUEnever evaluated
FALSEnever evaluated
0
235 embeddedMouseGrabber = receiver;
never executed: embeddedMouseGrabber = receiver;
0
236 else-
237 receiver = embeddedMouseGrabber;
never executed: receiver = embeddedMouseGrabber;
0
238 break;
never executed: break;
0
239 case QEvent::GraphicsSceneMouseRelease:
never executed: case QEvent::GraphicsSceneMouseRelease:
0
240 type = QEvent::MouseButtonRelease;-
241 if (embeddedMouseGrabber)
embeddedMouseGrabberDescription
TRUEnever evaluated
FALSEnever evaluated
0
242 receiver = embeddedMouseGrabber;
never executed: receiver = embeddedMouseGrabber;
0
243 break;
never executed: break;
0
244 case QEvent::GraphicsSceneMouseDoubleClick:
never executed: case QEvent::GraphicsSceneMouseDoubleClick:
0
245 type = QEvent::MouseButtonDblClick;-
246 if (!embeddedMouseGrabber)
!embeddedMouseGrabberDescription
TRUEnever evaluated
FALSEnever evaluated
0
247 embeddedMouseGrabber = receiver;
never executed: embeddedMouseGrabber = receiver;
0
248 else-
249 receiver = embeddedMouseGrabber;
never executed: receiver = embeddedMouseGrabber;
0
250 break;
never executed: break;
0
251 case QEvent::GraphicsSceneMouseMove:
never executed: case QEvent::GraphicsSceneMouseMove:
0
252 type = QEvent::MouseMove;-
253 if (embeddedMouseGrabber)
embeddedMouseGrabberDescription
TRUEnever evaluated
FALSEnever evaluated
0
254 receiver = embeddedMouseGrabber;
never executed: receiver = embeddedMouseGrabber;
0
255 break;
never executed: break;
0
256 default:
never executed: default:
0
257 Q_ASSERT_X(false, "QGraphicsProxyWidget", "internal error");-
258 break;
never executed: break;
0
259 }-
260-
261 if (!lastWidgetUnderMouse) {
!lastWidgetUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
0
262 QApplicationPrivate::dispatchEnterLeave(embeddedMouseGrabber ? embeddedMouseGrabber : receiver, 0, event->screenPos());-
263 lastWidgetUnderMouse = receiver;-
264 }
never executed: end of block
0
265-
266 // Map event position from us to the receiver-
267 pos = mapToReceiver(pos, receiver);-
268-
269 // Send mouse event.-
270 QMouseEvent mouseEvent(type, pos, receiver->mapTo(receiver->topLevelWidget(), pos.toPoint()),-
271 receiver->mapToGlobal(pos.toPoint()),-
272 event->button(), event->buttons(), event->modifiers(), event->source());-
273-
274 QWidget *embeddedMouseGrabberPtr = (QWidget *)embeddedMouseGrabber;-
275 QApplicationPrivate::sendMouseEvent(receiver, &mouseEvent, alienWidget, widget,-
276 &embeddedMouseGrabberPtr, lastWidgetUnderMouse, event->spontaneous());-
277 embeddedMouseGrabber = embeddedMouseGrabberPtr;-
278-
279 // Handle enter/leave events when last button is released from mouse-
280 // grabber child widget.-
281 if (embeddedMouseGrabber && type == QEvent::MouseButtonRelease && !event->buttons()) {
embeddedMouseGrabberDescription
TRUEnever evaluated
FALSEnever evaluated
type == QEvent...eButtonReleaseDescription
TRUEnever evaluated
FALSEnever evaluated
!event->buttons()Description
TRUEnever evaluated
FALSEnever evaluated
0
282 Q_Q(QGraphicsProxyWidget);-
283 if (q->rect().contains(event->pos()) && q->acceptHoverEvents())
q->rect().cont...(event->pos())Description
TRUEnever evaluated
FALSEnever evaluated
q->acceptHoverEvents()Description
TRUEnever evaluated
FALSEnever evaluated
0
284 lastWidgetUnderMouse = alienWidget ? alienWidget : widget;
never executed: lastWidgetUnderMouse = alienWidget ? alienWidget : widget;
alienWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
285 else // released on the frame our outside the item, or doesn't accept hover events.-
286 lastWidgetUnderMouse = 0;
never executed: lastWidgetUnderMouse = 0;
0
287-
288 QApplicationPrivate::dispatchEnterLeave(lastWidgetUnderMouse, embeddedMouseGrabber, event->screenPos());-
289 embeddedMouseGrabber = 0;-
290-
291#ifndef QT_NO_CURSOR-
292 // ### Restore the cursor, don't override it.-
293 if (!lastWidgetUnderMouse)
!lastWidgetUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
0
294 q->unsetCursor();
never executed: q->unsetCursor();
0
295#endif-
296 }
never executed: end of block
0
297-
298 event->setAccepted(mouseEvent.isAccepted());-
299}
never executed: end of block
0
300-
301void QGraphicsProxyWidgetPrivate::sendWidgetKeyEvent(QKeyEvent *event)-
302{-
303 Q_Q(QGraphicsProxyWidget);-
304 if (!event || !widget || !widget->isVisible())
!eventDescription
TRUEnever evaluated
FALSEnever evaluated
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!widget->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
305 return;
never executed: return;
0
306-
307 QPointer<QWidget> receiver = widget->focusWidget();-
308 if (!receiver)
!receiverDescription
TRUEnever evaluated
FALSEnever evaluated
0
309 receiver = widget;
never executed: receiver = widget;
0
310 Q_ASSERT(receiver);-
311-
312 do {-
313 bool res = QApplication::sendEvent(receiver, event);-
314 if ((res && event->isAccepted()) || (q->isWindow() && receiver == widget))
resDescription
TRUEnever evaluated
FALSEnever evaluated
event->isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
q->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
receiver == widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
315 break;
never executed: break;
0
316 receiver = receiver->parentWidget();-
317 } while (receiver);
never executed: end of block
receiverDescription
TRUEnever evaluated
FALSEnever evaluated
0
318}
never executed: end of block
0
319-
320/*!-
321 \internal-
322*/-
323void QGraphicsProxyWidgetPrivate::removeSubFocusHelper(QWidget *widget, Qt::FocusReason reason)-
324{-
325 QFocusEvent event(QEvent::FocusOut, reason);-
326 QPointer<QWidget> widgetGuard = widget;-
327 QApplication::sendEvent(widget, &event);-
328 if (widgetGuard && event.isAccepted())
widgetGuardDescription
TRUEnever evaluated
FALSEnever evaluated
event.isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
329 QApplication::sendEvent(widget->style(), &event);
never executed: QApplication::sendEvent(widget->style(), &event);
0
330}
never executed: end of block
0
331-
332/*!-
333 \internal-
334 Some of the logic is shared with QApplicationPrivate::focusNextPrevChild_helper-
335*/-
336QWidget *QGraphicsProxyWidgetPrivate::findFocusChild(QWidget *child, bool next) const-
337{-
338 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
339 return 0;
never executed: return 0;
0
340-
341 // Run around the focus chain until we find a widget that can take tab focus.-
342 if (!child) {
!childDescription
TRUEnever evaluated
FALSEnever evaluated
0
343 child = next ? (QWidget *)widget : widget->d_func()->focus_prev;
nextDescription
TRUEnever evaluated
FALSEnever evaluated
0
344 } else {
never executed: end of block
0
345 child = next ? child->d_func()->focus_next : child->d_func()->focus_prev;
nextDescription
TRUEnever evaluated
FALSEnever evaluated
0
346 if ((next && child == widget) || (!next && child == widget->d_func()->focus_prev)) {
nextDescription
TRUEnever evaluated
FALSEnever evaluated
child == widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!nextDescription
TRUEnever evaluated
FALSEnever evaluated
child == widge...()->focus_prevDescription
TRUEnever evaluated
FALSEnever evaluated
0
347 return 0;
never executed: return 0;
0
348 }-
349 }
never executed: end of block
0
350-
351 if (!child)
!childDescription
TRUEnever evaluated
FALSEnever evaluated
0
352 return 0;
never executed: return 0;
0
353-
354 QWidget *oldChild = child;-
355 uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus;
qt_tab_all_widgets()Description
TRUEnever evaluated
FALSEnever evaluated
0
356 do {-
357 if (child->isEnabled()
child->isEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
358 && child->isVisibleTo(widget)
child->isVisibleTo(widget)Description
TRUEnever evaluated
FALSEnever evaluated
0
359 && ((child->focusPolicy() & focus_flag) == focus_flag)
((child->focus...== focus_flag)Description
TRUEnever evaluated
FALSEnever evaluated
0
360 && !(child->d_func()->extra && child->d_func()->extra->focus_proxy)) {
child->d_func()->extraDescription
TRUEnever evaluated
FALSEnever evaluated
child->d_func(...a->focus_proxyDescription
TRUEnever evaluated
FALSEnever evaluated
0
361 return child;
never executed: return child;
0
362 }-
363 child = next ? child->d_func()->focus_next : child->d_func()->focus_prev;
nextDescription
TRUEnever evaluated
FALSEnever evaluated
0
364 } while (child != oldChild && !(next && child == widget) && !(!next && child == widget->d_func()->focus_prev));
never executed: end of block
child != oldChildDescription
TRUEnever evaluated
FALSEnever evaluated
nextDescription
TRUEnever evaluated
FALSEnever evaluated
child == widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!nextDescription
TRUEnever evaluated
FALSEnever evaluated
child == widge...()->focus_prevDescription
TRUEnever evaluated
FALSEnever evaluated
0
365 return 0;
never executed: return 0;
0
366}-
367-
368/*!-
369 \internal-
370*/-
371void QGraphicsProxyWidgetPrivate::_q_removeWidgetSlot()-
372{-
373 Q_Q(QGraphicsProxyWidget);-
374 if (!widget.isNull()) {
!widget.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
0
375 if (QWExtra *extra = widget->d_func()->extra)
QWExtra *extra..._func()->extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
376 extra->proxyWidget = 0;
never executed: extra->proxyWidget = 0;
0
377 }
never executed: end of block
0
378 widget = 0;-
379 delete q;-
380}
never executed: end of block
0
381-
382/*!-
383 \internal-
384*/-
385void QGraphicsProxyWidgetPrivate::updateWidgetGeometryFromProxy()-
386{-
387}-
388-
389/*!-
390 \internal-
391*/-
392void QGraphicsProxyWidgetPrivate::updateProxyGeometryFromWidget()-
393{-
394 Q_Q(QGraphicsProxyWidget);-
395 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
396 return;
never executed: return;
0
397-
398 QRectF widgetGeometry = widget->geometry();-
399 QWidget *parentWidget = widget->parentWidget();-
400 if (widget->isWindow()) {
widget->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
401 QGraphicsProxyWidget *proxyParent = 0;-
402 if (parentWidget && (proxyParent = qobject_cast<QGraphicsProxyWidget *>(q->parentWidget()))) {
parentWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
(proxyParent =...rentWidget()))Description
TRUEnever evaluated
FALSEnever evaluated
0
403 // Nested window proxy (e.g., combobox popup), map widget to the-
404 // parent widget's global coordinates, and map that to the parent-
405 // proxy's child coordinates.-
406 widgetGeometry.moveTo(proxyParent->subWidgetRect(parentWidget).topLeft()-
407 + parentWidget->mapFromGlobal(widget->pos()));-
408 }
never executed: end of block
0
409 }
never executed: end of block
0
410-
411 // Adjust to size hint if the widget has never been resized.-
412 if (!widget->size().isValid())
!widget->size().isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
413 widgetGeometry.setSize(widget->sizeHint());
never executed: widgetGeometry.setSize(widget->sizeHint());
0
414-
415 // Assign new geometry.-
416 posChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
417 sizeChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
418 q->setGeometry(widgetGeometry);-
419 posChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
420 sizeChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
421}
never executed: end of block
0
422-
423/*!-
424 \internal-
425*/-
426void QGraphicsProxyWidgetPrivate::updateProxyInputMethodAcceptanceFromWidget()-
427{-
428 Q_Q(QGraphicsProxyWidget);-
429 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
430 return;
never executed: return;
0
431-
432 QWidget *focusWidget = widget->focusWidget();-
433 if (!focusWidget)
!focusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
434 focusWidget = widget;
never executed: focusWidget = widget;
0
435 q->setFlag(QGraphicsItem::ItemAcceptsInputMethod,-
436 focusWidget->testAttribute(Qt::WA_InputMethodEnabled));-
437}
never executed: end of block
0
438-
439/*!-
440 \internal-
441-
442 Embeds \a subWin as a subwindow of this proxy widget. \a subWin must be a top-level-
443 widget and a descendant of the widget managed by this proxy. A separate subproxy-
444 will be created as a child of this proxy widget to manage \a subWin.-
445*/-
446void QGraphicsProxyWidgetPrivate::embedSubWindow(QWidget *subWin)-
447{-
448 QWExtra *extra;-
449 if (!((extra = subWin->d_func()->extra) && extra->proxyWidget)) {
(extra = subWi...func()->extra)Description
TRUEnever evaluated
FALSEnever evaluated
extra->proxyWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
450 QGraphicsProxyWidget *subProxy = new QGraphicsProxyWidget(q_func(), subWin->windowFlags());-
451 subProxy->d_func()->setWidget_helper(subWin, false);-
452 }
never executed: end of block
0
453}
never executed: end of block
0
454-
455/*!-
456 \internal-
457-
458 Removes ("unembeds") \a subWin and deletes the proxy holder item. This can-
459 happen when QWidget::setParent() reparents the embedded window out of-
460 "embedded space".-
461*/-
462void QGraphicsProxyWidgetPrivate::unembedSubWindow(QWidget *subWin)-
463{-
464 foreach (QGraphicsItem *child, children) {-
465 if (child->isWidget()) {
child->isWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
466 if (QGraphicsProxyWidget *proxy = qobject_cast<QGraphicsProxyWidget *>(static_cast<QGraphicsWidget *>(child))) {
QGraphicsProxy...get *>(child))Description
TRUEnever evaluated
FALSEnever evaluated
0
467 if (proxy->widget() == subWin) {
proxy->widget() == subWinDescription
TRUEnever evaluated
FALSEnever evaluated
0
468 proxy->setWidget(0);-
469 scene->removeItem(proxy);-
470 delete proxy;-
471 return;
never executed: return;
0
472 }-
473 }
never executed: end of block
0
474 }
never executed: end of block
0
475 }
never executed: end of block
0
476}
never executed: end of block
0
477-
478bool QGraphicsProxyWidgetPrivate::isProxyWidget() const-
479{-
480 return true;
never executed: return true;
0
481}-
482-
483/*!-
484 \internal-
485*/-
486QPointF QGraphicsProxyWidgetPrivate::mapToReceiver(const QPointF &pos, const QWidget *receiver) const-
487{-
488 QPointF p = pos;-
489 // Map event position from us to the receiver, preserving its-
490 // precision (don't use QWidget::mapFrom here).-
491 while (receiver && receiver != widget) {
receiverDescription
TRUEnever evaluated
FALSEnever evaluated
receiver != widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
492 p -= QPointF(receiver->pos());-
493 receiver = receiver->parentWidget();-
494 }
never executed: end of block
0
495 return p;
never executed: return p;
0
496}-
497-
498/*!-
499 Constructs a new QGraphicsProxy widget. \a parent and \a wFlags are passed-
500 to QGraphicsItem's constructor.-
501*/-
502QGraphicsProxyWidget::QGraphicsProxyWidget(QGraphicsItem *parent, Qt::WindowFlags wFlags)-
503 : QGraphicsWidget(*new QGraphicsProxyWidgetPrivate, parent, wFlags)-
504{-
505 Q_D(QGraphicsProxyWidget);-
506 d->init();-
507}
never executed: end of block
0
508-
509/*!-
510 Destroys the proxy widget and any embedded widget.-
511*/-
512QGraphicsProxyWidget::~QGraphicsProxyWidget()-
513{-
514 Q_D(QGraphicsProxyWidget);-
515 if (d->widget) {
d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
516 d->widget->removeEventFilter(this);-
517 QObject::disconnect(d->widget, SIGNAL(destroyed()), this, SLOT(_q_removeWidgetSlot()));-
518 delete d->widget;-
519 }
never executed: end of block
0
520}
never executed: end of block
0
521-
522/*!-
523 Embeds \a widget into this proxy widget. The embedded widget must reside-
524 exclusively either inside or outside of Graphics View. You cannot embed a-
525 widget as long as it is is visible elsewhere in the UI, at the same time.-
526-
527 \a widget must be a top-level widget whose parent is 0.-
528-
529 When the widget is embedded, its state (e.g., visible, enabled, geometry,-
530 size hints) is copied into the proxy widget. If the embedded widget is-
531 explicitly hidden or disabled, the proxy widget will become explicitly-
532 hidden or disabled after embedding is complete. The class documentation-
533 has a full overview over the shared state.-
534-
535 QGraphicsProxyWidget's window flags determine whether the widget, after-
536 embedding, will be given window decorations or not.-
537-
538 After this function returns, QGraphicsProxyWidget will keep its state-
539 synchronized with that of \a widget whenever possible.-
540-
541 If a widget is already embedded by this proxy when this function is-
542 called, that widget will first be automatically unembedded. Passing 0 for-
543 the \a widget argument will only unembed the widget, and the ownership of-
544 the currently embedded widget will be passed on to the caller.-
545 Every child widget that are embedded will also be embedded and their proxy-
546 widget destroyed.-
547-
548 Note that widgets with the Qt::WA_PaintOnScreen widget attribute-
549 set and widgets that wrap an external application or controller-
550 cannot be embedded. Examples are QGLWidget and QAxWidget.-
551-
552 \sa widget()-
553*/-
554void QGraphicsProxyWidget::setWidget(QWidget *widget)-
555{-
556 Q_D(QGraphicsProxyWidget);-
557 d->setWidget_helper(widget, true);-
558}
never executed: end of block
0
559-
560void QGraphicsProxyWidgetPrivate::setWidget_helper(QWidget *newWidget, bool autoShow)-
561{-
562 Q_Q(QGraphicsProxyWidget);-
563 if (newWidget == widget)
newWidget == widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
564 return;
never executed: return;
0
565 if (widget) {
widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
566 QObject::disconnect(widget, SIGNAL(destroyed()), q, SLOT(_q_removeWidgetSlot()));-
567 widget->removeEventFilter(q);-
568 widget->setAttribute(Qt::WA_DontShowOnScreen, false);-
569 widget->d_func()->extra->proxyWidget = 0;-
570 resolveFont(inheritedFontResolveMask);-
571 resolvePalette(inheritedPaletteResolveMask);-
572 widget->update();-
573-
574 foreach (QGraphicsItem *child, q->childItems()) {-
575 if (child->d_ptr->isProxyWidget()) {
child->d_ptr->isProxyWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
576 QGraphicsProxyWidget *childProxy = static_cast<QGraphicsProxyWidget *>(child);-
577 QWidget * parent = childProxy->widget();-
578 while (parent->parentWidget() != 0) {
parent->parentWidget() != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
579 if (parent == widget)
parent == widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
580 break;
never executed: break;
0
581 parent = parent->parentWidget();-
582 }
never executed: end of block
0
583 if (!childProxy->widget() || parent != widget)
!childProxy->widget()Description
TRUEnever evaluated
FALSEnever evaluated
parent != widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
584 continue;
never executed: continue;
0
585 childProxy->setWidget(0);-
586 delete childProxy;-
587 }
never executed: end of block
0
588 }
never executed: end of block
0
589-
590 widget = 0;-
591#ifndef QT_NO_CURSOR-
592 q->unsetCursor();-
593#endif-
594 q->setAcceptHoverEvents(false);-
595 if (!newWidget)
!newWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
596 q->update();
never executed: q->update();
0
597 }
never executed: end of block
0
598 if (!newWidget)
!newWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
599 return;
never executed: return;
0
600 if (!newWidget->isWindow()) {
!newWidget->isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
601 QWExtra *extra = newWidget->parentWidget()->d_func()->extra;-
602 if (!extra || !extra->proxyWidget) {
!extraDescription
TRUEnever evaluated
FALSEnever evaluated
!extra->proxyWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
603 qWarning("QGraphicsProxyWidget::setWidget: cannot embed widget %p "-
604 "which is not a toplevel widget, and is not a child of an embedded widget", newWidget);-
605 return;
never executed: return;
0
606 }-
607 }
never executed: end of block
0
608-
609 // Register this proxy within the widget's private.-
610 // ### This is a bit backdoorish-
611 QWExtra *extra = newWidget->d_func()->extra;-
612 if (!extra) {
!extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
613 newWidget->d_func()->createExtra();-
614 extra = newWidget->d_func()->extra;-
615 }
never executed: end of block
0
616 QGraphicsProxyWidget **proxyWidget = &extra->proxyWidget;-
617 if (*proxyWidget) {
*proxyWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
618 if (*proxyWidget != q) {
*proxyWidget != qDescription
TRUEnever evaluated
FALSEnever evaluated
0
619 qWarning("QGraphicsProxyWidget::setWidget: cannot embed widget %p"-
620 "; already embedded", newWidget);-
621 }
never executed: end of block
0
622 return;
never executed: return;
0
623 }-
624 *proxyWidget = q;-
625-
626 newWidget->setAttribute(Qt::WA_DontShowOnScreen);-
627 newWidget->ensurePolished();-
628 // Do not wait for this widget to close before the app closes ###-
629 // shouldn't this widget inherit the attribute?-
630 newWidget->setAttribute(Qt::WA_QuitOnClose, false);-
631 q->setAcceptHoverEvents(true);-
632-
633 if (newWidget->testAttribute(Qt::WA_NoSystemBackground))
newWidget->tes...temBackground)Description
TRUEnever evaluated
FALSEnever evaluated
0
634 q->setAttribute(Qt::WA_NoSystemBackground);
never executed: q->setAttribute(Qt::WA_NoSystemBackground);
0
635 if (newWidget->testAttribute(Qt::WA_OpaquePaintEvent))
newWidget->tes...quePaintEvent)Description
TRUEnever evaluated
FALSEnever evaluated
0
636 q->setAttribute(Qt::WA_OpaquePaintEvent);
never executed: q->setAttribute(Qt::WA_OpaquePaintEvent);
0
637-
638 widget = newWidget;-
639-
640 // Changes only go from the widget to the proxy.-
641 enabledChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
642 visibleChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
643 posChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
644 sizeChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
645-
646 if ((autoShow && !newWidget->testAttribute(Qt::WA_WState_ExplicitShowHide)) || !newWidget->testAttribute(Qt::WA_WState_Hidden)) {
autoShowDescription
TRUEnever evaluated
FALSEnever evaluated
!newWidget->te...licitShowHide)Description
TRUEnever evaluated
FALSEnever evaluated
!newWidget->te...WState_Hidden)Description
TRUEnever evaluated
FALSEnever evaluated
0
647 newWidget->show();-
648 }
never executed: end of block
0
649-
650 // Copy the state from the widget onto the proxy.-
651#ifndef QT_NO_CURSOR-
652 if (newWidget->testAttribute(Qt::WA_SetCursor))
newWidget->tes...:WA_SetCursor)Description
TRUEnever evaluated
FALSEnever evaluated
0
653 q->setCursor(widget->cursor());
never executed: q->setCursor(widget->cursor());
0
654#endif-
655 q->setEnabled(newWidget->isEnabled());-
656 q->setVisible(newWidget->isVisible());-
657 q->setLayoutDirection(newWidget->layoutDirection());-
658 if (newWidget->testAttribute(Qt::WA_SetStyle))
newWidget->tes...::WA_SetStyle)Description
TRUEnever evaluated
FALSEnever evaluated
0
659 q->setStyle(widget->style());
never executed: q->setStyle(widget->style());
0
660-
661 resolveFont(inheritedFontResolveMask);-
662 resolvePalette(inheritedPaletteResolveMask);-
663-
664 if (!newWidget->testAttribute(Qt::WA_Resized))
!newWidget->te...t::WA_Resized)Description
TRUEnever evaluated
FALSEnever evaluated
0
665 newWidget->adjustSize();
never executed: newWidget->adjustSize();
0
666-
667 int left, top, right, bottom;-
668 newWidget->getContentsMargins(&left, &top, &right, &bottom);-
669 q->setContentsMargins(left, top, right, bottom);-
670 q->setWindowTitle(newWidget->windowTitle());-
671-
672 // size policies and constraints..-
673 q->setSizePolicy(newWidget->sizePolicy());-
674 QSize sz = newWidget->minimumSize();-
675 q->setMinimumSize(sz.isNull() ? QSizeF() : QSizeF(sz));-
676 sz = newWidget->maximumSize();-
677 q->setMaximumSize(sz.isNull() ? QSizeF() : QSizeF(sz));-
678-
679 updateProxyGeometryFromWidget();-
680-
681 updateProxyInputMethodAcceptanceFromWidget();-
682-
683 // Hook up the event filter to keep the state up to date.-
684 newWidget->installEventFilter(q);-
685 QObject::connect(newWidget, SIGNAL(destroyed()), q, SLOT(_q_removeWidgetSlot()));-
686-
687 // Changes no longer go only from the widget to the proxy.-
688 enabledChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
689 visibleChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
690 posChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
691 sizeChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
692}
never executed: end of block
0
693-
694/*!-
695 Returns a pointer to the embedded widget.-
696-
697 \sa setWidget()-
698*/-
699QWidget *QGraphicsProxyWidget::widget() const-
700{-
701 Q_D(const QGraphicsProxyWidget);-
702 return d->widget;
never executed: return d->widget;
0
703}-
704-
705/*!-
706 Returns the rectangle for \a widget, which must be a descendant of-
707 widget(), or widget() itself, in this proxy item's local coordinates.-
708-
709 If no widget is embedded, \a widget is 0, or \a widget is not a-
710 descendant of the embedded widget, this function returns an empty QRectF.-
711-
712 \sa widget()-
713*/-
714QRectF QGraphicsProxyWidget::subWidgetRect(const QWidget *widget) const-
715{-
716 Q_D(const QGraphicsProxyWidget);-
717 if (!widget || !d->widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
718 return QRectF();
never executed: return QRectF();
0
719 if (d->widget == widget || d->widget->isAncestorOf(widget))
d->widget == widgetDescription
TRUEnever evaluated
FALSEnever evaluated
d->widget->isA...storOf(widget)Description
TRUEnever evaluated
FALSEnever evaluated
0
720 return QRectF(widget->mapTo(d->widget, QPoint(0, 0)), widget->size());
never executed: return QRectF(widget->mapTo(d->widget, QPoint(0, 0)), widget->size());
0
721 return QRectF();
never executed: return QRectF();
0
722}-
723-
724/*!-
725 \reimp-
726*/-
727void QGraphicsProxyWidget::setGeometry(const QRectF &rect)-
728{-
729 Q_D(QGraphicsProxyWidget);-
730 bool proxyResizesWidget = !d->posChangeMode && !d->sizeChangeMode;
!d->posChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
!d->sizeChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
731 if (proxyResizesWidget) {
proxyResizesWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
732 d->posChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;-
733 d->sizeChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;-
734 }
never executed: end of block
0
735 QGraphicsWidget::setGeometry(rect);-
736 if (proxyResizesWidget) {
proxyResizesWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
737 d->posChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
738 d->sizeChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
739 }
never executed: end of block
0
740}
never executed: end of block
0
741-
742/*!-
743 \reimp-
744*/-
745QVariant QGraphicsProxyWidget::itemChange(GraphicsItemChange change,-
746 const QVariant &value)-
747{-
748 Q_D(QGraphicsProxyWidget);-
749-
750 switch (change) {-
751 case ItemPositionChange:
never executed: case ItemPositionChange:
0
752 // The item's position is either changed directly on the proxy, in-
753 // which case the position change should propagate to the widget,-
754 // otherwise it happens as a side effect when filtering QEvent::Move.-
755 if (!d->posChangeMode)
!d->posChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
756 d->posChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;
never executed: d->posChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;
0
757 break;
never executed: break;
0
758 case ItemPositionHasChanged:
never executed: case ItemPositionHasChanged:
0
759 // Move the internal widget if we're in widget-to-proxy-
760 // mode. Otherwise the widget has already moved.-
761 if (d->widget && d->posChangeMode != QGraphicsProxyWidgetPrivate::WidgetToProxyMode)
d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
d->posChangeMo...getToProxyModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
762 d->widget->move(value.toPoint());
never executed: d->widget->move(value.toPoint());
0
763 if (d->posChangeMode == QGraphicsProxyWidgetPrivate::ProxyToWidgetMode)
d->posChangeMo...xyToWidgetModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
764 d->posChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
never executed: d->posChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
0
765 break;
never executed: break;
0
766 case ItemVisibleChange:
never executed: case ItemVisibleChange:
0
767 if (!d->visibleChangeMode)
!d->visibleChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
768 d->visibleChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;
never executed: d->visibleChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;
0
769 break;
never executed: break;
0
770 case ItemVisibleHasChanged:
never executed: case ItemVisibleHasChanged:
0
771 if (d->widget && d->visibleChangeMode != QGraphicsProxyWidgetPrivate::WidgetToProxyMode)
d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
d->visibleChan...getToProxyModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
772 d->widget->setVisible(isVisible());
never executed: d->widget->setVisible(isVisible());
0
773 if (d->visibleChangeMode == QGraphicsProxyWidgetPrivate::ProxyToWidgetMode)
d->visibleChan...xyToWidgetModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
774 d->visibleChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
never executed: d->visibleChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
0
775 break;
never executed: break;
0
776 case ItemEnabledChange:
never executed: case ItemEnabledChange:
0
777 if (!d->enabledChangeMode)
!d->enabledChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
778 d->enabledChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;
never executed: d->enabledChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;
0
779 break;
never executed: break;
0
780 case ItemEnabledHasChanged:
never executed: case ItemEnabledHasChanged:
0
781 if (d->widget && d->enabledChangeMode != QGraphicsProxyWidgetPrivate::WidgetToProxyMode)
d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
d->enabledChan...getToProxyModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
782 d->widget->setEnabled(isEnabled());
never executed: d->widget->setEnabled(isEnabled());
0
783 if (d->enabledChangeMode == QGraphicsProxyWidgetPrivate::ProxyToWidgetMode)
d->enabledChan...xyToWidgetModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
784 d->enabledChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
never executed: d->enabledChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
0
785 break;
never executed: break;
0
786 default:
never executed: default:
0
787 break;
never executed: break;
0
788 }-
789 return QGraphicsWidget::itemChange(change, value);
never executed: return QGraphicsWidget::itemChange(change, value);
0
790}-
791-
792/*!-
793 \reimp-
794*/-
795bool QGraphicsProxyWidget::event(QEvent *event)-
796{-
797 Q_D(QGraphicsProxyWidget);-
798 if (!d->widget)
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
799 return QGraphicsWidget::event(event);
never executed: return QGraphicsWidget::event(event);
0
800-
801 switch (event->type()) {-
802 case QEvent::StyleChange:
never executed: case QEvent::StyleChange:
0
803 // Propagate style changes to the embedded widget.-
804 if (!d->styleChangeMode) {
!d->styleChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
805 d->styleChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;-
806 d->widget->setStyle(style());-
807 d->styleChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
808 }
never executed: end of block
0
809 break;
never executed: break;
0
810 case QEvent::FontChange: {
never executed: case QEvent::FontChange:
0
811 // Propagate to widget.-
812 QWidgetPrivate *wd = d->widget->d_func();-
813 int mask = d->font.resolve() | d->inheritedFontResolveMask;-
814 wd->inheritedFontResolveMask = mask;-
815 wd->resolveFont();-
816 break;
never executed: break;
0
817 }-
818 case QEvent::PaletteChange: {
never executed: case QEvent::PaletteChange:
0
819 // Propagate to widget.-
820 QWidgetPrivate *wd = d->widget->d_func();-
821 int mask = d->palette.resolve() | d->inheritedPaletteResolveMask;-
822 wd->inheritedPaletteResolveMask = mask;-
823 wd->resolvePalette();-
824 break;
never executed: break;
0
825 }-
826 case QEvent::InputMethod: {
never executed: case QEvent::InputMethod:
0
827 inputMethodEvent(static_cast<QInputMethodEvent *>(event));-
828 if (event->isAccepted())
event->isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
829 return true;
never executed: return true;
0
830 return false;
never executed: return false;
0
831 }-
832 case QEvent::ShortcutOverride: {
never executed: case QEvent::ShortcutOverride:
0
833 QWidget *focusWidget = d->widget->focusWidget();-
834 while (focusWidget) {
focusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
835 QApplication::sendEvent(focusWidget, event);-
836 if (event->isAccepted())
event->isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
837 return true;
never executed: return true;
0
838 focusWidget = focusWidget->parentWidget();-
839 }
never executed: end of block
0
840 return false;
never executed: return false;
0
841 }-
842 case QEvent::KeyPress: {
never executed: case QEvent::KeyPress:
0
843 QKeyEvent *k = static_cast<QKeyEvent *>(event);-
844 if (k->key() == Qt::Key_Tab || k->key() == Qt::Key_Backtab) {
k->key() == Qt::Key_TabDescription
TRUEnever evaluated
FALSEnever evaluated
k->key() == Qt::Key_BacktabDescription
TRUEnever evaluated
FALSEnever evaluated
0
845 if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier))) { //### Add MetaModifier?
!(k->modifiers...:AltModifier))Description
TRUEnever evaluated
FALSEnever evaluated
0
846 QWidget *focusWidget = d->widget->focusWidget();-
847 while (focusWidget) {
focusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
848 bool res = QApplication::sendEvent(focusWidget, event);-
849 if ((res && event->isAccepted()) || (isWindow() && focusWidget == d->widget)) {
resDescription
TRUEnever evaluated
FALSEnever evaluated
event->isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
isWindow()Description
TRUEnever evaluated
FALSEnever evaluated
focusWidget == d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
850 event->accept();-
851 break;
never executed: break;
0
852 }-
853 focusWidget = focusWidget->parentWidget();-
854 }
never executed: end of block
0
855 return true;
never executed: return true;
0
856 }-
857 }
never executed: end of block
0
858 break;
never executed: break;
0
859 }-
860#ifndef QT_NO_TOOLTIP-
861 case QEvent::GraphicsSceneHelp: {
never executed: case QEvent::GraphicsSceneHelp:
0
862 // Propagate the help event (for tooltip) to the widget under mouse-
863 if (d->lastWidgetUnderMouse) {
d->lastWidgetUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
0
864 QGraphicsSceneHelpEvent *he = static_cast<QGraphicsSceneHelpEvent *>(event);-
865 QPoint pos = d->mapToReceiver(mapFromScene(he->scenePos()), d->lastWidgetUnderMouse).toPoint();-
866 QHelpEvent e(QEvent::ToolTip, pos, he->screenPos());-
867 QApplication::sendEvent(d->lastWidgetUnderMouse, &e);-
868 event->setAccepted(e.isAccepted());-
869 return e.isAccepted();
never executed: return e.isAccepted();
0
870 }-
871 break;
never executed: break;
0
872 }-
873 case QEvent::ToolTipChange: {
never executed: case QEvent::ToolTipChange:
0
874 // Propagate tooltip change to the widget-
875 if (!d->tooltipChangeMode) {
!d->tooltipChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
876 d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;-
877 d->widget->setToolTip(toolTip());-
878 d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
879 }
never executed: end of block
0
880 break;
never executed: break;
0
881 }-
882#endif-
883 case QEvent::TouchBegin:
never executed: case QEvent::TouchBegin:
0
884 case QEvent::TouchUpdate:
never executed: case QEvent::TouchUpdate:
0
885 case QEvent::TouchEnd: {
never executed: case QEvent::TouchEnd:
0
886 if (event->spontaneous())
event->spontaneous()Description
TRUEnever evaluated
FALSEnever evaluated
0
887 qt_sendSpontaneousEvent(d->widget, event);
never executed: qt_sendSpontaneousEvent(d->widget, event);
0
888 else-
889 QApplication::sendEvent(d->widget, event);
never executed: QApplication::sendEvent(d->widget, event);
0
890-
891 if (event->isAccepted())
event->isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
892 return true;
never executed: return true;
0
893-
894 break;
never executed: break;
0
895 }-
896 default:
never executed: default:
0
897 break;
never executed: break;
0
898 }-
899 return QGraphicsWidget::event(event);
never executed: return QGraphicsWidget::event(event);
0
900}-
901-
902/*!-
903 \reimp-
904*/-
905bool QGraphicsProxyWidget::eventFilter(QObject *object, QEvent *event)-
906{-
907 Q_D(QGraphicsProxyWidget);-
908-
909 if (object == d->widget) {
object == d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
910 switch (event->type()) {-
911 case QEvent::LayoutRequest:
never executed: case QEvent::LayoutRequest:
0
912 updateGeometry();-
913 break;
never executed: break;
0
914 case QEvent::Resize:
never executed: case QEvent::Resize:
0
915 // If the widget resizes itself, we resize the proxy too.-
916 // Prevent feed-back by checking the geometry change mode.-
917 if (!d->sizeChangeMode)
!d->sizeChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
918 d->updateProxyGeometryFromWidget();
never executed: d->updateProxyGeometryFromWidget();
0
919 break;
never executed: break;
0
920 case QEvent::Move:
never executed: case QEvent::Move:
0
921 // If the widget moves itself, we move the proxy too. Prevent-
922 // feed-back by checking the geometry change mode.-
923 if (!d->posChangeMode)
!d->posChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
924 d->updateProxyGeometryFromWidget();
never executed: d->updateProxyGeometryFromWidget();
0
925 break;
never executed: break;
0
926 case QEvent::Hide:
never executed: case QEvent::Hide:
0
927 case QEvent::Show:
never executed: case QEvent::Show:
0
928 // If the widget toggles its visible state, the proxy will follow.-
929 if (!d->visibleChangeMode) {
!d->visibleChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
930 d->visibleChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
931 setVisible(event->type() == QEvent::Show);-
932 d->visibleChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
933 }
never executed: end of block
0
934 break;
never executed: break;
0
935 case QEvent::EnabledChange:
never executed: case QEvent::EnabledChange:
0
936 // If the widget toggles its enabled state, the proxy will follow.-
937 if (!d->enabledChangeMode) {
!d->enabledChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
938 d->enabledChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
939 setEnabled(d->widget->isEnabled());-
940 d->enabledChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
941 }
never executed: end of block
0
942 break;
never executed: break;
0
943 case QEvent::StyleChange:
never executed: case QEvent::StyleChange:
0
944 // Propagate style changes to the proxy.-
945 if (!d->styleChangeMode) {
!d->styleChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
946 d->styleChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
947 setStyle(d->widget->style());-
948 d->styleChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
949 }
never executed: end of block
0
950 break;
never executed: break;
0
951#ifndef QT_NO_TOOLTIP-
952 case QEvent::ToolTipChange:
never executed: case QEvent::ToolTipChange:
0
953 // Propagate tooltip change to the proxy.-
954 if (!d->tooltipChangeMode) {
!d->tooltipChangeModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
955 d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;-
956 setToolTip(d->widget->toolTip());-
957 d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::NoMode;-
958 }
never executed: end of block
0
959 break;
never executed: break;
0
960#endif-
961 default:
never executed: default:
0
962 break;
never executed: break;
0
963 }-
964 }-
965 return QGraphicsWidget::eventFilter(object, event);
never executed: return QGraphicsWidget::eventFilter(object, event);
0
966}-
967-
968/*!-
969 \reimp-
970*/-
971void QGraphicsProxyWidget::showEvent(QShowEvent *event)-
972{-
973 Q_UNUSED(event);-
974}
never executed: end of block
0
975-
976/*!-
977 \reimp-
978*/-
979void QGraphicsProxyWidget::hideEvent(QHideEvent *event)-
980{-
981 Q_UNUSED(event);-
982}
never executed: end of block
0
983-
984#ifndef QT_NO_CONTEXTMENU-
985/*!-
986 \reimp-
987*/-
988void QGraphicsProxyWidget::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)-
989{-
990 Q_D(QGraphicsProxyWidget);-
991 if (!event || !d->widget || !d->widget->isVisible() || !hasFocus())
!eventDescription
TRUEnever evaluated
FALSEnever evaluated
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!d->widget->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
!hasFocus()Description
TRUEnever evaluated
FALSEnever evaluated
0
992 return;
never executed: return;
0
993-
994 // Find widget position and receiver.-
995 QPointF pos = event->pos();-
996 QPointer<QWidget> alienWidget = d->widget->childAt(pos.toPoint());-
997 QPointer<QWidget> receiver = alienWidget ? alienWidget : d->widget;
alienWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
998-
999 // Map event position from us to the receiver-
1000 pos = d->mapToReceiver(pos, receiver);-
1001-
1002 QPoint globalPos = receiver->mapToGlobal(pos.toPoint());-
1003 //If the receiver by-pass the proxy its popups-
1004 //will be top level QWidgets therefore they need-
1005 //the screen position. mapToGlobal expect the widget to-
1006 //have proper coordinates in regards of the windowing system-
1007 //but it's not true because the widget is embedded.-
1008 if (bypassGraphicsProxyWidget(receiver))
bypassGraphics...dget(receiver)Description
TRUEnever evaluated
FALSEnever evaluated
0
1009 globalPos = event->screenPos();
never executed: globalPos = event->screenPos();
0
1010-
1011 // Send mouse event. ### Doesn't propagate the event.-
1012 QContextMenuEvent contextMenuEvent(QContextMenuEvent::Reason(event->reason()),-
1013 pos.toPoint(), globalPos, event->modifiers());-
1014 QApplication::sendEvent(receiver, &contextMenuEvent);-
1015-
1016 event->setAccepted(contextMenuEvent.isAccepted());-
1017}
never executed: end of block
0
1018#endif // QT_NO_CONTEXTMENU-
1019-
1020#ifndef QT_NO_DRAGANDDROP-
1021/*!-
1022 \reimp-
1023*/-
1024void QGraphicsProxyWidget::dragEnterEvent(QGraphicsSceneDragDropEvent *event)-
1025{-
1026#ifdef QT_NO_DRAGANDDROP-
1027 Q_UNUSED(event);-
1028#else-
1029 Q_D(QGraphicsProxyWidget);-
1030 if (!d->widget)
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1031 return;
never executed: return;
0
1032-
1033 QDragEnterEvent proxyDragEnter(event->pos().toPoint(), event->dropAction(), event->mimeData(), event->buttons(), event->modifiers());-
1034 proxyDragEnter.setAccepted(event->isAccepted());-
1035 QApplication::sendEvent(d->widget, &proxyDragEnter);-
1036 event->setAccepted(proxyDragEnter.isAccepted());-
1037 if (proxyDragEnter.isAccepted()) // we discard answerRect
proxyDragEnter.isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
1038 event->setDropAction(proxyDragEnter.dropAction());
never executed: event->setDropAction(proxyDragEnter.dropAction());
0
1039#endif-
1040}
never executed: end of block
0
1041/*!-
1042 \reimp-
1043*/-
1044void QGraphicsProxyWidget::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)-
1045{-
1046 Q_UNUSED(event);-
1047#ifndef QT_NO_DRAGANDDROP-
1048 Q_D(QGraphicsProxyWidget);-
1049 if (!d->widget || !d->dragDropWidget)
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!d->dragDropWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1050 return;
never executed: return;
0
1051 QDragLeaveEvent proxyDragLeave;-
1052 QApplication::sendEvent(d->dragDropWidget, &proxyDragLeave);-
1053 d->dragDropWidget = 0;-
1054#endif-
1055}
never executed: end of block
0
1056-
1057/*!-
1058 \reimp-
1059*/-
1060void QGraphicsProxyWidget::dragMoveEvent(QGraphicsSceneDragDropEvent *event)-
1061{-
1062#ifdef QT_NO_DRAGANDDROP-
1063 Q_UNUSED(event);-
1064#else-
1065 Q_D(QGraphicsProxyWidget);-
1066 if (!d->widget)
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1067 return;
never executed: return;
0
1068 QPointF p = event->pos();-
1069 event->ignore();-
1070 QPointer<QWidget> subWidget = d->widget->childAt(p.toPoint());-
1071 QPointer<QWidget> receiver = subWidget ? subWidget : d->widget;
subWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1072 bool eventDelivered = false;-
1073 for (; receiver; receiver = receiver->parentWidget()) {
receiverDescription
TRUEnever evaluated
FALSEnever evaluated
0
1074 if (!receiver->isEnabled() || !receiver->acceptDrops())
!receiver->isEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
!receiver->acceptDrops()Description
TRUEnever evaluated
FALSEnever evaluated
0
1075 continue;
never executed: continue;
0
1076 // Map event position from us to the receiver-
1077 QPoint receiverPos = d->mapToReceiver(p, receiver).toPoint();-
1078 if (receiver != d->dragDropWidget) {
receiver != d->dragDropWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1079 // Try to enter before we leave-
1080 QDragEnterEvent dragEnter(receiverPos, event->possibleActions(), event->mimeData(), event->buttons(), event->modifiers());-
1081 dragEnter.setDropAction(event->proposedAction());-
1082 QApplication::sendEvent(receiver, &dragEnter);-
1083 event->setAccepted(dragEnter.isAccepted());-
1084 event->setDropAction(dragEnter.dropAction());-
1085 if (!event->isAccepted()) {
!event->isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
1086 // propagate to the parent widget-
1087 continue;
never executed: continue;
0
1088 }-
1089-
1090 d->lastDropAction = event->dropAction();-
1091-
1092 if (d->dragDropWidget) {
d->dragDropWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1093 QDragLeaveEvent dragLeave;-
1094 QApplication::sendEvent(d->dragDropWidget, &dragLeave);-
1095 }
never executed: end of block
0
1096 d->dragDropWidget = receiver;-
1097 }
never executed: end of block
0
1098-
1099 QDragMoveEvent dragMove(receiverPos, event->possibleActions(), event->mimeData(), event->buttons(), event->modifiers());-
1100 event->setDropAction(d->lastDropAction);-
1101 QApplication::sendEvent(receiver, &dragMove);-
1102 event->setAccepted(dragMove.isAccepted());-
1103 event->setDropAction(dragMove.dropAction());-
1104 if (event->isAccepted())
event->isAccepted()Description
TRUEnever evaluated
FALSEnever evaluated
0
1105 d->lastDropAction = event->dropAction();
never executed: d->lastDropAction = event->dropAction();
0
1106 eventDelivered = true;-
1107 break;
never executed: break;
0
1108 }-
1109-
1110 if (!eventDelivered) {
!eventDeliveredDescription
TRUEnever evaluated
FALSEnever evaluated
0
1111 if (d->dragDropWidget) {
d->dragDropWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1112 // Leave the last drag drop item-
1113 QDragLeaveEvent dragLeave;-
1114 QApplication::sendEvent(d->dragDropWidget, &dragLeave);-
1115 d->dragDropWidget = 0;-
1116 }
never executed: end of block
0
1117 // Propagate-
1118 event->setDropAction(Qt::IgnoreAction);-
1119 }
never executed: end of block
0
1120#endif-
1121}
never executed: end of block
0
1122-
1123/*!-
1124 \reimp-
1125*/-
1126void QGraphicsProxyWidget::dropEvent(QGraphicsSceneDragDropEvent *event)-
1127{-
1128#ifdef QT_NO_DRAGANDDROP-
1129 Q_UNUSED(event);-
1130#else-
1131 Q_D(QGraphicsProxyWidget);-
1132 if (d->widget && d->dragDropWidget) {
d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
d->dragDropWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1133 QPoint widgetPos = d->mapToReceiver(event->pos(), d->dragDropWidget).toPoint();-
1134 QDropEvent dropEvent(widgetPos, event->possibleActions(), event->mimeData(), event->buttons(), event->modifiers());-
1135 QApplication::sendEvent(d->dragDropWidget, &dropEvent);-
1136 event->setAccepted(dropEvent.isAccepted());-
1137 d->dragDropWidget = 0;-
1138 }
never executed: end of block
0
1139#endif-
1140}
never executed: end of block
0
1141#endif-
1142-
1143/*!-
1144 \reimp-
1145*/-
1146void QGraphicsProxyWidget::hoverEnterEvent(QGraphicsSceneHoverEvent *event)-
1147{-
1148 Q_UNUSED(event);-
1149}
never executed: end of block
0
1150-
1151/*!-
1152 \reimp-
1153*/-
1154void QGraphicsProxyWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)-
1155{-
1156 Q_UNUSED(event);-
1157 Q_D(QGraphicsProxyWidget);-
1158 // If hoverMove was compressed away, make sure we update properly here.-
1159 if (d->lastWidgetUnderMouse) {
d->lastWidgetUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
0
1160 QApplicationPrivate::dispatchEnterLeave(0, d->lastWidgetUnderMouse, event->screenPos());-
1161 d->lastWidgetUnderMouse = 0;-
1162 }
never executed: end of block
0
1163}
never executed: end of block
0
1164-
1165/*!-
1166 \reimp-
1167*/-
1168void QGraphicsProxyWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event)-
1169{-
1170 Q_D(QGraphicsProxyWidget);-
1171#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1172 qDebug("QGraphicsProxyWidget::hoverMoveEvent");-
1173#endif-
1174 // Ignore events on the window frame.-
1175 if (!d->widget || !rect().contains(event->pos())) {
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!rect().contains(event->pos())Description
TRUEnever evaluated
FALSEnever evaluated
0
1176 if (d->lastWidgetUnderMouse) {
d->lastWidgetUnderMouseDescription
TRUEnever evaluated
FALSEnever evaluated
0
1177 QApplicationPrivate::dispatchEnterLeave(0, d->lastWidgetUnderMouse, event->screenPos());-
1178 d->lastWidgetUnderMouse = 0;-
1179 }
never executed: end of block
0
1180 return;
never executed: return;
0
1181 }-
1182-
1183 d->embeddedMouseGrabber = 0;-
1184 d->sendWidgetMouseEvent(event);-
1185}
never executed: end of block
0
1186-
1187/*!-
1188 \reimp-
1189*/-
1190void QGraphicsProxyWidget::grabMouseEvent(QEvent *event)-
1191{-
1192 Q_UNUSED(event);-
1193}
never executed: end of block
0
1194-
1195/*!-
1196 \reimp-
1197*/-
1198void QGraphicsProxyWidget::ungrabMouseEvent(QEvent *event)-
1199{-
1200 Q_D(QGraphicsProxyWidget);-
1201 Q_UNUSED(event);-
1202 d->embeddedMouseGrabber = 0;-
1203}
never executed: end of block
0
1204-
1205/*!-
1206 \reimp-
1207*/-
1208void QGraphicsProxyWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event)-
1209{-
1210 Q_D(QGraphicsProxyWidget);-
1211#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1212 qDebug("QGraphicsProxyWidget::mouseMoveEvent");-
1213#endif-
1214 d->sendWidgetMouseEvent(event);-
1215}
never executed: end of block
0
1216-
1217/*!-
1218 \reimp-
1219*/-
1220void QGraphicsProxyWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)-
1221{-
1222 Q_D(QGraphicsProxyWidget);-
1223#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1224 qDebug("QGraphicsProxyWidget::mousePressEvent");-
1225#endif-
1226 d->sendWidgetMouseEvent(event);-
1227}
never executed: end of block
0
1228-
1229/*!-
1230 \reimp-
1231*/-
1232void QGraphicsProxyWidget::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)-
1233{-
1234 Q_D(QGraphicsProxyWidget);-
1235#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1236 qDebug("QGraphicsProxyWidget::mouseDoubleClickEvent");-
1237#endif-
1238 d->sendWidgetMouseEvent(event);-
1239}
never executed: end of block
0
1240-
1241/*!-
1242 \reimp-
1243*/-
1244#ifndef QT_NO_WHEELEVENT-
1245void QGraphicsProxyWidget::wheelEvent(QGraphicsSceneWheelEvent *event)-
1246{-
1247 Q_D(QGraphicsProxyWidget);-
1248#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1249 qDebug("QGraphicsProxyWidget::wheelEvent");-
1250#endif-
1251 if (!d->widget)
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1252 return;
never executed: return;
0
1253-
1254 QPointF pos = event->pos();-
1255 QPointer<QWidget> receiver = d->widget->childAt(pos.toPoint());-
1256 if (!receiver)
!receiverDescription
TRUEnever evaluated
FALSEnever evaluated
0
1257 receiver = d->widget;
never executed: receiver = d->widget;
0
1258-
1259 // Map event position from us to the receiver-
1260 pos = d->mapToReceiver(pos, receiver);-
1261-
1262 // Send mouse event.-
1263 QWheelEvent wheelEvent(pos.toPoint(), event->screenPos(), event->delta(),-
1264 event->buttons(), event->modifiers(), event->orientation());-
1265 QPointer<QWidget> focusWidget = d->widget->focusWidget();-
1266 extern bool qt_sendSpontaneousEvent(QObject *, QEvent *);-
1267 qt_sendSpontaneousEvent(receiver, &wheelEvent);-
1268 event->setAccepted(wheelEvent.isAccepted());-
1269-
1270 // ### Remove, this should be done by proper focusIn/focusOut events.-
1271 if (focusWidget && !focusWidget->hasFocus()) {
focusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
!focusWidget->hasFocus()Description
TRUEnever evaluated
FALSEnever evaluated
0
1272 focusWidget->update();-
1273 focusWidget = d->widget->focusWidget();-
1274 if (focusWidget && focusWidget->hasFocus())
focusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
focusWidget->hasFocus()Description
TRUEnever evaluated
FALSEnever evaluated
0
1275 focusWidget->update();
never executed: focusWidget->update();
0
1276 }
never executed: end of block
0
1277}
never executed: end of block
0
1278#endif-
1279-
1280/*!-
1281 \reimp-
1282*/-
1283void QGraphicsProxyWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)-
1284{-
1285 Q_D(QGraphicsProxyWidget);-
1286#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1287 qDebug("QGraphicsProxyWidget::mouseReleaseEvent");-
1288#endif-
1289 d->sendWidgetMouseEvent(event);-
1290}
never executed: end of block
0
1291-
1292/*!-
1293 \reimp-
1294*/-
1295void QGraphicsProxyWidget::keyPressEvent(QKeyEvent *event)-
1296{-
1297 Q_D(QGraphicsProxyWidget);-
1298#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1299 qDebug("QGraphicsProxyWidget::keyPressEvent");-
1300#endif-
1301 d->sendWidgetKeyEvent(event);-
1302}
never executed: end of block
0
1303-
1304/*!-
1305 \reimp-
1306*/-
1307void QGraphicsProxyWidget::keyReleaseEvent(QKeyEvent *event)-
1308{-
1309 Q_D(QGraphicsProxyWidget);-
1310#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1311 qDebug("QGraphicsProxyWidget::keyReleaseEvent");-
1312#endif-
1313 d->sendWidgetKeyEvent(event);-
1314}
never executed: end of block
0
1315-
1316/*!-
1317 \reimp-
1318*/-
1319void QGraphicsProxyWidget::focusInEvent(QFocusEvent *event)-
1320{-
1321#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1322 qDebug("QGraphicsProxyWidget::focusInEvent");-
1323#endif-
1324 Q_D(QGraphicsProxyWidget);-
1325-
1326 if (d->focusFromWidgetToProxy) {
d->focusFromWidgetToProxyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1327 // Prevent recursion when the proxy autogains focus through the-
1328 // embedded widget calling setFocus(). ### Could be done with event-
1329 // filter on FocusIn instead?-
1330 return;
never executed: return;
0
1331 }-
1332-
1333 d->proxyIsGivingFocus = true;-
1334-
1335 switch (event->reason()) {-
1336 case Qt::TabFocusReason: {
never executed: case Qt::TabFocusReason:
0
1337 if (QWidget *focusChild = d->findFocusChild(0, true))
QWidget *focus...Child(0, true)Description
TRUEnever evaluated
FALSEnever evaluated
0
1338 focusChild->setFocus(event->reason());
never executed: focusChild->setFocus(event->reason());
0
1339 break;
never executed: break;
0
1340 }-
1341 case Qt::BacktabFocusReason:
never executed: case Qt::BacktabFocusReason:
0
1342 if (QWidget *focusChild = d->findFocusChild(0, false))
QWidget *focus...hild(0, false)Description
TRUEnever evaluated
FALSEnever evaluated
0
1343 focusChild->setFocus(event->reason());
never executed: focusChild->setFocus(event->reason());
0
1344 break;
never executed: break;
0
1345 default:
never executed: default:
0
1346 if (d->widget && d->widget->focusWidget()) {
d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
d->widget->focusWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1347 d->widget->focusWidget()->setFocus(event->reason());-
1348 }
never executed: end of block
0
1349 break;
never executed: break;
0
1350 }-
1351-
1352 d->proxyIsGivingFocus = false;-
1353}
never executed: end of block
0
1354-
1355/*!-
1356 \reimp-
1357*/-
1358void QGraphicsProxyWidget::focusOutEvent(QFocusEvent *event)-
1359{-
1360#ifdef GRAPHICSPROXYWIDGET_DEBUG-
1361 qDebug("QGraphicsProxyWidget::focusOutEvent");-
1362#endif-
1363 Q_D(QGraphicsProxyWidget);-
1364 if (d->widget) {
d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1365 // We need to explicitly remove subfocus from the embedded widget's-
1366 // focus widget.-
1367 if (QWidget *focusWidget = d->widget->focusWidget())
QWidget *focus...>focusWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1368 d->removeSubFocusHelper(focusWidget, event->reason());
never executed: d->removeSubFocusHelper(focusWidget, event->reason());
0
1369 }
never executed: end of block
0
1370}
never executed: end of block
0
1371-
1372/*!-
1373 \reimp-
1374*/-
1375bool QGraphicsProxyWidget::focusNextPrevChild(bool next)-
1376{-
1377 Q_D(QGraphicsProxyWidget);-
1378 if (!d->widget || !d->scene)
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!d->sceneDescription
TRUEnever evaluated
FALSEnever evaluated
0
1379 return QGraphicsWidget::focusNextPrevChild(next);
never executed: return QGraphicsWidget::focusNextPrevChild(next);
0
1380-
1381 Qt::FocusReason reason = next ? Qt::TabFocusReason : Qt::BacktabFocusReason;
nextDescription
TRUEnever evaluated
FALSEnever evaluated
0
1382 QWidget *lastFocusChild = d->widget->focusWidget();-
1383 if (QWidget *newFocusChild = d->findFocusChild(lastFocusChild, next)) {
QWidget *newFo...usChild, next)Description
TRUEnever evaluated
FALSEnever evaluated
0
1384 newFocusChild->setFocus(reason);-
1385 return true;
never executed: return true;
0
1386 }-
1387-
1388 return QGraphicsWidget::focusNextPrevChild(next);
never executed: return QGraphicsWidget::focusNextPrevChild(next);
0
1389}-
1390-
1391/*!-
1392 \reimp-
1393*/-
1394QVariant QGraphicsProxyWidget::inputMethodQuery(Qt::InputMethodQuery query) const-
1395{-
1396 Q_D(const QGraphicsProxyWidget);-
1397-
1398 if (!d->widget || !hasFocus())
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!hasFocus()Description
TRUEnever evaluated
FALSEnever evaluated
0
1399 return QVariant();
never executed: return QVariant();
0
1400-
1401 QWidget *focusWidget = widget()->focusWidget();-
1402 if (!focusWidget)
!focusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1403 focusWidget = d->widget;
never executed: focusWidget = d->widget;
0
1404 QVariant v = focusWidget->inputMethodQuery(query);-
1405 QPointF focusWidgetPos = subWidgetRect(focusWidget).topLeft();-
1406 switch (v.type()) {-
1407 case QVariant::RectF:
never executed: case QVariant::RectF:
0
1408 v = v.toRectF().translated(focusWidgetPos);-
1409 break;
never executed: break;
0
1410 case QVariant::PointF:
never executed: case QVariant::PointF:
0
1411 v = v.toPointF() + focusWidgetPos;-
1412 break;
never executed: break;
0
1413 case QVariant::Rect:
never executed: case QVariant::Rect:
0
1414 v = v.toRect().translated(focusWidgetPos.toPoint());-
1415 break;
never executed: break;
0
1416 case QVariant::Point:
never executed: case QVariant::Point:
0
1417 v = v.toPoint() + focusWidgetPos.toPoint();-
1418 break;
never executed: break;
0
1419 default:
never executed: default:
0
1420 break;
never executed: break;
0
1421 }-
1422 return v;
never executed: return v;
0
1423}-
1424-
1425/*!-
1426 \reimp-
1427*/-
1428void QGraphicsProxyWidget::inputMethodEvent(QInputMethodEvent *event)-
1429{-
1430 // Forward input method events if the focus widget enables input methods.-
1431 Q_D(const QGraphicsProxyWidget);-
1432 QWidget *focusWidget = d->widget->focusWidget();-
1433 if (focusWidget && focusWidget->testAttribute(Qt::WA_InputMethodEnabled))
focusWidgetDescription
TRUEnever evaluated
FALSEnever evaluated
focusWidget->t...MethodEnabled)Description
TRUEnever evaluated
FALSEnever evaluated
0
1434 QApplication::sendEvent(focusWidget, event);
never executed: QApplication::sendEvent(focusWidget, event);
0
1435}
never executed: end of block
0
1436-
1437/*!-
1438 \reimp-
1439*/-
1440QSizeF QGraphicsProxyWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const-
1441{-
1442 Q_D(const QGraphicsProxyWidget);-
1443 if (!d->widget)
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1444 return QGraphicsWidget::sizeHint(which, constraint);
never executed: return QGraphicsWidget::sizeHint(which, constraint);
0
1445-
1446 QSizeF sh;-
1447 switch (which) {-
1448 case Qt::PreferredSize:
never executed: case Qt::PreferredSize:
0
1449 if (QLayout *l = d->widget->layout())
QLayout *l = d...dget->layout()Description
TRUEnever evaluated
FALSEnever evaluated
0
1450 sh = l->sizeHint();
never executed: sh = l->sizeHint();
0
1451 else-
1452 sh = d->widget->sizeHint();
never executed: sh = d->widget->sizeHint();
0
1453 break;
never executed: break;
0
1454 case Qt::MinimumSize:
never executed: case Qt::MinimumSize:
0
1455 if (QLayout *l = d->widget->layout())
QLayout *l = d...dget->layout()Description
TRUEnever evaluated
FALSEnever evaluated
0
1456 sh = l->minimumSize();
never executed: sh = l->minimumSize();
0
1457 else-
1458 sh = d->widget->minimumSizeHint();
never executed: sh = d->widget->minimumSizeHint();
0
1459 break;
never executed: break;
0
1460 case Qt::MaximumSize:
never executed: case Qt::MaximumSize:
0
1461 if (QLayout *l = d->widget->layout())
QLayout *l = d...dget->layout()Description
TRUEnever evaluated
FALSEnever evaluated
0
1462 sh = l->maximumSize();
never executed: sh = l->maximumSize();
0
1463 else-
1464 sh = QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
never executed: sh = QSizeF(((1<<24)-1), ((1<<24)-1));
0
1465 break;
never executed: break;
0
1466 case Qt::MinimumDescent:
never executed: case Qt::MinimumDescent:
0
1467 sh = constraint;-
1468 break;
never executed: break;
0
1469 default:
never executed: default:
0
1470 break;
never executed: break;
0
1471 }-
1472 return sh;
never executed: return sh;
0
1473}-
1474-
1475/*!-
1476 \reimp-
1477*/-
1478void QGraphicsProxyWidget::resizeEvent(QGraphicsSceneResizeEvent *event)-
1479{-
1480 Q_D(QGraphicsProxyWidget);-
1481 if (d->widget) {
d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1482 if (d->sizeChangeMode != QGraphicsProxyWidgetPrivate::WidgetToProxyMode)
d->sizeChangeM...getToProxyModeDescription
TRUEnever evaluated
FALSEnever evaluated
0
1483 d->widget->resize(event->newSize().toSize());
never executed: d->widget->resize(event->newSize().toSize());
0
1484 }
never executed: end of block
0
1485 QGraphicsWidget::resizeEvent(event);-
1486}
never executed: end of block
0
1487-
1488/*!-
1489 \reimp-
1490*/-
1491void QGraphicsProxyWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)-
1492{-
1493 Q_D(QGraphicsProxyWidget);-
1494 Q_UNUSED(widget);-
1495 if (!d->widget || !d->widget->isVisible())
!d->widgetDescription
TRUEnever evaluated
FALSEnever evaluated
!d->widget->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
1496 return;
never executed: return;
0
1497-
1498 // Filter out repaints on the window frame.-
1499 const QRect exposedWidgetRect = (option->exposedRect & rect()).toAlignedRect();-
1500 if (exposedWidgetRect.isEmpty())
exposedWidgetRect.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1501 return;
never executed: return;
0
1502-
1503 d->widget->render(painter, exposedWidgetRect.topLeft(), exposedWidgetRect);-
1504}
never executed: end of block
0
1505-
1506/*!-
1507 \reimp-
1508*/-
1509int QGraphicsProxyWidget::type() const-
1510{-
1511 return Type;
never executed: return Type;
0
1512}-
1513-
1514/*!-
1515 \since 4.5-
1516-
1517 Creates a proxy widget for the given \a child of the widget-
1518 contained in this proxy.-
1519-
1520 This function makes it possible to acquire proxies for-
1521 non top-level widgets. For instance, you can embed a dialog,-
1522 and then transform only one of its widgets.-
1523-
1524 If the widget is already embedded, return the existing proxy widget.-
1525-
1526 \sa newProxyWidget(), QGraphicsScene::addWidget()-
1527*/-
1528QGraphicsProxyWidget *QGraphicsProxyWidget::createProxyForChildWidget(QWidget *child)-
1529{-
1530 QGraphicsProxyWidget *proxy = child->graphicsProxyWidget();-
1531 if (proxy)
proxyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1532 return proxy;
never executed: return proxy;
0
1533 if (!child->parentWidget()) {
!child->parentWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
1534 qWarning("QGraphicsProxyWidget::createProxyForChildWidget: top-level widget not in a QGraphicsScene");-
1535 return 0;
never executed: return 0;
0
1536 }-
1537-
1538 QGraphicsProxyWidget *parentProxy = createProxyForChildWidget(child->parentWidget());-
1539 if (!parentProxy)
!parentProxyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1540 return 0;
never executed: return 0;
0
1541-
1542 if (!QMetaObject::invokeMethod(parentProxy, "newProxyWidget", Qt::DirectConnection,
!QMetaObject::...get*", child))Description
TRUEnever evaluated
FALSEnever evaluated
0
1543 Q_RETURN_ARG(QGraphicsProxyWidget*, proxy), Q_ARG(const QWidget*, child)))
!QMetaObject::...get*", child))Description
TRUEnever evaluated
FALSEnever evaluated
0
1544 return 0;
never executed: return 0;
0
1545 proxy->setParent(parentProxy);-
1546 proxy->setWidget(child);-
1547 return proxy;
never executed: return proxy;
0
1548}-
1549-
1550/*!-
1551 \fn QGraphicsProxyWidget *QGraphicsProxyWidget::newProxyWidget(const QWidget *child)-
1552 \since 4.5-
1553-
1554 Creates a proxy widget for the given \a child of the widget contained in this-
1555 proxy.-
1556-
1557 You should not call this function directly; use-
1558 QGraphicsProxyWidget::createProxyForChildWidget() instead.-
1559-
1560 This function is a fake virtual slot that you can reimplement in-
1561 your subclass in order to control how new proxy widgets are-
1562 created. The default implementation returns a proxy created with-
1563 the QGraphicsProxyWidget() constructor with this proxy widget as-
1564 the parent.-
1565-
1566 \sa createProxyForChildWidget()-
1567*/-
1568QGraphicsProxyWidget *QGraphicsProxyWidget::newProxyWidget(const QWidget *)-
1569{-
1570 return new QGraphicsProxyWidget(this);
never executed: return new QGraphicsProxyWidget(this);
0
1571}-
1572-
1573-
1574-
1575QT_END_NAMESPACE-
1576-
1577#include "moc_qgraphicsproxywidget.cpp"-
1578-
1579#endif //QT_NO_GRAPHICSVIEW-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9