⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evalistview.cpp

📁 linux下的eva源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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() + "\">&nbsp;" + 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 + -