Proof-reading - fixed one usage of the i18n plural form (it wasn't doing before,...
[kdeadmin.git] / kuser / ku_editgroup.cpp
blobc7b4076ef955c287d7bbf804258c327b77cdb60e
1 /*
2 * Copyright (c) 1998 Denis Perchine <dyp@perchine.com>
3 * Copyright (c) 2004 Szombathelyi György <gyurco@freemail.hu>
4 * Former maintainer: Adriaan de Groot <groot@kde.org>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 **/
22 #include <QLabel>
23 #include <QVBoxLayout>
24 #include <QGridLayout>
26 #include <klocale.h>
27 #include <kpushbutton.h>
28 #include <kicon.h>
29 #include <kdebug.h>
30 #include <kmessagebox.h>
32 #include "ku_global.h"
33 #include "ku_editgroup.h"
35 KU_EditGroup::KU_EditGroup(const KU_Group &group, bool add,
36 QWidget* parent)
37 : KDialog(parent)
39 setCaption( i18n("Group Properties") );
40 setButtons( Ok|Cancel );
41 setDefaultButton( Ok );
43 mAdd = add;
44 mOldName = group.getName();
45 SID sid = group.getSID();
46 ro = KU_Global::groups()->getCaps() & KU_Groups::Cap_ReadOnly;
47 mSamba = KU_Global::groups()->getCaps() & KU_Groups::Cap_Samba;
49 RID rid;
50 rid.rid = 512; rid.name = i18n("Domain Admins"); rid.desc = i18n("Admins"); mRids.append( rid );
51 rid.rid = 513; rid.name = i18n("Domain Users"); rid.desc = i18n("Users"); mRids.append( rid );
52 rid.rid = 514; rid.name = i18n("Domain Guests"); rid.desc = i18n("Guests"); mRids.append( rid );
54 QFrame *page = new QFrame( this );
55 QGridLayout *layout = new QGridLayout( page );
56 layout->setSpacing( spacingHint() );
57 layout->setMargin( marginHint() );
59 QLabel *lb;
60 setMainWidget( page );
62 lb = new QLabel( page );
63 lb->setText(i18n("Group number:"));
64 legid = new KLineEdit(page);
65 // ensure it fits at least 20 characters
66 legid->setText( "XXXXXXXXXXXXXXXXXXX" );
67 kDebug() << "gid: " << group.getGID();
68 legid->setText( QString::number(group.getGID()) );
69 legid->setValidator( new QIntValidator(this) );
70 legid->setEnabled( mAdd );
71 legid->setReadOnly( ro );
72 lb->setBuddy( legid );
73 layout->addWidget( lb, 0, 0 );
74 layout->addWidget( legid, 0, 1, 1, 2 );
76 if ( mSamba ) {
77 lb = new QLabel( page );
78 lb->setText(i18n("Group rid:"));
79 lerid = new KComboBox( page );
80 lerid->setEditable( !ro );
81 QList<RID>::Iterator it;
82 for ( it = mRids.begin(); it != mRids.end(); ++it ) {
83 lerid->addItem( QString::number( (*it).rid ) + " - " + (*it).name );
86 lerid->lineEdit()->setText( QString::number( sid.getRID() ) );
87 lerid->setValidator (new QIntValidator(this) );
88 lerid->setEnabled( mAdd );
89 connect( lerid, SIGNAL(activated(int)), SLOT(ridSelected(int)) );
90 lb->setBuddy( lerid );
91 layout->addWidget( lb, 1, 0 );
92 layout->addWidget( lerid, 1, 1, 1, 2 );
95 lb = new QLabel( page );
96 lb->setText(i18n("Group name:"));
98 legrpname = new KLineEdit( page );
99 // ensure it fits at least 20 characters
100 legrpname->setText( "XXXXXXXXXXXXXXXXXXX" );
101 legrpname->setText( group.getName() );
102 legrpname->setReadOnly( ro );
103 legrpname->setFocus();
104 lb->setBuddy( legrpname );
105 layout->addWidget( lb, 2, 0 );
106 layout->addWidget( legrpname, 2, 1, 1, 2 );
108 if ( mSamba ) {
109 lb = new QLabel( page );
110 lb->setText(i18n("Description:"));
111 ledesc = new KLineEdit(page);
112 ledesc->setText( group.getDesc() );
113 ledesc->setReadOnly( ro );
114 lb->setBuddy( ledesc );
115 layout->addWidget( lb, 3, 0 );
116 layout->addWidget( ledesc, 3, 1, 1, 2 );
118 lb = new QLabel( page );
119 lb->setText(i18n("Display name:"));
120 ledispname = new KLineEdit(page);
121 ledispname->setText( group.getDisplayName() );
122 ledispname->setReadOnly( ro );
123 lb->setBuddy( ledispname );
124 layout->addWidget( lb, 4, 0 );
125 layout->addWidget( ledispname, 4, 1, 1, 2 );
127 lb = new QLabel( page );
128 lb->setText(i18n("Type:"));
129 letype = new KComboBox( page );
130 letype->addItem( i18n("Domain") );
131 letype->addItem( i18n("Local") );
132 letype->addItem( i18n("Builtin") );
133 switch ( group.getType() ) {
134 case 2:
135 letype->setCurrentIndex( 0 );
136 break;
137 case 4:
138 letype->setCurrentIndex( 1 );
139 break;
140 case 5:
141 letype->setCurrentIndex( 2 );
142 break;
144 lb->setBuddy( letype );
145 layout->addWidget( lb, 5, 0 );
146 layout->addWidget( letype, 5, 1, 1, 2 );
148 lb = new QLabel( page );
149 lb->setText(i18n("Domain SID:"));
150 ledomsid = new KLineEdit(page);
151 ledomsid->setText( sid.getDOM() );
152 ledomsid->setReadOnly( ro );
153 lb->setBuddy( ledomsid );
154 layout->addWidget( lb, 6, 0 );
155 layout->addWidget( ledomsid, 6, 1, 1, 2 );
157 cbsamba = new QCheckBox( i18n("Disable Samba group information"), page );
158 layout->addWidget( cbsamba, 7, 0, 1, 3 );
159 connect( cbsamba, SIGNAL(toggled(bool)), ledesc, SLOT(setDisabled(bool)) );
160 connect( cbsamba, SIGNAL(toggled(bool)), ledispname, SLOT(setDisabled(bool)) );
161 connect( cbsamba, SIGNAL(toggled(bool)), letype, SLOT(setDisabled(bool)) );
162 connect( cbsamba, SIGNAL(toggled(bool)), ledomsid, SLOT(setDisabled(bool)) );
163 if ( mAdd ) connect( cbsamba, SIGNAL(toggled(bool)), lerid, SLOT(setDisabled(bool)) );
164 if ( !mAdd ) cbsamba->setChecked( !( group.getCaps() & KU_Group::Cap_Samba ) );
167 QStringList sl;
169 m_list_in = new QTreeWidget(page);
170 m_list_in->setColumnCount( 1 );
171 sl.append(i18n("Users in Group"));
172 m_list_in->setHeaderLabels(sl);
173 m_list_in->setSelectionMode( QAbstractItemView::ExtendedSelection );
174 m_list_in->setSortingEnabled( true );
175 layout->addWidget( m_list_in, 8, 0 );
177 QWidget *vbox = new QWidget;
178 QPushButton *btadd = new QPushButton(KIcon("list-add"), i18n("Add"), vbox);
179 QPushButton *btdel = new QPushButton(KIcon("list-remove"), i18n("Remove"), vbox);
181 QVBoxLayout *vlayout = new QVBoxLayout;
182 vlayout->addWidget(btadd);
183 vlayout->addWidget(btdel);
184 vbox->setLayout(vlayout);
186 layout->addWidget( vbox, 8, 1 );
188 sl.clear();
189 m_list_notin = new QTreeWidget( page );
190 m_list_notin->setColumnCount( 1 );
191 sl.append(i18n("Users NOT in Group"));
192 m_list_notin->setHeaderLabels(sl);
193 m_list_notin->setSelectionMode( QAbstractItemView::ExtendedSelection );
194 m_list_notin->setSortingEnabled( true );
195 layout->addWidget( m_list_notin, 8, 2 );
197 for ( int i = 0; i<KU_Global::users()->count(); i++ ) {
198 KU_User user;
199 user = KU_Global::users()->at(i);
200 QString userName = user.getName();
201 sl.clear();
202 sl.append( userName );
203 if ( group.lookup_user(userName) || user.getGID() == group.getGID() ) {
204 QTreeWidgetItem *item = new QTreeWidgetItem(m_list_in, sl);
205 if ( user.getGID() == group.getGID() )
206 item->setFlags( Qt::ItemIsEnabled );
207 else
208 item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
209 } else {
210 QTreeWidgetItem *item = new QTreeWidgetItem(m_list_notin, sl);
211 item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
215 connect(btadd, SIGNAL(clicked()), SLOT(addClicked()));
216 connect(btdel, SIGNAL(clicked()), SLOT(delClicked()));
218 if ( ro ) {
219 btadd->setEnabled( false );
220 btdel->setEnabled( false );
224 KU_EditGroup::~KU_EditGroup()
228 void KU_EditGroup::ridSelected( int index )
230 lerid->lineEdit()->setText( QString::number( mRids[ index ].rid ) );
231 legrpname->setText( mRids[ index ].name );
232 ledesc->setText( mRids[ index ].desc );
233 ledispname->setText( mRids[ index ].name );
236 void KU_EditGroup::addClicked()
238 int i = 0;
239 while ( i < m_list_notin->topLevelItemCount() ) {
240 QTreeWidgetItem *item = m_list_notin->topLevelItem( i );
241 if ( m_list_notin->isItemSelected( item ) ) {
242 item = m_list_notin->takeTopLevelItem( i );
243 m_list_in->insertTopLevelItem( m_list_in->topLevelItemCount(), item );
244 } else {
245 i++;
250 void KU_EditGroup::delClicked()
252 int i = 0;
253 while ( i < m_list_in->topLevelItemCount() ) {
254 QTreeWidgetItem *item = m_list_in->topLevelItem( i );
255 if ( m_list_in->isItemSelected( item ) ) {
256 item = m_list_in->takeTopLevelItem( i );
257 m_list_notin->insertTopLevelItem( m_list_notin->topLevelItemCount(), item );
258 } else {
259 i++;
264 void KU_EditGroup::accept()
266 if ( ro ) {
267 reject();
268 return;
271 SID sid;
272 gid_t gid = legid->text().toInt();
274 if ( mSamba && !cbsamba->isChecked() ) {
275 sid.setDOM( ledomsid->text() );
276 sid.setRID( lerid->currentText() );
279 if ( legrpname->text().isEmpty() ) {
280 KMessageBox::sorry( 0,
281 i18n("You need to type a group name.") );
282 return;
285 if ( legrpname->text() != mOldName &&
286 KU_Global::groups()->lookup( legrpname->text() ) != -1 ) {
288 KMessageBox::sorry( 0,
289 i18n("Group with name %1 already exists.", legrpname->text()) );
290 return;
293 if ( mAdd ) {
294 if ( mSamba && !cbsamba->isChecked() && KU_Global::groups()->lookup_sam( sid ) != -1 ) {
295 KMessageBox::sorry( 0,
296 i18n("Group with SID %1 already exists.", sid.getSID() ) );
297 return;
299 if ( KU_Global::groups()->lookup(gid) != -1 ) {
300 KMessageBox::sorry( 0,
301 i18n("Group with gid %1 already exists.", gid) );
302 return;
306 mGroup.setName( legrpname->text() );
307 mGroup.setGID( gid );
308 if ( mSamba && !cbsamba->isChecked() ) {
309 mGroup.setCaps ( KU_Group::Cap_Samba );
310 mGroup.setSID( sid );
311 switch ( letype->currentIndex() ) {
312 case 0:
313 mGroup.setType( 2 );
314 break;
315 case 1:
316 mGroup.setType( 4 );
317 break;
318 case 2:
319 mGroup.setType( 5 );
320 break;
322 mGroup.setDesc( ledesc->text() );
323 mGroup.setDisplayName( ledispname->text() );
324 } else {
325 mGroup.setCaps( 0 );
326 mGroup.setSID( SID( QString::null ) ); //krazy:exclude=nullstrassign for old broken gcc
327 mGroup.setDesc( QString::null ); //krazy:exclude=nullstrassign for old broken gcc
328 mGroup.setDisplayName( QString::null ); //krazy:exclude=nullstrassign for old broken gcc
329 mGroup.setType( 0 );
332 for( int i = 0; i < m_list_in->topLevelItemCount(); i++ ) {
333 QTreeWidgetItem *item = m_list_in->topLevelItem( i );
334 mGroup.addUser( item->text( 0 ) );
336 done( Accepted );
339 #include "ku_editgroup.moc"