void GxsCommentTreeWidget::service_loadThread(const uint32_t &token) { std::cerr << "GxsCommentTreeWidget::service_loadThread() ERROR must be overloaded!"; std::cerr << std::endl; std::vector<RsGxsComment> comments; mCommentService->getRelatedComments(token, comments); std::vector<RsGxsComment>::iterator vit; for(vit = comments.begin(); vit != comments.end(); ++vit) { RsGxsComment &comment = *vit; /* convert to a QTreeWidgetItem */ std::cerr << "GxsCommentTreeWidget::service_loadThread() Got Comment: " << comment.mMeta.mMsgId; std::cerr << std::endl; GxsIdRSTreeWidgetItem *item = new GxsIdRSTreeWidgetItem(NULL) ; QString text; { QDateTime qtime ; qtime.setTime_t(comment.mMeta.mPublishTs) ; text = qtime.toString("yyyy-MM-dd hh:mm:ss") ; item->setText(PCITEM_COLUMN_DATE, text) ; item->setToolTip(PCITEM_COLUMN_DATE, text) ; } text = QString::fromUtf8(comment.mComment.c_str()); item->setText(PCITEM_COLUMN_COMMENT, text); item->setToolTip(PCITEM_COLUMN_COMMENT, text); RsGxsId authorId = comment.mMeta.mAuthorId; item->setId(authorId, PCITEM_COLUMN_AUTHOR, false); text = QString::number(comment.mScore); item->setText(PCITEM_COLUMN_SCORE, text); text = QString::number(comment.mUpVotes); item->setText(PCITEM_COLUMN_UPVOTES, text); text = QString::number(comment.mDownVotes); item->setText(PCITEM_COLUMN_DOWNVOTES, text); text = QString::number(comment.mOwnVote); item->setText(PCITEM_COLUMN_OWNVOTE, text); text = QString::fromUtf8(comment.mMeta.mMsgId.toStdString().c_str()); item->setText(PCITEM_COLUMN_MSGID, text); text = QString::fromUtf8(comment.mMeta.mParentId.toStdString().c_str()); item->setText(PCITEM_COLUMN_PARENTID, text); addItem(comment.mMeta.mMsgId, comment.mMeta.mParentId, item); } return; }
static void fillGxsIdRSTreeWidgetItemCallback(GxsIdDetailsType type, const RsIdentityDetails &details, QObject *object, const QVariant &/*data*/) { GxsIdRSTreeWidgetItem *item = dynamic_cast<GxsIdRSTreeWidgetItem*>(object); if (!item) { return; } QList<QIcon> icons; switch (type) { case GXS_ID_DETAILS_TYPE_EMPTY: item->processResult(true); break; case GXS_ID_DETAILS_TYPE_FAILED: item->processResult(false); break; case GXS_ID_DETAILS_TYPE_LOADING: icons.push_back(GxsIdDetails::getLoadingIcon(details.mId)); break; case GXS_ID_DETAILS_TYPE_DONE: GxsIdDetails::getIcons(details, icons, item->iconTypeMask()); item->processResult(true); break; case GXS_ID_DETAILS_TYPE_BANNED: icons.push_back(QIcon("BANNED_IMAGE")) ; break ; } int column = item->idColumn(); item->setToolTip(column, GxsIdDetails::getComment(details)); item->setText(column, GxsIdDetails::getNameForType(type, details)); item->setData(column, Qt::UserRole, QString::fromStdString(details.mId.toStdString())); QPixmap combinedPixmap; if (!icons.empty()) { GxsIdDetails::GenerateCombinedPixmap(combinedPixmap, icons, QFontMetricsF(item->font(item->idColumn())).height()*1.4); } item->setData(column, Qt::DecorationRole, combinedPixmap); item->setAvatar(details.mAvatar); }
/** * Regenerate the QTreeWidget participant list of a Chat Lobby * * Show yellow icon for muted Participants */ void ChatLobbyDialog::updateParticipantsList() { ChatLobbyInfo linfo; if(rsMsgs->getChatLobbyInfo(lobbyId,linfo)) { ChatLobbyInfo cliInfo=linfo; QList<QTreeWidgetItem*> qlOldParticipants=ui.participantsList->findItems("*",Qt::MatchWildcard,COLUMN_ID); foreach(QTreeWidgetItem *qtwiCur,qlOldParticipants) if(cliInfo.gxs_ids.find(RsGxsId((*qtwiCur).text(COLUMN_ID).toStdString())) == cliInfo.gxs_ids.end()) { //Old Participant go out, remove it int index = ui.participantsList->indexOfTopLevelItem(qtwiCur); delete ui.participantsList->takeTopLevelItem(index); } for (std::map<RsGxsId,time_t>::const_iterator it2(linfo.gxs_ids.begin()); it2 != linfo.gxs_ids.end(); ++it2) { QString participant = QString::fromUtf8( (it2->first).toStdString().c_str() ); QList<QTreeWidgetItem*> qlFoundParticipants=ui.participantsList->findItems(participant,Qt::MatchExactly,COLUMN_ID); GxsIdRSTreeWidgetItem *widgetitem; if (qlFoundParticipants.count()==0) { // TE: Add Wigdet to participantsList with Checkbox, to mute Participant widgetitem = new GxsIdRSTreeWidgetItem(mParticipantCompareRole,GxsIdDetails::ICON_TYPE_AVATAR); widgetitem->setId(it2->first,COLUMN_NAME, true) ; //widgetitem->setText(COLUMN_NAME, participant); // set activity time to the oast so that the peer is marked as inactive widgetitem->setText(COLUMN_ACTIVITY,QString::number(time(NULL) - timeToInactivity)); widgetitem->setText(COLUMN_ID,QString::fromStdString(it2->first.toStdString())); ui.participantsList->addTopLevelItem(widgetitem); } else widgetitem = dynamic_cast<GxsIdRSTreeWidgetItem*>(qlFoundParticipants.at(0)); if (isParticipantMuted(it2->first)) { widgetitem->setTextColor(COLUMN_NAME,QColor(255,0,0)); } else { widgetitem->setTextColor(COLUMN_NAME,ui.participantsList->palette().color(QPalette::Active, QPalette::Text)); } time_t tLastAct=widgetitem->text(COLUMN_ACTIVITY).toInt(); time_t now = time(NULL); widgetitem->setSizeHint(COLUMN_ICON, QSize(20,20)); if(isParticipantMuted(it2->first)) widgetitem->setIcon(COLUMN_ICON, QIcon(":/icons/bullet_red_128.png")); else if (tLastAct + timeToInactivity < now) widgetitem->setIcon(COLUMN_ICON, QIcon(":/icons/bullet_grey_128.png")); else widgetitem->setIcon(COLUMN_ICON, QIcon(":/icons/bullet_green_128.png")); RsGxsId gxs_id; rsMsgs->getIdentityForChatLobby(lobbyId, gxs_id); if (RsGxsId(participant.toStdString()) == gxs_id) widgetitem->setIcon(COLUMN_ICON, QIcon(":/icons/bullet_yellow_128.png")); QTime qtLastAct=QTime(0,0,0).addSecs(now-tLastAct); widgetitem->setToolTip(COLUMN_ICON,tr("Right click to mute/unmute participants<br/>Double click to address this person<br/>") +tr("This participant is not active since:") +qtLastAct.toString() +tr(" seconds") ); } }