void ListViewDnd::updateLine( const QPoint & dragPos ) { QListViewItem * item = itemAt(dragPos); QListView * src = (QListView *) this->src; int ypos = item ? ( src->itemRect( item ).bottom() - ( line->height() / 2 ) ) : ( src->itemRect( src->firstChild() ).top() ); int xpos = dropDepth( item, dragPos ) * src->treeStepSize(); line->resize( src->viewport()->width() - xpos, line->height() ); line->move( xpos, ypos ); }
/** * Displays a tool-tip according to the current location of the mouse * pointer. * @param pt The mouse pointer coordinates */ void ListToolTip::maybeTip(const QPoint& pt) { QString str; QListView* pList; QListViewItem* pItem; // Get the item at the given point pList = m_pList->getList(); pItem = pList->itemAt(pt); if (pItem == NULL) return; // Get the tip string for this item if (!m_pList->getTip(pItem, str)) return; // Get the bounding rectangle of the item const QRect rcItem = pList->itemRect(pItem); if (!rcItem.isValid()) return; // Get the header coordinates const QRect rcHead = pList->header()->rect(); if (!rcHead.isValid()) return; // Calculate the tool-tip rectangle QRect rcCell(rcHead.left(), rcItem.top(), rcItem.width(), rcItem.height()); // Display the tool-tip tip(rcCell, str); }
QListViewItem * ListViewDnd::itemAt( QPoint pos ) { QListView * src = (QListView *) this->src; int headerHeight = (int)(src->header()->height()); pos.ry() -= headerHeight; QListViewItem * result = src->itemAt( pos ); if ( result && ( pos.ry() < (src->itemPos(result) + result->height()/2) ) ) result = result->itemAbove(); // Wind back if has parent, and we're in flat mode while ( result && result->parent() && (dMode & Flat) ) result = result->parent(); // Wind back if has parent, and we're in flat mode while ( result && !result->isVisible() && result->parent() ) result = result->parent(); if ( !result && src->firstChild() && (pos.y() > src->itemRect(src->firstChild()).bottom()) ) { result = src->lastItem(); if ( !result->isVisible() ) // Handle special case where last item is actually hidden result = result->itemAbove(); } return result; }