File indexing completed on 2024-05-12 05:28:39
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "breezewidgetexplorer.h" 0008 0009 #include "breeze.h" 0010 0011 #include <QApplication> 0012 #include <QMouseEvent> 0013 #include <QPainter> 0014 #include <QTextStream> 0015 0016 namespace Breeze 0017 { 0018 //________________________________________________ 0019 WidgetExplorer::WidgetExplorer(QObject *parent) 0020 : QObject(parent) 0021 { 0022 _eventTypes.insert(QEvent::Enter, QStringLiteral("Enter")); 0023 _eventTypes.insert(QEvent::Leave, QStringLiteral("Leave")); 0024 0025 _eventTypes.insert(QEvent::HoverMove, QStringLiteral("HoverMove")); 0026 _eventTypes.insert(QEvent::HoverEnter, QStringLiteral("HoverEnter")); 0027 _eventTypes.insert(QEvent::HoverLeave, QStringLiteral("HoverLeave")); 0028 0029 _eventTypes.insert(QEvent::MouseMove, QStringLiteral("MouseMove")); 0030 _eventTypes.insert(QEvent::MouseButtonPress, QStringLiteral("MouseButtonPress")); 0031 _eventTypes.insert(QEvent::MouseButtonRelease, QStringLiteral("MouseButtonRelease")); 0032 0033 _eventTypes.insert(QEvent::FocusIn, QStringLiteral("FocusIn")); 0034 _eventTypes.insert(QEvent::FocusOut, QStringLiteral("FocusOut")); 0035 0036 // _eventTypes.insert( QEvent::Paint, "Paint" ); 0037 } 0038 0039 //________________________________________________ 0040 void WidgetExplorer::setEnabled(bool value) 0041 { 0042 if (value == _enabled) { 0043 return; 0044 } 0045 _enabled = value; 0046 0047 qApp->removeEventFilter(this); 0048 if (_enabled) { 0049 qApp->installEventFilter(this); 0050 } 0051 } 0052 0053 //________________________________________________ 0054 bool WidgetExplorer::eventFilter(QObject *object, QEvent *event) 0055 { 0056 // if( object->isWidgetType() ) 0057 // { 0058 // QString type( _eventTypes[event->type()] ); 0059 // if( !type.isEmpty() ) 0060 // { 0061 // QTextStream( stdout ) << "Breeze::WidgetExplorer::eventFilter - widget: " << object << " (" << object->metaObject()->className() << ")"; 0062 // QTextStream( stdout ) << " type: " << type << Qt::endl; 0063 // } 0064 // } 0065 0066 switch (event->type()) { 0067 case QEvent::Paint: 0068 if (_drawWidgetRects) { 0069 QWidget *widget(qobject_cast<QWidget *>(object)); 0070 if (!widget) { 0071 return false; 0072 } 0073 0074 QPainter painter(widget); 0075 painter.setRenderHints(QPainter::Antialiasing); 0076 painter.setBrush(Qt::NoBrush); 0077 painter.setPen(Qt::red); 0078 painter.drawRect(widget->rect()); 0079 painter.end(); 0080 } 0081 break; 0082 0083 case QEvent::MouseButtonPress: { 0084 // cast event and check button 0085 QMouseEvent *mouseEvent(static_cast<QMouseEvent *>(event)); 0086 if (mouseEvent->button() != Qt::LeftButton) { 0087 break; 0088 } 0089 0090 // case widget and check (should not be necessary) 0091 QWidget *widget(qobject_cast<QWidget *>(object)); 0092 if (!widget) { 0093 return false; 0094 } 0095 0096 QTextStream(stdout) << "Breeze::WidgetExplorer::eventFilter -" 0097 << " event: " << event << " type: " << eventType(event->type()) << " widget: " << widgetInformation(widget) << Qt::endl; 0098 0099 // print parent information 0100 QWidget *parent(widget->parentWidget()); 0101 while (parent) { 0102 QTextStream(stdout) << " parent: " << widgetInformation(parent) << Qt::endl; 0103 parent = parent->parentWidget(); 0104 } 0105 QTextStream(stdout) << "" << Qt::endl; 0106 0107 break; 0108 } 0109 0110 default: 0111 break; 0112 } 0113 0114 // always return false to go on with normal chain 0115 return false; 0116 } 0117 0118 //________________________________________________ 0119 QString WidgetExplorer::eventType(const QEvent::Type &type) const 0120 { 0121 switch (type) { 0122 case QEvent::MouseButtonPress: 0123 return QStringLiteral("MouseButtonPress"); 0124 case QEvent::MouseButtonRelease: 0125 return QStringLiteral("MouseButtonRelease"); 0126 case QEvent::MouseMove: 0127 return QStringLiteral("MouseMove"); 0128 default: 0129 return QStringLiteral("Unknown"); 0130 } 0131 } 0132 0133 //________________________________________________ 0134 QString WidgetExplorer::widgetInformation(const QWidget *widget) const 0135 { 0136 QRect r(widget->geometry()); 0137 const char *className(widget->metaObject()->className()); 0138 QString out; 0139 QTextStream(&out) << widget << " (" << className << ")" 0140 << " position: " << r.x() << "," << r.y() << " size: " << r.width() << "," << r.height() << " sizeHint: " << widget->sizeHint().width() 0141 << "," << widget->sizeHint().height() << " minimumSizeHint: " << widget->minimumSizeHint().width() << "," 0142 << widget->minimumSizeHint().height() << " hover: " << widget->testAttribute(Qt::WA_Hover); 0143 0144 return out; 0145 } 0146 0147 }