bool TreeWidgetColumnStretcher::eventFilter(QObject *obj, QEvent *ev) { if (obj == parent()) { if (ev->type() == QEvent::Show) { QHeaderView *hv = qobject_cast<QHeaderView*>(obj); for (int i = 0; i < hv->count(); ++i) hv->setSectionResizeMode(i, QHeaderView::Interactive); } else if (ev->type() == QEvent::Hide) { QHeaderView *hv = qobject_cast<QHeaderView*>(obj); for (int i = 0; i < hv->count(); ++i) hv->setSectionResizeMode(i, i == m_columnToStretch ? QHeaderView::Stretch : QHeaderView::ResizeToContents); } else if (ev->type() == QEvent::Resize) { QHeaderView *hv = qobject_cast<QHeaderView*>(obj); if (hv->sectionResizeMode(m_columnToStretch) == QHeaderView::Interactive) { QResizeEvent *re = static_cast<QResizeEvent*>(ev); int diff = re->size().width() - re->oldSize().width() ; hv->resizeSection(m_columnToStretch, qMax(32, hv->sectionSize(1) + diff)); } } } return false; }
void PWidget::eventResize(QObject *, QEvent *e) { PukeMessage pm; widgetId wI; QResizeEvent *re = Q_RESIZE_EVENT(e); wI = widgetIden(); pm.iCommand = - e->type() - 1020; // 1020 offset for events pm.iWinId = wI.iWinId; pm.iArg = 0; // special cArg handling pm.iTextSize = 4*sizeof(int); int *icArg = new int[4]; icArg[0] = re->size().height(); icArg[1] = re->size().width(); icArg[2] = re->oldSize().height(); icArg[3] = re->oldSize().width(); pm.cArg = (char *) icArg; emit outputMessage(wI.fd, &pm); delete[] icArg; }
bool ComboTabBar::eventFilter(QObject* obj, QEvent* ev) { if (m_bluredBackground && ev->type() == QEvent::Paint && (obj == m_leftContainer || obj == m_rightContainer || obj == m_mainTabBarWidget || obj == m_pinnedTabBarWidget)) { QPaintEvent* event = static_cast<QPaintEvent*>(ev); QPainter p(qobject_cast<QWidget*>(obj)); p.setCompositionMode(QPainter::CompositionMode_Clear); p.fillRect(event->rect(), QColor(0, 0, 0, 0)); } if (obj == m_mainTabBar && ev->type() == QEvent::Resize) { QResizeEvent* event = static_cast<QResizeEvent*>(ev); if (event->oldSize().height() != event->size().height()) { setUpLayout(); } } // Handle wheel events exclusively in ComboTabBar if (ev->type() == QEvent::Wheel) { wheelEvent(static_cast<QWheelEvent*>(ev)); return true; } return QWidget::eventFilter(obj, ev); }
// Extract event-specific arguments to co::Any array void EventHub::extractArguments( QEvent* event, co::Any* args, int maxArgs ) { QEvent::Type ev = event->type(); switch( ev ) { case QEvent::MouseButtonDblClick: case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseMove: { QMouseEvent* mouseEvent = static_cast<QMouseEvent*>( event ); // extract (x and y), button, modifiers const QPoint& pos = mouseEvent->pos(); args[0].set( pos.x() ); args[1].set( pos.y() ); args[2].set( static_cast<co::uint32>( ev == QEvent::MouseMove ? mouseEvent->buttons() : mouseEvent->button() ) ); fillKeyboardModifiers( mouseEvent->modifiers(), args[3] ); } break; case QEvent::KeyPress: case QEvent::KeyRelease: { QKeyEvent* keyEvent = static_cast<QKeyEvent*>( event ); fillKeyCodeString( keyEvent->key(), args[0] ); fillKeyboardModifiers( keyEvent->modifiers(), args[1] ); } break; case QEvent::Wheel: { QWheelEvent* wheelEvent = static_cast<QWheelEvent*>( event ); // extract position (x and y ), delta, modifiers const QPoint& pos = wheelEvent->pos(); args[0].set( pos.x() ); args[1].set( pos.x() ); args[2].set( wheelEvent->delta() ); fillKeyboardModifiers( wheelEvent->modifiers(), args[3] ); } break; case QEvent::Resize: { QResizeEvent* resizeEvent = static_cast<QResizeEvent*>( event ); // extract size (width and height) and oldSize (width and height) const QSize& size = resizeEvent->size(); const QSize& oldSize = resizeEvent->oldSize(); args[0].set( size.width() ); args[1].set( size.height() ); args[2].set( oldSize.width() ); args[3].set( oldSize.height() ); } break; default: // Close, Show and Hide require no arguments return; } }
dmz::V8Value dmz::JsModuleUiV8QtBasic::_resize_event_old_size (const v8::Arguments &Args) { v8::HandleScope scope; V8Value result = v8::Undefined (); JsModuleUiV8QtBasic *self = _to_self (Args); if (self) { QResizeEvent *event = (QResizeEvent *)self->_to_qevent (Args.This ()); if (event) { result = qsize_to_v8 (event->oldSize ()); } } return scope.Close (result); }
bool ComboTabBar::eventFilter(QObject* obj, QEvent* ev) { if (obj == m_mainTabBar && ev->type() == QEvent::Resize) { QResizeEvent* event = static_cast<QResizeEvent*>(ev); if (event->oldSize().height() != event->size().height()) { setUpLayout(); } } // Handle wheel events exclusively in ComboTabBar if (ev->type() == QEvent::Wheel) { wheelEvent(static_cast<QWheelEvent*>(ev)); return true; } return QWidget::eventFilter(obj, ev); }
bool Widget3DWidget::eventFilter(QObject *obj, QEvent *ev) { if (obj == mQWidget) { switch (ev->type()) { case QEvent::Resize: { QResizeEvent *re = static_cast<QResizeEvent*>(ev); if (re->oldSize() != re->size()) { mMetaData[QStringLiteral("geometry")] = mQWidget->geometry(); mGeomDirty = true; startUpdateTimer(); } return false; } case QEvent::Paint: { if (!mIsPainting) { mTextureDirty = true; startUpdateTimer(); } return false; } case QEvent::Show: { mGeomDirty = true; mTextureDirty = true; updateTimeout(); return false; } case QEvent::Hide: { mTextureImage = QImage(); mBackTextureImage = QImage(); mUpdateTimer->stop(); Q_EMIT changed(QVector<int>() << Widget3DModel::TextureRole << Widget3DModel::BackTextureRole); return false; } case QEvent::ParentChange: { // TODO: Handle ParentChange! } default: return false; } } return false; }
bool WidgetFadeHelper::eventFilter(QObject* obj, QEvent* event) { // We're only interested in our parent's resize events if (obj != parent_ || event->type() != QEvent::Resize) return false; // Don't care if we're hidden if (!isVisible()) return false; QResizeEvent* re = static_cast<QResizeEvent*>(event); if (re->oldSize() == re->size()) { // Ignore phoney resize events return false; } // Get a new capture of the parent hide(); CaptureParent(); show(); return false; }
bool LinkView::eventFilter(QObject *o, QEvent *e) { if (o != hardware) return QScrollView::eventFilter(o, e); if (_blocked || e->type() != QEvent::Resize) return FALSE; // not a resize - non of our business QResizeEvent *rev = (QResizeEvent*)e; if (rev->size().height() == rev->oldSize().height()) return FALSE; // height didn't change int tmpH = rev->size().height() + locations->numRows()*locations->itemHeight()+20; if (tmpH < viewport()->height()) tmpH = viewport()->height(); if (tmpH != splitter->height()) { _blocked = TRUE; splitter->resize ( splitter->width(), tmpH ); _blocked = FALSE; } return FALSE; }
bool HoverPoints::eventFilter(QObject *object, QEvent *event) { if (object == m_widget && m_enabled) { switch (event->type()) { case QEvent::MouseButtonPress: { if (!m_fingerPointMapping.isEmpty()) return true; QMouseEvent *me = (QMouseEvent *) event; QPointF clickPos = me->pos(); int index = -1; for (int i=0; i<m_points.size(); ++i) { QPainterPath path; if (m_shape == CircleShape) path.addEllipse(pointBoundingRect(i)); else path.addRect(pointBoundingRect(i)); if (path.contains(clickPos)) { index = i; break; } } if (me->button() == Qt::LeftButton) { if (index == -1) { if (!m_editable) return false; int pos = 0; // Insert sort for x or y if (m_sortType == XSort) { for (int i=0; i<m_points.size(); ++i) if (m_points.at(i).x() > clickPos.x()) { pos = i; break; } } else if (m_sortType == YSort) { for (int i=0; i<m_points.size(); ++i) if (m_points.at(i).y() > clickPos.y()) { pos = i; break; } } m_points.insert(pos, clickPos); m_locks.insert(pos, 0); m_currentIndex = pos; firePointChange(); } else { m_currentIndex = index; } return true; } else if (me->button() == Qt::RightButton) { if (index >= 0 && m_editable) { if ((m_points.size() - 1) < m_minCountPoints) return true; if (m_locks[index] == 0) { m_locks.remove(index); m_points.remove(index); } firePointChange(); return true; } } } break; case QEvent::MouseButtonRelease: if (!m_fingerPointMapping.isEmpty()) return true; m_currentIndex = -1; break; case QEvent::MouseMove: if (!m_fingerPointMapping.isEmpty()) return true; if (m_currentIndex >= 0) movePoint(m_currentIndex, ((QMouseEvent *)event)->pos()); break; case QEvent::TouchBegin: case QEvent::TouchUpdate: { const QTouchEvent *const touchEvent = static_cast<const QTouchEvent*>(event); const QList<QTouchEvent::TouchPoint> points = touchEvent->touchPoints(); const qreal pointSize = qMax(m_pointSize.width(), m_pointSize.height()); Q_FOREACH (const QTouchEvent::TouchPoint &touchPoint, points) { const int id = touchPoint.id(); switch (touchPoint.state()) { case Qt::TouchPointPressed: { // find the point, move it QSet<int> activePoints = QSet<int>::fromList(m_fingerPointMapping.values()); int activePoint = -1; qreal distance = -1; const int pointsCount = m_points.size(); const int activePointCount = activePoints.size(); if (pointsCount == 2 && activePointCount == 1) { // only two points activePoint = activePoints.contains(0) ? 1 : 0; } else { for (int i=0; i<pointsCount; ++i) { if (activePoints.contains(i)) continue; qreal d = QLineF(touchPoint.pos(), m_points.at(i)).length(); if ((distance < 0 && d < 12 * pointSize) || d < distance) { distance = d; activePoint = i; } } } if (activePoint != -1) { m_fingerPointMapping.insert(touchPoint.id(), activePoint); movePoint(activePoint, touchPoint.pos()); } } break; case Qt::TouchPointReleased: { // move the point and release QHash<int,int>::iterator it = m_fingerPointMapping.find(id); movePoint(it.value(), touchPoint.pos()); m_fingerPointMapping.erase(it); } break; case Qt::TouchPointMoved: { // move the point const int pointIdx = m_fingerPointMapping.value(id, -1); if (pointIdx >= 0) // do we track this point? movePoint(pointIdx, touchPoint.pos()); } break; default: break; } } if (m_fingerPointMapping.isEmpty()) { event->ignore(); return false; } else { return true; } } break; case QEvent::TouchEnd: if (m_fingerPointMapping.isEmpty()) { event->ignore(); return false; } return true; break; case QEvent::Resize: { QResizeEvent *e = (QResizeEvent *) event; if (e->oldSize().width() == 0 || e->oldSize().height() == 0) break; qreal stretch_x = e->size().width() / qreal(e->oldSize().width()); qreal stretch_y = e->size().height() / qreal(e->oldSize().height()); for (int i=0; i<m_points.size(); ++i) { QPointF p = m_points[i]; movePoint(i, QPointF(p.x() * stretch_x, p.y() * stretch_y), false); } firePointChange(); break; } case QEvent::Paint: { QWidget *that_widget = m_widget; m_widget = 0; QApplication::sendEvent(object, event); m_widget = that_widget; paintPoints(); return true; } default: break; } } return false; }
bool QtEvent::eventFilter(QObject *target, QEvent *event) { int type = event->type(); void *func = m_hash.value(type); if (func != 0) { int accept = event->isAccepted() ? 1 : 0; switch(type) { case QEvent::Create: case QEvent::Close: case QEvent::Show: case QEvent::Hide: case QEvent::Enter: case QEvent::Leave: { base_event ev = {accept}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } case QEvent::FocusIn: case QEvent::FocusOut: { QFocusEvent *e = (QFocusEvent*)event; focus_event ev = {accept,e->reason()}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } case QEvent::Timer: { QTimerEvent *e = (QTimerEvent*)event; timer_event ev = {accept,e->timerId()}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } case QEvent::HoverEnter: case QEvent::HoverLeave: case QEvent::HoverMove: { QHoverEvent *e = (QHoverEvent*)event; const QPoint &pt = e->pos(); const QPoint &opt = e->oldPos(); hover_event ev = {accept,pt.x(),pt.y(),opt.x(),opt.y()}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } case QEvent::KeyPress: case QEvent::KeyRelease: { QKeyEvent *e = (QKeyEvent*)event; string_head sh; drvSetString(&sh,e->text()); key_event ev = {accept,e->modifiers(),e->count(),e->isAutoRepeat()?1:0,e->key(),e->nativeModifiers(),e->nativeScanCode(),e->nativeVirtualKey(),&sh}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseButtonDblClick: case QEvent::MouseMove: { QMouseEvent *e = (QMouseEvent*)event; const QPoint &gpt = e->globalPos(); const QPoint &pt = e->pos(); mouse_event ev = {accept,e->modifiers(),e->button(),e->buttons(),gpt.x(),gpt.y(),pt.x(),pt.y()}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } case QEvent::Move: { QMoveEvent *e = (QMoveEvent*)event; const QPoint &pt = e->pos(); const QPoint &opt = e->oldPos(); move_event ev = {accept,pt.x(),pt.y(),opt.x(),opt.y()}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } case QEvent::Resize: { QResizeEvent *e = (QResizeEvent*)event; const QSize &sz = e->size(); const QSize &osz = e->oldSize(); resize_event ev = {accept,sz.width(),sz.height(),osz.width(),osz.height()}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } case QEvent::Paint: { QPaintEvent *e = (QPaintEvent*)event; const QRect &rc = e->rect(); paint_event ev = {accept,rc.x(),rc.y(),rc.width(),rc.height()}; drv_callback(func,&ev,0,0,0); event->setAccepted(ev.accept != 0); break; } default: { return QObject::eventFilter(target,event); } } return true; } return QObject::eventFilter(target,event); }
bool AQEventFilter::eventFilter(QObject *obj, QEvent *ev) #endif { if (AQWEBAPP->ignoreEvents_ || ev->aq_ignore || !obj->isWidgetType()) #ifdef AQ_USE_NOTIFY return QApplication::notify(obj, ev); #else return false; #endif switch (ev->type()) { case QEvent::Show: { ev->aq_ignore = true; QApplication::sendEvent(obj, ev); ev->aq_ignore = false; AQWEBAPP->postAQEvent(new AQEvent(obj, new QEvent(QEvent::Show))); return true; } case QEvent::Hide: { ev->aq_ignore = true; QApplication::sendEvent(obj, ev); ev->aq_ignore = false; QWidget *w = AQ_WIDGET(obj); if (w->isTopLevel()) { //printf("hide %p %s\n", w, w->QObject::name()); //if (AQWEBAPP->lastDeactivate_) // printf("hide lastDeactivate_ %p %s\n", AQWEBAPP->lastDeactivate_, AQWEBAPP->lastDeactivate_->QObject::name()); if (AQWEBAPP->lastDeactivate_ == w) AQWEBAPP->lastDeactivate_ = 0; AQWidgetInfo *wInfo = AQWEBAPP->createdWidgets_.find(w); if (wInfo && wInfo->backActive_) { //printf("hide backActive_ %p %s\n", wInfo->backActive_, wInfo->backActive_->QObject::name()); if (AQWEBAPP->createdWidgets_.find(wInfo->backActive_)) wInfo->backActive_->setActiveWindow(); wInfo->backActive_ = 0; } } AQWEBAPP->postAQEvent(new AQEvent(obj, new QEvent(QEvent::Hide))); //break; return true; } case QEvent::Move: { QMoveEvent *mv = static_cast<QMoveEvent *>(ev); if (mv->pos() != mv->oldPos()) AQWEBAPP->postAQEvent(new AQEvent(obj, new QMoveEvent(mv->pos(), mv->oldPos()))); break; } case QEvent::Resize: { QResizeEvent *rs = static_cast<QResizeEvent *>(ev); if (rs->size() != rs->oldSize()) AQWEBAPP->postAQEvent(new AQEvent(obj, new QResizeEvent(rs->size(), rs->oldSize()))); break; } case QEvent::Reparent: { AQWEBAPP->postAQEvent(new AQEvent(obj, new QEvent(QEvent::Reparent))); break; } case QEvent::WindowActivate: { QWidget *w = AQ_WIDGET(obj); if (w->isTopLevel()) { //printf("activate %p %s\n", w, w->QObject::name()); if (AQWEBAPP->lastDeactivate_ && AQWEBAPP->lastDeactivate_ != w) { AQWidgetInfo *wInfo = AQWEBAPP->createdWidgets_.find(w); if (wInfo) { wInfo->backActive_ = AQWEBAPP->lastDeactivate_; //printf("activate backActive_ %p %s\n", wInfo->backActive_, wInfo->backActive_->QObject::name()); } } AQWEBAPP->postAQEvent(new AQEvent(obj, new QEvent(QEvent::WindowActivate))); } break; } case QEvent::WindowDeactivate: { QWidget *w = AQ_WIDGET(obj); if (w->isTopLevel()) { //printf("deactivate %p %s\n", w, w->QObject::name()); AQWEBAPP->lastDeactivate_ = w; AQWEBAPP->postAQEvent(new AQEvent(obj, new QEvent(QEvent::WindowDeactivate))); } break; } case QEvent::CaptionChange: { QWidget *w = AQ_WIDGET(obj); if (w->isTopLevel() && !w->isPopup()) aq_notify_gui_args_event(w, "xgen", QString::fromLatin1("caption:") + w->caption()); break; } case QEvent::IconChange: { QWidget *w = AQ_WIDGET(obj); if (w->isTopLevel() && !w->isPopup()) aq_notify_gui_args_event(w, "xgen", QString::fromLatin1("icon:") + QString::number(aq_store_pixmap(w, w->icon()), 36)); break; } } #ifdef AQ_USE_NOTIFY return QApplication::notify(obj, ev); #else return false; #endif }
bool HoverPoints::eventFilter(QObject *object, QEvent *event) { if (object == m_widget && m_enabled) { switch (event->type()) { case QEvent::MouseButtonPress: { QMouseEvent *me = (QMouseEvent *) event; QPointF clickPos = me->pos(); int index = -1; for (int i = 0; i < m_points.size(); ++i) { QPainterPath path; if (m_shape == CircleShape) { path.addEllipse(pointBoundingRect(i)); } else { if (m_shape == RectangleShape) { path.addRect(pointBoundingRect(i)); } } if (path.contains(clickPos)) { index = i; break; } } if (me->button() == Qt::LeftButton) { if (index == -1) { if (!m_editable) { return false; } int pos = 0; // Insert sort for x or y if (m_sortType == XSort) { for (int i = 0; i < m_points.size(); ++i) { if (m_points.at(i).x() > clickPos.x()) { pos = i; break; } } } else if (m_sortType == YSort) { for (int i = 0; i < m_points.size(); ++i) { if (m_points.at(i).y() > clickPos.y()) { pos = i; break; } } } m_points.insert(pos, clickPos); m_locks.insert(pos, 0); m_currentIndex = pos; firePointChange(); } else { m_currentIndex = index; } return true; } else if (me->button() == Qt::RightButton) { if (index >= 0 && m_editable) { if (m_locks[index] == 0) { m_locks.remove(index); m_points.remove(index); } firePointChange(); return true; } } } break; case QEvent::MouseButtonRelease: m_currentIndex = -1; break; case QEvent::MouseMove: if (m_currentIndex >= 0) { movePoint(m_currentIndex, ((QMouseEvent *)event)->pos()); } break; case QEvent::Resize: { if (m_widget->isVisible()) { QResizeEvent *e = (QResizeEvent *) event; double stretch_x = e->size().width() / double(e->oldSize().width()); double stretch_y = e->size().height() / double(e->oldSize().height()); for (int i = 0; i < m_points.size(); ++i) { QPointF p = m_points[i]; movePoint(i, QPointF(p.x() * stretch_x, p.y() * stretch_y), false); } firePointChange(); m_width = e->size().width(); m_height = e->size().height(); } break; } case QEvent::Show: { if (m_width != m_widget->width() || m_height != m_widget->height()) { if (m_width == -1 && m_height == -1) { m_width = m_widget->width(); m_height = m_widget->height(); } double stretch_x = m_widget->width() / double(m_width); double stretch_y = m_widget->height() / double(m_height); for (int i = 0; i < m_points.size(); ++i) { QPointF p = m_points[i]; movePoint(i, QPointF(p.x() * stretch_x, p.y() * stretch_y), false); } firePointChange(); m_width = m_widget->width(); m_height = m_widget->height(); } break; } case QEvent::Paint: { QWidget *that_widget = m_widget; m_widget = 0; QApplication::sendEvent(object, event); m_widget = that_widget; paintPoints(); return true; } default: break; } } return false; }
bool HoverPoints::eventFilter(QObject *object, QEvent *event) { if (object == m_widget && m_enabled) { switch (event->type()) { case QEvent::MouseButtonPress: { QMouseEvent *me = (QMouseEvent *) event; QPointF clickPos = me->pos(); int index = -1; for (int i=0; i<m_points.size(); ++i) { QPainterPath path; if (m_shape == CircleShape) path.addEllipse(pointBoundingRect(i)); else path.addRect(pointBoundingRect(i)); if (path.contains(clickPos)) { index = i; break; } } if (me->button() == Qt::LeftButton) { if (index == -1) { if (!m_editable) return false; int pos = 0; // Insert sort for x or y if (m_sortType == XSort) { for (int i=0; i<m_points.size(); ++i) if (m_points.at(i).x() > clickPos.x()) { pos = i; break; } } else if (m_sortType == YSort) { for (int i=0; i<m_points.size(); ++i) if (m_points.at(i).y() > clickPos.y()) { pos = i; break; } } m_points.insert(pos, clickPos); m_locks.insert(pos, 0); m_currentIndex = pos; firePointChange(); } else { m_currentIndex = index; } return true; } else if (me->button() == Qt::RightButton) { if (index >= 0 && m_editable) { if (m_locks[index] == 0) { m_locks.remove(index); m_points.remove(index); } firePointChange(); return true; } } } break; case QEvent::MouseButtonRelease: m_currentIndex = -1; break; case QEvent::MouseMove: if (m_currentIndex >= 0) movePoint(m_currentIndex, ((QMouseEvent *)event)->pos()); break; case QEvent::Resize: { QResizeEvent *e = (QResizeEvent *) event; if (e->oldSize().width() == 0 || e->oldSize().height() == 0) break; qreal stretch_x = e->size().width() / qreal(e->oldSize().width()); qreal stretch_y = e->size().height() / qreal(e->oldSize().height()); for (int i=0; i<m_points.size(); ++i) { QPointF p = m_points[i]; movePoint(i, QPointF(p.x() * stretch_x, p.y() * stretch_y), false); } firePointChange(); break; } case QEvent::Paint: { QWidget *that_widget = m_widget; m_widget = 0; QApplication::sendEvent(object, event); m_widget = that_widget; paintPoints(); #ifdef QT_OPENGL_SUPPORT ArthurFrame *af = qobject_cast<ArthurFrame *>(that_widget); if (af && af->usesOpenGL()) af->glWidget()->swapBuffers(); #endif return true; } default: break; } } return false; }
bool HoverPoints::eventFilter( QObject* object, QEvent* hoverEvent ) { // If the selected object is the transfer object and the widget is enabled. if( object == _tfWidget && _enabled ) { // Detect the event type. switch ( hoverEvent->type()) { case QEvent::MouseButtonPress: { if( !_fingerPointMapping.isEmpty()) return true; QMouseEvent* mouseEvent = (QMouseEvent*)hoverEvent; QPointF clickPosition = mouseEvent->pos(); int index = -1; for( int32_t i = 0; i < _tfPoints.size(); ++i ) { // Select the shape of the bounding rectangle of the volume // whether it is circle of rectangle. QPainterPath touchSurface; if( _pointShape == CIRCLE_POINT ) touchSurface.addEllipse( _pointBoundingRectangle( i )); else touchSurface.addRect( _pointBoundingRectangle( i )); // If the mouse event was applied in this boundary of the point, // set the index to that of the selected point. if (touchSurface.contains( clickPosition )) { index = i; break; } } // If the Qt::LeftButton is clicked where there are no points, // insert a new point, and if the Qt::LeftButton is clicked where // a point already exists, then move the HoverPoint. if( mouseEvent->button() == Qt::LeftButton ) { // If there is no point where the mouse is clicked, then create // a new point. if( index == -1 ) { // If the widget (point) is not editible, return. if ( !_editable ) return false; // TODO: Insert sort for x or y int position = 0; if( _sortType == X_SORT ) { for( int32_t i = 0; i < _tfPoints.size(); ++i ) { if( _tfPoints.at(i).x() > clickPosition.x()) { position = i; break; } } } else if( _sortType == Y_SORT ) { for ( int32_t i = 0; i < _tfPoints.size(); ++i ) { if( _tfPoints.at(i).y() > clickPosition.y()) { position = i; break; } } } // Insert a new point at this position. _tfPoints.insert( position, clickPosition ); _locks.insert( position, 0 ); _currentPointIndex = position; // Update the system. firePointChange(); } else // If there is a specific point that is clicked, get it. { _currentPointIndex = index; } // We have created or selected a point. return true; } // If the Qt::RightButton is selcted where there is a point, then // delete this point and update the system. else if( mouseEvent->button() == Qt::RightButton ) { // If there is a specified point that is selected based on // the index and the widget is editible. if( index >= 0 && _editable ) { if( _locks[index] == 0 ) { // Remove the point from the list. _locks.remove( index ); _tfPoints.remove( index ); } // Update the system. firePointChange(); // We have deleted a point. return true; } } } break; case QEvent::MouseButtonRelease: { if( !_fingerPointMapping.isEmpty()) return true; _currentPointIndex = -1; } break; case QEvent::MouseMove: { // If there is no point selected, do nothing. if( !_fingerPointMapping.isEmpty()) return true; // If there is a point selected with a specific index, move it. if( _currentPointIndex >= 0 ) _movePoint( _currentPointIndex, ((QMouseEvent*)hoverEvent )->pos()); } break; case QEvent::TouchBegin: /// Events for the rendeirng widget. case QEvent::TouchUpdate: /// Events for the rendeirng widget. { const QTouchEvent* const touchEvent = static_cast<const QTouchEvent*>( hoverEvent ); const QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints(); const qreal pointSize = qMax( _pointSize.width(), _pointSize.height() ); foreach ( const QTouchEvent::TouchPoint &touchPoint, touchPoints ) { const int touchId = touchPoint.id(); switch ( touchPoint.state()) { case Qt::TouchPointPressed: { // Find the point and then move it QSet<int> activePoints = QSet<int>::fromList( _fingerPointMapping.values()); int activePoint = -1; qreal distance = -1; const int pointsCount = _tfPoints.size(); const int activePointCount = activePoints.size(); // You are allowed to only have two points on the rendering // widget. if( pointsCount == 2 && activePointCount == 1 ) activePoint = activePoints.contains(0) ? 1 : 0; else { for( int32_t i = 0; i < pointsCount; ++i ) { if( activePoints.contains( i )) continue; qreal d = QLineF( touchPoint.pos(), _tfPoints.at(i)).length(); if(( distance < 0 && d < 12 * pointSize) || d < distance ) { distance = d; activePoint = i; } } } if( activePoint != -1 ) { _fingerPointMapping.insert( touchPoint.id(), activePoint ); _movePoint( activePoint, touchPoint.pos()); } } break; case Qt::TouchPointReleased: /// Events for the rendeirng widget. { // Move the point and release QHash<int,int>::iterator it = _fingerPointMapping.find( touchId ); _movePoint( it.value(), touchPoint.pos()); _fingerPointMapping.erase( it ); } break; case Qt::TouchPointMoved: /// Events for the rendeirng widget. { // Move the point const int pointIdx = _fingerPointMapping.value( touchId, -1 ); if( pointIdx >= 0 ) _movePoint(pointIdx, touchPoint.pos()); } break; default: break; } } if( _fingerPointMapping.isEmpty()) { hoverEvent->ignore(); return false; } else { return true; } } break; case QEvent::TouchEnd: if( _fingerPointMapping.isEmpty()) { hoverEvent->ignore(); return false; } return true; break; case QEvent::Resize: // Resize the points. { QResizeEvent* resizeEvent = (QResizeEvent *) hoverEvent; const int oldPointWidth = resizeEvent->oldSize().width(); const int oldPointHeight = resizeEvent->oldSize().height(); if( oldPointWidth == 0 || oldPointHeight == 0 ) break; const int newPointWidth = resizeEvent->size().width(); const int newPointHeight = resizeEvent->size().height(); const qreal scaleX = newPointWidth / qreal( oldPointWidth ); const qreal scaleY = newPointHeight / qreal( oldPointHeight ); // Update the size of all the points in the transfer function widget. for( int32_t i = 0; i < _tfPoints.size(); ++i ) { QPointF p = _tfPoints[i]; _movePoint( i, QPointF(p.x() * scaleX, p.y() * scaleY), false ); } // Update the system. firePointChange(); break; } case QEvent::Paint: // Render the points on the widget. { QWidget* tfWidget = _tfWidget; _tfWidget = 0; QApplication::sendEvent( object, hoverEvent ); _tfWidget = tfWidget; // Paing all the points on the widget. paintPoints(); return true; } default: break; } } // No event is selected. return false; }
bool KrTreeWidget::event(QEvent * event) { switch (event->type()) { // HACK: QT 4 Context menu key isn't handled properly case QEvent::ContextMenu: { QContextMenuEvent* ce = (QContextMenuEvent*) event; if (ce->reason() == QContextMenuEvent::Mouse) { QPoint pos = viewport()->mapFromGlobal(ce->globalPos()); QTreeWidgetItem * item = itemAt(pos); int column = columnAt(pos.x()); emit itemRightClicked(item, ce->globalPos(), column); return true; } else { if (currentItem()) { QRect r = visualItemRect(currentItem()); QPoint p = viewport()->mapToGlobal(QPoint(r.x() + 5, r.y() + 5)); emit itemRightClicked(currentItem(), p, currentColumn()); return true; } } } break; case QEvent::KeyPress: { // HACK: QT 4 Ctrl+A bug fix: Ctrl+A doesn't work if QTreeWidget contains parent / child items // Insert doesn't change the selections for multi selection modes QKeyEvent* ke = (QKeyEvent*) event; switch (ke->key()) { case Qt::Key_Insert: { if (ke->modifiers() != 0) break; QAbstractItemView::SelectionMode mode = selectionMode(); if (mode != QAbstractItemView::ContiguousSelection && mode != QAbstractItemView::ExtendedSelection && mode != QAbstractItemView::MultiSelection) break; ke->accept(); if (currentItem() == 0) return true; currentItem()->setSelected(!currentItem()->isSelected()); return true; } case Qt::Key_A: if (ke->modifiers() == Qt::ControlModifier) { QAbstractItemView::SelectionMode mode = selectionMode(); if (mode == QAbstractItemView::ContiguousSelection || mode == QAbstractItemView::ExtendedSelection || mode == QAbstractItemView::MultiSelection) { selectAll(); ke->accept(); return true; } } break; default: break; } } break; case QEvent::Resize: { QResizeEvent * re = (QResizeEvent *)event; if (!_inResize && re->oldSize() != re->size()) { if (_stretchingColumn != -1 && columnCount()) { QList< int > columnsSizes; int oldSize = 0; for (int i = 0; i != header()->count(); i++) { columnsSizes.append(header()->sectionSize(i)); oldSize += header()->sectionSize(i); } bool res = QTreeWidget::event(event); int newSize = viewport()->width(); int delta = newSize - oldSize; if (delta) { _inResize = true; for (int i = 0; i != header()->count(); i++) { if (i == _stretchingColumn) { int newNs = columnsSizes[ i ] + delta; if (newNs < 8) newNs = 8; header()->resizeSection(i, newNs); } else if (header()->sectionSize(i) != columnsSizes[ i ]) { header()->resizeSection(i, columnsSizes[ i ]); } } _inResize = false; } return res; } } break; } case QEvent::ToolTip: { QHelpEvent *he = static_cast<QHelpEvent*>(event); if (viewport()) { QPoint pos = viewport()->mapFromGlobal(he->globalPos()); QTreeWidgetItem * item = itemAt(pos); int column = columnAt(pos.x()); if (item) { if (!item->toolTip(column).isEmpty()) break; QString tip = item->text(column); int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1; int requiredWidth = QFontMetrics(font()).width(tip) + 2 * textMargin; if (column == 0 && indentation()) { int level = 0; QTreeWidgetItem *parent = item; while ((parent = parent->parent())) level++; if (rootIsDecorated()) level++; requiredWidth += level * indentation(); } QIcon icon = item->icon(column); if (!icon.isNull()) { QStyleOptionViewItem opts = viewOptions(); QSize iconSize = icon.actualSize(opts.decorationSize); requiredWidth += iconSize.width(); int pixmapMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, this) + 1; requiredWidth += 2 * pixmapMargin; } if (!tip.isEmpty() && (columnWidth(column) < requiredWidth)) QToolTip::showText(he->globalPos(), tip, this); return true; } } } break; default: break; } return QTreeWidget::event(event); }