Show
Ignore:
Timestamp:
06/11/08 08:21:55 (7 months ago)
Author:
eugene
Message:

Applied the latest version of flynd's qt-gui patch.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/qt-gui_group/src/mainwin.cpp

    r6235 r6258  
    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); 
     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); 
    18171813      gi->setOpen(m_nGroupStates & (1<<QMIN(i+1, 31))); 
    1818     } 
    1819     gUserManager.UnlockGroupList(); 
     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} 
     
    32843291    // User groups 
    32853292    if(mnuGroup->isItemChecked(id)) 
    3286       RemoveUserFromGroup(GROUPS_USER, id, m_szUserMenuId, m_nUserMenuPPID, this); 
     3293      RemoveUserFromGroup(GROUPS_USER, myGroupIds[id], m_szUserMenuId, m_nUserMenuPPID, this); 
    32873294    else { 
    3288       gUserManager.AddUserToGroup(m_szUserMenuId, m_nUserMenuPPID, id); 
     3295      gUserManager.AddUserToGroup(m_szUserMenuId, m_nUserMenuPPID, myGroupIds[id]); 
    32893296      updateUserWin(); 
    32903297    } 
     
    33573364      ICQUser *u = gUserManager.FetchUser(szId, nPPID, LOCK_R); 
    33583365      if (u == NULL) return true; 
    3359       GroupList *g = gUserManager.LockGroupList(LOCK_R); 
     3366      LicqGroup* g = gUserManager.FetchGroup(group, LOCK_R); 
     3367      if (g == NULL) 
     3368      { 
     3369        gUserManager.DropUser(u); 
     3370        return true; 
     3371      } 
    33603372      QString warning(tr("Are you sure you want to remove\n%1 (%2)\nfrom the '%3' group?") 
    33613373                         .arg(QString::fromUtf8(u->GetAlias())) 
    3362                          .arg(u->IdString()).arg(QString::fromLocal8Bit( (*g)[group - 1] )) ); 
    3363       gUserManager.UnlockGroupList(); 
     3374                         .arg(u->IdString()).arg(QString::fromLocal8Bit(g->name().c_str())) ); 
     3375      gUserManager.DropGroup(g); 
    33643376      gUserManager.DropUser(u); 
    33653377      if (QueryUser(p, warning, tr("Ok"), tr("Cancel"))) 
     
    34133425  if (u == NULL) return; 
    34143426 
    3415   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    3416   for (unsigned int i = 0; i < g->size(); i++) 
     3427  for (unsigned int i = 0; i < myGroupIds.size()-1; i++) 
    34173428    mnuServerGroup->setItemChecked(i+1, (int)(i+1) == n); 
    34183429 
    3419   gUserManager.UnlockGroupList(); 
    34203430  gUserManager.DropUser(u); 
    34213431 
    3422   gUserManager.AddUserToGroup(m_szUserMenuId, m_nUserMenuPPID, n); 
     3432  gUserManager.AddUserToGroup(m_szUserMenuId, m_nUserMenuPPID, myGroupIds[n]); 
    34233433  updateUserWin(); 
    34243434} 
     
    47374747void CMainWindow::showEditGrpDlg() 
    47384748{ 
    4739   EditGrpDlg *d = new EditGrpDlg; 
     4749  EditGrpDlg *d = new EditGrpDlg(licqSigMan); 
    47404750  connect (d, SIGNAL(signal_updateGroups()), this, SLOT(updateGroups())); 
    47414751  d->show();