Show
Ignore:
Timestamp:
06/14/08 03:48:20 (7 months ago)
Author:
flynd
Message:

Updated to work with new group handling. Contact list is now updated when groups are changed from other plugins.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/qt-gui/src/mainwin.cpp

    r6280 r6284  
    14841484      if (m_bThreadView && m_nGroupType == GROUPS_USER && m_nCurrentGroup == 0) 
    14851485      { 
    1486         CUserViewItem* i = userView->firstChild(); 
    1487  
    1488         while (i) 
     1486        for (CUserViewItem* i = userView->firstChild(); i != NULL; i = i->nextSibling()) 
    14891487        { 
    1490           if (u->GetInGroup(GROUPS_USER, i->GroupId())) 
     1488          unsigned short groupId = i->GroupId(); 
     1489 
     1490          // Should user be shown in this group 
     1491          bool showInGroup = show_user(u) & 
     1492              ((groupId != 0 && u->GetInGroup(GROUPS_USER, groupId)) || 
     1493              (groupId == 0 && u->GetGroups().empty() && !u->IgnoreList())); 
     1494 
     1495 
     1496          // Remove old user item if present 
     1497          for (CUserViewItem* it = i->firstChild(); it != NULL; it = it->nextSibling()) 
    14911498          { 
    1492             CUserViewItem* it = i->firstChild(); 
    1493  
    1494             while (it) 
     1499            char* szRealId = 0; 
     1500            ICQUser::MakeRealId(it->ItemId(), it->ItemPPID(), szRealId); 
     1501            bool equal = strcasecmp(szRealId, szId) == 0 && it->ItemPPID() == nPPID; 
     1502            delete [] szRealId; 
     1503            if (equal) 
    14951504            { 
    1496               char *szRealId = 0; 
    1497               ICQUser::MakeRealId(it->ItemId(), it->ItemPPID(), szRealId); 
    1498               if(strcasecmp(szRealId, szId) == 0 && it->ItemPPID() == nPPID) 
    1499               { 
    1500                 delete it; 
    1501                 delete [] szRealId; 
    1502                 if (show_user(u)) 
    1503                   (void) new CUserViewItem(u, i); 
    1504                 break; 
    1505               } 
    1506               delete [] szRealId; 
    1507               it = it->nextSibling(); 
    1508             } 
    1509             if (it == NULL) 
    1510             { 
    1511               if ( show_user(u) & 
    1512                    ((i->GroupId() != 0 && u->GetInGroup(GROUPS_USER, i->GroupId())) || 
    1513                     (i->GroupId() == 0 && u->GetGroups(GROUPS_USER) == 0 && !u->IgnoreList()))) 
    1514                 (void) new CUserViewItem(u, i); 
     1505              delete it; 
     1506              break; 
    15151507            } 
    15161508          } 
    1517           i = i->nextSibling(); 
     1509 
     1510          // If user should be shown in group, create a new item 
     1511          if (showInGroup) 
     1512            (void) new CUserViewItem(u, i); 
    15181513        } 
    15191514      } 
     
    17481743    case LIST_GROUP_REMOVED: 
    17491744    case LIST_GROUP_CHANGED: 
     1745    case LIST_GROUP_REORDERED: 
    17501746      updateGroups(); 
    17511747      updateUserWin(); 
     
    18091805  if (doGroupView) 
    18101806  { 
    1811     CUserViewItem* gi = new CUserViewItem(0, tr("Other Users").local8Bit(), userView); 
     1807    CUserViewItem* gi = new CUserViewItem(0, tr("Other Users").local8Bit(), 65535, userView); 
    18121808    gi->setOpen(m_nGroupStates & 1); 
    1813     GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    1814     for (unsigned short i = 0; i < g->size(); i++) 
    1815     { 
    1816       gi = new CUserViewItem(i+1, (*g)[i], userView); 
    1817       gi->setOpen(m_nGroupStates & (1<<QMIN(i+1, 31))); 
    1818     } 
    1819     gUserManager.UnlockGroupList(); 
     1809    int i = 1; 
     1810    FOR_EACH_GROUP_START_SORTED(LOCK_R) 
     1811    { 
     1812      gi = new CUserViewItem(pGroup->id(), pGroup->name().c_str(), pGroup->sortIndex(), userView); 
     1813      gi->setOpen(m_nGroupStates & (1<<QMIN(pGroup->id(), 31))); 
     1814      ++i; 
     1815    } 
     1816    FOR_EACH_GROUP_END 
    18201817  } 
    18211818  FOR_EACH_USER_START(LOCK_R) 
     
    18351832      { 
    18361833        if((gi->GroupId() != 0 && pUser->GetInGroup(GROUPS_USER, gi->GroupId())) || 
    1837            (gi->GroupId() == 0 && pUser->GetGroups(GROUPS_USER) == 0 && !pUser->IgnoreList())) 
     1834           (gi->GroupId() == 0 && pUser->GetGroups().empty() && !pUser->IgnoreList())) 
    18381835          (void) new CUserViewItem(pUser, gi); 
    18391836      } 
     
    19241921void CMainWindow::setCurrentGroup(int index) 
    19251922{ 
    1926   m_nCurrentGroup = index; 
    1927   m_nGroupType = GROUPS_USER; 
    19281923  unsigned short nNumGroups = gUserManager.NumGroups(); 
    1929   if (m_nCurrentGroup > nNumGroups) 
    1930   { 
    1931     m_nCurrentGroup -= nNumGroups; 
     1924  if (index > nNumGroups) 
     1925  { 
     1926    m_nCurrentGroup = index - nNumGroups; 
    19321927    m_nGroupType = GROUPS_SYSTEM; 
     1928  } 
     1929  else 
     1930  { 
     1931    m_nCurrentGroup = myGroupIds[index]; 
     1932    m_nGroupType = GROUPS_USER; 
    19331933  } 
    19341934  // Update the combo box 
     
    19591959  mnuGroup->clear(); 
    19601960  mnuServerGroup->clear(); 
     1961  myGroupIds.clear(); 
    19611962 
    19621963  QString group = Strings::getSystemGroupName(GROUP_ALL_USERS); 
     
    19641965  mnuUserGroups->insertItem(group); 
    19651966  mnuUserGroups->insertSeparator(); 
     1967  myGroupIds.push_back(0); 
    19661968 
    19671969  // take care of this first 
     
    19691971  mnuGroup->insertSeparator(); 
    19701972 
    1971   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    1972   for (unsigned short i = 0; i < g->size(); i++) 
    1973   { 
    1974     cmbUserGroups->insertItem(QString::fromLocal8Bit((*g)[i])); 
    1975     mnuUserGroups->insertItem(QString::fromLocal8Bit((*g)[i])); 
    1976     mnuGroup->insertItem(QString::fromLocal8Bit((*g)[i]), i+1); 
    1977     mnuServerGroup->insertItem(QString::fromLocal8Bit((*g)[i]), i+1); 
    1978   } 
    1979   gUserManager.UnlockGroupList(); 
     1973  unsigned short i = 0; 
     1974  FOR_EACH_GROUP_START_SORTED(LOCK_R) 
     1975  { 
     1976    myGroupIds.push_back(pGroup->id()); 
     1977    QString name = QString::fromLocal8Bit(pGroup->name().c_str()); 
     1978    cmbUserGroups->insertItem(name); 
     1979    mnuUserGroups->insertItem(name); 
     1980    mnuGroup->insertItem(name, i+1); 
     1981    mnuServerGroup->insertItem(name, i+1); 
     1982    ++i; 
     1983  } 
     1984  FOR_EACH_GROUP_END 
    19801985  mnuUserGroups->insertSeparator(); 
    19811986  mnuGroup->insertSeparator(); 
     
    19972002  } 
    19982003 
    1999   int index = m_nCurrentGroup; 
     2004  unsigned short index = 0; 
    20002005  if (m_nGroupType == GROUPS_SYSTEM) 
    2001     index += gUserManager.NumGroups(); 
     2006    index = m_nCurrentGroup + gUserManager.NumGroups(); 
     2007  else 
     2008    for (unsigned short i = 0; i < myGroupIds.size(); ++i) 
     2009      if (myGroupIds[i] == m_nCurrentGroup) 
     2010        index = i; 
    20022011  setCurrentGroup(index); 
    20032012} 
     
    32703279  mnuGroup->setItemChecked(1000+GROUP_NEW_USERS, u->NewUser()); 
    32713280 
    3272   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    3273   for (unsigned short i = 0; i < g->size(); i++) 
    3274     mnuGroup->setItemChecked(i+1, u->GetInGroup(GROUPS_USER, i+1)); 
    3275   gUserManager.UnlockGroupList(); 
     3281  for (unsigned short i = 0; i < myGroupIds.size()-1; i++) 
     3282    mnuGroup->setItemChecked(i+1, u->GetInGroup(GROUPS_USER, myGroupIds[i+1])); 
    32763283  gUserManager.DropUser(u); 
    32773284} 
     
    32823289  bool add = mnuGroup->isItemChecked(id); 
    32833290  GroupType gtype = (id < 1000 ? GROUPS_USER : GROUPS_SYSTEM); 
    3284   unsigned short groupId = (id < 1000 ? id : id - 1000); 
     3291  unsigned short groupId = (id < 1000 ? myGroupIds[id] : id - 1000); 
    32853292 
    32863293  if (gtype == GROUPS_SYSTEM && groupId == GROUP_IGNORE_LIST && add) 
     
    33023309    RemoveUserFromGroup(gtype, groupId, m_szUserMenuId, m_nUserMenuPPID, this); 
    33033310  else 
    3304   { 
    33053311    gUserManager.SetUserInGroup(m_szUserMenuId, m_nUserMenuPPID, 
    33063312        gtype, groupId, true, false); 
    3307     updateUserWin(); 
    3308   } 
    33093313} 
    33103314 
     
    33263330    gUserManager.DropUser(u); 
    33273331 
    3328     GroupList* g = gUserManager.LockGroupList(LOCK_R); 
     3332    LicqGroup* g = gUserManager.FetchGroup(group, LOCK_R); 
    33293333    if (g == NULL) 
    33303334      return true; 
    3331     QString groupName = QString::fromLocal8Bit((*g)[group - 1]); 
    3332     gUserManager.UnlockGroupList(); 
     3335    QString groupName = QString::fromLocal8Bit(g->name().c_str()); 
     3336    gUserManager.DropGroup(g); 
    33333337 
    33343338    QString warning(tr("Are you sure you want to remove\n%1 (%2)\nfrom the '%3' group?") 
     
    33403344 
    33413345  gUserManager.SetUserInGroup(id, ppid, gtype, group, false); 
    3342   updateUserWin(); 
    33433346  return true; 
    33443347} 
     
    33523355  for (uint index = 0; index < mnuServerGroup->count(); index++) 
    33533356  { 
    3354     const int id = mnuServerGroup->idAt(index); 
    3355     const QCString text = mnuServerGroup->text(id).local8Bit(); 
     3357    int id = mnuServerGroup->idAt(index); 
    33563358 
    33573359    bool checked = false; 
    3358     if (u->GetSID() && (u->GetGSID() == gUserManager.GetIDFromGroup(text.data()))) 
     3360    if (u->GetSID() && (u->GetGSID() == gUserManager.GetIDFromGroup(myGroupIds[id]))) 
    33593361      checked = true; 
    33603362 
     
    33723374  if (u == NULL) return; 
    33733375 
    3374   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    3375   for (unsigned int i = 0; i < g->size(); i++) 
     3376  for (unsigned int i = 0; i < myGroupIds.size()-1; i++) 
    33763377    mnuServerGroup->setItemChecked(i+1, (int)(i+1) == n); 
    33773378 
    3378   gUserManager.UnlockGroupList(); 
    33793379  gUserManager.DropUser(u); 
    33803380 
    33813381  gUserManager.SetUserInGroup(m_szUserMenuId, m_nUserMenuPPID, GROUPS_USER, 
    33823382      n, true, true); 
    3383   updateUserWin(); 
    33843383} 
    33853384 
     
    46974696void CMainWindow::showEditGrpDlg() 
    46984697{ 
    4699   EditGrpDlg *d = new EditGrpDlg; 
     4698  EditGrpDlg *d = new EditGrpDlg(licqSigMan); 
    47004699  connect (d, SIGNAL(signal_updateGroups()), this, SLOT(updateGroups())); 
    47014700  d->show();