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/editgrp.cpp

    r5514 r6258  
    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"