Changeset 6284

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

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

Location:
trunk/qt-gui/src
Files:
6 modified

Legend:

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

    r5514 r6284  
    3030#include <qtoolbutton.h> 
    3131 
     32#include <licq_events.h> 
     33#include <licq_user.h> 
     34 
    3235#include "editgrp.h" 
    3336#include "ewidgets.h" 
    3437#include "gui-strings.h" 
    3538#include "licq_user.h" 
    36  
    37 EditGrpDlg::EditGrpDlg(QWidget *parent) 
     39#include "sigman.h" 
     40 
     41EditGrpDlg::EditGrpDlg(CSignalManager* signalManager, QWidget *parent) 
    3842  : QWidget(parent, "EditGroupDialog") 
    3943{ 
     
    99103 
    100104  RefreshList(); 
     105  connect(signalManager, SIGNAL(signal_updatedList(CICQSignal*)), 
     106      this, SLOT(listUpdated(CICQSignal*))); 
    101107 
    102108  connect(btnAdd, SIGNAL(clicked()), this, SLOT(slot_add())); 
     
    107113  connect(btnNewUser, SIGNAL(clicked()), this, SLOT(slot_newuser())); 
    108114  connect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_edit())); 
    109   connect(btnDone, SIGNAL(clicked()), this, SLOT(slot_done())); 
     115  connect(btnDone, SIGNAL(clicked()), this, SLOT(close())); 
    110116  connect(edtName, SIGNAL(returnPressed()), this, SLOT(slot_editok())); 
    111117  connect(btnSave, SIGNAL(clicked()), this, SLOT(slot_editok())); 
    112118} 
    113119 
     120unsigned short EditGrpDlg::currentGroupId() const 
     121{ 
     122  if (lstGroups->currentItem() == -1) 
     123    return 0; 
     124 
     125  return myGroupIds[lstGroups->currentItem()]; 
     126} 
     127 
     128void EditGrpDlg::setCurrentGroupId(unsigned short groupId) 
     129{ 
     130  for (unsigned i = 0; i < lstGroups->count(); ++i) 
     131    if (myGroupIds[i] == groupId) 
     132    { 
     133      lstGroups->setCurrentItem(i); 
     134      break; 
     135    } 
     136} 
    114137 
    115138void EditGrpDlg::RefreshList() 
    116139{ 
     140  unsigned short groupId = currentGroupId(); 
    117141  lstGroups->clear(); 
     142  myGroupIds.clear(); 
    118143 
    119144  const QString allUsers = Strings::getSystemGroupName(GROUP_ALL_USERS); 
    120145 
    121146  lstGroups->insertItem(allUsers); 
     147  myGroupIds.push_back(0); 
     148 
    122149  if (gUserManager.DefaultGroup() == GROUP_ALL_USERS) 
    123150    nfoDefault->setText(allUsers); 
     
    125152    nfoNewUser->setText(allUsers); 
    126153 
    127   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    128   for (unsigned short i = 0; i < g->size(); i++) 
     154  FOR_EACH_GROUP_START_SORTED(LOCK_R) 
    129155  { 
    130     lstGroups->insertItem(QString::fromLocal8Bit((*g)[i])); 
    131     if (i + 1 == gUserManager.DefaultGroup()) 
    132       nfoDefault->setText(QString::fromLocal8Bit((*g)[i])); 
    133     if (i + 1== gUserManager.NewUserGroup()) 
    134       nfoNewUser->setText(QString::fromLocal8Bit((*g)[i])); 
     156    QString name = QString::fromLocal8Bit(pGroup->name().c_str()); 
     157    lstGroups->insertItem(name); 
     158    myGroupIds.push_back(pGroup->id()); 
     159 
     160    if (gUserManager.DefaultGroup() == pGroup->id()) 
     161      nfoDefault->setText(name); 
     162 
     163    if (gUserManager.NewUserGroup() == pGroup->id()) 
     164      nfoNewUser->setText(name); 
    135165  } 
    136   gUserManager.UnlockGroupList(); 
     166  FOR_EACH_GROUP_END 
     167 
     168  setCurrentGroupId(groupId); 
     169} 
     170 
     171void EditGrpDlg::listUpdated(CICQSignal* sig) 
     172{ 
     173  switch (sig->SubSignal()) 
     174  { 
     175    case LIST_GROUP_ADDED: 
     176    case LIST_GROUP_REMOVED: 
     177    case LIST_GROUP_CHANGED: 
     178    case LIST_GROUP_REORDERED: 
     179 
     180    case LIST_INVALIDATE: 
     181      if (btnSave->isEnabled()) 
     182        slot_editcancel(); 
     183      RefreshList(); 
     184      break; 
     185  } 
    137186} 
    138187 
    139188void EditGrpDlg::slot_add() 
    140189{ 
    141   gUserManager.AddGroup(strdup(tr("noname").local8Bit())); 
    142   RefreshList(); 
    143   lstGroups->setCurrentItem(lstGroups->count()-1); 
    144   slot_edit(); 
    145 } 
    146  
    147  
    148 void EditGrpDlg::slot_remove() 
    149 { 
    150   int n = lstGroups->currentItem(); 
    151   // don't allow the default group #0 "All Users" to be deleted 
    152   // don't try to delete if there is no current Item (currentItem() == -1) 
    153   if (n < 1) return; 
    154  
    155   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    156   QString warning(tr("Are you sure you want to remove\n" 
    157                      "the group '%1'?").arg(QString::fromLocal8Bit((*g)[n-1]))); 
    158   gUserManager.UnlockGroupList(); 
    159  
    160   if(QueryUser(this, warning, tr("Ok"), tr("Cancel"))) { 
    161     gUserManager.RemoveGroup(n); 
    162     RefreshList(); 
    163     lstGroups->setCurrentItem(n - 1); 
    164   } 
    165 } 
    166  
    167  
    168 void EditGrpDlg::slot_up() 
    169 { 
    170   int n = lstGroups->currentItem() - 1; 
    171   if (n <= 0) return; 
    172   gUserManager.SwapGroups(n + 1, n); 
    173   RefreshList(); 
    174   lstGroups->setCurrentItem(n); 
    175 } 
    176  
    177  
    178 void EditGrpDlg::slot_down() 
    179 { 
    180   int n = lstGroups->currentItem() - 1; 
    181   if (n < 0 /* || n == max */) return; 
    182   gUserManager.SwapGroups(n + 1, n + 2); 
    183   RefreshList(); 
    184   if (n + 2 >= int(lstGroups->count())) 
    185     lstGroups->setCurrentItem(lstGroups->count() - 1); 
    186   else 
    187     lstGroups->setCurrentItem(n + 2); 
    188 } 
    189  
    190  
    191 void EditGrpDlg::slot_default() 
    192 { 
    193   int n = lstGroups->currentItem(); 
    194   if (n == -1) return; 
    195   gUserManager.SetDefaultGroup(n); 
    196   RefreshList(); 
    197   lstGroups->setCurrentItem(n); 
    198 } 
    199  
    200 void EditGrpDlg::slot_newuser() 
    201 { 
    202   int n = lstGroups->currentItem(); 
    203   if (n == -1 ) return; 
    204   gUserManager.SetNewUserGroup(n); 
    205   RefreshList(); 
    206   lstGroups->setCurrentItem(n); 
    207 } 
    208  
    209 void EditGrpDlg::slot_edit() 
    210 { 
    211   int n = lstGroups->currentItem() - 1; 
    212   if (n < 0) return; 
     190  // Don't add group until user has had a chance to set a name for it 
     191  myEditGroupId = 0; 
     192  lstGroups->setCurrentItem(-1); 
     193 
    213194  btnSave->setEnabled(true); 
    214195  btnDone->setEnabled(false); 
    215196  edtName->setEnabled(true); 
    216   GroupList *g = gUserManager.LockGroupList(LOCK_R); 
    217   edtName->setText(QString::fromLocal8Bit((*g)[n])); 
     197  edtName->setText(tr("noname")); 
    218198  edtName->setFocus(); 
    219   gUserManager.UnlockGroupList(); 
    220   m_nEditGrp = n + 1; 
    221199  btnEdit->setText(tr("Cancel")); 
    222200  disconnect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_edit())); 
    223201  connect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_editcancel())); 
    224202  lstGroups->setEnabled(false); 
    225 } 
    226  
     203  btnSave->setDefault(true); 
     204} 
     205 
     206void EditGrpDlg::slot_remove() 
     207{ 
     208  unsigned short groupId = currentGroupId(); 
     209  if (groupId == 0) 
     210    return; 
     211 
     212  QString warning(tr("Are you sure you want to remove\n" 
     213                     "the group '%1'?").arg(lstGroups->currentText())); 
     214 
     215  if(QueryUser(this, warning, tr("Ok"), tr("Cancel"))) { 
     216    gUserManager.RemoveGroup(groupId); 
     217    RefreshList(); 
     218  } 
     219} 
     220 
     221void EditGrpDlg::moveGroup(int delta) 
     222{ 
     223  unsigned short groupId = currentGroupId(); 
     224  if (groupId == 0) 
     225    return; 
     226 
     227  LicqGroup* group = gUserManager.FetchGroup(groupId, LOCK_R); 
     228  if (group == NULL) 
     229    return; 
     230  unsigned short oldSortIndex = group->sortIndex(); 
     231  gUserManager.DropGroup(group); 
     232 
     233  if (delta + oldSortIndex < 0) 
     234    return; 
     235 
     236  gUserManager.ModifyGroupSorting(groupId, oldSortIndex + delta); 
     237  RefreshList(); 
     238} 
     239 
     240void EditGrpDlg::slot_up() 
     241{ 
     242  moveGroup(-1); 
     243} 
     244 
     245void EditGrpDlg::slot_down() 
     246{ 
     247  moveGroup(1); 
     248} 
     249 
     250void EditGrpDlg::slot_default() 
     251{ 
     252  gUserManager.SetDefaultGroup(currentGroupId()); 
     253  RefreshList(); 
     254} 
     255 
     256void EditGrpDlg::slot_newuser() 
     257{ 
     258  gUserManager.SetNewUserGroup(currentGroupId()); 
     259  RefreshList(); 
     260} 
     261 
     262void EditGrpDlg::slot_edit() 
     263{ 
     264  myEditGroupId = currentGroupId(); 
     265  if (myEditGroupId == 0) 
     266    return; 
     267 
     268  btnSave->setEnabled(true); 
     269  btnDone->setEnabled(false); 
     270  edtName->setEnabled(true); 
     271  edtName->setText(lstGroups->currentText()); 
     272  edtName->setFocus(); 
     273  btnEdit->setText(tr("Cancel")); 
     274  disconnect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_edit())); 
     275  connect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_editcancel())); 
     276  lstGroups->setEnabled(false); 
     277  btnSave->setDefault(true); 
     278} 
    227279 
    228280void EditGrpDlg::slot_editok() 
    229281{ 
    230   int n = lstGroups->currentItem(); 
    231   gUserManager.RenameGroup(m_nEditGrp, edtName->text().local8Bit()); 
    232   RefreshList(); 
    233  
     282  if (myEditGroupId == 0) 
     283    myEditGroupId = gUserManager.AddGroup(edtName->text().local8Bit().data()); 
     284  else 
     285    gUserManager.RenameGroup(myEditGroupId, edtName->text().local8Bit().data()); 
     286  RefreshList(); 
     287  setCurrentGroupId(myEditGroupId); 
     288 
     289  btnSave->setDefault(false); 
    234290  lstGroups->setEnabled(true); 
    235291  btnEdit->setText(tr("Edit Name")); 
     
    240296  disconnect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_editok())); 
    241297  connect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_edit())); 
    242   lstGroups->setCurrentItem(n); 
    243 } 
    244  
     298} 
    245299 
    246300void EditGrpDlg::slot_editcancel() 
    247301{ 
     302  btnSave->setDefault(false); 
    248303  lstGroups->setEnabled(true); 
    249304  btnEdit->setText(tr("Edit Name")); 
     
    256311} 
    257312 
    258  
    259 void EditGrpDlg::slot_done() 
    260 { 
    261   emit(signal_updateGroups()); 
    262   close(true); 
    263 } 
    264  
    265  
    266313#include "editgrp.moc" 
  • trunk/qt-gui/src/editgrp.h

    r4699 r6284  
    2121#define EDITGRP_H 
    2222 
     23#include <qvaluelist.h> 
    2324#include <qwidget.h> 
    24 #include "licqdialog.h" 
    2525 
    2626class QListBox; 
     
    3030 
    3131class CInfoField; 
     32class CSignalManager; 
    3233 
    3334class EditGrpDlg : public QWidget 
     
    3536  Q_OBJECT 
    3637public: 
    37   EditGrpDlg (QWidget *parent = 0); 
     38  EditGrpDlg(CSignalManager* signalManager, QWidget *parent = 0); 
    3839protected: 
    3940  QListBox *lstGroups; 
     
    4445  QLineEdit *edtName; 
    4546  CInfoField *nfoDefault, *nfoNewUser; 
    46  
    47   unsigned short m_nEditGrp; 
    4847 
    4948  void RefreshList(); 
     
    5958  void slot_default(); 
    6059  void slot_newuser(); 
    61   void slot_done(); 
    6260signals: 
    6361  void signal_updateGroups(); 
     62 
     63private slots: 
     64  void listUpdated(CICQSignal* sig); 
     65 
     66private: 
     67  unsigned short currentGroupId() const; 
     68  void setCurrentGroupId(unsigned short groupId); 
     69  void moveGroup(int delta); 
     70 
     71  QValueList<unsigned short> myGroupIds; 
     72  unsigned short myEditGroupId; 
    6473}; 
    6574 
    66  
    6775#endif 
  • 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(); 
  • trunk/qt-gui/src/mainwin.h

    r6172 r6284  
    3636#include <qbitmap.h> 
    3737#include <qdialog.h> 
     38#include <qvaluelist.h> 
    3839#include <vector> 
    3940 
     
    439440  }; 
    440441 
     442  QValueList<unsigned short> myGroupIds; 
    441443 
    442444}; 
  • trunk/qt-gui/src/userbox.cpp

    r6280 r6284  
    134134} 
    135135 
    136 CUserViewItem::CUserViewItem(unsigned short Id, const char* name, QListView* lv) 
     136CUserViewItem::CUserViewItem(unsigned short Id, const char* name, unsigned short sortKey, QListView* lv) 
    137137  : QListViewItem(lv), 
    138138    m_nGroupId(Id), 
     
    158158  m_bNotInList = true; 
    159159  m_pUserIcon = 0; 
    160   // Other users group is sorted at the end 
    161   if (m_nGroupId) 
    162   { 
    163     QString strTemp = QString("%1").arg((int)m_nGroupId); 
    164     while (strTemp.length() < 10) 
    165       strTemp = "0" + strTemp; 
    166     m_sSortKey = strTemp; 
    167   } 
    168   else 
    169     m_sSortKey = QString("9999999999"); 
     160 
     161  QString strTemp = QString("%1").arg((int)sortKey); 
     162  while (strTemp.length() < 10) 
     163    strTemp = "0" + strTemp; 
     164  m_sSortKey = strTemp; 
     165 
    170166  m_sPrefix = "1"; 
    171167  setPixmap(0, gMainWindow->pmCollapsed); 
    172168  setText(1, QString::fromLocal8Bit(name)); 
    173  
    174169} 
    175170 
  • trunk/qt-gui/src/userbox.h

    r5644 r6284  
    7171  CUserViewItem (ICQUser *, CUserViewItem* item);