Diffstat (limited to 'noncore/settings/usermanager/usermanager.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/settings/usermanager/usermanager.cpp | 44 |
1 files changed, 29 insertions, 15 deletions
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,184 +1,198 @@ | |||
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> |
15 | using namespace Opie::Core; | 15 | using 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 | */ |
31 | UserConfig::UserConfig(QWidget* parent, const char* name, WFlags fl) : QMainWindow(parent, name, fl) { | 31 | UserConfig::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 | ||
67 | UserConfig::~UserConfig() { | 81 | UserConfig::~UserConfig() { |
68 | accounts->close(); | 82 | accounts->close(); |
69 | delete accounts; | 83 | delete accounts; |
70 | } | 84 | } |
71 | 85 | ||
72 | void UserConfig::setupTabAccounts() { | 86 | void 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 | ||
88 | void UserConfig::setupTabAllUsers() { | 102 | void 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 | ||
104 | void UserConfig::setupTabAllGroups() { | 118 | void 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 | } |
118 | void UserConfig::getUsers() { | 132 | void 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 | ||
147 | void UserConfig::addUser() { | 161 | void 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 | ||
154 | void UserConfig::editUser() { | 168 | void 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 | ||
183 | void UserConfig::delUser() { | 197 | void UserConfig::delUser() { |
184 | QString username; | 198 | QString username; |