00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qlabel.h>
00025
#include <qlayout.h>
00026
#include <qlistbox.h>
00027
#include <qpushbutton.h>
00028
#include <qtoolbutton.h>
00029
#include <qapplication.h>
00030
00031
#include <kcombobox.h>
00032
#include <kdebug.h>
00033
#include <kdialog.h>
00034
#include <kiconloader.h>
00035
#include <klocale.h>
00036
00037
#include "viewconfigurefieldspage.h"
00038
00039
class FieldItem :
public QListBoxText
00040 {
00041
public:
00042 FieldItem(
QListBox *parent, KABC::Field *field )
00043 :
QListBoxText( parent, field->label() ), mField( field ) {}
00044
00045 FieldItem(
QListBox *parent, KABC::Field *field,
int index )
00046 :
QListBoxText( parent, field->label(), parent->item( index ) ),
00047 mField( field ) {}
00048
00049 KABC::Field *field() {
return mField; }
00050
00051
private:
00052 KABC::Field *mField;
00053 };
00054
00055
00056 ViewConfigureFieldsPage::ViewConfigureFieldsPage( KABC::AddressBook *ab,
00057
QWidget *parent,
00058
const char *name )
00059 :
QWidget( parent, name ), mAddressBook( ab )
00060 {
00061 initGUI();
00062 }
00063
00064
void ViewConfigureFieldsPage::restoreSettings( KConfig *config )
00065 {
00066 KABC::Field::List fields = KABC::Field::restoreFields( config,
"KABCFields" );
00067
00068
if ( fields.isEmpty() )
00069 fields = KABC::Field::defaultFields();
00070
00071 KABC::Field::List::ConstIterator it;
00072
for( it = fields.begin(); it != fields.end(); ++it )
00073
new FieldItem( mSelectedBox, *it );
00074
00075 slotShowFields( mCategoryCombo->currentItem() );
00076 }
00077
00078
void ViewConfigureFieldsPage::saveSettings( KConfig *config )
00079 {
00080 KABC::Field::List fields;
00081
00082
for( uint i = 0; i < mSelectedBox->count(); ++i ) {
00083 FieldItem *fieldItem = static_cast<FieldItem *>( mSelectedBox->item( i ) );
00084 fields.append( fieldItem->field() );
00085 }
00086
00087 KABC::Field::saveFields( config,
"KABCFields", fields );
00088 }
00089
00090
void ViewConfigureFieldsPage::slotShowFields(
int index )
00091 {
00092
int currentPos = mUnSelectedBox->currentItem();
00093 mUnSelectedBox->clear();
00094
00095
int category;
00096
if ( index == 0 ) category = KABC::Field::All;
00097
else category = 1 << ( index - 1 );
00098
00099 KABC::Field::List allFields = mAddressBook->fields( category );
00100
00101 KABC::Field::List::ConstIterator it;
00102
for ( it = allFields.begin(); it != allFields.end(); ++it ) {
00103
QListBoxItem *item = mSelectedBox->firstItem();
00104
while( item ) {
00105 FieldItem *fieldItem = static_cast<FieldItem *>( item );
00106
if ( (*it)->equals( fieldItem->field() ) )
00107
break;
00108 item = item->next();
00109 }
00110
00111
if ( !item )
00112
new FieldItem( mUnSelectedBox, *it );
00113 }
00114
00115 mUnSelectedBox->sort();
00116 mUnSelectedBox->setCurrentItem( currentPos );
00117 }
00118
00119
void ViewConfigureFieldsPage::slotSelect()
00120 {
00121
00122
00123
00124
int where = mSelectedBox->currentItem();
00125
if ( !(where > -1 && mSelectedBox->item( where )->isSelected()) )
00126 where = mSelectedBox->count() - 1;
00127
00128
for ( uint i = 0; i < mUnSelectedBox->count(); ++i )
00129
if ( mUnSelectedBox->isSelected( mUnSelectedBox->item( i ) ) ) {
00130 FieldItem *fieldItem = static_cast<FieldItem *>( mUnSelectedBox->item( i ) );
00131
new FieldItem( mSelectedBox, fieldItem->field(), where );
00132 where++;
00133 }
00134
00135 slotShowFields( mCategoryCombo->currentItem() );
00136 }
00137
00138
void ViewConfigureFieldsPage::slotUnSelect()
00139 {
00140
for ( uint i = 0; i < mSelectedBox->count(); ++i )
00141
if ( mSelectedBox->isSelected( mSelectedBox->item( i ) ) ) {
00142 mSelectedBox->removeItem( i );
00143 --i;
00144 }
00145
00146 slotShowFields( mCategoryCombo->currentItem() );
00147 }
00148
00149
void ViewConfigureFieldsPage::slotButtonsEnabled()
00150 {
00151
bool state =
false;
00152
00153
for( uint i = 0; i < mUnSelectedBox->count(); ++i )
00154
if ( mUnSelectedBox->item( i )->isSelected() ) {
00155 state =
true;
00156
break;
00157 }
00158 mAddButton->setEnabled( state );
00159
00160
int j = mSelectedBox->currentItem();
00161 state = ( j > -1 && mSelectedBox->isSelected( j ) );
00162
00163
00164 mUpButton->setEnabled( ( j > 0 && state ) );
00165
00166
00167 mDownButton->setEnabled( ( j > -1 && j < (int)mSelectedBox->count() - 1 && state ) );
00168
00169
00170 state =
false;
00171
for ( uint i = 0; i < mSelectedBox->count(); ++i )
00172
if ( mSelectedBox->item( i )->isSelected() ) {
00173 state =
true;
00174
break;
00175 }
00176 mRemoveButton->setEnabled( state );
00177 }
00178
00179
void ViewConfigureFieldsPage::slotMoveUp()
00180 {
00181
int i = mSelectedBox->currentItem();
00182
if ( i > 0 ) {
00183
QListBoxItem *item = mSelectedBox->item( i );
00184 mSelectedBox->takeItem( item );
00185 mSelectedBox->insertItem( item, i - 1 );
00186 mSelectedBox->setCurrentItem( item );
00187 mSelectedBox->setSelected( i - 1,
true );
00188 }
00189 }
00190
00191
void ViewConfigureFieldsPage::slotMoveDown()
00192 {
00193
int i = mSelectedBox->currentItem();
00194
if ( i > -1 && i < (
int)mSelectedBox->count() - 1 ) {
00195
QListBoxItem *item = mSelectedBox->item( i );
00196 mSelectedBox->takeItem( item );
00197 mSelectedBox->insertItem( item, i + 1 );
00198 mSelectedBox->setCurrentItem( item );
00199 mSelectedBox->setSelected( i + 1,
true );
00200 }
00201 }
00202
00203
void ViewConfigureFieldsPage::initGUI()
00204 {
00205 setCaption( i18n(
"Select Fields to Display") );
00206
00207
QGridLayout *gl =
new QGridLayout(
this , 6, 4, 0, KDialog::spacingHint() );
00208
00209 mCategoryCombo =
new KComboBox(
false,
this );
00210 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::All ) );
00211 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Frequent ) );
00212 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Address ) );
00213 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Email ) );
00214 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Personal ) );
00215 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::Organization ) );
00216 mCategoryCombo->insertItem( KABC::Field::categoryLabel( KABC::Field::CustomCategory ) );
00217 connect( mCategoryCombo, SIGNAL( activated(
int) ), SLOT( slotShowFields(
int) ) );
00218 gl->addWidget( mCategoryCombo, 0, 0 );
00219
00220
QLabel *label =
new QLabel( i18n(
"&Selected fields:" ),
this );
00221 gl->addWidget( label, 0, 2 );
00222
00223 mUnSelectedBox =
new QListBox(
this );
00224 mUnSelectedBox->setSelectionMode( QListBox::Extended );
00225 mUnSelectedBox->setMinimumHeight( 100 );
00226 gl->addWidget( mUnSelectedBox, 1, 0 );
00227
00228 mSelectedBox =
new QListBox(
this );
00229 mSelectedBox->setSelectionMode( QListBox::Extended );
00230 label->setBuddy( mSelectedBox );
00231 gl->addWidget( mSelectedBox, 1, 2 );
00232
00233
QBoxLayout *vb1 =
new QBoxLayout( QBoxLayout::TopToBottom, KDialog::spacingHint() );
00234 vb1->addStretch();
00235
00236 mAddButton =
new QToolButton(
this );
00237 mAddButton->setIconSet( QApplication::reverseLayout() ? SmallIconSet(
"1leftarrow" ) : SmallIconSet(
"1rightarrow" ) );
00238 connect( mAddButton, SIGNAL( clicked() ), SLOT( slotSelect() ) );
00239 vb1->
addWidget( mAddButton );
00240
00241 mRemoveButton =
new QToolButton(
this );
00242 mRemoveButton->setIconSet( QApplication::reverseLayout() ? SmallIconSet(
"1rightarrow" ) : SmallIconSet(
"1leftarrow" ) );
00243 connect( mRemoveButton, SIGNAL( clicked() ), SLOT( slotUnSelect() ) );
00244 vb1->
addWidget( mRemoveButton );
00245
00246 vb1->addStretch();
00247 gl->addLayout( vb1, 1, 1 );
00248
00249 QBoxLayout *vb2 =
new QBoxLayout( QBoxLayout::TopToBottom, KDialog::spacingHint() );
00250 vb2->addStretch();
00251
00252 mUpButton =
new QToolButton(
this );
00253 mUpButton->setIconSet( SmallIconSet(
"1uparrow" ) );
00254 connect( mUpButton, SIGNAL( clicked() ), SLOT( slotMoveUp() ) );
00255 vb2->
addWidget( mUpButton );
00256
00257 mDownButton =
new QToolButton(
this );
00258 mDownButton->setIconSet( SmallIconSet(
"1downarrow" ) );
00259 connect( mDownButton, SIGNAL( clicked() ), SLOT( slotMoveDown() ) );
00260 vb2->
addWidget( mDownButton );
00261
00262 vb2->addStretch();
00263 gl->addLayout( vb2, 1, 3 );
00264
00265
QSize sizeHint = mUnSelectedBox->sizeHint();
00266
00267
00268
00269 slotShowFields( 0 );
00270
00271 sizeHint = sizeHint.expandedTo( mSelectedBox->sizeHint() );
00272 sizeHint.setWidth( mUnSelectedBox->maxItemWidth() );
00273 mUnSelectedBox->setMinimumSize( sizeHint );
00274 mSelectedBox->setMinimumSize( sizeHint );
00275
00276 gl->activate();
00277
00278 connect( mUnSelectedBox, SIGNAL( selectionChanged() ), SLOT( slotButtonsEnabled() ) );
00279 connect( mSelectedBox, SIGNAL( selectionChanged() ), SLOT( slotButtonsEnabled() ) );
00280 connect( mSelectedBox, SIGNAL( currentChanged(
QListBoxItem * ) ), SLOT( slotButtonsEnabled() ) );
00281
00282 slotButtonsEnabled();
00283 }
00284
00285
#include "viewconfigurefieldspage.moc"