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

📄 evalistview.cpp

📁 linux下的eva源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
void EvaGroupItem::updateFacePixmaps(const int id, QPixmap *on, QPixmap *off){	EvaBuddyItem *item = findBuddy(id);	if(item)		item->updateFacePixmaps(on, off);}const bool EvaGroupItem::removeBuddy(const int id){	EvaBuddyItem *item = findBuddy(id);	if(item){		delete item;		updateGroupTitle();		return true;	}	return false;}EvaBuddyItem *EvaGroupItem::takeBuddy(const int id){	EvaBuddyItem *item = findBuddy(id);	if(item) takeItem(item);	updateGroupTitle();	return item;}const EvaBuddyItem *EvaGroupItem::getBuddy(const int id){	return findBuddy(id);}bool EvaGroupItem::changeToOnline(const int id){	EvaBuddyItem *item = findBuddy(id);	if(item){		if(item->getStatus() == EvaBuddyItem::Offline || item->getStatus() == EvaBuddyItem::Invisible) {			numOnlineFriends++;			updateGroupTitle();		}		item->slotChangeToOnline();		item->setVisible(true);		sort();		return true;	}	return false;}bool EvaGroupItem::changeToLeave(const int id){	EvaBuddyItem *item = findBuddy(id);	if(item){		if(item->getStatus() == EvaBuddyItem::Offline || item->getStatus() == EvaBuddyItem::Invisible) {			numOnlineFriends++;			updateGroupTitle();		}		item->slotChangeToLeave();		item->setVisible(true);		sort();		return true;	}	return false;}bool EvaGroupItem::changeToOffline(const int id){	EvaBuddyItem *item = findBuddy(id);	if(item){		if(item->getStatus() == EvaBuddyItem::Online || item->getStatus() == EvaBuddyItem::Leave) {			numOnlineFriends--;			updateGroupTitle();		}		item->slotChangeToOffline();		sort();		return true;	}	return false;}bool EvaGroupItem::changeToInvisible(const int id){	EvaBuddyItem *item = findBuddy(id);	if(item){		if(item->getStatus() == EvaBuddyItem::Online || item->getStatus() == EvaBuddyItem::Leave) {			numOnlineFriends--;			updateGroupTitle();		}		item->slotChangeToInvisible();		sort();		return true;	}	return false;}bool EvaGroupItem::startFlash(const int id){	EvaBuddyItem *item = findBuddy(id);	if(item){		item->setVisible(true);		item->slotStartFlash();		sort();		hasMessage = true;		updateGroupTitle();		return true;	}else{		EvaQunItem *qItem = findQun(id);		if(qItem){			qItem->setVisible(true);			qItem->slotStartFlash();			sort();			hasMessage = true;			updateGroupTitle();			return true;		}	}	return false;}bool EvaGroupItem::stopFlash(const int id){		EvaBuddyItem *item = findBuddy(id);	if(item){		item->slotStopFlash();		int numMsgs = messagsCount();			QString note;			if(!numMsgs){			hasMessage = false;		}		updateGroupTitle();		return true;	}else{		EvaQunItem *qItem = findQun(id);		if(qItem){			qItem->slotStopFlash();			int numMsgs = messagsCount();			QString note;				if(!numMsgs){				hasMessage = false;			}			updateGroupTitle();			return true;		}			}	return false;}void EvaGroupItem::showAll(){	EvaBuddyItem *item = dynamic_cast<EvaBuddyItem *>(firstChild());	while(item){		if(!item->isVisible()) item->setVisible(true);		item = dynamic_cast<EvaBuddyItem *>(item->nextSibling());	}}void EvaGroupItem::showOnlineOnly(){	EvaBuddyItem *item = dynamic_cast<EvaBuddyItem *>(firstChild());	EvaBuddyItem::Status s;	while(item){		s = item->getStatus();		if(s==EvaBuddyItem::Online || s==EvaBuddyItem::Leave)			item->setVisible(true);		else			item->setVisible(false);		item = dynamic_cast<EvaBuddyItem *>(item->nextSibling());	}}void EvaGroupItem::refreshFace(){	EvaBuddyItem *item = dynamic_cast<EvaBuddyItem *>(firstChild());	while(item){		item->refreshFace();		item = dynamic_cast<EvaBuddyItem *>(item->nextSibling());	}}const int EvaGroupItem::countOnlineFriends(){	EvaBuddyItem *item = dynamic_cast<EvaBuddyItem *>(firstChild());	EvaBuddyItem::Status s;	numOnlineFriends = 0;	while(item){		s = item->getStatus();		if(s==EvaBuddyItem::Online || s==EvaBuddyItem::Leave)			numOnlineFriends++;		item = dynamic_cast<EvaBuddyItem *>(item->nextSibling());	}	return numOnlineFriends;}void EvaGroupItem::updateGroupTitle(){	sort();	int num = countOnlineFriends();		EvaUserSetting * setting = EvaMain::user->getSetting();	QColor showColor = Qt::black;	QString fontedName = groupName;	if(hasMessage){		if(setting->isGroupFlashBold())			fontedName = ("<b>" + fontedName + "</b>");		if(setting->isGroupFlashUnderline())			fontedName = ("<u>" + fontedName + "</u>");		if(setting->isGroupFlashItalic())			fontedName = ("<i>" + fontedName + "</i>");		showColor = setting->getGroupFlashColor();	} else {		if(setting->isGroupNameBold())			fontedName = ("<b>" + fontedName + "</b>");		if(setting->isGroupNameUnderline())			fontedName = ("<u>" + fontedName + "</u>");		if(setting->isGroupNameItalic())			fontedName = ("<i>" + fontedName + "</i>");		showColor = setting->getGroupNameColor();	}	//QColor showColor = isMsgShown?setting->getGroupFlashColor():setting->getGroupNameColor();	QString showName = "<font color=\"" + showColor.name() + "\">&nbsp;" + fontedName + "</font>";	QString counting = QString::number(num) + "/" +  QString::number(childCount());	if(setting->isGroupOnlineCountBold())		counting = ("<b>" + counting + "</b>");	if(setting->isGroupOnlineCountUnderline())		counting = ("<u>" + counting + "</u>");	if(setting->isGroupOnlineCountItalic())		counting = ("<i>" + counting + "</i>");		showName += (" (<font color=\"" + setting->getGroupCountColor().name() + "\">" + counting + "</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 );}void EvaGroupItem::addQun(EvaQunItem *item){	insertItem(item);	updateGroupTitle();}void EvaGroupItem::addQun(QString name, const int id, QPixmap *pic ){	EvaQunItem *q = findQun(id);	if(!q)		new EvaQunItem(this, name, id, pic);	else		updateQun(name,id, pic);	updateGroupTitle();}void EvaGroupItem::updateQun(QString name, const int id, QPixmap *pic){	EvaQunItem *item = dynamic_cast<EvaQunItem *>(firstChild());	while(item){		if(item->getQunID() == id){			item->setQunName(name);			item->setQunPix(pic);			break;		}		item = dynamic_cast<EvaQunItem *>(item->nextSibling());	}	}bool EvaGroupItem::removeQun( const int id ){	EvaQunItem *item = findQun(id);	if(item){		takeItem(item);		delete item;		updateGroupTitle();		return true;	}	return false;}bool EvaGroupItem::clearQunGroup(){	if(groupIndex != EvaUser::getQunIndex()) return false;	EvaQunItem *item = dynamic_cast<EvaQunItem *>(firstChild());	EvaQunItem *tmp;	while(item){		tmp = item;		item = dynamic_cast<EvaQunItem *>(item->nextSibling());		takeItem(tmp);		delete tmp;	}	return true;}bool EvaGroupItem::hasQun( const int id ){	EvaQunItem *item = findQun(id);	if(item) return true;	else		return false;}QString EvaGroupItem::tip(){	QString tip = "<table><tr><td align = left valign = middle><nobr><font color = red><b>"+			i18n("Group") + ": </b></font>"+ groupName +"</nobr><br><b><font color = red>"+ 			i18n("Members") +": </font></b>"+ QString::number(childCount()) +			"</td></tr></table>";	return tip;}	void EvaGroupItem::okRename( int col ){	QListViewItem::okRename(col);	groupName = text(0);	setRenameEnabled( 0, false );}void EvaGroupItem::cancelRename( int col ){	QListViewItem::cancelRename(col);	setRenameEnabled( 0, false );}QString EvaGroupItem::key( int, bool ) const{	QString sKey = "";	if(groupIndex == 0)		sKey = "A";	else	if(groupIndex == EvaUser::getQunIndex())			sKey = "Y";		else	if(groupIndex == EvaUser::getAnonymousIndex() || groupIndex == EvaUser::getBlackIndex())				sKey = "Z";			else				sKey = "B";	return sKey + QString::number(groupIndex);}void EvaGroupItem::paintBranches( QPainter * p, const QColorGroup & cg,				   int w, int /*y*/, int h ){    QListView *lv = listView();//     if ( lv )// 	lv->paintEmptyArea( p, QRect( 0, 0, w, h ) );//     if ( !visible || !lv )// 	return;//     lv->style().drawComplexControl( QStyle::CC_ListView, p, lv,// 				    QRect( 0, y, w, h ),// 				    cg,// 				    lv->isEnabled() ? QStyle::Style_Enabled :// 				    QStyle::Style_Default,// 				    (QStyle::SC_ListViewBranch |// 				     QStyle::SC_ListViewExpand),// 				    QStyle::SC_None, QStyleOption(this) );    lv->style().drawComplexControl( QStyle::CC_ListView,				p, lv, QRect( 0, 0, w, h ), cg,				QStyle::Style_Enabled | QStyle::Style_Default, QStyle::SC_ListView, QStyle::SC_None,				QStyleOption() );	//QListViewItem::paintBranches(p, cg, w, y, h);}void EvaGroupItem::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 = isOpen()?pixOpened:pixClosed;		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 );	}}EvaBuddyItem *EvaGroupItem::findBuddy(const int id){	EvaBuddyItem *item = dynamic_cast<EvaBuddyItem *>(firstChild());	while(item){		if(id == item->getQQ()){			return item;		}		item = dynamic_cast<EvaBuddyItem *>(item->nextSibling());	}	return NULL;}EvaQunItem *EvaGroupItem::findQun(const int id){	EvaQunItem *item = dynamic_cast<EvaQunItem *>(firstChild());	while(item){		if(id == item->getQunID()){			return item;		}		item = dynamic_cast<EvaQunItem *>(item->nextSibling());	}	return NULL;}const int EvaGroupItem::messagsCount(){	int num = 0;	EvaBuddyItem *item = dynamic_cast<EvaBuddyItem *>(firstChild());	while(item){		if(item->hasMessages())			num++;		item = dynamic_cast<EvaBuddyItem *>(item->nextSibling());	}	// it dosen't matter as group should has either all buddies or all quns	EvaQunItem *qItem = dynamic_cast<EvaQunItem *>(firstChild());	while(qItem){		if(qItem->hasMessages())			num++;		qItem = dynamic_cast<EvaQunItem *>(qItem->nextSibling());	} 	return num;}/* ---------------------------------------------------------------------------------       */EvaListView::EvaListView(QWidget *parent, const char *name, WFlags f)	: QListView(parent, name, f), dId(-1), dGroup(-1){	addColumn("1");	setColumnWidthMode( 0, Manual);	addColumn("2");	setColumnWidthMode( 1, Manual);	header()->hide();	setSorting(0);	setRootIsDecorated( false );	setTreeStepSize( 20 );   	setDragAutoScroll(true);	setHScrollBarMode(QScrollView::AlwaysOff);		setAcceptDrops( true );	setSelectionMode( QListView::Extended );	mToolTip = new EvaToolTip(this);	isShowOnlineOnly = false;	clearWFlags( WStaticContents );	setWFlags( WNoAutoErase );	static_cast<EvaListView*>(viewport())->clearWFlags( WStaticContents );	static_cast<EvaListView*>(viewport())->setWFlags( WNoAutoErase );}EvaListView::~EvaListView(){	delete mToolTip;	mToolTip = 0;}void EvaListView::setupPixmaps(QPixmap *gOpen, QPixmap *gClose, QPixmap *bNA, QPixmap *bMsg){	EvaGroupItem::setPixmapOpen(gOpen);	EvaGroupItem::setPixmapClose(gClose);	EvaGroupItem::setPixmapMsg(bMsg);	EvaBuddyItem::setPixmapNA(bNA);	EvaBuddyItem::setPixmapMsg(bMsg);	EvaQunItem::setPixmapMsg(bMsg);}void EvaListView::changeGroupTo(const int id, const int index){	EvaGroupItem *gs = findGroupByID(id);	EvaGroupItem *gd = findGroup(index);	if(gs && gd){		EvaBuddyItem *i = gs->takeBuddy(id);		gd->addBuddy(i);	}}bool EvaListView::addGroup(const QString &name, const int index){	if(hasGroup(index)) return false;	new EvaGroupItem(this, name, index);	return true;}void EvaListView::deleteGroup(const int index){	EvaGroupItem *group = findGroup(index);	QListViewItem *item = group->firstChild();	QListViewItem *next;	while(item){		next = item->nextSibling(); 		delete item;		item = next;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -