author | zautrix <zautrix> | 2005-04-27 23:23:17 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-04-27 23:23:17 (UTC) |
commit | 1540fc9be514330c76c999562fcf3e6bc1e2ffbb (patch) (side-by-side diff) | |
tree | ade066f57be45f0d9783c0efa4e869fee337dd51 /kaddressbook | |
parent | 3978688cbe832e2b72c8048b96c9a7c43ce11bc9 (diff) | |
download | kdepimpi-1540fc9be514330c76c999562fcf3e6bc1e2ffbb.zip kdepimpi-1540fc9be514330c76c999562fcf3e6bc1e2ffbb.tar.gz kdepimpi-1540fc9be514330c76c999562fcf3e6bc1e2ffbb.tar.bz2 |
csv fixes
-rw-r--r-- | kaddressbook/xxport/csvimportdialog.cpp | 73 | ||||
-rw-r--r-- | kaddressbook/xxport/csvimportdialog.h | 4 |
2 files changed, 61 insertions, 16 deletions
diff --git a/kaddressbook/xxport/csvimportdialog.cpp b/kaddressbook/xxport/csvimportdialog.cpp index cc55a24..41e2612 100644 --- a/kaddressbook/xxport/csvimportdialog.cpp +++ b/kaddressbook/xxport/csvimportdialog.cpp @@ -113,41 +113,44 @@ CSVImportDialog::CSVImportDialog( KABC::AddressBook *ab, QWidget *parent, mTypeMap.insert( KABC::Addressee::homeFaxLabel(), HomeFax ); mTypeMap.insert( KABC::Addressee::businessFaxLabel(), BusinessFax ); mTypeMap.insert( KABC::Addressee::carPhoneLabel(), CarPhone ); mTypeMap.insert( KABC::Addressee::isdnLabel(), Isdn ); mTypeMap.insert( KABC::Addressee::pagerLabel(), Pager ); mTypeMap.insert( KABC::Addressee::emailLabel(), Email ); mTypeMap.insert( KABC::Addressee::mailerLabel(), Mailer ); mTypeMap.insert( KABC::Addressee::titleLabel(), Title ); mTypeMap.insert( KABC::Addressee::roleLabel(), Role ); mTypeMap.insert( KABC::Addressee::organizationLabel(), Organization ); mTypeMap.insert( KABC::Addressee::noteLabel(), Note ); mTypeMap.insert( KABC::Addressee::urlLabel(), URL ); + mTypeMap.insert( KABC::Addressee::categoryLabel(), Categories ); mCustomCounter = mTypeMap.count(); int count = mCustomCounter; KABC::Field::List fields = mAddressBook->fields( KABC::Field::CustomCategory ); KABC::Field::List::Iterator it; for ( it = fields.begin(); it != fields.end(); ++it, ++count ) mTypeMap.insert( (*it)->label(), count ); connect( mDelimiterBox, SIGNAL( clicked( int ) ), this, SLOT( delimiterClicked( int ) ) ); connect( mDelimiterEdit, SIGNAL( returnPressed() ), this, SLOT( returnPressed() ) ); connect( mDelimiterEdit, SIGNAL( textChanged ( const QString& ) ), this, SLOT( textChanged ( const QString& ) ) ); connect( mComboLine, SIGNAL( activated( const QString& ) ), this, SLOT( lineSelected( const QString& ) ) ); + connect( mComboCodec, SIGNAL( activated( const QString& ) ), + this, SLOT( codecChanged( const QString& ) ) ); connect( mComboQuote, SIGNAL( activated( const QString& ) ), this, SLOT( textquoteSelected( const QString& ) ) ); connect( mIgnoreDuplicates, SIGNAL( stateChanged( int ) ), this, SLOT( ignoreDuplicatesChanged( int ) ) ); connect( mUrlRequester, SIGNAL( returnPressed( const QString& ) ), this, SLOT( setFile( const QString& ) ) ); connect( mUrlRequester, SIGNAL( urlSelected( const QString& ) ), this, SLOT( setFile( const QString& ) ) ); connect( mUrlRequester->lineEdit(), SIGNAL( textChanged ( const QString& ) ), this, SLOT( urlChanged( const QString& ) ) ); @@ -240,27 +243,33 @@ KABC::AddresseeList CSVImportDialog::contacts() const a.setTitle( value ); break; case Mailer: a.setMailer( value ); break; case URL: a.setUrl( value ); break; case Organization: a.setOrganization( value ); break; case Note: - a.setNote( value ); + if ( a.note().isEmpty() ) + a.setNote( value ); + else { + a.setNote( a.note()+"\n"+value ); + } + break; + case Categories: + a.insertCategory( value ); break; - case HomePhone: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Home ); a.insertPhoneNumber( number ); } break; case BusinessPhone: if ( !value.isEmpty() ) { KABC::PhoneNumber number( value, KABC::PhoneNumber::Work ); a.insertPhoneNumber( number ); } break; @@ -376,34 +385,34 @@ void CSVImportDialog::initGUI() QGridLayout *layout = new QGridLayout( page, 1, 1, marginHintSmall(), spacingHintSmall() ); QHBoxLayout *hbox = new QHBoxLayout(); hbox->setSpacing( spacingHint() ); QLabel *label = new QLabel( i18n( "File to import:" ), page ); hbox->addWidget( label ); mUrlRequester = new KURLRequester( page ); mUrlRequester->setFilter( "*.csv" ); hbox->addWidget( mUrlRequester ); - layout->addMultiCellLayout( hbox, 0, 0, 0, 1 ); + layout->addMultiCellLayout( hbox, 0, 0, 0, 2 ); // Delimiter: comma, semicolon, tab, space, other mDelimiterBox = new QButtonGroup( i18n( "Delimiter" ), page ); mDelimiterBox->setColumnLayout( 0, Qt::Vertical ); mDelimiterBox->layout()->setSpacing( spacingHint() ); mDelimiterBox->layout()->setMargin( marginHint() ); QGridLayout *delimiterLayout = new QGridLayout( mDelimiterBox->layout() ); delimiterLayout->setAlignment( Qt::AlignTop ); - layout->addMultiCellWidget( mDelimiterBox, 1, 1, 0, 1 ); + layout->addMultiCellWidget( mDelimiterBox, 1, 1, 0, 2 ); mRadioComma = new QRadioButton( i18n( "Comma" ), mDelimiterBox ); mRadioComma->setChecked( true ); delimiterLayout->addWidget( mRadioComma, 0, 0 ); mRadioSemicolon = new QRadioButton( i18n( "Semicolon" ), mDelimiterBox ); delimiterLayout->addWidget( mRadioSemicolon, 0, 1 ); mRadioTab = new QRadioButton( i18n( "Tabulator" ), mDelimiterBox ); delimiterLayout->addWidget( mRadioTab, 1, 0 ); mRadioSpace = new QRadioButton( i18n( "Space" ), mDelimiterBox ); @@ -415,51 +424,57 @@ void CSVImportDialog::initGUI() mDelimiterEdit = new QLineEdit( mDelimiterBox ); delimiterLayout->addWidget( mDelimiterEdit, 1, 2 ); mComboLine = new QComboBox( false, page ); mComboLine->insertItem( i18n( "1" ) ); layout->addWidget( mComboLine, 3, 1 ); mComboQuote = new QComboBox( false, page ); mComboQuote->insertItem( i18n( "\"" ), 0 ); mComboQuote->insertItem( i18n( "'" ), 1 ); mComboQuote->insertItem( i18n( "None" ), 2 ); layout->addWidget( mComboQuote, 3, 0 ); - + mComboCodec = new QComboBox( false, page ); + mComboCodec->insertItem( i18n( "UTF8" ), 0 ); + mComboCodec->insertItem( i18n( "LATIN1" ), 1 ); + mComboCodec->insertItem( i18n( "LOCALE" ), 2 ); + layout->addWidget( mComboCodec, 3, 2 ); label = new QLabel( i18n( "Start at line:" ), page ); layout->addWidget( label, 2, 1 ); label = new QLabel( i18n( "Textquote:" ), page ); layout->addWidget( label, 2, 0 ); + label = new QLabel( i18n( "Codec:" ), page ); + layout->addWidget( label, 2, 2 ); mIgnoreDuplicates = new QCheckBox( page ); mIgnoreDuplicates->setText( i18n( "Ignore duplicate delimiters" ) ); - layout->addMultiCellWidget( mIgnoreDuplicates, 4, 4, 0, 1 ); + layout->addMultiCellWidget( mIgnoreDuplicates, 4, 4, 0, 2 ); mTable = new QTable( 0, 0, page ); mTable->setSelectionMode( QTable::NoSelection ); //mTable->horizontalHeader()->hide(); - layout->addMultiCellWidget( mTable, 5, 5, 0, 1 ); + layout->addMultiCellWidget( mTable, 5, 5, 0, 2 ); /*US setButtonText( User1, i18n( "Apply Template" ) ); setButtonText( User2, i18n( "Save Template" ) ); */ enableButtonOK( false ); findButton( User1 )->setEnabled( false ); findButton( User2 )->setEnabled( false ); #ifdef DESKTOP_VERSION - resize( 500, 300 ); + resize( 640, 480 ); #else showMaximized(); #endif } void CSVImportDialog::fillTable() { int row, column; bool lastCharDelimiter = false; bool ignoreDups = mIgnoreDuplicates->isChecked(); enum { S_START, S_QUOTED_FIELD, S_MAYBE_END_OF_QUOTED_FIELD, S_END_OF_QUOTED_FIELD, S_MAYBE_NORMAL_FIELD, S_NORMAL_FIELD } state = S_START; @@ -474,28 +489,41 @@ void CSVImportDialog::fillTable() for ( column = 0; column < mTable->numCols(); ++column ) { QComboTableItem *item = static_cast<QComboTableItem*>( mTable->item( 0, column ) ); if ( !item || mClearTypeStore ) mTypeStore.append( typeToPos( Undefined ) ); else if ( item ) mTypeStore.append( item->currentItem() ); } clearTable(); row = column = 1; - mData = QString( mFileArray ); + if ( mComboCodec->currentItem () == 0 ) { + mData = QString::fromUtf8( mFileArray.data() ); + } else if ( mComboCodec->currentItem () == 1 ) { + mData = QString::fromLatin1( mFileArray.data() ); + } else { + mData = QString::fromLocal8Bit( mFileArray.data() ); + } QTextStream inputStream( mData, IO_ReadOnly ); - inputStream.setEncoding( QTextStream::Locale ); + + if ( mComboCodec->currentItem () == 0 ) { + inputStream.setEncoding( QTextStream::UnicodeUTF8 ); + } else if ( mComboCodec->currentItem () == 1 ) { + inputStream.setEncoding( QTextStream::Latin1 ); + } else { + inputStream.setEncoding( QTextStream::Locale ); + } int maxColumn = 0; while ( !inputStream.atEnd() ) { inputStream >> x; // read one char if ( x == '\r' ) inputStream >> x; // eat '\r', to handle DOS/LOSEDOWS files correctly switch ( state ) { case S_START : if ( x == mTextQuote ) { state = S_QUOTED_FIELD; } else if ( x == mDelimiter ) { @@ -599,27 +627,32 @@ void CSVImportDialog::fillTable() // file with only one line without '\n' if ( field.length() > 0 ) { setText( row - mStartLine + 1, column, field ); ++row; field = ""; } adjustRows( row - mStartLine ); mTable->setNumCols( maxColumn ); //US begin QStringList keys; + uint iii = 0, count = mTypeMap.count(); + while ( iii < count ) { + keys << "dummy"; + ++iii; + } QMap<QString, uint>::ConstIterator it; for ( it = mTypeMap.begin(); it != mTypeMap.end(); ++it) - keys << it.key(); + keys[( it.data() )] = it.key(); //US end for ( column = 0; column < mTable->numCols(); ++column ) { //US QComboTableItem *item = new QComboTableItem( mTable, mTypeMap.keys() ); QComboTableItem *item = new QComboTableItem( mTable, keys ); mTable->setItem( 0, column, item ); if ( column < mTypeStore.count() ) item->setCurrentItem( mTypeStore[ column ] ); else item->setCurrentItem( typeToPos( Undefined ) ); @@ -673,24 +706,28 @@ void CSVImportDialog::returnPressed() if ( mDelimiterBox->id( mDelimiterBox->selected() ) != 4 ) return; mDelimiter = mDelimiterEdit->text(); fillTable(); } void CSVImportDialog::textChanged ( const QString& ) { mRadioOther->setChecked ( true ); delimiterClicked( 4 ); // other } +void CSVImportDialog::codecChanged ( const QString& ) +{ + fillTable(); +} void CSVImportDialog::delimiterClicked( int id ) { switch ( id ) { case 0: // comma mDelimiter = ","; break; case 4: // other mDelimiter = mDelimiterEdit->text(); break; case 2: // tab mDelimiter = "\t"; @@ -745,41 +782,41 @@ void CSVImportDialog::applyTemplate() QMap<QString, QString> fileMap; QStringList templates; // load all template files /*US QStringList list = KGlobal::dirs()->findAllResources( "data" , QString( kapp->name() ) + "/csv-templates/*.desktop", true, true ); */ QStringList list = KGlobal::dirs()->findAllResources( "data" , KGlobal::getAppName() + "/csv-templates/*.desktop", true, true ); for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { - qDebug("for "); + //US KSimpleConfig config( *it, true ); KConfig config( *it ); if ( !config.hasGroup( "csv column map" ) ) continue; config.setGroup( "Misc" ); templates.append( config.readEntry( "Name" ) ); fileMap.insert( config.readEntry( "Name" ), *it ); } - qDebug("weiter "); + // let the user chose, what to take bool ok = false; QString tmp; tmp = QInputDialog::getItem( i18n( "Template Selection" ), - i18n( "Please select a template, that matches the CSV file." ), + i18n( "Please select a template\nthat matches the CSV file." ), templates, 0, false, &ok, this ); if ( !ok ) return; //US KSimpleConfig config( fileMap[ tmp ], true ); KConfig config( fileMap[ tmp ] ); config.setGroup( "General" ); //US uint numColumns = config.readUnsignedNumEntry( "Columns" ); uint numColumns = (uint)config.readNumEntry( "Columns" ); mDelimiterEdit->setText( config.readEntry( "DelimiterOther" ) ); @@ -811,25 +848,25 @@ void CSVImportDialog::saveTemplate() /*US QString fileName = KFileDialog::getSaveFileName( locateLocal( "data", QString( kapp->name() ) + "/csv-templates/" ), "*.desktop", this ); */ QString fileName = KFileDialog::getSaveFileName( locateLocal( "data", KGlobal::getAppName() + "/csv-templates/" )+ "*.desktop",i18n("Save file name") , this ); if ( fileName.isEmpty() ) return; - if ( !fileName.contains( ".desktop" ) ) + if ( !fileName.contains( ".desktop" ) ) fileName += ".desktop"; QString name = QInputDialog::getText( i18n( "Template name" ), i18n( "Please enter a name for the template" ) ); if ( name.isEmpty() ) return; KConfig config( fileName ); config.setGroup( "General" ); config.writeEntry( "Columns", mTable->numCols() ); config.writeEntry( "DelimiterType", mDelimiterBox->id( mDelimiterBox->selected() ) ); config.writeEntry( "DelimiterOther", mDelimiterEdit->text() ); @@ -851,42 +888,48 @@ void CSVImportDialog::saveTemplate() } config.sync(); } QString CSVImportDialog::getText( int row, int col ) { return mTable->text( row, col ); } uint CSVImportDialog::posToType( int pos ) const { + return pos; +#if 0 uint counter = 0; QMap<QString, uint>::ConstIterator it; for ( it = mTypeMap.begin(); it != mTypeMap.end(); ++it, ++counter ) if ( counter == (uint)pos ) return it.data(); return 0; +#endif } int CSVImportDialog::typeToPos( uint type ) const { + return type; +#if 0 uint counter = 0; QMap<QString, uint>::ConstIterator it; for ( it = mTypeMap.begin(); it != mTypeMap.end(); ++it, ++counter ) if ( it.data() == type ) return counter; return -1; +#endif } void CSVImportDialog::ignoreDuplicatesChanged( int ) { fillTable(); } void CSVImportDialog::setFile( const QString &fileName ) { if ( fileName.isEmpty() ) return; diff --git a/kaddressbook/xxport/csvimportdialog.h b/kaddressbook/xxport/csvimportdialog.h index 545b5f9..5f55ab2 100644 --- a/kaddressbook/xxport/csvimportdialog.h +++ b/kaddressbook/xxport/csvimportdialog.h @@ -59,50 +59,52 @@ class CSVImportDialog : public KDialogBase protected slots: virtual void slotOk(); private slots: void returnPressed(); void delimiterClicked( int id ); void lineSelected( const QString& line ); void textquoteSelected( const QString& mark ); void textChanged ( const QString & ); void ignoreDuplicatesChanged( int ); void setFile( const QString& ); void urlChanged( const QString& ); + void codecChanged ( const QString& ); void applyTemplate(); void saveTemplate(); private: enum { Undefined, FormattedName, FamilyName, GivenName, AdditionalName, Prefix, Suffix, NickName, Birthday, HomeAddressStreet, HomeAddressLocality, HomeAddressRegion, HomeAddressPostalCode, HomeAddressCountry, HomeAddressLabel, BusinessAddressStreet, BusinessAddressLocality, BusinessAddressRegion, BusinessAddressPostalCode, BusinessAddressCountry, BusinessAddressLabel, HomePhone, BusinessPhone, MobilePhone, HomeFax, BusinessFax, CarPhone, - Isdn, Pager, Email, Mailer, Title, Role, Organization, Note, URL + Isdn, Pager, Email, Mailer, Title, Role, Organization, Note, URL, Categories }; QTable* mTable; QButtonGroup* mDelimiterBox; QRadioButton* mRadioComma; QRadioButton* mRadioSemicolon; QRadioButton* mRadioTab; QRadioButton* mRadioSpace; QRadioButton* mRadioOther; QLineEdit* mDelimiterEdit; QComboBox* mComboLine; QComboBox* mComboQuote; + QComboBox* mComboCodec; QCheckBox* mIgnoreDuplicates; KURLRequester* mUrlRequester; void initGUI(); void fillTable(); void clearTable(); void fillComboBox(); void setText( int row, int col, const QString& text ); void adjustRows( int rows ); QString getText( int row, int col ); uint posToType( int pos ) const; int typeToPos( uint type ) const; |