summaryrefslogtreecommitdiff
authordrw <drw>2005-06-09 21:34:17 (UTC)
committer drw <drw>2005-06-09 21:34:17 (UTC)
commit9fe80ebf4fbe9b31d9f91a33e4cfc163b7236a62 (patch) (unidiff)
tree874045053074a769c6dc634f9c7a7175e191ac99
parentd5c8de3585a6e94c18156e51299f1e49cc992285 (diff)
downloadopie-9fe80ebf4fbe9b31d9f91a33e4cfc163b7236a62.zip
opie-9fe80ebf4fbe9b31d9f91a33e4cfc163b7236a62.tar.gz
opie-9fe80ebf4fbe9b31d9f91a33e4cfc163b7236a62.tar.bz2
Resource -> OResource
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/usermanager/userdialog.cpp3
-rw-r--r--noncore/settings/usermanager/usermanager.cpp44
2 files changed, 31 insertions, 16 deletions
diff --git a/noncore/settings/usermanager/userdialog.cpp b/noncore/settings/usermanager/userdialog.cpp
index 9dfb2af..3654639 100644
--- a/noncore/settings/usermanager/userdialog.cpp
+++ b/noncore/settings/usermanager/userdialog.cpp
@@ -1,337 +1,338 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * This program is free software; you can redistribute it and/or modify * 3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by * 4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or * 5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. * 6 * (at your option) any later version. *
7 * * 7 * *
8 ***************************************************************************/ 8 ***************************************************************************/
9 9
10#include "userdialog.h" 10#include "userdialog.h"
11#include "passwd.h" 11#include "passwd.h"
12 12
13/* OPIE */ 13/* OPIE */
14#include <opie2/odebug.h> 14#include <opie2/odebug.h>
15#include <opie2/odevice.h> 15#include <opie2/odevice.h>
16#include <opie2/oresource.h>
16#include <qpe/qpeapplication.h> 17#include <qpe/qpeapplication.h>
17using namespace Opie::Core; 18using namespace Opie::Core;
18using namespace Opie::Ui; 19using namespace Opie::Ui;
19 20
20/* QT */ 21/* QT */
21#include <qlayout.h> 22#include <qlayout.h>
22#include <qlabel.h> 23#include <qlabel.h>
23#include <qmessagebox.h> 24#include <qmessagebox.h>
24#include <qfile.h> 25#include <qfile.h>
25 26
26/* STD */ 27/* STD */
27#include <sys/types.h> 28#include <sys/types.h>
28#include <sys/wait.h> 29#include <sys/wait.h>
29#include <unistd.h> 30#include <unistd.h>
30#include <signal.h> 31#include <signal.h>
31 32
32/** 33/**
33 * UserDialog constructor. Setup the dialog, fill the groupComboBox & groupsListView with all groups. 34 * UserDialog constructor. Setup the dialog, fill the groupComboBox & groupsListView with all groups.
34 * 35 *
35 */ 36 */
36UserDialog::UserDialog(int viewmode, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl) 37UserDialog::UserDialog(int viewmode, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog(parent, name, modal, fl)
37{ 38{
38 vm=viewmode; 39 vm=viewmode;
39 QVBoxLayout *layout = new QVBoxLayout(this); 40 QVBoxLayout *layout = new QVBoxLayout(this);
40 myTabWidget=new QTabWidget(this,"User Tab Widget"); 41 myTabWidget=new QTabWidget(this,"User Tab Widget");
41 layout->addWidget(myTabWidget); 42 layout->addWidget(myTabWidget);
42 setupTab1(); 43 setupTab1();
43 setupTab2(); 44 setupTab2();
44 45
45 accounts->groupStringList.sort(); 46 accounts->groupStringList.sort();
46 // And also fill the listview & the combobox with all available groups. 47 // And also fill the listview & the combobox with all available groups.
47 for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) 48 for( QStringList::Iterator it = accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it)
48 { 49 {
49 accounts->splitGroupEntry(*it); 50 accounts->splitGroupEntry(*it);
50 if(accounts->gr_name.find(QRegExp("^#"),0)) 51 if(accounts->gr_name.find(QRegExp("^#"),0))
51 { // Skip commented lines. 52 { // Skip commented lines.
52 new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox); 53 new QCheckListItem(groupsListView,accounts->gr_name,QCheckListItem::CheckBox);
53 groupComboBox->insertItem(accounts->gr_name); 54 groupComboBox->insertItem(accounts->gr_name);
54 } 55 }
55 } 56 }
56 QPEApplication::showDialog( this ); 57 QPEApplication::showDialog( this );
57} 58}
58 59
59/** 60/**
60 * Empty destructor. 61 * Empty destructor.
61 * 62 *
62 */ 63 */
63UserDialog::~UserDialog() 64UserDialog::~UserDialog()
64{} 65{}
65 66
66/** 67/**
67 * Creates the first tab, all userinfo is here. 68 * Creates the first tab, all userinfo is here.
68 * 69 *
69 */ 70 */
70void UserDialog::setupTab1() 71void UserDialog::setupTab1()
71{ 72{
72 QPixmap mypixmap; 73 QPixmap mypixmap;
73 QWidget *tabpage = new QWidget(myTabWidget,"page1"); 74 QWidget *tabpage = new QWidget(myTabWidget,"page1");
74 QVBoxLayout *layout = new QVBoxLayout(tabpage); 75 QVBoxLayout *layout = new QVBoxLayout(tabpage);
75 layout->setMargin(5); 76 layout->setMargin(5);
76 77
77 // Picture 78 // Picture
78 picturePushButton = new QPushButton(tabpage,"Label"); 79 picturePushButton = new QPushButton(tabpage,"Label");
79 picturePushButton->setMinimumSize(48,48); 80 picturePushButton->setMinimumSize(48,48);
80 picturePushButton->setMaximumSize(48,48); 81 picturePushButton->setMaximumSize(48,48);
81 picturePushButton->setPixmap(Resource::loadPixmap("usermanager/usericon")); // Load default usericon. 82 picturePushButton->setPixmap(Opie::Core::OResource::loadPixmap("usermanager/usericon")); // Load default usericon.
82 connect(picturePushButton,SIGNAL(clicked()),this,SLOT(clickedPicture())); // Clicking the picture should invoke pictureselector. 83 connect(picturePushButton,SIGNAL(clicked()),this,SLOT(clickedPicture())); // Clicking the picture should invoke pictureselector.
83 84
84 // Login 85 // Login
85 QLabel *loginLabel=new QLabel(tabpage,"Login: "); 86 QLabel *loginLabel=new QLabel(tabpage,"Login: ");
86 loginLabel->setText("Login: "); 87 loginLabel->setText("Login: ");
87 loginLineEdit=new QLineEdit(tabpage,"Login: "); 88 loginLineEdit=new QLineEdit(tabpage,"Login: ");
88 89
89 // UID 90 // UID
90 QLabel *uidLabel=new QLabel(tabpage,"uid: "); 91 QLabel *uidLabel=new QLabel(tabpage,"uid: ");
91 uidLabel->setText("UserID: "); 92 uidLabel->setText("UserID: ");
92 uidLineEdit=new QLineEdit(tabpage,"uid: "); 93 uidLineEdit=new QLineEdit(tabpage,"uid: ");
93 uidLineEdit->setEnabled(false); 94 uidLineEdit->setEnabled(false);
94 95
95 // Username (gecos) 96 // Username (gecos)
96 QLabel *gecosLabel=new QLabel(tabpage,"gecos"); 97 QLabel *gecosLabel=new QLabel(tabpage,"gecos");
97 gecosLabel->setText("Username: "); 98 gecosLabel->setText("Username: ");
98 gecosLineEdit=new QLineEdit(tabpage,"gecos"); 99 gecosLineEdit=new QLineEdit(tabpage,"gecos");
99 100
100 // Password 101 // Password
101 QLabel *passwordLabel=new QLabel(tabpage,"password"); 102 QLabel *passwordLabel=new QLabel(tabpage,"password");
102 passwordLabel->setText("Password: "); 103 passwordLabel->setText("Password: ");
103 passwordLineEdit=new QLineEdit(tabpage,"password"); 104 passwordLineEdit=new QLineEdit(tabpage,"password");
104 passwordLineEdit->setEchoMode(QLineEdit::Password); 105 passwordLineEdit->setEchoMode(QLineEdit::Password);
105 106
106 // Shell 107 // Shell
107 QLabel *shellLabel=new QLabel(tabpage,"shell"); 108 QLabel *shellLabel=new QLabel(tabpage,"shell");
108 shellLabel->setText("Shell: "); 109 shellLabel->setText("Shell: ");
109 shellComboBox=new QComboBox(tabpage,"shell"); 110 shellComboBox=new QComboBox(tabpage,"shell");
110 shellComboBox->setEditable(true); 111 shellComboBox->setEditable(true);
111 shellComboBox->insertItem("/bin/sh"); 112 shellComboBox->insertItem("/bin/sh");
112 shellComboBox->insertItem("/bin/ash"); 113 shellComboBox->insertItem("/bin/ash");
113 shellComboBox->insertItem("/bin/false"); 114 shellComboBox->insertItem("/bin/false");
114 115
115 // Primary Group 116 // Primary Group
116 QLabel *groupLabel=new QLabel(tabpage,"group"); 117 QLabel *groupLabel=new QLabel(tabpage,"group");
117 groupLabel->setText("Primary group: "); 118 groupLabel->setText("Primary group: ");
118 groupComboBox=new QComboBox(tabpage,"PrimaryGroup"); 119 groupComboBox=new QComboBox(tabpage,"PrimaryGroup");
119 120
120 if(vm==VIEWMODE_NEW) 121 if(vm==VIEWMODE_NEW)
121 { 122 {
122 // Copy /etc/skel 123 // Copy /etc/skel
123 skelLabel=new QLabel(tabpage,"skel"); 124 skelLabel=new QLabel(tabpage,"skel");
124 skelLabel->setText("Copy /etc/skel: "); 125 skelLabel->setText("Copy /etc/skel: ");
125 skelCheckBox=new QCheckBox(tabpage); 126 skelCheckBox=new QCheckBox(tabpage);
126 skelCheckBox->setChecked(true); 127 skelCheckBox->setChecked(true);
127 } 128 }
128 129
129 // Widget layout 130 // Widget layout
130 QHBoxLayout *hlayout=new QHBoxLayout(-1,"hlayout"); 131 QHBoxLayout *hlayout=new QHBoxLayout(-1,"hlayout");
131 layout->addWidget(picturePushButton); 132 layout->addWidget(picturePushButton);
132 layout->addSpacing(5); 133 layout->addSpacing(5);
133 layout->addLayout(hlayout); 134 layout->addLayout(hlayout);
134 QVBoxLayout *vlayout1=new QVBoxLayout(-1,"vlayout1"); 135 QVBoxLayout *vlayout1=new QVBoxLayout(-1,"vlayout1");
135 QVBoxLayout *vlayout2=new QVBoxLayout(-1,"vlayout2"); 136 QVBoxLayout *vlayout2=new QVBoxLayout(-1,"vlayout2");
136 // First column, labels 137 // First column, labels
137 vlayout1->addWidget(loginLabel); 138 vlayout1->addWidget(loginLabel);
138 vlayout1->addSpacing(5); 139 vlayout1->addSpacing(5);
139 vlayout1->addWidget(uidLabel); 140 vlayout1->addWidget(uidLabel);
140 vlayout1->addSpacing(5); 141 vlayout1->addSpacing(5);
141 vlayout1->addWidget(gecosLabel); 142 vlayout1->addWidget(gecosLabel);
142 vlayout1->addSpacing(5); 143 vlayout1->addSpacing(5);
143 vlayout1->addWidget(passwordLabel); 144 vlayout1->addWidget(passwordLabel);
144 vlayout1->addSpacing(5); 145 vlayout1->addSpacing(5);
145 vlayout1->addWidget(shellLabel); 146 vlayout1->addWidget(shellLabel);
146 vlayout1->addSpacing(5); 147 vlayout1->addSpacing(5);
147 vlayout1->addWidget(groupLabel); 148 vlayout1->addWidget(groupLabel);
148 if(vm==VIEWMODE_NEW) 149 if(vm==VIEWMODE_NEW)
149 { 150 {
150 vlayout1->addSpacing(5); 151 vlayout1->addSpacing(5);
151 vlayout1->addWidget(skelLabel); 152 vlayout1->addWidget(skelLabel);
152 } 153 }
153 // Second column, data 154 // Second column, data
154 vlayout2->addWidget(loginLineEdit); 155 vlayout2->addWidget(loginLineEdit);
155 vlayout2->addSpacing(5); 156 vlayout2->addSpacing(5);
156 vlayout2->addWidget(uidLineEdit); 157 vlayout2->addWidget(uidLineEdit);
157 vlayout2->addSpacing(5); 158 vlayout2->addSpacing(5);
158 vlayout2->addWidget(gecosLineEdit); 159 vlayout2->addWidget(gecosLineEdit);
159 vlayout2->addSpacing(5); 160 vlayout2->addSpacing(5);
160 vlayout2->addWidget(passwordLineEdit); 161 vlayout2->addWidget(passwordLineEdit);
161 vlayout2->addSpacing(5); 162 vlayout2->addSpacing(5);
162 vlayout2->addWidget(shellComboBox); 163 vlayout2->addWidget(shellComboBox);
163 vlayout2->addSpacing(5); 164 vlayout2->addSpacing(5);
164 vlayout2->addWidget(groupComboBox); 165 vlayout2->addWidget(groupComboBox);
165 if(vm==VIEWMODE_NEW) 166 if(vm==VIEWMODE_NEW)
166 { 167 {
167 vlayout2->addSpacing(5); 168 vlayout2->addSpacing(5);
168 vlayout2->addWidget(skelCheckBox); 169 vlayout2->addWidget(skelCheckBox);
169 } 170 }
170 hlayout->addLayout(vlayout1); 171 hlayout->addLayout(vlayout1);
171 hlayout->addLayout(vlayout2); 172 hlayout->addLayout(vlayout2);
172 173
173 myTabWidget->addTab(tabpage,"User Info"); 174 myTabWidget->addTab(tabpage,"User Info");
174} 175}
175 176
176/** 177/**
177 * Creates the second tab containing additional groups for the user. 178 * Creates the second tab containing additional groups for the user.
178 * 179 *
179 */ 180 */
180void UserDialog::setupTab2() 181void UserDialog::setupTab2()
181{ 182{
182 QWidget *tabpage = new QWidget(myTabWidget,"page2"); 183 QWidget *tabpage = new QWidget(myTabWidget,"page2");
183 QVBoxLayout *layout = new QVBoxLayout(tabpage); 184 QVBoxLayout *layout = new QVBoxLayout(tabpage);
184 layout->setMargin(5); 185 layout->setMargin(5);
185 186
186 // Additional groups 187 // Additional groups
187 groupsListView=new QListView(tabpage,"groups"); 188 groupsListView=new QListView(tabpage,"groups");
188 groupsListView->addColumn("Additional groups"); 189 groupsListView->addColumn("Additional groups");
189 groupsListView->setColumnWidthMode(0,QListView::Maximum); 190 groupsListView->setColumnWidthMode(0,QListView::Maximum);
190 groupsListView->setMultiSelection(false); 191 groupsListView->setMultiSelection(false);
191 groupsListView->setAllColumnsShowFocus(false); 192 groupsListView->setAllColumnsShowFocus(false);
192 193
193 layout->addSpacing(5); 194 layout->addSpacing(5);
194 // Grouplist 195 // Grouplist
195 layout->addWidget(groupsListView); 196 layout->addWidget(groupsListView);
196 197
197 myTabWidget->addTab(tabpage,"User Groups"); 198 myTabWidget->addTab(tabpage,"User Groups");
198} 199}
199 200
200/** 201/**
201 * Static function that creates the userinfo dialog. 202 * Static function that creates the userinfo dialog.
202 * The user will be prompted to add a user. 203 * The user will be prompted to add a user.
203 * 204 *
204 * @param uid This is a suggested available UID. 205 * @param uid This is a suggested available UID.
205 * @param gid This is a suggested available GID. 206 * @param gid This is a suggested available GID.
206 * 207 *
207 * @return <code>true</code> if the user was successfully added, otherwise <code>false</code>. 208 * @return <code>true</code> if the user was successfully added, otherwise <code>false</code>.
208 * 209 *
209 */ 210 */
210bool UserDialog::addUser(int uid, int gid) 211bool UserDialog::addUser(int uid, int gid)
211{ 212{
212 QCheckListItem *temp; 213 QCheckListItem *temp;
213 QFile ozTest; 214 QFile ozTest;
214 int oz=false; 215 int oz=false;
215 if(ODevice::inst()->system()==System_OpenZaurus) oz=true; 216 if(ODevice::inst()->system()==System_OpenZaurus) oz=true;
216 // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating adduserDialog's widgets here. 217 // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating adduserDialog's widgets here.
217 UserDialog *adduserDialog=new UserDialog(VIEWMODE_NEW); 218 UserDialog *adduserDialog=new UserDialog(VIEWMODE_NEW);
218 adduserDialog->setCaption(tr("Add User")); 219 adduserDialog->setCaption(tr("Add User"));
219 adduserDialog->userID=uid; // Set next available UID as default uid. 220 adduserDialog->userID=uid; // Set next available UID as default uid.
220 adduserDialog->groupID=gid; // Set next available GID as default gid. 221 adduserDialog->groupID=gid; // Set next available GID as default gid.
221 // Insert default group into groupComboBox 222 // Insert default group into groupComboBox
222 adduserDialog->groupComboBox->insertItem("<create new group>",0); 223 adduserDialog->groupComboBox->insertItem("<create new group>",0);
223 adduserDialog->uidLineEdit->setText(QString::number(uid)); 224 adduserDialog->uidLineEdit->setText(QString::number(uid));
224 // If we're running on OZ, add new users to some default groups. 225 // If we're running on OZ, add new users to some default groups.
225 if(oz) 226 if(oz)
226 { 227 {
227 QListViewItemIterator iter( adduserDialog->groupsListView ); 228 QListViewItemIterator iter( adduserDialog->groupsListView );
228 for ( ; iter.current(); ++iter ) 229 for ( ; iter.current(); ++iter )
229 { 230 {
230 temp=(QCheckListItem*)iter.current(); 231 temp=(QCheckListItem*)iter.current();
231 if (temp->text()=="video") temp->setOn(true); 232 if (temp->text()=="video") temp->setOn(true);
232 if (temp->text()=="audio") temp->setOn(true); 233 if (temp->text()=="audio") temp->setOn(true);
233 if (temp->text()=="time") temp->setOn(true); 234 if (temp->text()=="time") temp->setOn(true);
234 if (temp->text()=="power") temp->setOn(true); 235 if (temp->text()=="power") temp->setOn(true);
235 if (temp->text()=="input") temp->setOn(true); 236 if (temp->text()=="input") temp->setOn(true);
236 if (temp->text()=="sharp") temp->setOn(true); 237 if (temp->text()=="sharp") temp->setOn(true);
237 if (temp->text()=="tty") temp->setOn(true); 238 if (temp->text()=="tty") temp->setOn(true);
238 } 239 }
239 } 240 }
240 // Show the dialog! 241 // Show the dialog!
241 if(!(adduserDialog->exec())) return false; 242 if(!(adduserDialog->exec())) return false;
242 if((adduserDialog->groupComboBox->currentItem()!=0)) 243 if((adduserDialog->groupComboBox->currentItem()!=0))
243 { 244 {
244 accounts->findGroup(adduserDialog->groupComboBox->currentText()); 245 accounts->findGroup(adduserDialog->groupComboBox->currentText());
245 adduserDialog->groupID=accounts->gr_gid; 246 adduserDialog->groupID=accounts->gr_gid;
246 owarn << QString::number(accounts->gr_gid) << oendl; 247 owarn << QString::number(accounts->gr_gid) << oendl;
247 } 248 }
248 if(!(accounts->addUser(adduserDialog->loginLineEdit->text(), adduserDialog->passwordLineEdit->text(), 249 if(!(accounts->addUser(adduserDialog->loginLineEdit->text(), adduserDialog->passwordLineEdit->text(),
249 adduserDialog->uidLineEdit->text().toInt(), adduserDialog->groupID, adduserDialog->gecosLineEdit->text(), 250 adduserDialog->uidLineEdit->text().toInt(), adduserDialog->groupID, adduserDialog->gecosLineEdit->text(),
250 QString("/home/")+adduserDialog->loginLineEdit->text() , adduserDialog->shellComboBox->currentText()))) 251 QString("/home/")+adduserDialog->loginLineEdit->text() , adduserDialog->shellComboBox->currentText())))
251 { 252 {
252 QMessageBox::information(0,"Ooops!","Something went wrong!\nUnable to add user."); 253 QMessageBox::information(0,"Ooops!","Something went wrong!\nUnable to add user.");
253 return false; 254 return false;
254 } 255 }
255 256
256 // Add User to additional groups. 257 // Add User to additional groups.
257 QListViewItemIterator it( adduserDialog->groupsListView ); 258 QListViewItemIterator it( adduserDialog->groupsListView );
258 for ( ; it.current(); ++it ) 259 for ( ; it.current(); ++it )
259 { 260 {
260 temp=(QCheckListItem*)it.current(); 261 temp=(QCheckListItem*)it.current();
261 if (temp->isOn() ) 262 if (temp->isOn() )
262 accounts->addGroupMember(it.current()->text(0),adduserDialog->loginLineEdit->text()); 263 accounts->addGroupMember(it.current()->text(0),adduserDialog->loginLineEdit->text());
263 } 264 }
264 // Copy image to pics/users/ 265 // Copy image to pics/users/
265 if(!(adduserDialog->userImage.isNull())) 266 if(!(adduserDialog->userImage.isNull()))
266 { 267 {
267 QDir d; 268 QDir d;
268 if(!(d.exists(QPEApplication::qpeDir() + "pics/users"))) 269 if(!(d.exists(QPEApplication::qpeDir() + "pics/users")))
269 { 270 {
270 d.mkdir(QPEApplication::qpeDir() + "pics/users"); 271 d.mkdir(QPEApplication::qpeDir() + "pics/users");
271 } 272 }
272 QString filename= QPEApplication::qpeDir()+"pics/users/"+accounts->pw_name+".png"; 273 QString filename= QPEApplication::qpeDir()+"pics/users/"+accounts->pw_name+".png";
273 // adduserDialog->userImage=adduserDialog->userImage.smoothScale(48,48); 274 // adduserDialog->userImage=adduserDialog->userImage.smoothScale(48,48);
274 adduserDialog->userImage.save(filename,"PNG"); 275 adduserDialog->userImage.save(filename,"PNG");
275 } 276 }
276 277
277 // Should we copy the skeleton homedirectory /etc/skel to the user's homedirectory? 278 // Should we copy the skeleton homedirectory /etc/skel to the user's homedirectory?
278 accounts->findUser(adduserDialog->loginLineEdit->text()); 279 accounts->findUser(adduserDialog->loginLineEdit->text());
279 if(adduserDialog->skelCheckBox->isChecked()) 280 if(adduserDialog->skelCheckBox->isChecked())
280 { 281 {
281 QString command_cp; 282 QString command_cp;
282 QString command_chown; 283 QString command_chown;
283 command_cp.sprintf("cp -a /etc/skel/* %s/",accounts->pw_dir.latin1()); 284 command_cp.sprintf("cp -a /etc/skel/* %s/",accounts->pw_dir.latin1());
284 system(command_cp); 285 system(command_cp);
285 286
286 command_cp.sprintf("cp -a /etc/skel/.[!.]* %s/",accounts->pw_dir.latin1()); // Bug in busybox, ".*" includes parent directory, does this work as a workaround? 287 command_cp.sprintf("cp -a /etc/skel/.[!.]* %s/",accounts->pw_dir.latin1()); // Bug in busybox, ".*" includes parent directory, does this work as a workaround?
287 system(command_cp); 288 system(command_cp);
288 289
289 command_chown.sprintf("chown -R %d:%d %s",accounts->pw_uid,accounts->pw_gid,accounts->pw_dir.latin1()); 290 command_chown.sprintf("chown -R %d:%d %s",accounts->pw_uid,accounts->pw_gid,accounts->pw_dir.latin1());
290 system(command_chown); 291 system(command_chown);
291 } 292 }
292 293
293 return true; 294 return true;
294} 295}
295 296
296/** 297/**
297 * Deletes the user account. 298 * Deletes the user account.
298 * 299 *
299 * @param username User to be deleted. 300 * @param username User to be deleted.
300 * 301 *
301 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>. 302 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>.
302 * 303 *
303 */ 304 */
304bool UserDialog::delUser(const char *username) 305bool UserDialog::delUser(const char *username)
305{ 306{
306 if((accounts->findUser(username))) 307 if((accounts->findUser(username)))
307 { // Does that user exist? 308 { // Does that user exist?
308 if(!(accounts->delUser(username))) 309 if(!(accounts->delUser(username)))
309 { // Delete the user. 310 { // Delete the user.
310 QMessageBox::information(0,"Ooops!","Something went wrong\nUnable to delete user: "+QString(username)+"."); 311 QMessageBox::information(0,"Ooops!","Something went wrong\nUnable to delete user: "+QString(username)+".");
311 } 312 }
312 } 313 }
313 else 314 else
314 { 315 {
315 QMessageBox::information(0,"Invalid Username","That username ("+QString(username)+")does not exist."); 316 QMessageBox::information(0,"Invalid Username","That username ("+QString(username)+")does not exist.");
316 return false; 317 return false;
317 } 318 }
318 return true; 319 return true;
319} 320}
320 321
321/** 322/**
322 * This displays a confirmation dialog wether a user should be deleted or not. 323 * This displays a confirmation dialog wether a user should be deleted or not.
323 * (And also deletes the account) 324 * (And also deletes the account)
324 * 325 *
325 * @param username User to be deleted. 326 * @param username User to be deleted.
326 * 327 *
327 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>. 328 * @return <code>true</code> if the user was successfully deleted, otherwise <code>false</code>.
328 * 329 *
329 */ 330 */
330bool UserDialog::editUser(const char *username) 331bool UserDialog::editUser(const char *username)
331{ 332{
332 int invalid_group=0; 333 int invalid_group=0;
333 // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating edituserDialog's widgets here. 334 // viewmode is a workaround for a bug in qte-2.3.4 that gives bus error on manipulating edituserDialog's widgets here.
334 UserDialog *edituserDialog=new UserDialog(VIEWMODE_EDIT); // Create Dialog 335 UserDialog *edituserDialog=new UserDialog(VIEWMODE_EDIT); // Create Dialog
335 edituserDialog->setCaption(tr("Edit User")); 336 edituserDialog->setCaption(tr("Edit User"));
336 accounts->findUser(username); // Locate user in database and fill variables in 'accounts' object. 337 accounts->findUser(username); // Locate user in database and fill variables in 'accounts' object.
337 if(!(accounts->findGroup(accounts->pw_gid))) 338 if(!(accounts->findGroup(accounts->pw_gid)))
diff --git a/noncore/settings/usermanager/usermanager.cpp b/noncore/settings/usermanager/usermanager.cpp
index 1d345ee..2c046b1 100644
--- a/noncore/settings/usermanager/usermanager.cpp
+++ b/noncore/settings/usermanager/usermanager.cpp
@@ -1,260 +1,274 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * This program is free software; you can redistribute it and/or modify * 3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by * 4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or * 5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. * 6 * (at your option) any later version. *
7 * * 7 * *
8 ***************************************************************************/ 8 ***************************************************************************/
9 9
10#include "usermanager.h" 10#include "usermanager.h"
11 11
12/* OPIE */ 12/* OPIE */
13#include <opie2/odebug.h> 13#include <opie2/odebug.h>
14#include <qpe/resource.h> 14#include <opie2/oresource.h>
15using namespace Opie::Core; 15using namespace Opie::Core;
16 16#include <qpe/qpeapplication.h>
17/* QT */ 17/* QT */
18#include <qlayout.h> 18#include <qlayout.h>
19#include <qmessagebox.h> 19#include <qmessagebox.h>
20#include <qfile.h> 20#include <qfile.h>
21#include <qregexp.h> 21#include <qregexp.h>
22 22
23/** 23/**
24 * The mainwindow constructor. 24 * The mainwindow constructor.
25 * 25 *
26 * @param QWidget *parent 26 * @param QWidget *parent
27 * @param const char *name 27 * @param const char *name
28 * @ param WFlags fl 28 * @ param WFlags fl
29 * 29 *
30 */ 30 */
31UserConfig::UserConfig(QWidget* parent, const char* name, WFlags fl) : QMainWindow(parent, name, fl) { 31UserConfig::UserConfig(QWidget* parent, const char* name, WFlags fl) : QMainWindow(parent, name, fl) {
32 setCaption(tr("Opie User Manager")); 32 setCaption(tr("Opie User Manager"));
33 33
34 // Create an instance of the global object 'accounts'. This holds all user/group info, and functions to modify them. 34 // Create an instance of the global object 'accounts'. This holds all user/group info, and functions to modify them.
35 accounts=new Passwd(); 35 accounts=new Passwd();
36 accounts->open();// This actually loads the files /etc/passwd & /etc/group into memory. 36 accounts->open();// This actually loads the files /etc/passwd & /etc/group into memory.
37 37
38 // Create the toolbar. 38 // Create the toolbar.
39 setToolBarsMovable( false );
40 bool useBigIcon = qApp->desktop()->size().width() > 330;
39 QToolBar *toolbar = new QToolBar(this,"Toolbar"); 41 QToolBar *toolbar = new QToolBar(this,"Toolbar");
40 toolbar->setHorizontalStretchable(1); // Is there any other way to get the toolbar to stretch of the full screen!? 42 toolbar->setHorizontalStretchable( true );
41 adduserToolButton = new QToolButton(Resource::loadPixmap("usermanager/adduser"),"Add User",0,this,SLOT(addUser()),toolbar,"Add User"); 43 adduserToolButton = new QToolButton(Opie::Core::OResource::loadPixmap("usermanager/adduser", Opie::Core::OResource::SmallIcon),
42 edituserToolButton = new QToolButton(Resource::loadPixmap("usermanager/edituser"),"Edit User",0,this,SLOT(editUser()),toolbar,"Edit User"); 44 "Add User",0,this,SLOT(addUser()),toolbar,"Add User");
43 deleteuserToolButton = new QToolButton(Resource::loadPixmap("usermanager/deleteuser"),"Delete User",0,this,SLOT(delUser()),toolbar,"Delete User"); 45 adduserToolButton->setUsesBigPixmap( useBigIcon );
44 QToolButton *userstext = new QToolButton(0,"User",0,0,0,toolbar,"User"); 46 edituserToolButton = new QToolButton(Opie::Core::OResource::loadPixmap("usermanager/edituser", Opie::Core::OResource::SmallIcon),
45 userstext->setUsesTextLabel(true); 47 "Edit User",0,this,SLOT(editUser()),toolbar,"Edit User");
48 edituserToolButton->setUsesBigPixmap( useBigIcon );
49 deleteuserToolButton = new QToolButton(Opie::Core::OResource::loadPixmap("usermanager/deleteuser", Opie::Core::OResource::SmallIcon),
50 "Delete User",0,this,SLOT(delUser()),toolbar,"Delete User");
51 deleteuserToolButton->setUsesBigPixmap( useBigIcon );
52 //QToolButton *userstext = new QToolButton(0,"User",0,0,0,toolbar,"User");
53 //userstext->setUsesTextLabel(true);
46 toolbar->addSeparator(); 54 toolbar->addSeparator();
47 addgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/addgroup"),"Add Group",0,this,SLOT(addGroup()),toolbar,"Add Group"); 55 addgroupToolButton = new QToolButton(Opie::Core::OResource::loadPixmap("usermanager/addgroup", Opie::Core::OResource::SmallIcon),
48 editgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/editgroup"),"Edit Group",0,this,SLOT(editGroup()),toolbar,"Edit Group"); 56 "Add Group",0,this,SLOT(addGroup()),toolbar,"Add Group");
49 deletegroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/deletegroup"),"Delete Group",0,this,SLOT(delGroup()),toolbar,"Delete Group"); 57 addgroupToolButton->setUsesBigPixmap( useBigIcon );
50 QToolButton *groupstext = new QToolButton(0,"Group",0,0,0,toolbar,"Group"); 58 editgroupToolButton = new QToolButton(Opie::Core::OResource::loadPixmap("usermanager/editgroup", Opie::Core::OResource::SmallIcon),
51 groupstext->setUsesTextLabel(true); 59 "Edit Group",0,this,SLOT(editGroup()),toolbar,"Edit Group");
60 editgroupToolButton->setUsesBigPixmap( useBigIcon );
61 deletegroupToolButton = new QToolButton(Opie::Core::OResource::loadPixmap("usermanager/deletegroup", Opie::Core::OResource::SmallIcon),
62 "Delete Group",0,this,SLOT(delGroup()),toolbar,"Delete Group");
63 deletegroupToolButton->setUsesBigPixmap( useBigIcon );
64 //QToolButton *groupstext = new QToolButton(0,"Group",0,0,0,toolbar,"Group");
65 //groupstext->setUsesTextLabel(true);
52 addToolBar(toolbar,"myToolBar"); 66 addToolBar(toolbar,"myToolBar");
53 67
54 // Add a tabwidget and all the tabs. 68 // Add a tabwidget and all the tabs.
55 myTabWidget = new QTabWidget(this,"My Tab Widget"); 69 myTabWidget = new QTabWidget(this,"My Tab Widget");
56 setupTabAccounts(); 70 setupTabAccounts();
57 setupTabAllUsers(); 71 setupTabAllUsers();
58 setupTabAllGroups(); 72 setupTabAllGroups();
59 userPopupMenu.insertItem("Copy",0); 73 userPopupMenu.insertItem("Copy",0);
60 74
61 getUsers(); // Fill out the iconview & listview with all users. 75 getUsers(); // Fill out the iconview & listview with all users.
62 getGroups(); // Fill out the group listview with all groups. 76 getGroups(); // Fill out the group listview with all groups.
63 77
64 setCentralWidget(myTabWidget); 78 setCentralWidget(myTabWidget);
65} 79}
66 80
67UserConfig::~UserConfig() { 81UserConfig::~UserConfig() {
68 accounts->close(); 82 accounts->close();
69 delete accounts; 83 delete accounts;
70} 84}
71 85
72void UserConfig::setupTabAccounts() { 86void UserConfig::setupTabAccounts() {
73 QWidget *tabpage = new QWidget(this); 87 QWidget *tabpage = new QWidget(this);
74 QVBoxLayout *layout = new QVBoxLayout(tabpage); 88 QVBoxLayout *layout = new QVBoxLayout(tabpage);
75 layout->setMargin(5); 89 layout->setMargin(5);
76 90
77 usersIconView=new QListView(tabpage,"users"); 91 usersIconView=new QListView(tabpage,"users");
78 usersIconView->addColumn("Icon"); 92 usersIconView->addColumn("Icon");
79 usersIconView->addColumn("Username"); 93 usersIconView->addColumn("Username");
80 usersIconView->setAllColumnsShowFocus(true); 94 usersIconView->setAllColumnsShowFocus(true);
81 layout->addWidget(usersIconView); 95 layout->addWidget(usersIconView);
82 96
83 connect(usersIconView,SIGNAL(returnPressed(QListViewItem*)),this,SLOT(showUserMenu(QListViewItem*))); 97 connect(usersIconView,SIGNAL(returnPressed(QListViewItem*)),this,SLOT(showUserMenu(QListViewItem*)));
84 98
85 myTabWidget->addTab(tabpage,"Users"); 99 myTabWidget->addTab(tabpage,"Users");
86} 100}
87 101
88void UserConfig::setupTabAllUsers() { 102void UserConfig::setupTabAllUsers() {
89 QWidget *tabpage = new QWidget(this); 103 QWidget *tabpage = new QWidget(this);
90 QVBoxLayout *layout = new QVBoxLayout(tabpage); 104 QVBoxLayout *layout = new QVBoxLayout(tabpage);
91 layout->setMargin(5); 105 layout->setMargin(5);
92 106
93 usersListView=new QListView(tabpage,"allusers"); 107 usersListView=new QListView(tabpage,"allusers");
94 usersListView->addColumn("UID"); 108 usersListView->addColumn("UID");
95 usersListView->addColumn("Login"); 109 usersListView->addColumn("Login");
96 usersListView->addColumn("Username"); 110 usersListView->addColumn("Username");
97 layout->addWidget(usersListView); 111 layout->addWidget(usersListView);
98 usersListView->setSorting(1,1); 112 usersListView->setSorting(1,1);
99 usersListView->setAllColumnsShowFocus(true); 113 usersListView->setAllColumnsShowFocus(true);
100 114
101 myTabWidget->addTab(tabpage,"All Users"); 115 myTabWidget->addTab(tabpage,"All Users");
102} 116}
103 117
104void UserConfig::setupTabAllGroups() { 118void UserConfig::setupTabAllGroups() {
105 QWidget *tabpage = new QWidget(this); 119 QWidget *tabpage = new QWidget(this);
106 QVBoxLayout *layout = new QVBoxLayout(tabpage); 120 QVBoxLayout *layout = new QVBoxLayout(tabpage);
107 layout->setMargin(5); 121 layout->setMargin(5);
108 122
109 groupsListView=new QListView(tabpage,"groups"); 123 groupsListView=new QListView(tabpage,"groups");
110 groupsListView->addColumn("GID"); 124 groupsListView->addColumn("GID");
111 groupsListView->addColumn("Groupname"); 125 groupsListView->addColumn("Groupname");
112 layout->addWidget(groupsListView); 126 layout->addWidget(groupsListView);
113 groupsListView->setSorting(1,1); 127 groupsListView->setSorting(1,1);
114 groupsListView->setAllColumnsShowFocus(true); 128 groupsListView->setAllColumnsShowFocus(true);
115 129
116 myTabWidget->addTab(tabpage,"All Groups"); 130 myTabWidget->addTab(tabpage,"All Groups");
117} 131}
118void UserConfig::getUsers() { 132void UserConfig::getUsers() {
119 QString mytext; 133 QString mytext;
120 QPixmap mypixmap; 134 QPixmap mypixmap;
121 QListViewItem *listviewitem; 135 QListViewItem *listviewitem;
122 136
123 // Empty the iconview & the listview. 137 // Empty the iconview & the listview.
124 usersIconView->clear(); 138 usersIconView->clear();
125 usersListView->clear(); 139 usersListView->clear();
126 140
127 // availableUID is used as a deposite for the next available UID on the system, this should start at an ID over 500. 141 // availableUID is used as a deposite for the next available UID on the system, this should start at an ID over 500.
128 availableUID=500; 142 availableUID=500;
129 for(QStringList::Iterator it=accounts->passwdStringList.begin(); it!=accounts->passwdStringList.end(); ++it) { 143 for(QStringList::Iterator it=accounts->passwdStringList.begin(); it!=accounts->passwdStringList.end(); ++it) {
130 accounts->splitPasswdEntry(*it); // Split the string into it's components and store in variables in the accounts object. ("pr_name" and so on.) 144 accounts->splitPasswdEntry(*it); // Split the string into it's components and store in variables in the accounts object. ("pr_name" and so on.)
131 if(accounts->pw_name.find(QRegExp("^#"),0)) {// Skip commented lines. 145 if(accounts->pw_name.find(QRegExp("^#"),0)) {// Skip commented lines.
132 new QListViewItem(usersListView,QString::number(accounts->pw_uid),accounts->pw_name,accounts->pw_gecos); 146 new QListViewItem(usersListView,QString::number(accounts->pw_uid),accounts->pw_name,accounts->pw_gecos);
133 if((accounts->pw_uid>=500) && (accounts->pw_uid<65000)) {// Is this user a "normal" user ? 147 if((accounts->pw_uid>=500) && (accounts->pw_uid<65000)) {// Is this user a "normal" user ?
134 mytext=QString(accounts->pw_name)+" - ("+QString(accounts->pw_gecos)+")"; // The string displayed next to the icon. 148 mytext=QString(accounts->pw_name)+" - ("+QString(accounts->pw_gecos)+")"; // The string displayed next to the icon.
135 if(!(mypixmap.load("/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"))) { // Is there an icon for this user? Resource::loadPixmap is caching, doesn't work. 149 if(!(mypixmap.load("/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"))) { // Is there an icon for this user? Opie::Core::OResource::loadPixmap is caching, doesn't work.
136 mypixmap=Resource::loadPixmap(QString("usermanager/usericon"));// If this user has no icon, load the default icon. 150 mypixmap=Opie::Core::OResource::loadPixmap("usermanager/usericon", Opie::Core::OResource::SmallIcon);// If this user has no icon, load the default icon.
137 } 151 }
138 listviewitem=new QListViewItem(usersIconView,"",mytext);// Add the icon+text to the qiconview. 152 listviewitem=new QListViewItem(usersIconView,"",mytext);// Add the icon+text to the qiconview.
139 listviewitem->setPixmap(0,mypixmap); 153 listviewitem->setPixmap(0,mypixmap);
140 } 154 }
141 if((accounts->pw_uid>=availableUID) && (accounts->pw_uid<65000)) availableUID=accounts->pw_uid+1; // Increase 1 to the latest know UID to get a free uid. 155 if((accounts->pw_uid>=availableUID) && (accounts->pw_uid<65000)) availableUID=accounts->pw_uid+1; // Increase 1 to the latest know UID to get a free uid.
142 } 156 }
143 } 157 }
144 usersIconView->sort(); 158 usersIconView->sort();
145} 159}
146 160
147void UserConfig::addUser() { 161void UserConfig::addUser() {
148 if(UserDialog::addUser(availableUID,availableGID)) {// Add the user to the system, also send next available UID and GID. 162 if(UserDialog::addUser(availableUID,availableGID)) {// Add the user to the system, also send next available UID and GID.
149 getUsers(); // Update users views. 163 getUsers(); // Update users views.
150 getGroups(); // Update groups view. 164 getGroups(); // Update groups view.
151 } 165 }
152} 166}
153 167
154void UserConfig::editUser() { 168void UserConfig::editUser() {
155 QString username; 169 QString username;
156 if(myTabWidget->currentPageIndex()==0) {// Users 170 if(myTabWidget->currentPageIndex()==0) {// Users
157 if(usersIconView->currentItem()) {// Any icon selected? 171 if(usersIconView->currentItem()) {// Any icon selected?
158 username=usersIconView->currentItem()->text(1);// Get the text associated with the icon. 172 username=usersIconView->currentItem()->text(1);// Get the text associated with the icon.
159 username=username.left(username.find(" - (",0,true));// Strip out the username. 173 username=username.left(username.find(" - (",0,true));// Strip out the username.
160 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog. 174 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog.
161 // If there were any changed also update the views. 175 // If there were any changed also update the views.
162 getUsers(); 176 getUsers();
163 getGroups(); 177 getGroups();
164 } 178 }
165 } else { 179 } else {
166 QMessageBox::information(this,"No selection.","No user has been selected."); 180 QMessageBox::information(this,"No selection.","No user has been selected.");
167 } 181 }
168 } 182 }
169 if(myTabWidget->currentPageIndex()==1) {// All users 183 if(myTabWidget->currentPageIndex()==1) {// All users
170 if(usersListView->currentItem()) {// Anything changed!? 184 if(usersListView->currentItem()) {// Anything changed!?
171 username=usersListView->currentItem()->text(1);// Get the username. 185 username=usersListView->currentItem()->text(1);// Get the username.
172 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog. 186 if(UserDialog::editUser(username)) {// Bring up the userinfo dialog.
173 // And again update the views if there were any changes. 187 // And again update the views if there were any changes.
174 getUsers(); 188 getUsers();
175 getGroups(); 189 getGroups();
176 } 190 }
177 } else { 191 } else {
178 QMessageBox::information(this,"No selection.","No user has been selected."); 192 QMessageBox::information(this,"No selection.","No user has been selected.");
179 } 193 }
180 } 194 }
181} 195}
182 196
183void UserConfig::delUser() { 197void UserConfig::delUser() {
184 QString username; 198 QString username;
185 199
186 if(myTabWidget->currentPageIndex()==0) {// Users, Iconview. 200 if(myTabWidget->currentPageIndex()==0) {// Users, Iconview.
187 if(usersIconView->currentItem()) {// Anything selected? 201 if(usersIconView->currentItem()) {// Anything selected?
188 username=usersIconView->currentItem()->text(1);// Get string associated with icon. 202 username=usersIconView->currentItem()->text(1);// Get string associated with icon.
189 username=username.left(username.find(" - (",0,true));// Strip out the username. 203 username=username.left(username.find(" - (",0,true));// Strip out the username.
190 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) { 204 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) {
191 if(UserDialog::delUser(username)) {// Delete the user if possible. 205 if(UserDialog::delUser(username)) {// Delete the user if possible.
192 // Update views. 206 // Update views.
193 getUsers(); 207 getUsers();
194 getGroups(); 208 getGroups();
195 } 209 }
196 } 210 }
197 } else { 211 } else {
198 QMessageBox::information(this,"No selection","No user has been selected."); 212 QMessageBox::information(this,"No selection","No user has been selected.");
199 } 213 }
200 } 214 }
201 if(myTabWidget->currentPageIndex()==1) {// All users 215 if(myTabWidget->currentPageIndex()==1) {// All users
202 if(usersListView->currentItem()) {// Anything changed!? 216 if(usersListView->currentItem()) {// Anything changed!?
203 username=usersListView->currentItem()->text(1);// Get the username. 217 username=usersListView->currentItem()->text(1);// Get the username.
204 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) { 218 if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) {
205 if(UserDialog::delUser(username)) {// Try to delete the user. 219 if(UserDialog::delUser(username)) {// Try to delete the user.
206 // Update views. 220 // Update views.
207 getUsers(); 221 getUsers();
208 getGroups(); 222 getGroups();
209 } 223 }
210 } 224 }
211 } else { 225 } else {
212 QMessageBox::information(this,"No selection","No user has been selected."); 226 QMessageBox::information(this,"No selection","No user has been selected.");
213 } 227 }
214 } 228 }
215 229
216} 230}
217 231
218void UserConfig::getGroups() { 232void UserConfig::getGroups() {
219 groupsListView->clear();// Empty the listview. 233 groupsListView->clear();// Empty the listview.
220 availableGID=500;// We need to find the next free GID, and are only interested in values between 500 & 65000. 234 availableGID=500;// We need to find the next free GID, and are only interested in values between 500 & 65000.
221 for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {// Split the list into lines. 235 for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) {// Split the list into lines.
222 accounts->splitGroupEntry(*it);// Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem). 236 accounts->splitGroupEntry(*it);// Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem).
223 if(accounts->gr_name.find(QRegExp("^#"),0)) {// Skip commented lines. 237 if(accounts->gr_name.find(QRegExp("^#"),0)) {// Skip commented lines.
224 new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name); 238 new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name);
225 if((accounts->gr_gid>=availableGID) && (accounts->gr_gid<65000)) availableGID=accounts->gr_gid+1;// Maybe a new free GID. 239 if((accounts->gr_gid>=availableGID) && (accounts->gr_gid<65000)) availableGID=accounts->gr_gid+1;// Maybe a new free GID.
226 } 240 }
227 } 241 }
228} 242}
229 243
230void UserConfig::addGroup() { 244void UserConfig::addGroup() {
231 if(GroupDialog::addGroup(availableGID)) getGroups();// Bring up the add group dialog. 245 if(GroupDialog::addGroup(availableGID)) getGroups();// Bring up the add group dialog.
232} 246}
233 247
234void UserConfig::editGroup() { 248void UserConfig::editGroup() {
235 int gid; 249 int gid;
236 if(groupsListView->currentItem()) {// Any group selected? 250 if(groupsListView->currentItem()) {// Any group selected?
237 gid=groupsListView->currentItem()->text(0).toInt();// Get the GID from the listview. 251 gid=groupsListView->currentItem()->text(0).toInt();// Get the GID from the listview.
238 if(GroupDialog::editGroup(gid)) getGroups();// Bring up the edit group dialog. 252 if(GroupDialog::editGroup(gid)) getGroups();// Bring up the edit group dialog.
239 } else { 253 } else {
240 QMessageBox::information(this,"No selection","No group has been selected."); 254 QMessageBox::information(this,"No selection","No group has been selected.");
241 } 255 }
242} 256}
243 257
244void UserConfig::delGroup() { 258void UserConfig::delGroup() {
245 const char *groupname; 259 const char *groupname;
246 if(groupsListView->currentItem()) {// Any group selected? 260 if(groupsListView->currentItem()) {// Any group selected?
247 groupname=groupsListView->currentItem()->text(1);// Get the groupname from the listview. 261 groupname=groupsListView->currentItem()->text(1);// Get the groupname from the listview.
248 if(QMessageBox::warning(this,"Delete group","Are you sure you want to\ndelete the group \""+QString(groupname)+"\" ?","&No","&Yes",0,0,1)) { 262 if(QMessageBox::warning(this,"Delete group","Are you sure you want to\ndelete the group \""+QString(groupname)+"\" ?","&No","&Yes",0,0,1)) {
249 // If confirmed, try to delete the group. 263 // If confirmed, try to delete the group.
250 if(GroupDialog::delGroup(groupname)) getGroups(); // And also update the view afterwards if the user was deleted. 264 if(GroupDialog::delGroup(groupname)) getGroups(); // And also update the view afterwards if the user was deleted.
251 } 265 }
252 } else { 266 } else {
253 QMessageBox::information(this,"No selection","No group has been selected."); 267 QMessageBox::information(this,"No selection","No group has been selected.");
254 } 268 }
255} 269}
256 270
257void UserConfig::showUserMenu(QListViewItem *item) { 271void UserConfig::showUserMenu(QListViewItem *item) {
258 //userPopupMenu.exec(item->mapToGlobal(QPoint(0,0))); 272 //userPopupMenu.exec(item->mapToGlobal(QPoint(0,0)));
259 owarn << "Pressed!" << oendl; 273 owarn << "Pressed!" << oendl;
260} 274}