📄 evalistview.cpp
字号:
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() + "\"> " + 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 + -