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.
23 #include <QVBoxLayout>
24 #include <QGridLayout>
27 #include <kpushbutton.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
,
39 setCaption( i18n("Group Properties") );
40 setButtons( Ok
|Cancel
);
41 setDefaultButton( Ok
);
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
;
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() );
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 );
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 );
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() ) {
135 letype
->setCurrentIndex( 0 );
138 letype
->setCurrentIndex( 1 );
141 letype
->setCurrentIndex( 2 );
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
) );
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 );
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
++ ) {
199 user
= KU_Global::users()->at(i
);
200 QString userName
= user
.getName();
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
);
208 item
->setFlags( Qt::ItemIsEnabled
| Qt::ItemIsSelectable
);
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()));
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()
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
);
250 void KU_EditGroup::delClicked()
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
);
264 void KU_EditGroup::accept()
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.") );
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()) );
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() ) );
299 if ( KU_Global::groups()->lookup(gid
) != -1 ) {
300 KMessageBox::sorry( 0,
301 i18n("Group with gid %1 already exists.", gid
) );
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() ) {
322 mGroup
.setDesc( ledesc
->text() );
323 mGroup
.setDisplayName( ledispname
->text() );
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
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 ) );
339 #include "ku_editgroup.moc"