commit cc2ccbd6e06d35deab33495f594277636c87c797 Author: Gary Cramblitt Date: Mon Feb 9 00:08:16 2004 +0000 More NickInfo tracking. Uncomment define USE_NICKINFO in server.h if u want to experiment with this. svn path=/trunk/kdeextragear-2/konversation/; revision=286305 diff --git a/konversation/konversationapplication.cpp b/konversation/konversationapplication.cpp index bb0b9b0..e2108a0 100644 --- a/konversation/konversationapplication.cpp +++ b/konversation/konversationapplication.cpp @@ -948,4 +948,7 @@ Konversation::Sound* KonversationApplication::sound() return m_sound; } +// Returns list of pointers to Servers. +const QPtrList KonversationApplication::getServerList() { return serverList; } + #include "konversationapplication.moc" diff --git a/konversation/konversationapplication.h b/konversation/konversationapplication.h index bf1a7fe..75f8050 100644 --- a/konversation/konversationapplication.h +++ b/konversation/konversationapplication.h @@ -60,6 +60,9 @@ class KonversationApplication : public KApplication OSDWidget* osd; Konversation::Sound* sound(); + + // Returns list of pointers to Servers. + const QPtrList getServerList(); signals: void catchUrl(const QString& who,const QString& url); diff --git a/konversation/nicksonline.cpp b/konversation/nicksonline.cpp index 52f1970..0d9b92a 100644 --- a/konversation/nicksonline.cpp +++ b/konversation/nicksonline.cpp @@ -36,10 +36,16 @@ NicksOnline::NicksOnline(QWidget* parent): ChatWindow(parent) setType(ChatWindow::NicksOnline); nickListView=new KListView(this); - + +#ifdef USE_NICKINFO + nickListView->addColumn(i18n("Server/Nickname/Channel")); + nickListView->addColumn(i18n("Additional Information")); + nickListView->setFullWidth(false); +#else nickListView->addColumn(i18n("Server/Nickname")); - nickListView->setRootIsDecorated(false); nickListView->setFullWidth(true); +#endif + nickListView->setRootIsDecorated(false); setMargin(KDialog::marginHint()); setSpacing(KDialog::spacingHint()); @@ -52,34 +58,41 @@ NicksOnline::NicksOnline(QWidget* parent): ChatWindow(parent) connect(editButton,SIGNAL (clicked()),SIGNAL (editClicked()) ); connect(nickListView,SIGNAL (doubleClicked(QListViewItem*)),this,SLOT(processDoubleClick(QListViewItem*))); + +#ifdef USE_NICKINFO + // Display info for all currently-connected servers. + refreshAllServerOnlineLists(); + // Connect and start refresh timer. + timer = new QTimer(this, "nicksOnlineTimer"); + connect(timer, SIGNAL (timeout()), this, SLOT(timerFired())); + // TODO: User preference for refresh interval. + timer->start(8000); +#endif } NicksOnline::~NicksOnline() { +#ifdef USE_NICKINFO + timer->stop(); + delete timer; +#endif delete nickListView; } -void NicksOnline::setOnlineList(const QString& serverName,const QStringList& list,bool changed) -{ #ifdef USE_NICKINFO +void NicksOnline::updateServerOnlineList(Server* server, bool changed) +{ + QString serverName = server->getServerName(); QListViewItem* serverRoot=nickListView->findItem(serverName,0); // If server is not in our list, or if the list changed, then display the new list. if ( true ) { delete serverRoot; - if (nickListView->columns() == 1) - { - nickListView->addColumn(i18n("Additional Information")); - nickListView->setColumnText(0, i18n("Server/Nickname/Channel")); - } KListViewItem* newServerRoot=new KListViewItem(nickListView,serverName); // Get a green LED for flagging of joined channels. Images leds; QIconSet currentLeds = leds.getGreenLed(false); QPixmap joinedLed = currentLeds.pixmap(QIconSet::Automatic, QIconSet::Active, QIconSet::On); - // Get the server object corresponding to the server name. - KonversationApplication *konvApp=static_cast(KApplication::kApplication()); - Server* server = konvApp->getServerByName(serverName); // List online nicknames. const NickInfoList* nickInfoList = server->getNicksOnline(); NickInfoListIterator itOnline(*nickInfoList); @@ -148,7 +161,36 @@ void NicksOnline::setOnlineList(const QString& serverName,const QStringList& lis nickListView->adjustColumn(0); nickListView->adjustColumn(1); } +} +#else +void NicksOnline::updateServerOnlineList(Server*, bool) {} +#endif +void NicksOnline::refreshAllServerOnlineLists() +{ + // Display info for all currently-connected servers. + nickListView->clear(); + KonversationApplication *konvApp=static_cast(KApplication::kApplication()); + QPtrList serverList = konvApp->getServerList(); + Server* server; + for ( server = serverList.first(); server; server = serverList.next() ) + { + updateServerOnlineList(server, true); + } +} + +void NicksOnline::timerFired() +{ + refreshAllServerOnlineLists(); +} + +void NicksOnline::setOnlineList(const QString& serverName,const QStringList& list,bool changed) +{ +#ifdef USE_NICKINFO + // Get the server object corresponding to the server name. + KonversationApplication *konvApp=static_cast(KApplication::kApplication()); + Server* server = konvApp->getServerByName(serverName); + updateServerOnlineList(server, changed); #else QListViewItem* serverRoot=nickListView->findItem(serverName,0); diff --git a/konversation/nicksonline.h b/konversation/nicksonline.h index da29245..805fabb 100644 --- a/konversation/nicksonline.h +++ b/konversation/nicksonline.h @@ -43,9 +43,14 @@ class NicksOnline : public ChatWindow protected slots: void processDoubleClick(QListViewItem* item); + void timerFired(); protected: + void updateServerOnlineList(Server* server, bool changed); + void refreshAllServerOnlineLists(); + KListView* nickListView; + QTimer* timer; }; #endif