/** * This function is used to create custom behaviour when clicking * on user/channel flags (e.g. showing the comment) */ void UserView::mouseReleaseEvent(QMouseEvent *evt) { QPoint qpos = evt->pos(); QModelIndex idx = indexAt(qpos); if ((evt->button() == Qt::LeftButton) && idx.isValid()) { UserModel *um = static_cast<UserModel *>(model()); ClientUser *cu = um->getUser(idx); Channel * c = um->getChannel(idx); if ((cu && ! cu->qbaCommentHash.isEmpty()) || (! cu && c && ! c->qbaDescHash.isEmpty())) { QRect r = visualRect(idx); int offset = 18; if (cu) { // Calculate pixel offset of comment flag if (cu->bLocalIgnore) offset += 18; if (cu->bRecording) offset += 18; if (cu->bPrioritySpeaker) offset += 18; if (cu->bMute) offset += 18; if (cu->bSuppress) offset += 18; if (cu->bSelfMute) offset += 18; if (cu->bLocalMute) offset += 18; if (cu->bSelfDeaf) offset += 18; if (cu->bDeaf) offset += 18; if (! cu->qsFriendName.isEmpty()) offset += 18; if (cu->iId >= 0) offset += 18; } offset = r.topRight().x() - offset; if ((qpos.x() >= offset) && (qpos.x() <= (offset+18))) { QString str = um->data(idx, Qt::ToolTipRole).toString(); if (str.isEmpty()) { um->bClicked = true; } else { QWhatsThis::showText(viewport()->mapToGlobal(r.bottomRight()), str, this); um->seenComment(idx); } return; } } } QTreeView::mouseReleaseEvent(evt); }
/** * This function is used to create custom behaviour when clicking * on user/channel flags (e.g. showing the comment) */ void UserView::mouseReleaseEvent(QMouseEvent *evt) { QPoint clickPosition = evt->pos(); QModelIndex idx = indexAt(clickPosition); if ((evt->button() == Qt::LeftButton) && idx.isValid()) { UserModel *userModel = qobject_cast<UserModel *>(model()); ClientUser *clientUser = userModel->getUser(idx); Channel *channel = userModel->getChannel(idx); int commentFlagPxOffset = -UserDelegate::FLAG_DIMENSION; bool hasComment = false; if (clientUser && !clientUser->qbaCommentHash.isEmpty()) { hasComment = true; if (clientUser->bLocalIgnore) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->bRecording) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->bPrioritySpeaker) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->bMute) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->bSuppress) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->bSelfMute) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->bLocalMute) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->bSelfDeaf) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->bDeaf) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (! clientUser->qsFriendName.isEmpty()) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; if (clientUser->iId >= 0) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; } else if (channel && !channel->qbaDescHash.isEmpty()) { hasComment = true; if (channel->bFiltered) commentFlagPxOffset -= UserDelegate::FLAG_DIMENSION; } if (hasComment) { QRect r = visualRect(idx); const int commentFlagPxPos = r.topRight().x() + commentFlagPxOffset; if ((clickPosition.x() >= commentFlagPxPos) && (clickPosition.x() <= (commentFlagPxPos + UserDelegate::FLAG_DIMENSION))) { // Clicked comment icon QString str = userModel->data(idx, Qt::ToolTipRole).toString(); if (str.isEmpty()) { userModel->bClicked = true; } else { QWhatsThis::showText(viewport()->mapToGlobal(r.bottomRight()), str, this); userModel->seenComment(idx); } return; } } } QTreeView::mouseReleaseEvent(evt); }