00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <kabc/addressbook.h>
00026 #include <kapplication.h>
00027 #include <kcombobox.h>
00028 #include <klocale.h>
00029
00030 #include <qbuttongroup.h>
00031 #include <qcombobox.h>
00032 #include <qheader.h>
00033 #include <qlabel.h>
00034 #include <qlayout.h>
00035 #include <qlistview.h>
00036 #include <qpushbutton.h>
00037 #include <qradiobutton.h>
00038 #include <qstringlist.h>
00039 #include <qwhatsthis.h>
00040
00041 #include "core.h"
00042 #include "kabprefs.h"
00043
00044 #include "xxportselectdialog.h"
00045
00046 XXPortSelectDialog::XXPortSelectDialog( KAB::Core *core, bool sort,
00047 QWidget* parent, const char* name )
00048 : KDialogBase( Plain, i18n( "Choose Which Contacts to Export" ), Help | Ok | Cancel,
00049 Ok, parent, name, true, true ), mCore( core ),
00050 mUseSorting( sort )
00051 {
00052 initGUI();
00053
00054 connect( mFiltersCombo, SIGNAL( activated( int ) ),
00055 SLOT( filterChanged( int ) ) );
00056 connect( mCategoriesView, SIGNAL( clicked( QListViewItem* ) ),
00057 SLOT( categoryClicked( QListViewItem* ) ) );
00058
00059
00060 mFilters = Filter::restore( kapp->config(), "Filter" );
00061 Filter::List::iterator filterIt;
00062 QStringList filters;
00063 for ( filterIt = mFilters.begin(); filterIt != mFilters.end(); ++filterIt )
00064 filters.append( (*filterIt).name() );
00065
00066 mFiltersCombo->insertStringList( filters );
00067 mUseFilters->setEnabled( filters.count() > 0 );
00068
00069
00070 QStringList categories = KABPrefs::instance()->mCustomCategories;
00071 QStringList::Iterator it;
00072 for ( it = categories.begin(); it != categories.end(); ++it )
00073 new QCheckListItem( mCategoriesView, *it, QCheckListItem::CheckBox );
00074 mUseCategories->setEnabled( categories.count() > 0 );
00075
00076 int count = mCore->selectedUIDs().count();
00077 mUseSelection->setEnabled( count != 0 );
00078 mUseSelection->setChecked( count > 1 );
00079
00080 mSortTypeCombo->insertItem( i18n( "Ascending" ) );
00081 mSortTypeCombo->insertItem( i18n( "Descending" ) );
00082
00083 mFields = mCore->addressBook()->fields( KABC::Field::All );
00084 KABC::Field::List::Iterator fieldIt;
00085 for ( fieldIt = mFields.begin(); fieldIt != mFields.end(); ++fieldIt )
00086 mFieldCombo->insertItem( (*fieldIt)->label() );
00087 }
00088
00089 KABC::AddresseeList XXPortSelectDialog::contacts()
00090 {
00091 QStringList selection = mCore->selectedUIDs();
00092
00093 KABC::AddresseeList list;
00094 if ( mUseSelection->isChecked() ) {
00095 QStringList::Iterator it;
00096 for ( it = selection.begin(); it != selection.end(); ++it ) {
00097 KABC::Addressee addr = mCore->addressBook()->findByUid( *it );
00098 if ( !addr.isEmpty() )
00099 list.append( addr );
00100 }
00101 } else if ( mUseFilters->isChecked() ) {
00102
00103 Filter::List::Iterator filterIt;
00104 for ( filterIt = mFilters.begin(); filterIt != mFilters.end(); ++filterIt )
00105 if ( (*filterIt).name() == mFiltersCombo->currentText() )
00106 break;
00107
00108 KABC::AddressBook::Iterator it;
00109 for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) {
00110 if ( (*filterIt).filterAddressee( *it ) )
00111 list.append( *it );
00112 }
00113 } else if ( mUseCategories->isChecked() ) {
00114 QStringList categorieList = categories();
00115 KABC::AddressBook::Iterator it;
00116 for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) {
00117 QStringList tmp( (*it).categories() );
00118 QStringList::Iterator tmpIt;
00119 for ( tmpIt = tmp.begin(); tmpIt != tmp.end(); ++tmpIt )
00120 if ( categorieList.contains( *tmpIt ) ) {
00121 list.append( *it );
00122 break;
00123 }
00124 }
00125 } else {
00126
00127 KABC::AddressBook::Iterator it;
00128 for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it )
00129 list.append( *it );
00130 }
00131
00132 if ( mUseSorting ) {
00133 list.setReverseSorting( mSortTypeCombo->currentItem() == 1 );
00134 uint pos = mFieldCombo->currentItem();
00135 if ( pos < mFields.count() )
00136 list.sortByField( mFields[ pos ] );
00137 }
00138
00139 return list;
00140 }
00141
00142 QStringList XXPortSelectDialog::categories() const
00143 {
00144 QStringList list;
00145
00146 QListViewItemIterator it( mCategoriesView );
00147 for ( ; it.current(); ++it ) {
00148 QCheckListItem* qcli = static_cast<QCheckListItem*>(it.current());
00149 if ( qcli->isOn() )
00150 list.append( it.current()->text( 0 ) );
00151 }
00152
00153 return list;
00154 }
00155
00156 void XXPortSelectDialog::filterChanged( int )
00157 {
00158 mUseFilters->setChecked( true );
00159 }
00160
00161 void XXPortSelectDialog::categoryClicked( QListViewItem *i )
00162 {
00163 QCheckListItem *qcli = static_cast<QCheckListItem*>( i );
00164 if ( qcli->isOn() )
00165 mUseCategories->setChecked( true );
00166 }
00167
00168 void XXPortSelectDialog::slotHelp()
00169 {
00170 kapp->invokeHelp( "import-and-export" );
00171 }
00172
00173 void XXPortSelectDialog::initGUI()
00174 {
00175 QFrame *page = plainPage();
00176
00177 QVBoxLayout *topLayout = new QVBoxLayout( page, KDialog::marginHint(),
00178 KDialog::spacingHint() );
00179
00180 QLabel *label = new QLabel( i18n( "Which contacts do you want to export?" ), page );
00181 topLayout->addWidget( label );
00182
00183 mButtonGroup = new QButtonGroup( i18n( "Selection" ), page );
00184 mButtonGroup->setColumnLayout( 0, Qt::Vertical );
00185 mButtonGroup->layout()->setSpacing( KDialog::spacingHint() );
00186 mButtonGroup->layout()->setMargin( KDialog::marginHint() );
00187
00188 QGridLayout *groupLayout = new QGridLayout( mButtonGroup->layout() );
00189 groupLayout->setAlignment( Qt::AlignTop );
00190
00191 mUseWholeBook = new QRadioButton( i18n( "&All contacts" ), mButtonGroup );
00192 mUseWholeBook->setChecked( true );
00193 QWhatsThis::add( mUseWholeBook, i18n( "Export the entire address book" ) );
00194 groupLayout->addWidget( mUseWholeBook, 0, 0 );
00195
00196 mUseSelection = new QRadioButton( i18n( "&Selected contacts" ), mButtonGroup );
00197 QWhatsThis::add( mUseSelection, i18n( "Only export contacts selected in KAddressBook.\n"
00198 "This option is disabled if no contacts are selected." ) );
00199 groupLayout->addWidget( mUseSelection, 1, 0 );
00200
00201 mUseFilters = new QRadioButton( i18n( "Contacts matching &filter" ), mButtonGroup );
00202 QWhatsThis::add( mUseFilters, i18n( "Only export contacts matching the selected filter.\n"
00203 "This option is disabled if you haven't defined any filters" ) );
00204 groupLayout->addWidget( mUseFilters, 2, 0 );
00205
00206 mUseCategories = new QRadioButton( i18n( "Category &members" ), mButtonGroup );
00207 QWhatsThis::add( mUseCategories, i18n( "Only export contacts who are members of a category that is checked on the list to the left.\n"
00208 "This option is disabled if you have no categories." ) );
00209 groupLayout->addWidget( mUseCategories, 3, 0 );
00210
00211 mFiltersCombo = new QComboBox( false, mButtonGroup );
00212 QWhatsThis::add( mFiltersCombo, i18n( "Select a filter to decide which contacts to export." ) );
00213 groupLayout->addWidget( mFiltersCombo, 2, 1 );
00214
00215 mCategoriesView = new QListView( mButtonGroup );
00216 mCategoriesView->addColumn( "" );
00217 mCategoriesView->header()->hide();
00218 QWhatsThis::add( mCategoriesView, i18n( "Check the categories whose members you want to export." ) );
00219 groupLayout->addWidget( mCategoriesView, 3, 1 );
00220
00221 topLayout->addWidget( mButtonGroup );
00222
00223 QButtonGroup *sortingGroup = new QButtonGroup( i18n( "Sorting" ), page );
00224 sortingGroup->setColumnLayout( 0, Qt::Vertical );
00225 QGridLayout *sortLayout = new QGridLayout( sortingGroup->layout(), 2, 2,
00226 KDialog::spacingHint() );
00227 sortLayout->setAlignment( Qt::AlignTop );
00228
00229 label = new QLabel( i18n( "Criterion:" ), sortingGroup );
00230 sortLayout->addWidget( label, 0, 0 );
00231
00232 mFieldCombo = new KComboBox( false, sortingGroup );
00233 sortLayout->addWidget( mFieldCombo, 0, 1 );
00234
00235 label = new QLabel( i18n( "Order:" ), sortingGroup );
00236 sortLayout->addWidget( label, 1, 0 );
00237
00238 mSortTypeCombo = new KComboBox( false, sortingGroup );
00239 sortLayout->addWidget( mSortTypeCombo, 1, 1 );
00240
00241 topLayout->addWidget( sortingGroup );
00242
00243 if ( !mUseSorting )
00244 sortingGroup->hide();
00245 }
00246
00247 #include "xxportselectdialog.moc"