Changeset 6258 for branches/qt-gui_group/src/editgrp.cpp
- Timestamp:
- 06/11/08 08:21:55 (7 months ago)
- Files:
-
- 1 modified
-
branches/qt-gui_group/src/editgrp.cpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/qt-gui_group/src/editgrp.cpp
r5514 r6258 30 30 #include <qtoolbutton.h> 31 31 32 #include <licq_events.h> 33 #include <licq_user.h> 34 32 35 #include "editgrp.h" 33 36 #include "ewidgets.h" 34 37 #include "gui-strings.h" 35 38 #include "licq_user.h" 36 37 EditGrpDlg::EditGrpDlg(QWidget *parent) 39 #include "sigman.h" 40 41 EditGrpDlg::EditGrpDlg(CSignalManager* signalManager, QWidget *parent) 38 42 : QWidget(parent, "EditGroupDialog") 39 43 { … … 99 103 100 104 RefreshList(); 105 connect(signalManager, SIGNAL(signal_updatedList(CICQSignal*)), 106 this, SLOT(listUpdated(CICQSignal*))); 101 107 102 108 connect(btnAdd, SIGNAL(clicked()), this, SLOT(slot_add())); … … 107 113 connect(btnNewUser, SIGNAL(clicked()), this, SLOT(slot_newuser())); 108 114 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())); 110 116 connect(edtName, SIGNAL(returnPressed()), this, SLOT(slot_editok())); 111 117 connect(btnSave, SIGNAL(clicked()), this, SLOT(slot_editok())); 112 118 } 113 119 120 unsigned short EditGrpDlg::currentGroupId() const 121 { 122 if (lstGroups->currentItem() == -1) 123 return 0; 124 125 return myGroupIds[lstGroups->currentItem()]; 126 } 127 128 void 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 } 114 137 115 138 void EditGrpDlg::RefreshList() 116 139 { 140 unsigned short groupId = currentGroupId(); 117 141 lstGroups->clear(); 142 myGroupIds.clear(); 118 143 119 144 const QString allUsers = Strings::getSystemGroupName(GROUP_ALL_USERS); 120 145 121 146 lstGroups->insertItem(allUsers); 147 myGroupIds.push_back(0); 148 122 149 if (gUserManager.DefaultGroup() == GROUP_ALL_USERS) 123 150 nfoDefault->setText(allUsers); … … 125 152 nfoNewUser->setText(allUsers); 126 153 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) 129 155 { 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); 135 165 } 136 gUserManager.UnlockGroupList(); 166 FOR_EACH_GROUP_END 167 168 setCurrentGroupId(groupId); 169 } 170 171 void 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 } 137 186 } 138 187 139 188 void EditGrpDlg::slot_add() 140 189 { 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 213 194 btnSave->setEnabled(true); 214 195 btnDone->setEnabled(false); 215 196 edtName->setEnabled(true); 216 GroupList *g = gUserManager.LockGroupList(LOCK_R); 217 edtName->setText(QString::fromLocal8Bit((*g)[n])); 197 edtName->setText(tr("noname")); 218 198 edtName->setFocus(); 219 gUserManager.UnlockGroupList();220 m_nEditGrp = n + 1;221 199 btnEdit->setText(tr("Cancel")); 222 200 disconnect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_edit())); 223 201 connect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_editcancel())); 224 202 lstGroups->setEnabled(false); 225 } 226 203 btnSave->setDefault(true); 204 } 205 206 void 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 221 void 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 240 void EditGrpDlg::slot_up() 241 { 242 moveGroup(-1); 243 } 244 245 void EditGrpDlg::slot_down() 246 { 247 moveGroup(1); 248 } 249 250 void EditGrpDlg::slot_default() 251 { 252 gUserManager.SetDefaultGroup(currentGroupId()); 253 RefreshList(); 254 } 255 256 void EditGrpDlg::slot_newuser() 257 { 258 gUserManager.SetNewUserGroup(currentGroupId()); 259 RefreshList(); 260 } 261 262 void 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 } 227 279 228 280 void EditGrpDlg::slot_editok() 229 281 { 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); 234 290 lstGroups->setEnabled(true); 235 291 btnEdit->setText(tr("Edit Name")); … … 240 296 disconnect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_editok())); 241 297 connect(btnEdit, SIGNAL(clicked()), this, SLOT(slot_edit())); 242 lstGroups->setCurrentItem(n); 243 } 244 298 } 245 299 246 300 void EditGrpDlg::slot_editcancel() 247 301 { 302 btnSave->setDefault(false); 248 303 lstGroups->setEnabled(true); 249 304 btnEdit->setText(tr("Edit Name")); … … 256 311 } 257 312 258 259 void EditGrpDlg::slot_done()260 {261 emit(signal_updateGroups());262 close(true);263 }264 265 266 313 #include "editgrp.moc"
