void ToolTipManager::_unlinkWidget(Widget* _widget) { if (mOldFocusWidget == _widget) { if (mToolTipVisible) { mToolTipVisible = false; hideToolTip(mOldFocusWidget); } mOldFocusWidget = nullptr; mNeedToolTip = false; } }
void ToolTipManager::requestToolTip(const QModelIndex& index) { // only request a tooltip for the name column and when no selection or // drag & drop operation is done (indicated by the left mouse button) if ( !(QApplication::mouseButtons() & Qt::LeftButton) ) { KToolTip::hideTip(); d->itemRect = d->view->visualRect(index); const QPoint pos = d->view->viewport()->mapToGlobal(d->itemRect.topLeft()); d->itemRect.moveTo(pos); d->item = index; d->timer->start(300); } else { hideToolTip(); } }
bool ToolTipManager::eventFilter(QObject* watched, QEvent* event) { if ( watched == d->view->viewport() ) { switch ( event->type() ) { case QEvent::Leave: case QEvent::MouseButtonPress: hideToolTip(); break; case QEvent::ToolTip: return true; default: break; } } return QObject::eventFilter(watched, event); }
ToolTipManager::ToolTipManager(QAbstractItemView* parent) : QObject(parent) , d(new ToolTipManager::Private) { d->view = parent; connect(parent, SIGNAL(viewportEntered()), this, SLOT(hideToolTip())); connect(parent, SIGNAL(entered(QModelIndex)), this, SLOT(requestToolTip(QModelIndex))); d->timer = new QTimer(this); d->timer->setSingleShot(true); connect(d->timer, SIGNAL(timeout()), this, SLOT(prepareToolTip())); // When the mousewheel is used, the items don't get a hovered indication // (Qt-issue #200665). To assure that the tooltip still gets hidden, // the scrollbars are observed. connect(parent->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(hideToolTip())); connect(parent->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(hideToolTip())); d->view->viewport()->installEventFilter(this); }
void ToolTipManager::notifyEventFrameStart(float _time) { Widget* widget = InputManager::getInstance().getMouseFocusWidget(); if (mOldFocusWidget != widget) { if (mToolTipVisible) { mToolTipVisible = false; hideToolTip(mOldFocusWidget); } mOldFocusWidget = widget; mNeedToolTip = false; if (mOldFocusWidget != nullptr) { mCurrentTime = 0; mOldMousePoint = InputManager::getInstance().getMousePositionByLayer(); mOldIndex = getToolTipIndex(mOldFocusWidget); mNeedToolTip = isNeedToolTip(mOldFocusWidget); } } else if (mNeedToolTip) { bool capture = InputManager::getInstance().isCaptureMouse(); if (capture) { if (mToolTipVisible) { mToolTipVisible = false; hideToolTip(mOldFocusWidget); } } else { IntPoint point = InputManager::getInstance().getMousePositionByLayer(); if (!mToolTipVisible && point != mOldMousePoint) { if (mToolTipVisible) { mToolTipVisible = false; hideToolTip(mOldFocusWidget); } mCurrentTime = 0; mOldMousePoint = point; mOldIndex = getToolTipIndex(mOldFocusWidget); } else { size_t index = getToolTipIndex(mOldFocusWidget); if (mOldIndex != index) { if (mToolTipVisible) { mToolTipVisible = false; hideToolTip(mOldFocusWidget); } mCurrentTime = 0; mOldIndex = index; } else { if (!mToolTipVisible) { mCurrentTime += _time; if (mCurrentTime >= mDelayVisible) { mToolTipVisible = true; showToolTip(mOldFocusWidget, mOldIndex, point); } } else if (point != mOldMousePoint) { moveToolTip(mOldFocusWidget, mOldIndex, point); } } } } } }
void Area::showToolTip(){ QToolTip::showText(QPoint(850,80), "Press CTRL+E to save or CTRL+ESC to cancel"); QTimer::singleShot(5000, this, SLOT(hideToolTip())); }
void QueueLabel::mousePressEvent( QMouseEvent* mouseEvent ) { hideToolTip(); if( m_timer.isActive() ) // if the user clicks again when (right after) the menu is open, { // (s)he probably wants to close it m_timer.stop(); return; } Playlist *pl = Playlist::instance(); PLItemList &queue = pl->m_nextTracks; if( queue.isEmpty() ) return; int length = 0; for( QPtrListIterator<PlaylistItem> it( queue ); *it; ++it ) { const int s = (*it)->length(); if( s > 0 ) length += s; } QPtrList<KPopupMenu> menus; menus.setAutoDelete( true ); KPopupMenu *menu = new KPopupMenu; menus.append( menu ); const uint count = queue.count(); if( length ) menu->insertTitle( i18n( "1 Queued Track (%1)", "%n Queued Tracks (%1)", count ) .arg( MetaBundle::prettyLength( length, true ) ) ); else menu->insertTitle( i18n( "1 Queued Track", "%n Queued Tracks", count ) ); Pana::actionCollection()->action( "queue_manager" )->plug( menu ); menu->insertItem( SmallIconSet( Pana::icon( "rewind" ) ), count > 1 ? i18n( "&Dequeue All Tracks" ) : i18n( "&Dequeue Track" ), 0 ); menu->insertSeparator(); uint i = 1; QPtrListIterator<PlaylistItem> it( queue ); it.toFirst(); while( i <= count ) { for( uint n = kMin( i + MAX_TO_SHOW - 1, count ); i <= n; ++i, ++it ) menu->insertItem( KStringHandler::rsqueeze( i18n( "%1. %2" ).arg( i ).arg( veryNiceTitle( *it ) ), 50 ), i ); if( i < count ) { menus.append( new KPopupMenu ); menu->insertSeparator(); menu->insertItem( i18n( "1 More Track", "%n More Tracks", count - i + 1 ), menus.getLast() ); menu = menus.getLast(); } } menu = menus.getFirst(); int mx, my; const int mw = menu->sizeHint().width(), mh = menu->sizeHint().height(), sy = mapFrom( Pana::StatusBar::instance(), QPoint( 0, 0 ) ).y(), sheight = Pana::StatusBar::instance()->height(); const QRect dr = QApplication::desktop()->availableGeometry( this ); if( mapYToGlobal( sy ) - mh > dr.y() ) my = mapYToGlobal( sy ) - mh; else if( mapYToGlobal( sy + sheight ) + mh < dr.y() + dr.height() ) my = mapYToGlobal( sy + sheight ); else my = mapToGlobal( mouseEvent->pos() ).y(); mx = mapXToGlobal( 0 ) - ( mw - width() ) / 2; int id = menu->exec( QPoint( mx, my ) ); if( id < 0 ) m_timer.start( 50, true ); else if( id == 0 ) //dequeue { const PLItemList dequeued = queue; while( !queue.isEmpty() ) pl->queue( queue.getLast(), true ); emit queueChanged( PLItemList(), dequeued ); } else { PlaylistItem *selected = queue.at( id - 1 ); if( selected ) pl->ensureItemCentered( selected ); } }
void QueueLabel::leaveEvent( QEvent* ) { hideToolTip(); }