Exemplo n.º 1
1
    //______________________________________________
    void ScrollBarData::hoverMoveEvent(  QObject* object, QEvent* event )
    {

        // try cast object to scrollbar
        QScrollBar* scrollBar( qobject_cast<QScrollBar*>( object ) );
        if( !scrollBar || scrollBar->isSliderDown() ) return;

        // retrieve scrollbar option
        QStyleOptionSlider opt( qt_qscrollbarStyleOption( scrollBar ) );

        // cast event
        QHoverEvent *hoverEvent = static_cast<QHoverEvent*>(event);
        QStyle::SubControl hoverControl = scrollBar->style()->hitTestComplexControl(QStyle::CC_ScrollBar, &opt, hoverEvent->pos(), scrollBar);

        // update hover state
        updateAddLineArrow( hoverControl );
        updateSubLineArrow( hoverControl );

        // store position
        _position = hoverEvent->pos();

    }
Exemplo n.º 2
0
bool FramelessResize::eventFilter(QObject *obj, QEvent *ev)
{
    if(obj == _monitor)
    {
        switch(ev->type())
        {
        case QEvent::HoverMove:
        {
            QHoverEvent* e = (QHoverEvent*)ev;
            SetCursor(GetDirection(e->pos()));
            DragResize(ev);
            break;
        }
        case QEvent::MouseButtonPress:
        {
            QMouseEvent* e = (QMouseEvent*)ev;
            _pressDirection = GetDirection(e->pos());
            break;
        }
        case QEvent::MouseButtonRelease:
        {
            _pressDirection = NONE;
            break;
        }
        default:
            break;
        }
    }
    return QObject::eventFilter(obj, ev);
}
Exemplo n.º 3
0
bool SpinBox2::eventFilter(QObject* obj, QEvent* e)
{
    bool updateButtons = false;
    if (obj == mSpinbox)
    {
//if (e->type() != QEvent::Paint) qCDebug(KALARM_LOG)<<e->type();
        switch (e->type())
        {
        case QEvent::Enter:
        case QEvent::Leave:
            QApplication::postEvent(mUpdown2, new QEvent(e->type()));
            updateButtons = true;
            break;
        case QEvent::HoverEnter:
        {
            QHoverEvent* he = (QHoverEvent*)e;
            QApplication::postEvent(mUpdown2, new QHoverEvent(e->type(), QPoint(1, he->pos().y()), he->oldPos()));
            updateButtons = true;
            break;
        }
        case QEvent::HoverLeave:
        {
            QHoverEvent* he = (QHoverEvent*)e;
            QApplication::postEvent(mUpdown2, new QHoverEvent(e->type(), he->pos(), QPoint(1, he->oldPos().y())));
            updateButtons = true;
            break;
        }
        case QEvent::FocusIn:
        case QEvent::FocusOut:
        {
            QFocusEvent* fe = (QFocusEvent*)e;
            QApplication::postEvent(mUpdown2, new QFocusEvent(e->type(), fe->reason()));
            updateButtons = true;
            break;
        }
        default:
            break;
        }
    }
    else if (obj == mUpdown2)
    {
        switch (e->type())
        {
        case QEvent::Enter:
        case QEvent::Leave:
        case QEvent::HoverEnter:
        case QEvent::HoverLeave:
        case QEvent::EnabledChange:
            updateButtons = true;
            break;
        default:
            break;
        }
    }
    if (updateButtons)
        QTimer::singleShot(0, this, &SpinBox2::updateMirrorButtons);
    return false;
}
Exemplo n.º 4
0
bool HoverMoveFilter::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::HoverMove) {
        QHoverEvent *mouseHoverEvent = static_cast<QHoverEvent *>(event);
        MainFrame* frame = static_cast<MainFrame *>(obj);
        frame->mouseMove(mouseHoverEvent->pos(), mouseHoverEvent->oldPos());
    }
    return QObject::eventFilter(obj, event);
}
Exemplo n.º 5
0
bool ListView::viewportEvent(QEvent *event)
{
  if (event->type() == QEvent::HoverEnter || event->type() == QEvent::HoverMove) {
    QHoverEvent *hoverEvent = static_cast<QHoverEvent*>(event);
    m_hoverItem = indexAt(hoverEvent->pos());
  } else if (event->type() == QEvent::HoverLeave) {
    m_hoverItem = QModelIndex();
  }

  return QListView::viewportEvent(event);
}
Exemplo n.º 6
0
bool FolderView::eventFilter(QObject* watched, QEvent* event) {
  // NOTE: Instead of simply filtering the drag and drop events of the child view in
  // the event filter, we overrided each event handler virtual methods in
  // both QListView and QTreeView and added some childXXXEvent() callbacks.
  // We did this because of a design flaw of Qt.
  // All QAbstractScrollArea derived widgets, including QAbstractItemView
  // contains an internal child widget, which is called a viewport.
  // The events actually comes from the child viewport, not the parent view itself.
  // Qt redirects the events of viewport to the viewportEvent() method of
  // QAbstractScrollArea and let the parent widget handle the events.
  // Qt implemented this using a event filter installed on the child viewport widget.
  // That means, when we try to install an event filter on the viewport,
  // there is already a filter installed by Qt which will be called before ours.
  // So we can never intercept the event handling of QAbstractItemView by using a filter.
  // That's why we override respective virtual methods for different events.
  if(view && watched == view->viewport()) {
    switch(event->type()) {
    case QEvent::HoverMove:
      // activate items on single click
      if(style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)) {
        QHoverEvent* hoverEvent = static_cast<QHoverEvent*>(event);
        QModelIndex index = view->indexAt(hoverEvent->pos()); // find out the hovered item
        if(index.isValid()) { // change the cursor to a hand when hovering on an item
          setCursor(Qt::PointingHandCursor);
          if(!selectionModel()->hasSelection())
            selectionModel()->setCurrentIndex(index, QItemSelectionModel::Current);
        }
        else
          setCursor(Qt::ArrowCursor);
        // turn on auto-selection for hovered item when single click mode is used.
        if(autoSelectionDelay_ > 0 && model_) {
          if(!autoSelectionTimer_) {
            autoSelectionTimer_ = new QTimer(this);
            connect(autoSelectionTimer_, SIGNAL(timeout()), SLOT(onAutoSelectionTimeout()));
            lastAutoSelectionIndex_ = QModelIndex();
          }
          autoSelectionTimer_->start(autoSelectionDelay_);
        }
        break;
      }
    case QEvent::HoverLeave:
      if(style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick))
        setCursor(Qt::ArrowCursor);
      break;
    }
  }
  return QObject::eventFilter(watched, event);
}
Exemplo n.º 7
0
    //______________________________________________
    void DialData::hoverMoveEvent(  QObject* object, QEvent* event )
    {

        // try cast object to dial
        QDial* scrollBar( qobject_cast<QDial*>( object ) );
        if( !scrollBar || scrollBar->isSliderDown() ) return;

        // cast event
        QHoverEvent *hoverEvent = static_cast<QHoverEvent*>(event);

        // store position
        _position = hoverEvent->pos();

        // trigger animation if position match handle rect
        updateState( _handleRect.contains( _position ) );

    }
Exemplo n.º 8
0
bool VVidPBView::event(QEvent *e)
{
    //VDC_DEBUG("%s Event Type %d\n", __FUNCTION__, e->type());


    if(e->type() == QEvent::HideToParent )
        //|| e->type() == QEvent::WindowDeactivate)
    {
        m_pVideo->OffAllFocus();
    }
    if(e->type() == QEvent::WindowActivate)
    {
        m_pVideo->ResizeAllVideo();
    }

    QHoverEvent *event = static_cast<QHoverEvent*> (e);
    if (event == NULL)
    {
        return true;
    }
    if(e->type() == QEvent::HoverMove)
    {
        QPoint posView = mapToGlobal(QPoint(0,0));
        QPoint posEvent = event->pos();
        //VDC_DEBUG( "%s View (%d, %d)  Event (%d, %d)\n",
        //		__FUNCTION__, posView.x(), posView.y(),
        //		posEvent.x(), posEvent.y());
        //m_pVideo->OffAllFocus();
        m_lastHoverTime = time(NULL);
    }

    if(e->type() == QEvent::HoverLeave)
    {
        QPoint posView = mapToGlobal(QPoint(0,0));
        QPoint posEvent = event->pos();
#if 0
        VDC_DEBUG( "%s Leave View (%d, %d)  Event (%d, %d)\n",
                   __FUNCTION__, posView.x(), posView.y(),
                   posEvent.x(), posEvent.y());
#endif
    }


    return QWidget::event(e);
}
static PyObject *meth_QHoverEvent_pos(PyObject *sipSelf, PyObject *sipArgs)
{
    PyObject *sipParseErr = NULL;

    {
        QHoverEvent *sipCpp;

        if (sipParseArgs(&sipParseErr, sipArgs, "B", &sipSelf, sipType_QHoverEvent, &sipCpp))
        {
            QPoint *sipRes;

            Py_BEGIN_ALLOW_THREADS
            sipRes = new QPoint(sipCpp->pos());
            Py_END_ALLOW_THREADS

            return sipConvertFromNewType(sipRes,sipType_QPoint,NULL);
        }
    }
Exemplo n.º 10
0
void FramelessResize::DragResize(QEvent *ev)
{
    QHoverEvent* e = (QHoverEvent*)ev;
    QMargins offset;
    if(_pressDirection & LEFT)
        offset.setLeft((e->oldPos() - e->pos()).x());
    if(_pressDirection & RIGHT)
        offset.setRight((e->pos() - e->oldPos() ).x());
    if(_pressDirection & TOP)
        offset.setTop((e->oldPos() - e->pos()).y());
    if(_pressDirection & BOTTOM)
        offset.setBottom((e->pos() - e->oldPos() ).y());

    emit OffsetGeometry(offset);
}
Exemplo n.º 11
0
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{

    if( event->type() == QEvent::HoverMove)
    {
        QHoverEvent* hover = static_cast<QHoverEvent*>(event);
        QString strPos = tr("viewport x:%1 y:%2")
                            .arg(hover->pos().x())
                            .arg(hover->pos().y());
        emit updatePosText(strPos);

//        qDebug() << strPos;
        m_glViewer->update();
        m_glViewer->winposToViewpos(hover->pos());
        return true;
    }

    return QMainWindow::eventFilter(obj, event);
}
Exemplo n.º 12
0
bool PanelSeeker::event(QEvent *e)
{    
    if(e->type() == QEvent::HoverMove || e->type() == QEvent::HoverEnter  )
    {
        QHoverEvent* he = static_cast<QHoverEvent*>(e);
        if( knobRect.contains(he->pos()) )
        {
            setState(Hovered, true);
        }
        else
        {
            setState(Hovered, false);
        }
    }
    if(e->type() == QEvent::HoverLeave)
    {        
        setState(Hovered, false);
    }
    return QAbstractSlider::event(e);
}
Exemplo n.º 13
0
bool DDateTable::event(QEvent *ev)
{
    switch (ev->type())
    {
        case QEvent::HoverMove:
        {
            QHoverEvent *e = static_cast<QHoverEvent *>(ev);
            const int row = e->pos().y() * d->numWeekRows / height();
            int col;

            if (layoutDirection() == Qt::RightToLeft)
            {
                col = d->numDayColumns - (e->pos().x() * d->numDayColumns / width()) - 1;
            }
            else
            {
                col = e->pos().x() * d->numDayColumns / width();
            }

            const int pos = row < 1 ? -1 : (d->numDayColumns * (row - 1)) + col;

            if (pos != d->hoveredPos)
            {
                d->hoveredPos = pos;
                update();
            }
            break;
        }
        case QEvent::HoverLeave:
            if (d->hoveredPos != -1)
            {
                d->hoveredPos = -1;
                update();
            }
            break;
        default:
            break;
    }

    return QWidget::event(ev);
}
Exemplo n.º 14
0
bool MayaModule::eventFilter(QObject *, QEvent *e)
{
    if(e->type()==QEvent::HoverMove)
    {
        QHoverEvent * ev = reinterpret_cast<QHoverEvent *>(e);
        int x = ev->pos().x();

        //if(x > this->width()-6 && _b_reducida)
        //    emit showBusqueda();

        if(x < this->width()-300 && !_b_reducida)
            emit hideBusqueda();
    }
    else if(e->type() == QEvent::KeyRelease)
    {
        QKeyEvent * ev = reinterpret_cast<QKeyEvent *>(e);
        if(ev->key() == Qt::Key_Escape)
            return true;
    }
    return false;
}
Exemplo n.º 15
0
/******************************************************************************
* Pass on to the main spinbox events which are needed to activate mouseover and
* other graphic effects when the mouse cursor enters and leaves the widget.
*/
bool SpinMirror::event(QEvent* e)
{
//qCDebug(KALARM_LOG)<<e->type();
    QHoverEvent *he = Q_NULLPTR;
    switch (e->type())
    {
    case QEvent::Leave:
        if (mMainSpinbox->rect().contains(mMainSpinbox->mapFromGlobal(QCursor::pos())))
            break;
    // fall through to QEvent::Enter
    case QEvent::Enter:
        QApplication::postEvent(mMainSpinbox, new QEvent(e->type()));
        break;
    case QEvent::HoverLeave:
        he = (QHoverEvent*)e;
        if (mMainSpinbox->rect().contains(mMainSpinbox->mapFromGlobal(QCursor::pos())))
            break;
    // fall through to QEvent::HoverEnter
    case QEvent::HoverEnter:
        he = (QHoverEvent*)e;
        QApplication::postEvent(mMainSpinbox, new QHoverEvent(e->type(), he->pos(), he->oldPos()));
        break;
    case QEvent::HoverMove:
        he = (QHoverEvent*)e;
        break;
    case QEvent::FocusIn:
        mMainSpinbox->setFocus();
        break;
    default:
        break;
    }

    if (he)
    {
        QApplication::postEvent(mSpinbox, new QHoverEvent(e->type(), spinboxPoint(he->pos()), spinboxPoint(he->oldPos())));
        setButtons();
    }

    return QGraphicsView::event(e);
}
/*! \reimp */
bool QToolBar::event(QEvent *event)
{
    Q_D(QToolBar);

    switch (event->type()) {
    case QEvent::Timer:
        if (d->waitForPopupTimer.timerId() == static_cast<QTimerEvent*>(event)->timerId()) {
            QWidget *w = QApplication::activePopupWidget();
            if (!waitForPopup(this, w)) {
                d->waitForPopupTimer.stop();
                if (!this->underMouse())
                    d->layout->setExpanded(false);
            }
        }
        break;
    case QEvent::Hide:
        if (!isHidden())
            break;
    // fallthrough intended
    case QEvent::Show:
        d->toggleViewAction->setChecked(event->type() == QEvent::Show);
        emit visibilityChanged(event->type() == QEvent::Show);
#if defined(Q_WS_MAC)
        if (toolbarInUnifiedToolBar(this)) {
            // I can static_cast because I did the qobject_cast in the if above, therefore
            // we must have a QMainWindowLayout here.
            QMainWindowLayout *mwLayout = static_cast<QMainWindowLayout *>(parentWidget()->layout());
            mwLayout->fixSizeInUnifiedToolbar(this);
            mwLayout->syncUnifiedToolbarVisibility();
        }
#  if !defined(QT_MAC_USE_COCOA)
    // Fall through
    case QEvent::LayoutRequest: {
        // There's currently no way to invalidate the size and let
        // HIToolbar know about it. This forces a re-check.
        int earlyResult = -1;
        if (QMainWindow *mainWindow = qobject_cast<QMainWindow *>(parentWidget())) {
            bool needUpdate = true;
            if (event->type() == QEvent::LayoutRequest) {
                QSize oldSizeHint = sizeHint();
                earlyResult = QWidget::event(event) ? 1 : 0;
                needUpdate = oldSizeHint != sizeHint();
            }

            if (needUpdate) {
                OSWindowRef windowRef = qt_mac_window_for(mainWindow);
                if (toolbarInUnifiedToolBar(this)
                        && macWindowToolbarIsVisible(windowRef))   {
                    DisableScreenUpdates();
                    macWindowToolbarShow(this, false);
                    macWindowToolbarShow(this, true);
                    EnableScreenUpdates();
                }
            }

            if (earlyResult != -1)
                return earlyResult;
        }
    }
#  endif // !QT_MAC_USE_COCOA
#endif // Q_WS_MAC
    break;
    case QEvent::ParentChange:
        d->layout->checkUsePopupMenu();
#if defined(Q_WS_MAC)
        if (parentWidget() && parentWidget()->isWindow())
            qt_mac_updateToolBarButtonHint(parentWidget());
#endif
        break;

    case QEvent::MouseButtonPress: {
        if (d->mousePressEvent(static_cast<QMouseEvent*>(event)))
            return true;
        break;
    }
    case QEvent::MouseButtonRelease:
        if (d->mouseReleaseEvent(static_cast<QMouseEvent*>(event)))
            return true;
        break;
    case QEvent::HoverEnter:
    case QEvent::HoverLeave:
        // there's nothing special to do here and we don't want to update the whole widget
        return true;
    case QEvent::HoverMove: {
#ifndef QT_NO_CURSOR
        QHoverEvent *e = static_cast<QHoverEvent*>(event);
        QStyleOptionToolBar opt;
        initStyleOption(&opt);
        if (style()->subElementRect(QStyle::SE_ToolBarHandle, &opt, this).contains(e->pos()))
            setCursor(Qt::SizeAllCursor);
        else
            unsetCursor();
#endif
        break;
    }
    case QEvent::MouseMove:
        if (d->mouseMoveEvent(static_cast<QMouseEvent*>(event)))
            return true;
        break;
#ifdef Q_WS_WINCE
    case QEvent::ContextMenu:
    {
        QContextMenuEvent* contextMenuEvent = static_cast<QContextMenuEvent*>(event);
        QWidget* child = childAt(contextMenuEvent->pos());
        QAbstractButton* button = qobject_cast<QAbstractButton*>(child);
        if (button)
            button->setDown(false);
    }
    break;
#endif
    case QEvent::Leave:
        if (d->state != 0 && d->state->dragging) {
#ifdef Q_OS_WIN
            // This is a workaround for loosing the mouse on Vista.
            QPoint pos = QCursor::pos();
            QMouseEvent fake(QEvent::MouseMove, mapFromGlobal(pos), pos, Qt::NoButton,
                             QApplication::mouseButtons(), QApplication::keyboardModifiers());
            d->mouseMoveEvent(&fake);
#endif
        } else {
            if (!d->layout->expanded)
                break;

            QWidget *w = QApplication::activePopupWidget();
            if (waitForPopup(this, w)) {
                d->waitForPopupTimer.start(POPUP_TIMER_INTERVAL, this);
                break;
            }

            d->waitForPopupTimer.stop();
            d->layout->setExpanded(false);
            break;
        }
    default:
        break;
    }
    return QWidget::event(event);
}
Exemplo n.º 17
0
bool TabWidget::eventFilter(QObject *obj, QEvent *event)
{
    if (obj==tabBar())
    {
        // this code handles the tab movement
        if (event->type() == QEvent::Leave)
        {
            QPoint point = cross->mapToGlobal( QPoint(0, 0) );
            QRect rect(point.x(), point.y(), cross->width(), cross->height() );
            if ( !rect.contains( QCursor::pos() ) )
                cross->hide();
        }
        else if (event->type() == QEvent::HoverMove && m_closeButtonInTabs )
        {
            QHoverEvent *mouseEvent = static_cast<QHoverEvent *>(event);
            mousePos = mouseEvent->pos();
            for (int i=0; i<tabBar()->count(); i++)
            {
                if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) )
                {
                    m_clickedItem= i;
                    break;
                }
            }
            cross->setGeometry(tabBar()->tabRect(m_clickedItem).x()+tabBar()->tabRect(m_clickedItem).width()-cross->width()-5,
                               //tabBar()->height()-(tabBar()->tabRect(m_clickedItem).height()/2),
                               5,
                               cross->width(),
                               cross->height());
            cross->show();
        }
        else if (event->type() == QEvent::MouseButtonRelease )
        {
            qApp->restoreOverrideCursor();
        }
        else if (event->type() == QEvent::MouseButtonPress )
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
            for (int i=0; i<tabBar()->count(); i++)
            {
                if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) )
                {
                    m_clickedItem = i;
                    break;
                }
            }
            if ( mouseEvent->button() == Qt::LeftButton )
                qApp->setOverrideCursor( Qt::OpenHandCursor );
            if ( mouseEvent->button() == Qt::RightButton )
            {
                QMenu *menu = new QMenu(this);
                connect(menu->addAction(QIcon(":/images/cross.png"), tr("Close Tab")), SIGNAL(triggered()), this, SLOT(slotCloseTab()) );
                connect(menu->addAction(QIcon(":/images/fileclose.png"), tr("Close Other Tabs")), SIGNAL(triggered()), this, SLOT(slotCloseOtherTab()) );
                connect(menu->addAction(QIcon(":/images/fileclose.png"), tr("Close All Tabs")), SIGNAL(triggered()), this, SLOT(slotCloseAllTab()) );
                menu->exec(mouseEvent->globalPos());
                delete menu;
            }
        }
        else if (event->type() == QEvent::MouseMove )
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
            for (int i=0; i<tabBar()->count(); i++)
            {
                if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) )
                {
                    if ( swapTabs(i, m_clickedItem) )
                    {
                        setCurrentWidget(widget(i));
                        update();
                        int x;
                        if ( !tabBar()->tabRect(i).contains( mouseEvent->pos() ) )
                        {
                            if ( tabBar()->tabRect(m_clickedItem).x() < tabBar()->tabRect(i).x() )
                                x = tabBar()->tabRect(i).x();
                            else
                                x = tabBar()->tabRect(i).x()+(tabBar()->tabRect(i).width()-(qAbs(tabBar()->tabRect(i).width()-tabBar()->tabRect(m_clickedItem).width())));
                            QPoint point =  QPoint(
                                                x,
                                                mouseEvent->pos().y()
                                            );
                            point =  widget(i)->mapToGlobal( point );
                            m_clickedItem = i;
                            QCursor::setPos ( point.x(), QCursor::pos().y() );
                        }
                        m_clickedItem = i;
                        break;
                    }
                }
            }
        }
    }
    return QTabWidget::eventFilter( obj, event);
}
Exemplo n.º 18
0
bool TabTreeView::viewportEvent(QEvent *event)
{
    switch (event->type()) {
    case QEvent::MouseButtonPress: {
        QMouseEvent *me = static_cast<QMouseEvent*>(event);
        const QModelIndex index = indexAt(me->pos());
        updateIndex(index);
        WebTab *tab = index.data(TabModel::WebTabRole).value<WebTab*>();
        if (me->buttons() == Qt::MiddleButton && tab) {
            tab->closeTab();
        }
        if (me->buttons() != Qt::LeftButton) {
            m_pressedIndex = QModelIndex();
            m_pressedButton = NoButton;
            break;
        }
        m_pressedIndex = index;
        m_pressedButton = buttonAt(me->pos(), m_pressedIndex);
        if (m_pressedIndex.isValid()) {
            if (m_pressedButton == ExpandButton) {
                if (isExpanded(m_pressedIndex)) {
                    collapse(m_pressedIndex);
                } else {
                    expand(m_pressedIndex);
                }
            } else if (m_pressedButton == NoButton && tab) {
                tab->makeCurrentTab();
            }
        }
        if (m_pressedButton == CloseButton) {
            me->accept();
            return true;
        }
        break;
    }

    case QEvent::MouseMove: {
        QMouseEvent *me = static_cast<QMouseEvent*>(event);
        if (m_pressedButton == CloseButton) {
            me->accept();
            return true;
        }
        break;
    }

    case QEvent::MouseButtonRelease: {
        QMouseEvent *me = static_cast<QMouseEvent*>(event);
        if (me->buttons() != Qt::NoButton) {
            break;
        }
        const QModelIndex index = indexAt(me->pos());
        updateIndex(index);
        if (m_pressedIndex != index) {
            break;
        }
        DelegateButton button = buttonAt(me->pos(), index);
        if (m_pressedButton == button) {
            if (m_pressedButton == ExpandButton) {
                me->accept();
                return true;
            }
            WebTab *tab = index.data(TabModel::WebTabRole).value<WebTab*>();
            if (tab) {
                if (m_pressedButton == CloseButton) {
                    tab->closeTab();
                } else if (m_pressedButton == AudioButton) {
                    tab->toggleMuted();
                }
            }
        }
        if (m_pressedButton == CloseButton) {
            me->accept();
            return true;
        }
        break;
    }

    case QEvent::HoverEnter:
    case QEvent::HoverLeave:
    case QEvent::HoverMove: {
        QHoverEvent *he = static_cast<QHoverEvent*>(event);
        updateIndex(m_hoveredIndex);
        m_hoveredIndex = indexAt(he->pos());
        updateIndex(m_hoveredIndex);
        break;
    }

    case QEvent::ToolTip: {
        QHelpEvent *he = static_cast<QHelpEvent*>(event);
        const QModelIndex index = indexAt(he->pos());
        DelegateButton button = buttonAt(he->pos(), index);
        if (button == AudioButton) {
            const bool muted = index.data(TabModel::AudioMutedRole).toBool();
            QToolTip::showText(he->globalPos(), muted ? tr("Unmute Tab") : tr("Mute Tab"), this, visualRect(index));
            he->accept();
            return true;
        } else if (button == CloseButton) {
            QToolTip::showText(he->globalPos(), tr("Close Tab"), this, visualRect(index));
            he->accept();
            return true;
        } else if (button == NoButton) {
            QToolTip::showText(he->globalPos(), index.data().toString(), this, visualRect(index));
            he->accept();
            return true;
        }
        break;
    }

    case QEvent::ContextMenu: {
        QContextMenuEvent *ce = static_cast<QContextMenuEvent*>(event);
        const QModelIndex index = indexAt(ce->pos());
        WebTab *tab = index.data(TabModel::WebTabRole).value<WebTab*>();
        const int tabIndex = tab ? tab->tabIndex() : -1;
        TabContextMenu::Options options = TabContextMenu::VerticalTabs | TabContextMenu::ShowDetachTabAction;
        if (m_tabsInOrder) {
            options |= TabContextMenu::ShowCloseOtherTabsActions;
        }
        TabContextMenu menu(tabIndex, m_window, options);
        addMenuActions(&menu, index);
        menu.exec(ce->globalPos());
        break;
    }

    default:
        break;
    }
    return QTreeView::viewportEvent(event);
}
Exemplo n.º 19
0
bool FolderView::eventFilter(QObject* watched, QEvent* event) {
  // NOTE: Instead of simply filtering the drag and drop events of the child view in
  // the event filter, we overrided each event handler virtual methods in
  // both QListView and QTreeView and added some childXXXEvent() callbacks.
  // We did this because of a design flaw of Qt.
  // All QAbstractScrollArea derived widgets, including QAbstractItemView
  // contains an internal child widget, which is called a viewport.
  // The events actually comes from the child viewport, not the parent view itself.
  // Qt redirects the events of viewport to the viewportEvent() method of
  // QAbstractScrollArea and let the parent widget handle the events.
  // Qt implemented this using a event filter installed on the child viewport widget.
  // That means, when we try to install an event filter on the viewport,
  // there is already a filter installed by Qt which will be called before ours.
  // So we can never intercept the event handling of QAbstractItemView by using a filter.
  // That's why we override respective virtual methods for different events.
  if(view && watched == view->viewport()) {
    switch(event->type()) {
    case QEvent::HoverMove:
      // activate items on single click
      if(style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)) {
        QHoverEvent* hoverEvent = static_cast<QHoverEvent*>(event);
        QModelIndex index = view->indexAt(hoverEvent->pos()); // find out the hovered item
        if(index.isValid()) { // change the cursor to a hand when hovering on an item
          setCursor(Qt::PointingHandCursor);
          if(!selectionModel()->hasSelection())
            selectionModel()->setCurrentIndex(index, QItemSelectionModel::Current);
        }
        else
          setCursor(Qt::ArrowCursor);
        // turn on auto-selection for hovered item when single click mode is used.
        if(autoSelectionDelay_ > 0 && model_) {
          if(!autoSelectionTimer_) {
            autoSelectionTimer_ = new QTimer(this);
            connect(autoSelectionTimer_, &QTimer::timeout, this, &FolderView::onAutoSelectionTimeout);
            lastAutoSelectionIndex_ = QModelIndex();
          }
          autoSelectionTimer_->start(autoSelectionDelay_);
        }
        break;
      }
    case QEvent::HoverLeave:
      if(style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick))
        setCursor(Qt::ArrowCursor);
      break;
    case QEvent::Wheel:
      // This is to fix #85: Scrolling doesn't work in compact view
      // Actually, I think it's the bug of Qt, not ours.
      // When in compact mode, only the horizontal scroll bar is used and the vertical one is hidden.
      // So, when a user scroll his mouse wheel, it's reasonable to scroll the horizontal scollbar.
      // Qt does not implement such a simple feature, unfortunately.
      // We do it by forwarding the scroll event in the viewport to the horizontal scrollbar.
      // FIXME: if someday Qt supports this, we have to disable the workaround.
      if(mode == CompactMode) {
        QScrollBar* scroll = view->horizontalScrollBar();
        if(scroll) {
          QApplication::sendEvent(scroll, event);
          return true;
        }
      }
      break;
    }
  }
  return QObject::eventFilter(watched, event);
}
Exemplo n.º 20
0
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);
}
Exemplo n.º 21
0
/*! \reimp */
bool QToolBar::event(QEvent *event)
{
    Q_D(QToolBar);

    switch (event->type()) {
    case QEvent::Timer:
        if (d->waitForPopupTimer.timerId() == static_cast<QTimerEvent*>(event)->timerId()) {
            QWidget *w = QApplication::activePopupWidget();
            if (!waitForPopup(this, w)) {
                d->waitForPopupTimer.stop();
                if (!this->underMouse())
                    d->layout->setExpanded(false);
            }
        }
        break;
    case QEvent::Hide:
        if (!isHidden())
            break;
        // fallthrough intended
    case QEvent::Show:
        d->toggleViewAction->setChecked(event->type() == QEvent::Show);
#ifdef Q_OS_OSX
        enableMacToolBar(this, event->type() == QEvent::Show);
#endif
        emit visibilityChanged(event->type() == QEvent::Show);
        break;
    case QEvent::ParentChange:
        d->layout->checkUsePopupMenu();
        break;

    case QEvent::MouseButtonPress: {
        if (d->mousePressEvent(static_cast<QMouseEvent*>(event)))
            return true;
        break;
    }
    case QEvent::MouseButtonRelease:
        if (d->mouseReleaseEvent(static_cast<QMouseEvent*>(event)))
            return true;
        break;
    case QEvent::HoverEnter:
    case QEvent::HoverLeave:
        // there's nothing special to do here and we don't want to update the whole widget
        return true;
    case QEvent::HoverMove: {
#ifndef QT_NO_CURSOR
        QHoverEvent *e = static_cast<QHoverEvent*>(event);
        QStyleOptionToolBar opt;
        initStyleOption(&opt);
        if (style()->subElementRect(QStyle::SE_ToolBarHandle, &opt, this).contains(e->pos()))
            setCursor(Qt::SizeAllCursor);
        else
            unsetCursor();
#endif
        break;
    }
    case QEvent::MouseMove:
        if (d->mouseMoveEvent(static_cast<QMouseEvent*>(event)))
            return true;
        break;
#ifdef Q_OS_WINCE
    case QEvent::ContextMenu:
        {
            QContextMenuEvent* contextMenuEvent = static_cast<QContextMenuEvent*>(event);
            QWidget* child = childAt(contextMenuEvent->pos());
            QAbstractButton* button = qobject_cast<QAbstractButton*>(child);
            if (button)
                button->setDown(false);
        }
        break;
#endif
    case QEvent::Leave:
        if (d->state != 0 && d->state->dragging) {
#ifdef Q_OS_WIN
            // This is a workaround for loosing the mouse on Vista.
            QPoint pos = QCursor::pos();
            QMouseEvent fake(QEvent::MouseMove, mapFromGlobal(pos), pos, Qt::NoButton,
                             QApplication::mouseButtons(), QApplication::keyboardModifiers());
            d->mouseMoveEvent(&fake);
#endif
        } else {
            if (!d->layout->expanded)
                break;

            QWidget *w = QApplication::activePopupWidget();
            if (waitForPopup(this, w)) {
                d->waitForPopupTimer.start(POPUP_TIMER_INTERVAL, this);
                break;
            }

            d->waitForPopupTimer.stop();
            d->layout->setExpanded(false);
            break;
        }
    default:
        break;
    }
    return QWidget::event(event);
}