summaryrefslogtreecommitdiffabout
path: root/kaddressbook/viewconfigurefieldspage.cpp
Unidiff
Diffstat (limited to 'kaddressbook/viewconfigurefieldspage.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/viewconfigurefieldspage.cpp345
1 files changed, 345 insertions, 0 deletions
diff --git a/kaddressbook/viewconfigurefieldspage.cpp b/kaddressbook/viewconfigurefieldspage.cpp
new file mode 100644
index 0000000..2c827eb
--- a/dev/null
+++ b/kaddressbook/viewconfigurefieldspage.cpp
@@ -0,0 +1,345 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#ifndef KAB_EMBEDDED
25#include <kcombobox.h>
26#include <qpushbutton.h>
27#include <kdebug.h>
28
29#else //KAB_EMBEDDED
30#include <qcombobox.h>
31#endif //KAB_EMBEDDED
32
33#include <kiconloader.h>
34#include <kdialog.h>
35#include <klocale.h>
36
37#include <qtoolbutton.h>
38#include <qlabel.h>
39#include <qlistbox.h>
40#include <qlayout.h>
41
42#include "viewconfigurefieldspage.h"
43
44class FieldItem : public QListBoxText
45{
46 public:
47 FieldItem( QListBox *parent, KABC::Field *field )
48 : QListBoxText( parent, field->label() ), mField( field ) {}
49
50 FieldItem( QListBox *parent, KABC::Field *field, int index )
51 : QListBoxText( parent, field->label(), parent->item( index ) ),
52 mField( field ) {}
53
54 KABC::Field *field() { return mField; }
55
56 private:
57 KABC::Field *mField;
58};
59
60
61ViewConfigureFieldsPage::ViewConfigureFieldsPage( KABC::AddressBook *ab,
62 QWidget *parent,
63 const char *name )
64 : QWidget( parent, name ), mAddressBook( ab )
65{
66 initGUI();
67}
68
69void ViewConfigureFieldsPage::restoreSettings( KConfig *config )
70{
71 KABC::Field::List fields = KABC::Field::restoreFields( config, "KABCFields" );
72
73 if ( fields.isEmpty() )
74 fields = KABC::Field::defaultFields();
75
76 KABC::Field::List::ConstIterator it;
77 for( it = fields.begin(); it != fields.end(); ++it )
78 new FieldItem( mSelectedBox, *it );
79
80 slotShowFields( mCategoryCombo->currentItem() );
81}
82
83void ViewConfigureFieldsPage::saveSettings( KConfig *config )
84{
85 KABC::Field::List fields;
86
87 for( uint i = 0; i < mSelectedBox->count(); ++i ) {
88 FieldItem *fieldItem = static_cast<FieldItem *>( mSelectedBox->item( i ) );
89 fields.append( fieldItem->field() );
90 }
91
92 KABC::Field::saveFields( config, "KABCFields", fields );
93}
94
95void ViewConfigureFieldsPage::slotShowFields( int index )
96{
97 int currentPos = mUnSelectedBox->currentItem();
98 mUnSelectedBox->clear();
99
100 int category;
101 if ( index == 0 ) category = KABC::Field::All;
102 else category = 1 << ( index - 1 );
103
104 KABC::Field::List allFields = mAddressBook->fields( category );
105
106 KABC::Field::List::ConstIterator it;
107 for ( it = allFields.begin(); it != allFields.end(); ++it ) {
108 QListBoxItem *item = mSelectedBox->firstItem();
109 while( item ) {
110 FieldItem *fieldItem = static_cast<FieldItem *>( item );
111 if ( (*it)->equals( fieldItem->field() ) )
112 break;
113 item = item->next();
114 }
115
116 if ( !item )
117 new FieldItem( mUnSelectedBox, *it );
118 }
119
120 mUnSelectedBox->sort();
121 mUnSelectedBox->setCurrentItem( currentPos );
122}
123
124void ViewConfigureFieldsPage::slotSelect()
125{
126 // insert selected items in the unselected list to the selected list,
127 // directoy under the current item if selected, or at the bottonm if
128 // nothing is selected in the selected list
129 int where = mSelectedBox->currentItem();
130//US QListBoxItem::isSelected()) is not available in QT 2.x. Use selected instead.
131 if ( !(where > -1 && mSelectedBox->item( where )->selected()) )
132 where = mSelectedBox->count() - 1;
133
134 for ( uint i = 0; i < mUnSelectedBox->count(); ++i )
135 if ( mUnSelectedBox->isSelected( mUnSelectedBox->item( i ) ) ) {
136 FieldItem *fieldItem = static_cast<FieldItem *>( mUnSelectedBox->item( i ) );
137 new FieldItem( mSelectedBox, fieldItem->field(), where );
138 where++;
139 }
140
141 slotShowFields( mCategoryCombo->currentItem() );
142}
143
144void ViewConfigureFieldsPage::slotUnSelect()
145{
146 for ( uint i = 0; i < mSelectedBox->count(); ++i )
147 if ( mSelectedBox->isSelected( mSelectedBox->item( i ) ) ) {
148 mSelectedBox->removeItem( i );
149 --i;
150 }
151
152 slotShowFields( mCategoryCombo->currentItem() );
153}
154
155void ViewConfigureFieldsPage::slotButtonsEnabled()
156{
157 bool state = false;
158 // add button: enabled if any items are selected in the unselected list
159 for( uint i = 0; i < mUnSelectedBox->count(); ++i )
160//US QListBoxItem::isSelected()) is not available in QT 2.x. Use selected instead.
161 if ( mUnSelectedBox->item( i )->selected() ) {
162 state = true;
163 break;
164 }
165 mAddButton->setEnabled( state );
166
167 int j = mSelectedBox->currentItem();
168 state = ( j > -1 && mSelectedBox->isSelected( j ) );
169
170 // up button: enabled if there is a current item > 0 and that is selected
171 mUpButton->setEnabled( ( j > 0 && state ) );
172
173 // down button: enabled if there is a current item < count - 2 and that is selected
174 mDownButton->setEnabled( ( j > -1 && j < (int)mSelectedBox->count() - 1 && state ) );
175
176 // remove button: enabled if any items are selected in the selected list
177 state = false;
178 for ( uint i = 0; i < mSelectedBox->count(); ++i )
179//US QListBoxItem::isSelected()) is not available in QT 2.x. Use selected instead.
180 if ( mSelectedBox->item( i )->selected() ) {
181 state = true;
182 break;
183 }
184 mRemoveButton->setEnabled( state );
185}
186
187void ViewConfigureFieldsPage::slotMoveUp()
188{
189 int i = mSelectedBox->currentItem();
190 if ( i > 0 ) {
191 QListBoxItem *item = mSelectedBox->item( i );
192 mSelectedBox->takeItem( item );
193 mSelectedBox->insertItem( item, i - 1 );
194 mSelectedBox->setCurrentItem( item );
195 mSelectedBox->setSelected( i - 1, true );
196 }
197}
198
199void ViewConfigureFieldsPage::slotMoveDown()
200{
201 int i = mSelectedBox->currentItem();
202 if ( i > -1 && i < (int)mSelectedBox->count() - 1 ) {
203 QListBoxItem *item = mSelectedBox->item( i );
204 mSelectedBox->takeItem( item );
205 mSelectedBox->insertItem( item, i + 1 );
206 mSelectedBox->setCurrentItem( item );
207 mSelectedBox->setSelected( i + 1, true );
208 }
209}
210
211void ViewConfigureFieldsPage::initGUI()
212{
213 //US change the orientation dependent on the following flag
214 // right the flag is set only staticly.
215 // 0 = 640x480 ; 1 = 240x320
216 bool orientation = 1;
217
218
219 setCaption( i18n("Select Fields to Display") );
220
221 QGridLayout *gl = 0;
222
223 if (orientation == 0)
224 gl = new QGridLayout( this , 6, 4, 0, KDialog::spacingHint() );
225 else
226 gl = new QGridLayout( this , 4, 6, 0, KDialog::spacingHint() );
227
228 #ifndef KAB_EMBEDDED
229 mCategoryCombo = new KComboBox( false, this );
230 #else //KAB_EMBEDDED
231 mCategoryCombo = new QComboBox( false, this );
232 #endif //KAB_EMBEDDED
233
234 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::All ) );
235 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Frequent ) );
236 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Address ) );
237 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Email ) );
238 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Personal ) );
239 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Organization ) );
240 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::CustomCategory ) );
241 connect( mCategoryCombo, SIGNAL( activated(int) ), SLOT( slotShowFields(int) ) );
242 gl->addWidget( mCategoryCombo, 0, 0 );
243
244 QLabel *label = new QLabel( i18n( "&Selected fields:" ), this );
245 if (orientation == 0)
246 gl->addWidget( label, 0, 2 );
247 else
248 gl->addWidget( label, 2, 0 );
249
250
251 mUnSelectedBox = new QListBox( this );
252 mUnSelectedBox->setSelectionMode( QListBox::Extended );
253 mUnSelectedBox->setMinimumHeight( 100 );
254 if (orientation == 0)
255 gl->addWidget( mUnSelectedBox, 1, 0 );
256 else
257 gl->addWidget( mUnSelectedBox, 0, 1 );
258
259 mSelectedBox = new QListBox( this );
260 mSelectedBox->setSelectionMode( QListBox::Extended );
261 label->setBuddy( mSelectedBox );
262 if (orientation == 0)
263 gl->addWidget( mSelectedBox, 1, 2 );
264 else
265 gl->addWidget( mSelectedBox, 2, 1 );
266
267 QBoxLayout *vb1 = 0;
268 if (orientation == 0)
269 vb1 = new QBoxLayout( QBoxLayout::TopToBottom, KDialog::spacingHint() );
270 else
271 vb1 = new QBoxLayout( QBoxLayout::LeftToRight, KDialog::spacingHint() );
272
273 vb1->addStretch();
274
275 mAddButton = new QToolButton( this );
276 if (orientation == 0)
277 mAddButton->setIconSet( SmallIconSet( "1rightarrow" ) );
278 else
279 mAddButton->setIconSet( SmallIconSet( "1downarrow" ) );
280 connect( mAddButton, SIGNAL( clicked() ), SLOT( slotSelect() ) );
281 vb1->addWidget( mAddButton );
282
283 mRemoveButton = new QToolButton( this );
284 if (orientation == 0)
285 mRemoveButton->setIconSet( SmallIconSet( "1leftarrow" ) );
286 else
287 mRemoveButton->setIconSet( SmallIconSet( "1uparrow" ) );
288
289 connect( mRemoveButton, SIGNAL( clicked() ), SLOT( slotUnSelect() ) );
290 vb1->addWidget( mRemoveButton );
291
292 vb1->addStretch();
293 if (orientation == 0)
294 gl->addLayout( vb1, 1, 1 );
295 else
296 gl->addLayout( vb1, 1, 1 );
297
298 QBoxLayout *vb2 = 0;
299 if (orientation == 0)
300 vb2 = new QBoxLayout( QBoxLayout::TopToBottom, KDialog::spacingHint() );
301 else
302 vb2 = new QBoxLayout( QBoxLayout::LeftToRight, KDialog::spacingHint() );
303
304 vb2->addStretch();
305
306 mUpButton = new QToolButton( this );
307 mUpButton->setIconSet( SmallIconSet( "1uparrow" ) );
308 connect( mUpButton, SIGNAL( clicked() ), SLOT( slotMoveUp() ) );
309 vb2->addWidget( mUpButton );
310
311 mDownButton = new QToolButton( this );
312 mDownButton->setIconSet( SmallIconSet( "1downarrow" ) );
313 connect( mDownButton, SIGNAL( clicked() ), SLOT( slotMoveDown() ) );
314 vb2->addWidget( mDownButton );
315
316 vb2->addStretch();
317 if (orientation == 0)
318 gl->addLayout( vb2, 1, 3 );
319 else
320 gl->addLayout( vb2, 3, 1 );
321
322 QSize sizeHint = mUnSelectedBox->sizeHint();
323
324 // make sure we fill the list with all items, so that we can
325 // get the maxItemWidth we need to not truncate the view
326 slotShowFields( 0 );
327
328 sizeHint = sizeHint.expandedTo( mSelectedBox->sizeHint() );
329 sizeHint.setWidth( mUnSelectedBox->maxItemWidth() );
330 mUnSelectedBox->setMinimumSize( sizeHint );
331 mSelectedBox->setMinimumSize( sizeHint );
332
333 gl->activate();
334
335 connect( mUnSelectedBox, SIGNAL( selectionChanged() ), SLOT( slotButtonsEnabled() ) );
336 connect( mSelectedBox, SIGNAL( selectionChanged() ), SLOT( slotButtonsEnabled() ) );
337 connect( mSelectedBox, SIGNAL( currentChanged( QListBoxItem * ) ), SLOT( slotButtonsEnabled() ) );
338
339 slotButtonsEnabled();
340}
341
342
343#ifndef KAB_EMBEDDED
344#include "viewconfigurefieldspage.moc"
345#endif //KAB_EMBEDDED