Changeset 6284 for trunk/qt-gui/src/mainwin.cpp
- Timestamp:
- 06/14/08 03:48:20 (7 months ago)
- Files:
-
- 1 modified
-
trunk/qt-gui/src/mainwin.cpp (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/qt-gui/src/mainwin.cpp
r6280 r6284 1484 1484 if (m_bThreadView && m_nGroupType == GROUPS_USER && m_nCurrentGroup == 0) 1485 1485 { 1486 CUserViewItem* i = userView->firstChild(); 1487 1488 while (i) 1486 for (CUserViewItem* i = userView->firstChild(); i != NULL; i = i->nextSibling()) 1489 1487 { 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()) 1491 1498 { 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) 1495 1504 { 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; 1515 1507 } 1516 1508 } 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); 1518 1513 } 1519 1514 } … … 1748 1743 case LIST_GROUP_REMOVED: 1749 1744 case LIST_GROUP_CHANGED: 1745 case LIST_GROUP_REORDERED: 1750 1746 updateGroups(); 1751 1747 updateUserWin(); … … 1809 1805 if (doGroupView) 1810 1806 { 1811 CUserViewItem* gi = new CUserViewItem(0, tr("Other Users").local8Bit(), userView);1807 CUserViewItem* gi = new CUserViewItem(0, tr("Other Users").local8Bit(), 65535, userView); 1812 1808 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 1820 1817 } 1821 1818 FOR_EACH_USER_START(LOCK_R) … … 1835 1832 { 1836 1833 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())) 1838 1835 (void) new CUserViewItem(pUser, gi); 1839 1836 } … … 1924 1921 void CMainWindow::setCurrentGroup(int index) 1925 1922 { 1926 m_nCurrentGroup = index;1927 m_nGroupType = GROUPS_USER;1928 1923 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; 1932 1927 m_nGroupType = GROUPS_SYSTEM; 1928 } 1929 else 1930 { 1931 m_nCurrentGroup = myGroupIds[index]; 1932 m_nGroupType = GROUPS_USER; 1933 1933 } 1934 1934 // Update the combo box … … 1959 1959 mnuGroup->clear(); 1960 1960 mnuServerGroup->clear(); 1961 myGroupIds.clear(); 1961 1962 1962 1963 QString group = Strings::getSystemGroupName(GROUP_ALL_USERS); … … 1964 1965 mnuUserGroups->insertItem(group); 1965 1966 mnuUserGroups->insertSeparator(); 1967 myGroupIds.push_back(0); 1966 1968 1967 1969 // take care of this first … … 1969 1971 mnuGroup->insertSeparator(); 1970 1972 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 1980 1985 mnuUserGroups->insertSeparator(); 1981 1986 mnuGroup->insertSeparator(); … … 1997 2002 } 1998 2003 1999 int index = m_nCurrentGroup;2004 unsigned short index = 0; 2000 2005 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; 2002 2011 setCurrentGroup(index); 2003 2012 } … … 3270 3279 mnuGroup->setItemChecked(1000+GROUP_NEW_USERS, u->NewUser()); 3271 3280 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])); 3276 3283 gUserManager.DropUser(u); 3277 3284 } … … 3282 3289 bool add = mnuGroup->isItemChecked(id); 3283 3290 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); 3285 3292 3286 3293 if (gtype == GROUPS_SYSTEM && groupId == GROUP_IGNORE_LIST && add) … … 3302 3309 RemoveUserFromGroup(gtype, groupId, m_szUserMenuId, m_nUserMenuPPID, this); 3303 3310 else 3304 {3305 3311 gUserManager.SetUserInGroup(m_szUserMenuId, m_nUserMenuPPID, 3306 3312 gtype, groupId, true, false); 3307 updateUserWin();3308 }3309 3313 } 3310 3314 … … 3326 3330 gUserManager.DropUser(u); 3327 3331 3328 GroupList* g = gUserManager.LockGroupList(LOCK_R);3332 LicqGroup* g = gUserManager.FetchGroup(group, LOCK_R); 3329 3333 if (g == NULL) 3330 3334 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); 3333 3337 3334 3338 QString warning(tr("Are you sure you want to remove\n%1 (%2)\nfrom the '%3' group?") … … 3340 3344 3341 3345 gUserManager.SetUserInGroup(id, ppid, gtype, group, false); 3342 updateUserWin();3343 3346 return true; 3344 3347 } … … 3352 3355 for (uint index = 0; index < mnuServerGroup->count(); index++) 3353 3356 { 3354 const int id = mnuServerGroup->idAt(index); 3355 const QCString text = mnuServerGroup->text(id).local8Bit(); 3357 int id = mnuServerGroup->idAt(index); 3356 3358 3357 3359 bool checked = false; 3358 if (u->GetSID() && (u->GetGSID() == gUserManager.GetIDFromGroup( text.data())))3360 if (u->GetSID() && (u->GetGSID() == gUserManager.GetIDFromGroup(myGroupIds[id]))) 3359 3361 checked = true; 3360 3362 … … 3372 3374 if (u == NULL) return; 3373 3375 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++) 3376 3377 mnuServerGroup->setItemChecked(i+1, (int)(i+1) == n); 3377 3378 3378 gUserManager.UnlockGroupList();3379 3379 gUserManager.DropUser(u); 3380 3380 3381 3381 gUserManager.SetUserInGroup(m_szUserMenuId, m_nUserMenuPPID, GROUPS_USER, 3382 3382 n, true, true); 3383 updateUserWin();3384 3383 } 3385 3384 … … 4697 4696 void CMainWindow::showEditGrpDlg() 4698 4697 { 4699 EditGrpDlg *d = new EditGrpDlg ;4698 EditGrpDlg *d = new EditGrpDlg(licqSigMan); 4700 4699 connect (d, SIGNAL(signal_updateGroups()), this, SLOT(updateGroups())); 4701 4700 d->show();
