[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [Konversation] 9e64833: Switch from QDicts to QMaps to support
From:       Gary Cramblitt <garycramblitt () comcast ! net>
Date:       2010-07-01 13:27:22
Message-ID: 20100701132722.7A8F2BB55BC () projects ! kde ! org
[Download RAW message or body]

commit 9e6483346903f938a5897c26aa63a84283683ae2
Author: Gary Cramblitt <garycramblitt@comcast.net>
Date:   Mon Mar 8 22:03:20 2004 +0000

    Switch from QDicts to QMaps to support locale-aware sorting.  Uncomment define \
USE_NICKINFO in server.h if you want to play with this.  
    svn path=/trunk/kdeextragear-2/konversation/; revision=294551

diff --git a/konversation/nickinfo.h b/konversation/nickinfo.h
index 6e4a6dc..fb4f35b 100644
--- a/konversation/nickinfo.h
+++ b/konversation/nickinfo.h
@@ -21,6 +21,7 @@
 
 #include <qstringlist.h>
 #include <qdatetime.h>
+#include <ksharedptr.h>
 
 class Server;
 
@@ -31,7 +32,7 @@ class Server;
   let Server know that the object has been modified.
 */
 
-class NickInfo
+class NickInfo : public KShared
 {
   public:
     NickInfo(const QString& nick, Server* server);
diff --git a/konversation/nicksonline.cpp b/konversation/nicksonline.cpp
index 1e6ec1f..def42db 100644
--- a/konversation/nicksonline.cpp
+++ b/konversation/nicksonline.cpp
@@ -36,6 +36,9 @@ NicksOnline::NicksOnline(QWidget* parent): ChatWindow(parent)
   setType(ChatWindow::NicksOnline);
 
   nickListView=new KListView(this);
+  
+  // TODO: Need to derive from KListView and override sort() method in order to sort \
in +  // locale-aware order.
 
 #ifdef USE_NICKINFO
   nickListView->addColumn(i18n("Server/Nickname/Channel"));
@@ -47,7 +50,7 @@ NicksOnline::NicksOnline(QWidget* parent): ChatWindow(parent)
   nickListView->setFullWidth(true);
   nickListView->setRootIsDecorated(false);
 #endif
-  
+
   setMargin(KDialog::marginHint());
   setSpacing(KDialog::spacingHint());
 
@@ -93,7 +96,7 @@ QListViewItem* NicksOnline::findItemChild(const QListViewItem* \
parent, const QSt  }
 
 #ifdef USE_NICKINFO
-void NicksOnline::updateServerOnlineList(Server* server, bool changed)
+void NicksOnline::updateServerOnlineList(Server* server, bool)
 {
   bool whoisRequested = false;
   bool newServerRoot = false;
@@ -115,12 +118,13 @@ void NicksOnline::updateServerOnlineList(Server* server, bool \
changed)  QIconSet currentLeds = leds.getGreenLed(false);
     QPixmap joinedLed = currentLeds.pixmap(QIconSet::Automatic, QIconSet::Active, \
QIconSet::On);  // List online nicknames.
-    const NickInfoList* nickInfoList = server->getNicksOnline();
-    NickInfoListIterator itOnline(*nickInfoList);
-    NickInfo* nickInfo;
-    for ( ; (nickInfo=itOnline.current()) ; ++itOnline)
+    const NickInfoMap* nickInfoList = server->getNicksOnline();
+    NickInfoMap::ConstIterator itOnline;
+    NickInfoPtr nickInfo;
+    for ( itOnline = nickInfoList->begin(); itOnline != nickInfoList->end() ; \
++itOnline)  {
-      QString lcNickName = itOnline.currentKey();
+      QString lcNickName = itOnline.key();
+      nickInfo = itOnline.data();
       nickname = nickInfo->getNickname();
       // Construct additional information string for nick.
       QString nickAdditionalInfo;
@@ -161,7 +165,7 @@ void NicksOnline::updateServerOnlineList(Server* server, bool \
changed)  {
         // Known channels where nickname is online and mode in each channel.
         QString channelName = channelList[index];
-        ChannelNick* channelNick = server->getChannelNick(channelName, lcNickName);
+        ChannelNickPtr channelNick = server->getChannelNick(channelName, \
lcNickName);  unsigned int nickModeWord = channelNick->mode;
         QString nickMode;
         if (nickModeWord & 1) nickMode = nickMode + i18n(" Voice");
@@ -200,16 +204,17 @@ void NicksOnline::updateServerOnlineList(Server* server, bool \
changed)  while (child)
     {
       nextChild = child->nextSibling();
-      if (!nickInfoList->find(child->text(0))) delete child;
+      if (!nickInfoList->contains(LocaleString(child->text(0).lower()))) delete \
child;  child = nextChild;
     }
     // List offline nicknames.
     QListViewItem* offlineRoot = findItemChild(serverRoot, i18n("Offline"));
     if (!offlineRoot) offlineRoot = new KListViewItem(serverRoot, i18n("Offline"));
     nickInfoList = server->getNicksOffline();
-    NickInfoListIterator itOffline(*nickInfoList);
-    for ( ; (nickInfo=itOffline.current()) ; ++itOffline)
+    NickInfoMap::ConstIterator itOffline;
+    for ( itOffline = nickInfoList->begin(); itOffline != nickInfoList->end() ; \
++itOffline)  {
+      nickInfo = itOffline.data();
       nickname = nickInfo->getNickname();
       if (!findItemChild(offlineRoot, nickname))
       {
@@ -221,7 +226,7 @@ void NicksOnline::updateServerOnlineList(Server* server, bool \
changed)  while (child)
     {
       nextChild = child->nextSibling();
-      if (!nickInfoList->find(child->text(0))) delete child;
+      if (!nickInfoList->contains(LocaleString(child->text(0).lower()))) delete \
child;  child = nextChild;
     }
     // Expand server if newly added to list.
@@ -259,15 +264,17 @@ void NicksOnline::timerFired()
   refreshAllServerOnlineLists();
 }
 
-void NicksOnline::setOnlineList(const QString& serverName,const QStringList& \
                list,bool changed)
-{
 #ifdef USE_NICKINFO
+void NicksOnline::setOnlineList(const QString& serverName,const QStringList&,bool \
changed) +{
   // Get the server object corresponding to the server name.
   KonversationApplication *konvApp=static_cast<KonversationApplication \
*>(KApplication::kApplication());  Server* server = \
konvApp->getServerByName(serverName);  updateServerOnlineList(server, changed);
+}
 #else
-
+void NicksOnline::setOnlineList(const QString& serverName,const QStringList& \
list,bool changed) +{
   QListViewItem* serverRoot=nickListView->findItem(serverName,0);
   // If server is not in our list, or if the list changed, then display the new \
list.  if ( (serverRoot == 0) || changed)
@@ -283,8 +290,8 @@ void NicksOnline::setOnlineList(const QString& serverName,const \
QStringList& lis  newServerRoot->setOpen(true);
     }
   }
-#endif
 }
+#endif
 
 void NicksOnline::processDoubleClick(QListViewItem* item)
 {
diff --git a/konversation/server.cpp b/konversation/server.cpp
index 5f0c3a1..11ca41c 100644
--- a/konversation/server.cpp
+++ b/konversation/server.cpp
@@ -215,23 +215,16 @@ Server::~Server()
   if(resolver.running()) resolver.exit();
 #endif
 
-  // Delete all the NickInfos.
-  allNicks.setAutoDelete(TRUE);
+  // Delete all the NickInfos and ChannelNick structures.
   allNicks.clear();
-  // Delete all the ChannelNick structures.
-  ChannelNickList* members;
-  ChannelMembershipListIterator joinedChannelIterator(joinedChannels);
-  for( ; (members=joinedChannelIterator.current()); ++joinedChannelIterator )
-  {
-    members->setAutoDelete(TRUE);
-    members->clear();
-  }
-  ChannelMembershipListIterator unjoinedChannelIterator(joinedChannels);
-  for( ; (members=unjoinedChannelIterator.current()); ++unjoinedChannelIterator )
-  {
-    members->setAutoDelete(TRUE);
-    members->clear();
-  }
+  ChannelMembershipMap::Iterator it;
+  for ( it = joinedChannels.begin(); it != joinedChannels.end(); ++it ) delete \
it.data(); +  joinedChannels.clear();
+  for ( it = unjoinedChannels.begin(); it != unjoinedChannels.end(); ++it ) delete \
it.data(); +  unjoinedChannels.clear();
+  nicknamesOnline.clear();
+  nicknamesOffline.clear();
+  queryNicks.clear();
 
   // notify KonversationApplication that this server is gone
   emit deleted(this);
@@ -549,7 +542,7 @@ void Server::notifyResponse(const QString& nicksOnline)
     unsigned int index;
     for(index=0;index<nickLowerList.count();index++)
     {
-      if (nicknamesOnline.find(nickLowerList[index]) == 0)
+      if (!nicknamesOnline.contains(nickLowerList[index]))
       {
         addNickToOnlineList(nickList[index]);
         nicksOnlineChanged = true;
@@ -562,11 +555,11 @@ void Server::notifyResponse(const QString& nicksOnline)
       }
     }
     // Any watched nicks now offline?
-    NickInfoListIterator it(nicknamesOnline);
-    NickInfo* nickInfo;
-    for( ; (nickInfo=it.current()); ++it )
+    NickInfoMap::Iterator it;
+    NickInfoPtr nickInfo;
+    for( it = nicknamesOnline.begin() ; it != nicknamesOnline.end(); ++it )
     {
-      if (nickLowerList.find(it.currentKey()) == nickLowerList.end())
+      if (nickLowerList.find(it.key()) == nickLowerList.end())
       {
         nicksOnlineChanged = true;
         addNickToOfflineList(nickInfo->getNickname(), watchLowerList);
@@ -582,7 +575,7 @@ void Server::notifyResponse(const QString& nicksOnline)
     // TODO: It would be better to do this on startup and whenever user changes \
preferences.  for(index=0;index<watchLowerList.count();index++)
     {
-      if (nicknamesOnline.find(watchLowerList[index]) == 0) \
addNickToOfflineList(watchList[index], watchLowerList); +      if \
(nicknamesOnline.find(watchLowerList[index]) == nicknamesOnline.end()) \
addNickToOfflineList(watchList[index], watchLowerList);  }
 
 #else
@@ -885,68 +878,84 @@ QString Server::getNumericalIp()
 }
 
 // Given a nickname, returns NickInfo object.   0 if not found.
-NickInfo* Server::getNickInfo(const QString& nickname)
+NickInfoPtr Server::getNickInfo(const QString& nickname)
 {
-  QString lcNickname = nickname.lower();
-  return allNicks.find(lcNickname);
+  LocaleString lcNickname = nickname.lower();
+  if (allNicks.contains(lcNickname))
+    return allNicks[lcNickname];
+  else
+    return 0;
 }
 
 // Anyone who changes the contents of a NickInfo should call this method to let \
server  // know that it has changed.
-void Server::nickInfoUpdated(const NickInfo* nickInfo)
+void Server::nickInfoUpdated(const NickInfoPtr nickInfo)
 {
   if (nickInfo) emit nickInfoChanged(this, nickInfo);
 }
 
 // Given a nickname, returns an existing NickInfo object, or creates a new NickInfo \
object.  // Returns pointer to the found or created NickInfo object.
-NickInfo* Server::obtainNickInfo(const QString& nickname)
+NickInfoPtr Server::obtainNickInfo(const QString& nickname)
 {
-  NickInfo* nickInfo = getNickInfo(nickname);
-  if (!nickInfo)
+  NickInfoPtr nickInfoPtr = getNickInfo(nickname);
+  if (!nickInfoPtr)
   {
-    nickInfo = new NickInfo(nickname, this);
-    allNicks.insert(nickname.lower(), nickInfo);
+    nickInfoPtr = new NickInfo(nickname, this);
+    allNicks.insert(LocaleString(nickname.lower()), nickInfoPtr);
   }
-  return nickInfo;
+  return nickInfoPtr;
 }
 
 // Returns the list of members for a channel in the joinedChannels list.
 // 0 if channel is not in the joinedChannels list.
 // Using code must not alter the list.
-const ChannelNickList* Server::getJoinedChannelMembers(const QString& channelName) \
const +const ChannelNickMapPtr Server::getJoinedChannelMembers(const QString& \
channelName) const  {
-  return joinedChannels.find(channelName);
+  LocaleString lcChannelName = channelName.lower();
+  if (joinedChannels.contains(lcChannelName))
+    return joinedChannels[lcChannelName];
+  else
+    return 0;
 }
 
 // Returns the list of members for a channel in the unjoinedChannels list.
 // 0 if channel is not in the unjoinedChannels list.
 // Using code must not alter the list.
-const ChannelNickList* Server::getUnjoinedChannelMembers(const QString& channelName) \
const +const ChannelNickMapPtr Server::getUnjoinedChannelMembers(const QString& \
channelName) const  {
-  return unjoinedChannels.find(channelName);
+  LocaleString lcChannelName = channelName.lower();
+  if (unjoinedChannels.contains(lcChannelName))
+    return unjoinedChannels[lcChannelName];
+  else
+    return 0;
 }
 
 // Searches the Joined and Unjoined lists for the given channel and returns the \
member list.  // 0 if channel is not in either list.
 // Using code must not alter the list.
-const ChannelNickList* Server::getChannelMembers(const QString& channelName) const
+const ChannelNickMapPtr Server::getChannelMembers(const QString& channelName) const
 {
-  const ChannelNickList* members = getJoinedChannelMembers(channelName);
-  if (!members) members = getUnjoinedChannelMembers(channelName);
-  return members;
+  const ChannelNickMapPtr members = getJoinedChannelMembers(channelName);
+  if (members)
+    return members;
+  else
+    return getUnjoinedChannelMembers(channelName);
 }
 
 // Returns pointer to the ChannelNick (mode and pointer to NickInfo) for a given \
channel and nickname.  // 0 if not found.
-ChannelNick* Server::getChannelNick(const QString& channelName, const QString& \
nickname) +ChannelNickPtr Server::getChannelNick(const QString& channelName, const \
QString& nickname)  {
-  QString lcChannelName=channelName.lower();
-  QString lcNickname=nickname.lower();
-  const ChannelNickList* channelNickList=getChannelMembers(lcChannelName);
-  if (channelNickList)
+  QString lcChannelName = channelName.lower();
+  LocaleString lcNickname = nickname.lower();
+  const ChannelNickMapPtr channelNickMap = getChannelMembers(lcChannelName);
+  if (channelNickMap)
   {
-    return channelNickList->find(lcNickname);
+    if (channelNickMap->contains(lcNickname))
+      return (*channelNickMap)[lcNickname];
+    else
+      return 0;
   }
   else
   {
@@ -958,11 +967,11 @@ ChannelNick* Server::getChannelNick(const QString& channelName, \
const QString& n  // is in the watch list, adds the channel and nick to the \
unjoinedChannels list.  // If mode != 99, sets the mode for the nick in the channel.
 // Returns the NickInfo object if nick is on any lists, otherwise 0.
-NickInfo* Server::setChannelNick(const QString& channelName, const QString& \
nickname, unsigned int mode) +NickInfoPtr Server::setChannelNick(const QString& \
channelName, const QString& nickname, unsigned int mode)  {
   QString lcNickname = nickname.lower();
   // If already on a list, update mode.
-  ChannelNick* channelNick = getChannelNick(channelName, lcNickname);
+  ChannelNickPtr channelNick = getChannelNick(channelName, lcNickname);
   if (channelNick)
   {
     if (mode != 99) channelNick->mode = mode;
@@ -986,27 +995,25 @@ NickInfo* Server::setChannelNick(const QString& channelName, \
const QString& nick  // Returns a list of all the channels (joined or unjoined) that \
a nick is in.  QStringList Server::getNickChannels(QString& nickname)
 {
-  QString lcNickname = nickname.lower();
+  LocaleString lcNickname = nickname.lower();
   QStringList channellist;
-  ChannelNickList* members;
-  ChannelMembershipListIterator joinedChannelIterator(joinedChannels);
-  for( ; (members=joinedChannelIterator.current()); ++joinedChannelIterator )
+  ChannelMembershipMap::Iterator channel;
+  for( channel = joinedChannels.begin(); channel != joinedChannels.end(); ++channel \
)  {
-    if (members->find(lcNickname)) \
channellist.append(joinedChannelIterator.currentKey()); +    if \
(channel.data()->contains(lcNickname)) channellist.append(channel.key());  }
-  ChannelMembershipListIterator unjoinedChannelIterator(unjoinedChannels);
-  for( ; (members=unjoinedChannelIterator.current()); ++unjoinedChannelIterator )
+  for( channel = unjoinedChannels.begin(); channel != unjoinedChannels.end(); \
++channel )  {
-    if (members->find(lcNickname)) \
channellist.append(unjoinedChannelIterator.currentKey()); +    if \
(channel.data()->contains(lcNickname)) channellist.append(channel.key());  }
   return channellist;
 }
 
 // Returns a list of the nicks on the watch list that are online.
-const NickInfoList* Server::getNicksOnline() { return &nicknamesOnline; }
+const NickInfoMap* Server::getNicksOnline() { return &nicknamesOnline; }
 
 // Returns a list of the nicks on the watch list that are offline.
-const NickInfoList* Server::getNicksOffline() { return &nicknamesOffline; }
+const NickInfoMap* Server::getNicksOffline() { return &nicknamesOffline; }
 
 QString Server::getIp()
 {
@@ -1043,13 +1050,8 @@ void Server::addQuery(const QString& nickname,const QString& \
hostmask)  
 #ifdef USE_NICKINFO
     // Update NickInfo.
-    QString lcNickname = nickname.lower();
-    NickInfo* nickInfo = getNickInfo(nickname);
-    if (!nickInfo)
-    {
-      nickInfo = new NickInfo(nickname, this);
-      allNicks.insert(lcNickname, nickInfo);
-    }
+    LocaleString lcNickname = nickname.lower();
+    NickInfoPtr nickInfo = obtainNickInfo(nickname);
     if ((nickInfo->getHostmask() != hostmask) && !hostmask.isEmpty())
     {
       nickInfo->setHostmask(hostmask);
@@ -1073,7 +1075,7 @@ void Server::closeQuery(const QString &name)
 
 #ifdef USE_NICKINFO
   // Update NickInfo.
-  queryNicks.remove(name.lower());
+  queryNicks.remove(LocaleString(name.lower()));
 #endif
 }
 
@@ -1430,7 +1432,7 @@ void Server::joinChannel(const QString &name, const QString \
&hostmask, const QSt  
 #ifdef USE_NICKINFO
   // Move channel from unjoined (if present) to joined list and add our own nickname \
                to the joined list.
-  NickInfo* nickInfo = addNickToJoinedChannelsList(name, getNickname(),  99);
+  NickInfoPtr nickInfo = addNickToJoinedChannelsList(name, getNickname(),  99);
   if ((nickInfo->getHostmask() != hostmask) && !hostmask.isEmpty())
   {
     nickInfo->setHostmask(hostmask);
@@ -1457,8 +1459,8 @@ void Server::updateChannelMode(const QString &nick, const \
QString &channelName,  #ifdef USE_NICKINFO
   // Compute new mode for the recipient.
   unsigned int nickMode = 0;
-  ChannelNick* channelNick=getChannelNick(channelName, parameter);
-  if (channelNick) nickMode=channelNick->mode;
+  ChannelNickPtr channelNick = getChannelNick(channelName, parameter);
+  if (channelNick) nickMode = channelNick->mode;
   // TODO: What is mode character for owner?
   QString userModes="vho?a";    // voice halfop op owner admin
   int modePos = userModes.find(mode);
@@ -1588,8 +1590,8 @@ void Server::addPendingNickList(const QString& \
channelName,const QStringList& ni  {
     for(unsigned int i=0;i<nickList.count();i++)
     {
-      QString nickname=nickList[i].section(" ",0,0);
-      unsigned int mode=nickList[i].section(" ",1,1).toInt();
+      QString nickname = nickList[i].section(" ",0,0);
+      unsigned int mode = nickList[i].section(" ",1,1).toInt();
       if (!nickname.isEmpty()) addNickToJoinedChannelsList(channelName, nickname, \
mode);  }
   }
@@ -1603,55 +1605,52 @@ void Server::addPendingNickList(const QString& \
channelName,const QStringList& ni  // If mode != 99 sets the mode for this nick in \
this channel.  // Returns the NickInfo for the nickname.
 #ifdef USE_NICKINFO
-NickInfo* Server::addNickToJoinedChannelsList(const QString& channelName, const \
QString& nickname, unsigned int mode) +NickInfoPtr \
Server::addNickToJoinedChannelsList(const QString& channelName, const QString& \
nickname, unsigned int mode)  {
   bool doChannelJoinedSignal = false;
   bool doWatchedNickChangedSignal = false;
   bool doChannelMembersChangedSignal = false;
   bool doChannelNickChangedSignal = false;
-  QString lcNickname = nickname.lower();
+  LocaleString lcNickname = nickname.lower();
   // Create NickInfo if not already created.
-  NickInfo* nickInfo = getNickInfo(lcNickname);
-  if (!nickInfo)
-  {
-    nickInfo = new NickInfo(nickname, this);
-    allNicks.insert(lcNickname, nickInfo);
-  }
+  NickInfoPtr nickInfo = obtainNickInfo(nickname);
   // Move the channel from unjoined list (if present) to joined list.
-  QString lcChannelName = channelName.lower();
-  ChannelNickList* members=unjoinedChannels.find(lcChannelName);
-  if (members)
+  LocaleString lcChannelName = channelName.lower();
+  ChannelNickMapPtr channel;
+  if (unjoinedChannels.contains(lcChannelName))
   {
+    channel = unjoinedChannels[lcChannelName];
     unjoinedChannels.remove(lcChannelName);
-    joinedChannels.insert(lcChannelName, members);
-    doChannelJoinedSignal = true;
+    joinedChannels.insert(lcChannelName, channel);
   }
   else
   {
     // Create a new list in the joined channels if not already present.
-    members=joinedChannels.find(lcChannelName);
-    if (!members)
+    if (!joinedChannels.contains(lcChannelName))
     {
-      members = new ChannelNickList;
-      joinedChannels.insert(lcChannelName, members);
+      channel = new ChannelNickMap;
+      joinedChannels.insert(lcChannelName, channel);
       doChannelJoinedSignal = true;
     }
+    else
+      channel = joinedChannels[lcChannelName];
   }
-  // Add NickInfo to joinedChannels list if not already in the list.
-  ChannelNick* channelNick=members->find(lcNickname);
-  if (!channelNick)
+  // Add NickInfo to channel list if not already in the list.
+  ChannelNickPtr channelNick;
+  if (!channel->contains(lcNickname))
   {
-    channelNick = new ChannelNick;
+    channelNick = ChannelNickPtr(new ChannelNick);
     channelNick->nickInfo = nickInfo;
     channelNick->mode = 0;
-    members->insert(lcNickname, channelNick);
+    channel->insert(lcNickname, channelNick);
     doChannelMembersChangedSignal = true;
   }
+  channelNick = (*channel)[lcNickname];
   // Move from the Offline to Online lists.
-  if (nicknamesOffline.find(lcNickname) != 0)
+  if (nicknamesOffline.contains(lcNickname))
   {
-    nicknamesOffline.remove(lcNickname);
     nicknamesOnline.insert(lcNickname, nickInfo);
+    nicknamesOffline.remove(lcNickname);
     doWatchedNickChangedSignal = true;
   }
   // Set the mode for the nick in this channel.
@@ -1670,7 +1669,7 @@ NickInfo* Server::addNickToJoinedChannelsList(const QString& \
channelName, const  return nickInfo;
 }
 #else
-NickInfo* Server::addNickToJoinedChannelsList(const QString&, const QString&, \
unsigned int) { return 0; } +NickInfoPtr Server::addNickToJoinedChannelsList(const \
QString&, const QString&, unsigned int) { return 0; }  #endif
 
 // Adds a nickname to the unjoinedChannels list.
@@ -1680,53 +1679,52 @@ NickInfo* Server::addNickToJoinedChannelsList(const QString&, \
const QString&, un  // If mode != 99 sets the mode for this nick in this channel.
 // Returns the NickInfo for the nickname.
 #ifdef USE_NICKINFO
-NickInfo* Server::addNickToUnjoinedChannelsList(const QString& channelName, const \
QString& nickname, unsigned int mode) +NickInfoPtr \
Server::addNickToUnjoinedChannelsList(const QString& channelName, const QString& \
nickname, unsigned int mode)  {
   bool doChannelUnjoinedSignal = false;
   bool doWatchedNickChangedSignal = false;
   bool doChannelMembersChangedSignal = false;
   bool doChannelNickChangedSignal = false;
-  QString lcNickname = nickname.lower();
+  LocaleString lcNickname = nickname.lower();
   // Create NickInfo if not already created.
-  NickInfo* nickInfo = getNickInfo(lcNickname);
-  if (!nickInfo)
-  {
-    nickInfo = new NickInfo(nickname, this);
-    allNicks.insert(lcNickname, nickInfo);
-  }
+  NickInfoPtr nickInfo = obtainNickInfo(nickname);
   // Move the channel from joined list (if present) to unjoined list.
-  QString lcChannelName = channelName.lower();
-  ChannelNickList* members = joinedChannels.find(lcChannelName);
-  if (members)
+  LocaleString lcChannelName = channelName.lower();
+  ChannelNickMapPtr channel;
+  if (joinedChannels.contains(lcChannelName))
   {
+    channel = joinedChannels[lcChannelName];
     joinedChannels.remove(lcChannelName);
-    unjoinedChannels.insert(lcChannelName, members);
+    unjoinedChannels.insert(lcChannelName, channel);
     doChannelUnjoinedSignal = true;
   }
   else
   {
     // Create a new list in the unjoined channels if not already present.
-    members = unjoinedChannels.find(lcChannelName);
-    if (!members)
+    if (!unjoinedChannels.contains(lcChannelName))
     {
-      members = new ChannelNickList;
-      unjoinedChannels.insert(lcChannelName, members);
+      channel = new ChannelNickMap;
+      unjoinedChannels.insert(lcChannelName, channel);
       doChannelUnjoinedSignal = true;
     }
+    else
+      channel = unjoinedChannels[lcChannelName];
   }
   // Add NickInfo to unjoinedChannels list if not already in the list.
-  ChannelNick* channelNick = members->find(lcNickname);
-  if (!channelNick)
+  ChannelNickPtr channelNick;
+  if (!channel->contains(lcNickname))
   {
-    channelNick = new ChannelNick;
+    channelNick = ChannelNickPtr(new ChannelNick);
     channelNick->nickInfo = nickInfo;
     channelNick->mode = 0;
-    members->insert(lcNickname, channelNick);
+    channel->insert(lcNickname, channelNick);
     doChannelMembersChangedSignal = true;
   }
+  channelNick = (*channel)[lcNickname];
   // Move from the Offline to Online lists.
-  if (nicknamesOffline.find(lcNickname) != 0)
+  if (nicknamesOffline.contains(lcNickname))
   {
+    nickInfo = nicknamesOffline[lcNickname];
     nicknamesOffline.remove(lcNickname);
     nicknamesOnline.insert(lcNickname, nickInfo);
     doWatchedNickChangedSignal = true;
@@ -1747,26 +1745,21 @@ NickInfo* Server::addNickToUnjoinedChannelsList(const \
QString& channelName, cons  return nickInfo;
 }
 #else
-NickInfo* Server::addNickToUnjoinedChannelsList(const QString&, const QString&, \
unsigned int) { return 0; } +NickInfoPtr Server::addNickToUnjoinedChannelsList(const \
QString&, const QString&, unsigned int) { return 0; }  #endif
 
 // Adds a nickname to the Online list, removing it from the Offline list, if \
present.  // Returns the NickInfo of the nickname.
 // Creates new NickInfo if necessary.
 #ifdef USE_NICKINFO
-NickInfo* Server::addNickToOnlineList(const QString& nickname)
+NickInfoPtr Server::addNickToOnlineList(const QString& nickname)
 {
   bool doSignal = false;
-  QString lcNickname = nickname.lower();
+  LocaleString lcNickname = nickname.lower();
   nicknamesOffline.remove(lcNickname);
-  NickInfo* nickInfo = getNickInfo(lcNickname);
-  if (nicknamesOnline.find(lcNickname) == 0)
+  NickInfoPtr nickInfo = obtainNickInfo(nickname);
+  if (!nicknamesOnline.contains(lcNickname))
   {
-    if (!nickInfo)
-    {
-      nickInfo = new NickInfo(nickname, this);
-      allNicks.insert(lcNickname, nickInfo);
-    }
     nicknamesOnline.insert(lcNickname, nickInfo);
     doSignal = true;
   }
@@ -1774,7 +1767,7 @@ NickInfo* Server::addNickToOnlineList(const QString& nickname)
   if (doSignal) emit watchedNickChanged(this, nickInfo, true);
 }
 #else
-NickInfo* Server::addNickToOnlineList(const QString&) { return 0; }
+NickInfoPtr Server::addNickToOnlineList(const QString&) { return 0; }
 #endif
 
 // Adds a nickname to the Offline list provided it is on the watch list,
@@ -1783,21 +1776,17 @@ NickInfo* Server::addNickToOnlineList(const QString&) { \
return 0; }  // Returns the NickInfo of the nickname or 0 if deleted altogether.
 // Creates new NickInfo if necessary.
 #ifdef USE_NICKINFO
-NickInfo* Server::addNickToOfflineList(const QString& nickname, const QStringList& \
watchList) +NickInfoPtr Server::addNickToOfflineList(const QString& nickname, const \
QStringList& watchList)  {
   bool doSignal = false;
-  QString lcNickname = nickname.lower();
+  LocaleString lcNickname = nickname.lower();
   nicknamesOnline.remove(lcNickname);
-  NickInfo* nickInfo = getNickInfo(lcNickname);
+  NickInfoPtr nickInfo;
   if (watchList.find(lcNickname) != watchList.end())
   {
-    if (nicknamesOffline.find(lcNickname) == 0)
+    nickInfo = obtainNickInfo(nickname);
+    if (!nicknamesOffline.contains(lcNickname))
     {
-      if (!nickInfo)
-      {
-        nickInfo = new NickInfo(nickname, this);
-        allNicks.insert(lcNickname, nickInfo);
-      }
       nicknamesOffline.insert(lcNickname, nickInfo);
       doSignal = true;
     }
@@ -1818,7 +1807,7 @@ NickInfo* Server::addNickToOfflineList(const QString& nickname, \
const QStringLis  return nickInfo;
 }
 #else
-NickInfo* Server::addNickToOfflineList(const QString&, const QStringList&) { return \
0; } +NickInfoPtr Server::addNickToOfflineList(const QString&, const QStringList&) { \
return 0; }  #endif
 
 // Remove nickname from a channel (on joined or unjoined lists).
@@ -1828,40 +1817,40 @@ void Server::removeChannelNick(const QString& channelName, \
const QString& nickna  {
   bool doSignal = false;
   bool joined = false;
-  QString lcChannelName = channelName.lower();
-  QString lcNickname = nickname.lower();
-  ChannelNick* channelNick;
-  ChannelNickList* channelNickList = joinedChannels.find(lcChannelName);
-  if (channelNickList)
+  LocaleString lcChannelName = channelName.lower();
+  LocaleString lcNickname = nickname.lower();
+  ChannelNickMapPtr channel;
+  if (joinedChannels.contains(lcChannelName))
   {
-    channelNick = channelNickList->find(lcNickname);
-    delete channelNick;
-    channelNickList->remove(lcNickname);
-    doSignal = true;
-    joined = true;
-    // TODO: If channel is now empty, delete it?
+    channel = joinedChannels[lcChannelName];
+    if (channel->contains(lcNickname))
+    {
+      channel->remove(lcNickname);
+      doSignal = true;
+      joined = true;
+      // TODO: If channel is now empty, delete it?
+    }
   }
   else
   {
-    channelNickList = unjoinedChannels.find(lcChannelName);
-    if (channelNickList)
+    if (unjoinedChannels.contains(lcChannelName))
     {
-      channelNick = channelNickList->find(lcNickname);
-      delete channelNick;
-      channelNickList->remove(lcNickname);
-      doSignal = true;
-      joined = false;
-      // TODO: If channel is now empty, delete it?
+      channel = unjoinedChannels[lcChannelName];
+      if (channel->contains(lcNickname))
+      {
+        channel->remove(lcNickname);
+        doSignal = true;
+        joined = false;
+        // TODO: If channel is now empty, delete it?
+      }
     }
     // If nickname is no longer on any list, delete it altogether.
     QStringList nickChannels = getNickChannels(lcNickname);
     if (nickChannels.isEmpty())
     {
-      if ((nicknamesOnline.find(lcNickname) == 0) && \
(nicknamesOffline.find(lcNickname) == 0) && (queryNicks.find(lcNickname) == 0)) +     \
if (!nicknamesOnline.contains(lcNickname) && !nicknamesOffline.contains(lcNickname) \
&& !queryNicks.contains(lcNickname))  {
-        NickInfo* nickInfo = getNickInfo(lcNickname);
         allNicks.remove(lcNickname);
-        delete nickInfo;
       }
     }
   }
@@ -1879,18 +1868,20 @@ void Server::removeJoinedChannel(const QString& channelName)
   bool doSignal = false;
   QString watchList = KonversationApplication::preferences.getNotifyString();
   QStringList watchListLower = QStringList::split(' ', watchList.lower());
-  QString lcChannelName = channelName.lower();
+  LocaleString lcChannelName = channelName.lower();
   // Move the channel nick list from the joined to unjoined lists.
-  ChannelNickList* channelNickList = joinedChannels.take(lcChannelName);
-  if (channelNickList)
+  ChannelNickMapPtr channel;
+  ChannelNickMap::Iterator member;
+  if (joinedChannels.contains(lcChannelName))
   {
-    unjoinedChannels.insert(lcChannelName, channelNickList);
+    channel = joinedChannels[lcChannelName];
+    joinedChannels.remove(lcChannelName);
+    unjoinedChannels.insert(lcChannelName, channel);
     // Remove nicks not on the watch list.
-    ChannelNickListIterator it(*channelNickList);
     bool allDeleted = true;
-    for ( ; (it.current()) ;++it )
+    for ( member = channel->begin(); member != channel->end() ;++member )
     {
-      QString lcNickname = it.currentKey();
+      LocaleString lcNickname = member.key();
       if (watchListLower.find(lcNickname) == watchListLower.end())
       {
         // Remove the nickname from the unjoined channel.  If nickname is no longer
@@ -1903,8 +1894,12 @@ void Server::removeJoinedChannel(const QString& channelName)
       }
     }
     // If all were deleted, remove the channel from the unjoined list.
-    // TODO: Remove this if removeChannelNick is changed to take care of this.
-    if (allDeleted) unjoinedChannels.remove(lcChannelName);
+    if (allDeleted)
+    {
+      channel = unjoinedChannels[lcChannelName];
+      unjoinedChannels.remove(lcChannelName);
+      delete channel;  // recover memory!
+    }
   }
   if (doSignal) emit channelJoinedOrUnjoined(this, channelName, false);
 }
@@ -1916,40 +1911,41 @@ void Server::removeJoinedChannel(const QString&) {}
 // Renames a nickname in all NickInfo lists.
 // Returns pointer to the NickInfo object or 0 if nick not found.
 #ifdef USE_NICKINFO
-NickInfo* Server::renameNickInfo(const QString& nickname, const QString& newname)
+NickInfoPtr Server::renameNickInfo(const QString& nickname, const QString& newname)
 {
-  NickInfo* nickInfo = getNickInfo(nickname);
+  NickInfoPtr nickInfo = getNickInfo(nickname);
   if (nickInfo)
   {
     // Rename nickname in the NickInfo object.
     nickInfo->setNickname(newname);
     // Rename key in the joined and unjoined lists.
-    QString lcNickname = nickname.lower();
-    QString lcNewname = newname.lower();
+    LocaleString lcNickname = nickname.lower();
+    LocaleString lcNewname = newname.lower();
     QStringList nickChannels = getNickChannels(lcNickname);
     for (unsigned int index=0;index<nickChannels.count();index++)
     {
-      const ChannelNickList* channelNickList = \
                getChannelMembers(nickChannels[index]);
-      ChannelNick* channelNick = \
                const_cast<ChannelNickList*>(channelNickList)->take(lcNickname);
-      const_cast<ChannelNickList*>(channelNickList)->remove(lcNickname);
-      const_cast<ChannelNickList*>(channelNickList)->insert(lcNewname, channelNick);
+      const ChannelNickMapPtr channel = getChannelMembers(nickChannels[index]);
+      ChannelNickPtr member = (*channel)[lcNickname];
+      const_cast<ChannelNickMapPtr>(channel)->remove(lcNickname);
+      const_cast<ChannelNickMapPtr>(channel)->insert(lcNewname, member);
     }
     // Rename key in the Online, Offline, and Query lists.
-    NickInfo* nickInfo = nicknamesOnline.find(lcNickname);
-    if (nickInfo)
+    NickInfoPtr nickInfo;
+    if (nicknamesOnline.contains(lcNickname))
     {
+      nickInfo = nicknamesOnline[lcNickname];
       nicknamesOnline.remove(lcNickname);
       nicknamesOnline.insert(lcNewname, nickInfo);
     }
-    nickInfo = nicknamesOffline.find(lcNickname);
-    if (nickInfo)
+    if (nicknamesOffline.contains(lcNickname))
     {
+      nickInfo = nicknamesOffline[lcNickname];
       nicknamesOffline.remove(lcNickname);
       nicknamesOffline.insert(lcNewname, nickInfo);
     }
-    nickInfo = queryNicks.find(lcNickname);
-    if (nickInfo)
+    if (queryNicks.contains(lcNickname))
     {
+      nickInfo = queryNicks[lcNickname];
       queryNicks.remove(lcNickname);
       queryNicks.insert(lcNewname, nickInfo);
     }
@@ -1959,7 +1955,7 @@ NickInfo* Server::renameNickInfo(const QString& nickname, const \
QString& newname  return nickInfo;
 }
 #else
-NickInfo* Server::renameNickInfo(const QString&, const QString&) { return 0; }
+NickInfoPtr Server::renameNickInfo(const QString&, const QString&) { return 0; }
 #endif
 
 void Server::noMorePendingNicks(const QString& channelName)
@@ -1981,7 +1977,7 @@ void Server::addNickToChannel(const QString &channelName,const \
QString &nickname  (op     ?  4 : 0)+
                       (halfop ?  2 : 0)+
                       (voice  ?  1 : 0);
-  NickInfo* nickInfo = addNickToJoinedChannelsList(channelName, nickname, mode);
+  NickInfoPtr nickInfo = addNickToJoinedChannelsList(channelName, nickname, mode);
   if ((nickInfo->getHostmask() != hostmask) && !hostmask.isEmpty())
   {
     nickInfo->setHostmask(hostmask);
@@ -2007,7 +2003,7 @@ void Server::nickJoinsChannel(const QString &channelName, const \
QString &nicknam  
 #ifdef USE_NICKINFO
     // Update NickInfo.
-    NickInfo* nickInfo = addNickToJoinedChannelsList(channelName, nickname, 99);
+    NickInfoPtr nickInfo = addNickToJoinedChannelsList(channelName, nickname, 99);
     if ((nickInfo->getHostmask() != hostmask) && !hostmask.isEmpty())
     {
       nickInfo->setHostmask(hostmask);
@@ -2033,7 +2029,7 @@ void Server::addHostmaskToNick(const QString& sourceNick, const \
QString& sourceH  
 #ifdef USE_NICKINFO
   // Update NickInfo.
-  NickInfo* nickInfo=getNickInfo(sourceNick);
+  NickInfoPtr nickInfo=getNickInfo(sourceNick);
   if (nickInfo)
   {
     if ((nickInfo->getHostmask() != sourceHostmask) && !sourceHostmask.isEmpty())
@@ -2126,7 +2122,7 @@ void Server::renameNick(const QString &nickname, const QString \
&newNick)  void Server::userhost(const QString& nick,const QString& hostmask,bool \
away,bool /* ircOp */)  {
   addHostmaskToNick(nick,hostmask);
-  NickInfo* nickInfo = getNickInfo(nick);
+  NickInfoPtr nickInfo = getNickInfo(nick);
   if (nickInfo)
   {
     if (nickInfo->isAway() != away)
diff --git a/konversation/server.h b/konversation/server.h
index fa52490..c7887c4 100644
--- a/konversation/server.h
+++ b/konversation/server.h
@@ -18,6 +18,7 @@
 #include <qtimer.h>
 #include <qdatetime.h>
 #include <qdict.h>
+#include <ksharedptr.h>
 
 #include "inputfilter.h"
 #include "outputfilter.h"
@@ -42,20 +43,49 @@ class KonversationMainWindow;
 class RawLog;
 class ChannelListPanel;
 
-// A NickInfoList is a list of NickInfo objects, indexed by lowercase nickname.
-typedef QDict<NickInfo> NickInfoList;
+// A LocaleString is used as a key to a QMap.  Unlike QString, it sorts the QMap
+// in localeAware order.
+class LocaleString : public QString
+{
+  public:
+    LocaleString() : QString() {};
+    LocaleString(const QString& s) : QString(s) {}
+    LocaleString(const LocaleString& s) : QString(s) {}
+    LocaleString& operator=(const QString& s) {
+      QString::operator=(s);
+      return *this; }
+    LocaleString& operator=(const LocaleString& s) { 
+      QString::operator=(s); 
+      return *this; }
+    inline bool operator<( const QString &s1) { return (localeAwareCompare(s1) < 0); \
} +    inline bool operator<( const char *s1) { return (localeAwareCompare(s1) < 0); \
} +    inline bool operator<( QChar c) { return (localeAwareCompare(c) < 0); }
+    inline bool operator<( char ch) { return (localeAwareCompare(&ch) < 0); }
+};
+// A NickInfoPtr is a pointer to a NickInfo object.  Since it is a KSharedPtr, the \
NickInfo +// object is automatically destroyed when all references are destroyed.
+typedef KSharedPtr<NickInfo> NickInfoPtr;
+// A NickInfoMap is a list of NickInfo objects, indexed and sorted by lowercase \
nickname. +typedef QMap<LocaleString,NickInfoPtr> NickInfoMap;
 // A ChannelNick is a user mode and pointer to a NickInfo.
-typedef struct ChannelNick { unsigned int mode; NickInfo* nickInfo; } ChannelNick;
-// A ChannelNickList is a list of ChannelNicks, indexed by lowercase nickname.
-typedef QDict<ChannelNick> ChannelNickList;
-// A ChannelMembershipList is a list of ChannelNickLists, indexed by lowercase \
                channel name.
-typedef QDict<ChannelNickList> ChannelMembershipList;
-// An iterator for a NickInfoList.
-typedef QDictIterator<NickInfo> NickInfoListIterator;
-// An interator for a ChannelNickList.
-typedef QDictIterator<ChannelNick> ChannelNickListIterator;
-// An iterator for a ChannelMembershipList.
-typedef QDictIterator<ChannelNickList> ChannelMembershipListIterator;
+class ChannelNick : public KShared 
+{
+  public:
+    ChannelNick() : mode(0), nickInfo(0) {}
+    ChannelNick(unsigned int m, NickInfoPtr ni) : mode(m), nickInfo(ni) {}
+    unsigned int mode;
+    NickInfoPtr nickInfo;
+};
+// A ChannelNickPtr is a pointer to a ChannelNick.  Since it is a KSharedPtr, the \
ChannelNick +// object is automatically destroyed when all references are destroyed.
+typedef KSharedPtr<ChannelNick> ChannelNickPtr;
+// A ChannelNickMap is a list of ChannelNick pointers, indexed and sorted by \
lowercase nickname. +typedef QMap<LocaleString,ChannelNickPtr> ChannelNickMap;
+// A ChannelNickMapPtr is a pointer to a ChannelNickMap.  Since the combination of a \
channel and a nick +// is unique, don't bother with KSharedPtr.
+typedef ChannelNickMap* ChannelNickMapPtr;
+// A ChannelMembershipMap is a list of ChannelNickMap pointers, indexed and sorted \
by lowercase channel name. +typedef QMap<LocaleString,ChannelNickMapPtr> \
ChannelMembershipMap;  
 class Server : public QObject
 {
@@ -153,39 +183,39 @@ class Server : public QObject
     QString getNumericalIp();
     
     // Given a nickname, returns NickInfo object.  0 if not found.
-    NickInfo* getNickInfo(const QString& nickname);
+    NickInfoPtr getNickInfo(const QString& nickname);
     // Given a nickname, returns an existing NickInfo object, or creates a new \
NickInfo object.  // Returns pointer to the found or created NickInfo object.
-    NickInfo* obtainNickInfo(const QString& nickname);
+    NickInfoPtr obtainNickInfo(const QString& nickname);
     // Anyone who changes the contents of a NickInfo should call this method to let \
server  // know that it has changed.
-    void nickInfoUpdated(const NickInfo* nickInfo);
+    void nickInfoUpdated(const NickInfoPtr nickInfo);
     // Returns the list of members for a channel in the joinedChannels list.
     // 0 if channel is not in the joinedChannels list.
     // Using code must not alter the list.
-    const ChannelNickList* getJoinedChannelMembers(const QString& channelName) \
const; +    const ChannelNickMapPtr getJoinedChannelMembers(const QString& \
                channelName) const;
     // Returns the list of members for a channel in the unjoinedChannels list.
     // 0 if channel is not in the unjoinedChannels list.
     // Using code must not alter the list.
-    const ChannelNickList* getUnjoinedChannelMembers(const QString& channelName) \
const; +    const ChannelNickMapPtr getUnjoinedChannelMembers(const QString& \
                channelName) const;
     // Searches the Joined and Unjoined lists for the given channel and returns the \
member list.  // 0 if channel is not in either list.
     // Using code must not alter the list.
-    const ChannelNickList* getChannelMembers(const QString& channelName) const;
+    const ChannelNickMapPtr getChannelMembers(const QString& channelName) const;
     // Returns a list of all the channels (joined or unjoined) that a nick is in.
     QStringList getNickChannels(QString& nickname);
     // Returns pointer to the ChannelNick (mode and pointer to NickInfo) for a given \
channel and nickname.  // 0 if not found.
-    ChannelNick* getChannelNick(const QString& channelName, const QString& \
nickname); +    ChannelNickPtr getChannelNick(const QString& channelName, const \
                QString& nickname);
     // Updates a nickname in a channel.  If not on the joined or unjoined lists, and \
                nick
     // is in the watch list, adds the channel and nick to the unjoinedChannels list.
     // If mode != 99, sets the mode for the nick in the channel.
     // Returns the NickInfo object if nick is on any lists, otherwise 0.
-    NickInfo* setChannelNick(const QString& channelName, const QString& nickname, \
unsigned int mode = 99); +    NickInfoPtr setChannelNick(const QString& channelName, \
const QString& nickname, unsigned int mode = 99);  // Returns a list of the nicks on \
                the watch list that are online.
-    const NickInfoList* getNicksOnline();
+    const NickInfoMap* getNicksOnline();
     // Returns a list of the nicks on the watch list that are offline.
-    const NickInfoList* getNicksOffline();
+    const NickInfoMap* getNicksOffline();
 
   signals:
     void nicknameChanged(const QString&);
@@ -202,9 +232,9 @@ class Server : public QObject
     void serverOnline(bool state); // will be connected to all server dependant tabs
     // Note that these signals haven't been implemented yet.
     // Fires when the information in a NickInfo object changes.
-    void nickInfoChanged(Server* server, const NickInfo* nickInfo);
+    void nickInfoChanged(Server* server, const NickInfoPtr nickInfo);
     // Fires when the mode of a nick in a channel changes.
-    void channelNickChanged(Server* server, const ChannelNick* channelNick);
+    void channelNickChanged(Server* server, const ChannelNickPtr channelNick);
     // Fires when a nick leaves or joins a channel.  Based on joined flag, receiver \
could  // call getJoinedChannelMembers or getUnjoinedChannelMembers, or just
     // getChannelMembers to get a list of all the nicks now in the channel.
@@ -215,7 +245,7 @@ class Server : public QObject
     // possible the channel does not exist in any list anymore.
     void channelJoinedOrUnjoined(Server* server, const QString& channelName, bool \
joined);  // Fires when a nick on the watch list goes online or offline.
-    void watchedNickChanged(Server* server, const NickInfo* nickInfo, bool online);
+    void watchedNickChanged(Server* server, const NickInfoPtr nickInfo, bool \
online);  
   public slots:
     void connectToIRCServer();
@@ -301,23 +331,23 @@ class Server : public QObject
     // If needed, moves the nickname from the Offline to Online lists.
     // If mode != 99 sets the mode for this nick in this channel.
     // Returns the NickInfo for the nickname.
-    NickInfo* addNickToJoinedChannelsList(const QString& channelName, const QString& \
nickname, unsigned int mode = 99); +    NickInfoPtr addNickToJoinedChannelsList(const \
QString& channelName, const QString& nickname, unsigned int mode = 99);  // Adds a \
nickname to the unjoinedChannels list.  // Creates new NickInfo if necessary.
     // If needed, moves the channel from the joined list to the unjoined list.
     // If needed, moves the nickname from the Offline to the Online list.
     // If mode != 99 sets the mode for this nick in this channel.
     // Returns the NickInfo for the nickname.
-    NickInfo* addNickToUnjoinedChannelsList(const QString& channelName, const \
QString& nickname, unsigned int mode = 99); +    NickInfoPtr \
addNickToUnjoinedChannelsList(const QString& channelName, const QString& nickname, \
                unsigned int mode = 99);
     // Adds a nickname to the Online list, removing it from the Offline list, if \
present.  // Returns the NickInfo of the nickname.
     // Creates new NickInfo if necessary.
-    NickInfo* addNickToOnlineList(const QString& nickname);
+    NickInfoPtr addNickToOnlineList(const QString& nickname);
     // Adds a nickname to the Offline list provided it is on the watch list,
     // removing it from the Online list, if present.
     // Returns the NickInfo of the nickname or 0 if deleted altogether.
     // Creates new NickInfo if necessary.
-    NickInfo* addNickToOfflineList(const QString& nickname, const QStringList& \
watchList); +    NickInfoPtr addNickToOfflineList(const QString& nickname, const \
QStringList& watchList);  // Remove nickname from a channel (on joined or unjoined \
lists).  // Delete the nickname altogether if no longer on any lists.
     void removeChannelNick(const QString& channelName, const QString& nickname);
@@ -326,7 +356,7 @@ class Server : public QObject
     void removeJoinedChannel(const QString& channelName);
     // Renames a nickname in all NickInfo lists.
     // Returns pointer to the NickInfo object or 0 if nick not found.
-    NickInfo* renameNickInfo(const QString& nickname, const QString& newname);
+    NickInfoPtr renameNickInfo(const QString& nickname, const QString& newname);
 
     unsigned int completeQueryPosition;
     unsigned int tryNickNumber;
@@ -395,19 +425,19 @@ class Server : public QObject
     QString nonAwayNick;
     
     // All nicks known to this server.  Note this is NOT a list of all nicks on the \
                server.
-    NickInfoList allNicks;
+    NickInfoMap allNicks;
     // List of membership lists for joined channels.  A "joined" channel is a \
channel that user has joined, i.e.,  // a tab appears for the channel in the main \
                window.
-    ChannelMembershipList joinedChannels;
+    ChannelMembershipMap joinedChannels;
     // List of membership lists for unjoined channels.  These come from WHOIS \
                responses.  Note that this is NOT
     // a list of all channels on the server, just those we are interested in because \
                of nicks in the Nick Watch List.
-    ChannelMembershipList unjoinedChannels;
+    ChannelMembershipMap unjoinedChannels;
     // List of nicks in the Nick Watch List that are online.
-    NickInfoList nicknamesOnline;
+    NickInfoMap nicknamesOnline;
     // List of nicks in the Nick Watch List that are not online.
-    NickInfoList nicknamesOffline;
+    NickInfoMap nicknamesOffline;
     // List of nicks in Queries.
-    NickInfoList queryNicks;
+    NickInfoMap queryNicks;
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic