📄 evalistview.cpp
字号:
delete group;}bool EvaListView::addBuddy(const QString &nick, const int id, const QString signature, const int index, QPixmap *on, QPixmap *off, EvaBuddyItem::Status status){ EvaGroupItem *group = findGroup(index); if(!group) return false; if(hasBuddy(id)) { changeGroupTo(id, index); return false; } EvaBuddyItem *buddy = group->addBuddy(nick, id, signature, on, off, status); buddyMap[id] = buddy; return true;}void EvaListView::updateNick(const int id, const QString &nick){ EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return; buddy->updateNick(nick);}void EvaListView::updateSignature(const int id, const QString &sig){ EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return; buddy->updateSignature(sig);}void EvaListView::updateFacePixmaps(const int id, QPixmap *on, QPixmap *off){ EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return; buddy->updateFacePixmaps(on, off);}const std::list<std::string> EvaListView::getGroupNames(){ std::list<std::string> names; QTextCodec *codec = QTextCodec::codecForName("GB18030"); EvaGroupItem *group = dynamic_cast<EvaGroupItem *>(firstChild()); while(group){ std::string n = (codec->fromUnicode(group->getGroupName())).data(); names.push_back(n); group=dynamic_cast<EvaGroupItem *>(group->nextSibling()); } return names;}const int EvaListView::getNumOfGroups() const{ return childCount();}const std::map<int, int> EvaListView::getGroupedBuddy(){ EvaGroupItem *group = dynamic_cast<EvaGroupItem *>(firstChild()); EvaBuddyItem *item; std::map<int, int> l; int index; while(group){ index = group->getGroupIndex(); item = dynamic_cast<EvaBuddyItem *>(group->firstChild()); while(item){ l[item->getQQ()]=index; item = dynamic_cast<EvaBuddyItem *>(item->nextSibling()); } group = dynamic_cast<EvaGroupItem *>(group->nextSibling()); } return l;}const bool EvaListView::hasGroup(const int index) { if(findGroup(index)) return true; return false;}const bool EvaListView::hasBuddy(const int id){ EvaBuddyItem *buddy = getBuddyRef(id); return (buddy != NULL);}EvaBuddyItem *EvaListView::getBuddyRef(const int id){ std::map<const int, EvaBuddyItem *>::iterator iter; iter = buddyMap.find(id); if(iter == buddyMap.end()) return NULL; return iter->second;}void EvaListView::updateAllGroupTitles(){ EvaGroupItem *group = dynamic_cast<EvaGroupItem *>(firstChild()); while(group){ group->updateGroupTitle(); group = dynamic_cast<EvaGroupItem *>(group->nextSibling()); }}EvaGroupItem *EvaListView::updateGroupTitle(EvaBuddyItem *buddy, bool isGetGroupRefOnly){ if(!buddy) return NULL; EvaGroupItem * g = dynamic_cast<EvaGroupItem *>(((QListViewItem*)(buddy))->parent()); if(!g) return g; if(!isGetGroupRefOnly) g->updateGroupTitle(); return g;}bool EvaListView::changeToOnline(const int id){ EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return false; buddy->slotChangeToOnline(); if(!buddy->isVisible()) buddy->setVisible(true); updateGroupTitle(buddy); return true;}bool EvaListView::changeToLeave(const int id){ EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return false; buddy->slotChangeToLeave(); if(!buddy->isVisible()) buddy->setVisible(true); updateGroupTitle(buddy); return true;}bool EvaListView::changeToOffline(const int id){// EvaGroupItem * group = findGroupByID(id);// if(!group) return false;// return group->changeToOffline(id); EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return false; buddy->slotChangeToOffline(); if(isShowOnlineOnly && buddy->isVisible()) buddy->setVisible(false); updateGroupTitle(buddy); return true;}bool EvaListView::changeToInvisible(const int id){// EvaGroupItem * group = findGroupByID(id);// if(!group) return false;// return group->changeToInvisible(id); EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return false; buddy->slotChangeToInvisible(); if(isShowOnlineOnly && buddy->isVisible()) buddy->setVisible(false); updateGroupTitle(buddy); return true;}bool EvaListView::startFlash(const int id){ EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return false; buddy->slotStartFlash(); EvaGroupItem *g = updateGroupTitle(buddy, true); if(g) g->startFlash(id); return true;}bool EvaListView::stopFlash(const int id){ EvaBuddyItem *buddy = getBuddyRef(id); if(!buddy) return false; buddy->slotStopFlash(); EvaGroupItem *g = updateGroupTitle(buddy, true); if(g) g->stopFlash(id); return true;}bool EvaListView::startQunFlash(const int id){ EvaGroupItem *group = findGroup(EvaUser::getQunIndex()); if(!group) return false; return group->startFlash(id);}bool EvaListView::stopQunFlash(const int id){ EvaGroupItem *group = findGroup(EvaUser::getQunIndex()); if(!group) return false; return group->stopFlash(id);}EvaGroupItem *EvaListView::findGroup(const int index){ EvaGroupItem *group = dynamic_cast<EvaGroupItem *>(firstChild()); while(group){ if(index==group->getGroupIndex()) return group; group = dynamic_cast<EvaGroupItem *>(group->nextSibling()); } return NULL;}EvaGroupItem *EvaListView::findGroupByID(const int id){ EvaGroupItem *g = updateGroupTitle(getBuddyRef(id)); return g;}bool EvaListView::removeBuddy(const int id){ EvaGroupItem * group = findGroupByID(id); if(!group) return false; buddyMap.erase(id); group->updateGroupTitle(); return group->removeBuddy(id);}void EvaListView::showAll(){ EvaGroupItem *group = dynamic_cast<EvaGroupItem *>(firstChild()); while(group){ group->showAll(); group = dynamic_cast<EvaGroupItem *>(group->nextSibling()); } isShowOnlineOnly = false;}void EvaListView::showOnlineOnly(){ EvaGroupItem *group = dynamic_cast<EvaGroupItem *>(firstChild()); while(group){ group->showOnlineOnly(); group = dynamic_cast<EvaGroupItem *>(group->nextSibling()); } isShowOnlineOnly = true;}void EvaListView::refreshFace(const QSize &size){ EvaBuddyItem::setFaceSize(size); EvaGroupItem *group = dynamic_cast<EvaGroupItem *>(firstChild()); while(group){ group->refreshFace(); group = dynamic_cast<EvaGroupItem *>(group->nextSibling()); }}void EvaListView::setFaceSize(const QSize &size){ EvaBuddyItem::setFaceSize(size);}void EvaListView::addQun(QString &name, const int id, QPixmap *pic){ EvaGroupItem *group = findGroup(EvaUser::getQunIndex()); if(!group) return; if(group->hasQun(id)){ group->updateQun(name, id, pic); return; } group->addQun(name, id, pic);}void EvaListView::updateQun(QString &name, const int id, QPixmap *pic){ EvaGroupItem *group = findGroup(EvaUser::getQunIndex()); if(!group) return; group->updateQun(name, id, pic);}void EvaListView::clear(){ QListView::clear(); buddyMap.clear();}void EvaListView::keyPressEvent( QKeyEvent *e ){ EvaGroupItem *item = dynamic_cast<EvaGroupItem *>(currentItem()); if ( (e->key() == Qt::Key_F2) && item ){ item->setGroupName(item->getGroupName()); // this is to elimate the online number statistics item->setRenameEnabled(0, true); item->startRename(0); }else QListView::keyPressEvent(e);}void EvaListView::startDrag(){ EvaBuddyItem *item = dynamic_cast<EvaBuddyItem *>(currentItem()); if(!item) return; EvaGroupItem * group = dynamic_cast<EvaGroupItem *>(currentItem()->parent()); if(!group) return; dGroup = group->getGroupIndex(); dId = item->getQQ(); closeAllGroups(); QDragObject *d = new QTextDrag(QString::number(item->getQQ()), this); d->dragCopy();}void EvaListView::dragEnterEvent(QDragEnterEvent *event){ if(dId == -1 || dGroup == -1) return; event->accept(QTextDrag::canDecode(event));}void EvaListView::dropEvent(QDropEvent *event){ QPoint p(contentsToViewport(event->pos())); QListViewItem *i=itemAt( p ); if(!i) return; EvaGroupItem * group = dynamic_cast<EvaGroupItem *>(i); if(!group){ group = dynamic_cast<EvaGroupItem *>(i->parent()); if(!group) return; } if(group->getGroupIndex() == EvaUser::getQunIndex()) return; if(dGroup == group->getGroupIndex()) return; // if drop in same group if( EvaUser::getAnonymousIndex() == group->getGroupIndex()) return; // cannot drop buddy in Anonymous group QString text; if(QTextDrag::decode(event, text)){ bool ok; int id = text.toInt(&ok); if(ok || id==dId ){ if(EvaUser::getBlackIndex() == group->getGroupIndex()) { emit deleteMeFrom(id); dId = -1; dGroup = -1; return; } // if drag buddy in Anonymous or Black List into other group if( dGroup == EvaUser::getAnonymousIndex() || dGroup == EvaUser::getBlackIndex()){ emit requestAddBuddy(id); dId = -1; dGroup = -1; return; } EvaBuddyItem * buddy = findGroup(dGroup)->takeBuddy(dId); group->addBuddy(buddy); group->setOpen(true); emit groupChanged(id, group->getGroupIndex()); dId = -1; dGroup = -1; updateAllGroupTitles(); return; } }}void EvaListView::closeAllGroups(){ EvaGroupItem *group = dynamic_cast<EvaGroupItem *>(firstChild()); while(group){ group->setOpen(false); group = dynamic_cast<EvaGroupItem *>(group->nextSibling()); }}void EvaListView::clearQunList( ){ EvaGroupItem *group = findGroup(EvaUser::getQunIndex()); if(!group) return; group->clearQunGroup();}void EvaListView::removeQun( const int id ){ EvaGroupItem *group = findGroup(EvaUser::getQunIndex()); if(!group) return; group->removeQun(id);}/* --------------------------------------------------------------------------------- */QPixmap *EvaQunItem::pixMsg =0;EvaQunItem::EvaQunItem( QListViewItem * parent, const QString & name, const int qID, QPixmap * pic ) : QListViewItem( parent, " "+name), hasMessage(false), qunID(qID), qunName(name), qunPic(pic), m_RichText(0){ //discuss = new EvaGroupItem(this, " " + i18n("Discuss Group"), EvaGroupItem::QunDiscuss); //groups = new EvaGroupItem(this, " " + i18n("Orgs in Qun"), EvaGroupItem::QunOrg); setQunPix(pic);}void EvaQunItem::setQunName(const QString &name){ qunName = name; updateQunName();}void EvaQunItem::setQunPix(QPixmap *pix){ qunPic = pix; updateQunName();}const bool EvaQunItem::hasMessages() const{ return hasMessage;}void EvaQunItem::updateQunName(){ EvaUserSetting * setting = EvaMain::user->getSetting(); QString fontedName = qunName; QColor showColor = Qt::black; if(hasMessage){ if(setting->isQunFlashBold()) fontedName = ("<b>" + fontedName + "</b>"); if(setting->isQunFlashUnderline()) fontedName = ("<u>" + fontedName + "</u>"); if(setting->isQunFlashItalic()) fontedName = ("<i>" + fontedName + "</i>"); showColor = setting->getQunFlashColor(); } else { if(setting->isQunNameBold()) fontedName = ("<b>" + fontedName + "</b>"); if(setting->isQunNameUnderline()) fontedName = ("<u>" + fontedName + "</u>"); if(setting->isQunNameItalic()) fontedName = ("<i>" + fontedName + "</i>"); showColor = setting->getQunNameColor(); } QString showName = "<font color=\"" + showColor.name() + "\"> " + fontedName + "</font>"; if(m_RichText) delete m_RichText; m_RichText = new QSimpleRichText( "<qt><nobr>" + showName + "</nobr></qt>", listView()->viewport()->font(), QString::null, 0/*, mimeFactory_*/ ); if(listView() && isVisible()) listView()->repaintItem(this); widthChanged( 0 );}QString EvaQunItem::tip(){ QTextCodec *codec = QTextCodec::codecForName("GB18030"); QString decription = ""; const Qun *qun = EvaMain::user->getQunList()->getQun(qunID); if(qun && qun->getDetails().getQunID() ){ decription = codec->toUnicode(qun->getDetails().getDescription().c_str()); } QString tip = "<table><tr><td align = left valign = middle><font color = blue><b>"+ i18n("Qun") + ": </b></font>"+ qunName +"<br><b><font color = blue>"+ i18n("Description") +": </font></b><br> "+ decription + "</td></tr></table>"; return tip;}void EvaQunItem::paintCell( QPainter * painter, const QColorGroup & colourGroup, int column, int width, int align ){ if( ! isVisible() ) return; if ( column == 0){ QBrush *brush; QPalette palette; EvaListView *lv = dynamic_cast<EvaListView *> (listView()); if( !lv ) return; palette = lv->viewport()->palette(); brush = 0; const BackgroundMode bgmode = lv->viewport()->backgroundMode(); const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); if ( colourGroup.brush( crole ) != lv->colorGroup().brush( crole ) ) painter->fillRect( 0, 0, width, height(), colourGroup.brush( crole ) ); else lv->paintEmptyArea( painter, QRect( 0, 0, width, height() ) ); if ( isSelected() ) { brush = new QBrush( palette.color(QPalette::Active, QColorGroup::Highlight) ); // painter->setPen( palette.color(QPalette::Active, QColorGroup::Text) ); } else { // painter->setPen( palette.color(QPalette::Normal, QColorGroup::Text) ); } int icon_width = 0; QPixmap *icon = qunPic; if(icon){ icon_width = lv->itemMargin() + icon->width(); } // TODO: Change the font for highlighted text m_RichText->draw( painter, lv->itemMargin() + icon_width, 0, QRect( icon_width, 0, width, height() ), colourGroup, brush ); if(icon){ int xo = lv->itemMargin(); int yo = ( height() - icon->height() ) / 2; painter->drawPixmap( xo, yo, *icon ); } int height = m_RichText->height(); if(icon && icon->height() > m_RichText->height()){ height = icon->height(); } height += 2; setHeight( height ); widthChanged( 0 ); delete brush; } else { QListViewItem::paintCell( painter, colourGroup, column, width, align ); }}void EvaQunItem::slotStartFlash( ){ hasMessage = true; updateQunName();}void EvaQunItem::slotStopFlash( ){ hasMessage = false; updateQunName();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -