summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-04-29 12:18:46 (UTC)
committer zautrix <zautrix>2005-04-29 12:18:46 (UTC)
commitbdaded2da25b0ccef80d6e638fa12f92a4f8744d (patch) (unidiff)
tree4ab99ccab5c3610a26df59c6f79204e054c32dd5
parent8fbdf5d2b0ee1e1496cb856e0ead37c668066353 (diff)
downloadkdepimpi-bdaded2da25b0ccef80d6e638fa12f92a4f8744d.zip
kdepimpi-bdaded2da25b0ccef80d6e638fa12f92a4f8744d.tar.gz
kdepimpi-bdaded2da25b0ccef80d6e638fa12f92a4f8744d.tar.bz2
another csv import fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/xxport/csvimportdialog.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/kaddressbook/xxport/csvimportdialog.cpp b/kaddressbook/xxport/csvimportdialog.cpp
index 41e2612..4044fa8 100644
--- a/kaddressbook/xxport/csvimportdialog.cpp
+++ b/kaddressbook/xxport/csvimportdialog.cpp
@@ -297,129 +297,129 @@ KABC::AddresseeList CSVImportDialog::contacts() const
297 if ( !value.isEmpty() ) { 297 if ( !value.isEmpty() ) {
298 KABC::PhoneNumber number( value, KABC::PhoneNumber::Car ); 298 KABC::PhoneNumber number( value, KABC::PhoneNumber::Car );
299 a.insertPhoneNumber( number ); 299 a.insertPhoneNumber( number );
300 } 300 }
301 break; 301 break;
302 case Isdn: 302 case Isdn:
303 if ( !value.isEmpty() ) { 303 if ( !value.isEmpty() ) {
304 KABC::PhoneNumber number( value, KABC::PhoneNumber::Isdn ); 304 KABC::PhoneNumber number( value, KABC::PhoneNumber::Isdn );
305 a.insertPhoneNumber( number ); 305 a.insertPhoneNumber( number );
306 } 306 }
307 break; 307 break;
308 case Pager: 308 case Pager:
309 if ( !value.isEmpty() ) { 309 if ( !value.isEmpty() ) {
310 KABC::PhoneNumber number( value, KABC::PhoneNumber::Pager ); 310 KABC::PhoneNumber number( value, KABC::PhoneNumber::Pager );
311 a.insertPhoneNumber( number ); 311 a.insertPhoneNumber( number );
312 } 312 }
313 break; 313 break;
314 314
315 case HomeAddressStreet: 315 case HomeAddressStreet:
316 addrHome.setStreet( value ); 316 addrHome.setStreet( value );
317 break; 317 break;
318 case HomeAddressLocality: 318 case HomeAddressLocality:
319 addrHome.setLocality( value ); 319 addrHome.setLocality( value );
320 break; 320 break;
321 case HomeAddressRegion: 321 case HomeAddressRegion:
322 addrHome.setRegion( value ); 322 addrHome.setRegion( value );
323 break; 323 break;
324 case HomeAddressPostalCode: 324 case HomeAddressPostalCode:
325 addrHome.setPostalCode( value ); 325 addrHome.setPostalCode( value );
326 break; 326 break;
327 case HomeAddressCountry: 327 case HomeAddressCountry:
328 addrHome.setCountry( value ); 328 addrHome.setCountry( value );
329 break; 329 break;
330 case HomeAddressLabel: 330 case HomeAddressLabel:
331 addrHome.setLabel( value ); 331 addrHome.setLabel( value );
332 break; 332 break;
333 333
334 case BusinessAddressStreet: 334 case BusinessAddressStreet:
335 addrWork.setStreet( value ); 335 addrWork.setStreet( value );
336 break; 336 break;
337 case BusinessAddressLocality: 337 case BusinessAddressLocality:
338 addrWork.setLocality( value ); 338 addrWork.setLocality( value );
339 break; 339 break;
340 case BusinessAddressRegion: 340 case BusinessAddressRegion:
341 addrWork.setRegion( value ); 341 addrWork.setRegion( value );
342 break; 342 break;
343 case BusinessAddressPostalCode: 343 case BusinessAddressPostalCode:
344 addrWork.setPostalCode( value ); 344 addrWork.setPostalCode( value );
345 break; 345 break;
346 case BusinessAddressCountry: 346 case BusinessAddressCountry:
347 addrWork.setCountry( value ); 347 addrWork.setCountry( value );
348 break; 348 break;
349 case BusinessAddressLabel: 349 case BusinessAddressLabel:
350 addrWork.setLabel( value ); 350 addrWork.setLabel( value );
351 break; 351 break;
352 default: 352 default:
353 KABC::Field::List fields = mAddressBook->fields( KABC::Field::CustomCategory ); 353 KABC::Field::List fields = mAddressBook->fields( KABC::Field::CustomCategory );
354 KABC::Field::List::Iterator it; 354 KABC::Field::List::Iterator it;
355 355
356 int counter = 0; 356 int counter = 0;
357 for ( it = fields.begin(); it != fields.end(); ++it ) { 357 for ( it = fields.begin(); it != fields.end(); ++it ) {
358 if ( counter == (int)( posToType( item->currentItem() ) - mCustomCounter ) ) 358 if ( counter == (int)( posToType( item->currentItem() ) - mCustomCounter ) )
359 { 359 {
360 (*it)->setValue( a, value ); 360 (*it)->setValue( a, value );
361 continue; 361 break;
362 } 362 }
363 ++counter; 363 ++counter;
364 } 364 }
365 break; 365 break;
366 } 366 }
367 } 367 }
368 368
369 if ( !addrHome.isEmpty() ) 369 if ( !addrHome.isEmpty() )
370 a.insertAddress( addrHome ); 370 a.insertAddress( addrHome );
371 if ( !addrWork.isEmpty() ) 371 if ( !addrWork.isEmpty() )
372 a.insertAddress( addrWork ); 372 a.insertAddress( addrWork );
373 373
374 if ( !emptyRow && !a.isEmpty() ) 374 if ( !emptyRow && !a.isEmpty() )
375 contacts.append( a ); 375 contacts.append( a );
376 } 376 }
377 377
378 return contacts; 378 return contacts;
379} 379}
380 380
381void CSVImportDialog::initGUI() 381void CSVImportDialog::initGUI()
382{ 382{
383 QWidget* page = plainPage(); 383 QWidget* page = plainPage();
384 384
385 QGridLayout *layout = new QGridLayout( page, 1, 1, marginHintSmall(), 385 QGridLayout *layout = new QGridLayout( page, 1, 1, marginHintSmall(),
386 spacingHintSmall() ); 386 spacingHintSmall() );
387 QHBoxLayout *hbox = new QHBoxLayout(); 387 QHBoxLayout *hbox = new QHBoxLayout();
388 hbox->setSpacing( spacingHint() ); 388 hbox->setSpacing( spacingHint() );
389 389
390 QLabel *label = new QLabel( i18n( "File to import:" ), page ); 390 QLabel *label = new QLabel( i18n( "File to import:" ), page );
391 hbox->addWidget( label ); 391 hbox->addWidget( label );
392 392
393 mUrlRequester = new KURLRequester( page ); 393 mUrlRequester = new KURLRequester( page );
394 mUrlRequester->setFilter( "*.csv" ); 394 mUrlRequester->setFilter( "*.csv" );
395 hbox->addWidget( mUrlRequester ); 395 hbox->addWidget( mUrlRequester );
396 396
397 layout->addMultiCellLayout( hbox, 0, 0, 0, 2 ); 397 layout->addMultiCellLayout( hbox, 0, 0, 0, 2 );
398 398
399 // Delimiter: comma, semicolon, tab, space, other 399 // Delimiter: comma, semicolon, tab, space, other
400 mDelimiterBox = new QButtonGroup( i18n( "Delimiter" ), page ); 400 mDelimiterBox = new QButtonGroup( i18n( "Delimiter" ), page );
401 mDelimiterBox->setColumnLayout( 0, Qt::Vertical ); 401 mDelimiterBox->setColumnLayout( 0, Qt::Vertical );
402 mDelimiterBox->layout()->setSpacing( spacingHint() ); 402 mDelimiterBox->layout()->setSpacing( spacingHint() );
403 mDelimiterBox->layout()->setMargin( marginHint() ); 403 mDelimiterBox->layout()->setMargin( marginHint() );
404 QGridLayout *delimiterLayout = new QGridLayout( mDelimiterBox->layout() ); 404 QGridLayout *delimiterLayout = new QGridLayout( mDelimiterBox->layout() );
405 delimiterLayout->setAlignment( Qt::AlignTop ); 405 delimiterLayout->setAlignment( Qt::AlignTop );
406 layout->addMultiCellWidget( mDelimiterBox, 1, 1, 0, 2 ); 406 layout->addMultiCellWidget( mDelimiterBox, 1, 1, 0, 2 );
407 407
408 mRadioComma = new QRadioButton( i18n( "Comma" ), mDelimiterBox ); 408 mRadioComma = new QRadioButton( i18n( "Comma" ), mDelimiterBox );
409 mRadioComma->setChecked( true ); 409 mRadioComma->setChecked( true );
410 delimiterLayout->addWidget( mRadioComma, 0, 0 ); 410 delimiterLayout->addWidget( mRadioComma, 0, 0 );
411 411
412 mRadioSemicolon = new QRadioButton( i18n( "Semicolon" ), mDelimiterBox ); 412 mRadioSemicolon = new QRadioButton( i18n( "Semicolon" ), mDelimiterBox );
413 delimiterLayout->addWidget( mRadioSemicolon, 0, 1 ); 413 delimiterLayout->addWidget( mRadioSemicolon, 0, 1 );
414 414
415 mRadioTab = new QRadioButton( i18n( "Tabulator" ), mDelimiterBox ); 415 mRadioTab = new QRadioButton( i18n( "Tabulator" ), mDelimiterBox );
416 delimiterLayout->addWidget( mRadioTab, 1, 0 ); 416 delimiterLayout->addWidget( mRadioTab, 1, 0 );
417 417
418 mRadioSpace = new QRadioButton( i18n( "Space" ), mDelimiterBox ); 418 mRadioSpace = new QRadioButton( i18n( "Space" ), mDelimiterBox );
419 delimiterLayout->addWidget( mRadioSpace, 1, 1 ); 419 delimiterLayout->addWidget( mRadioSpace, 1, 1 );
420 420
421 mRadioOther = new QRadioButton( i18n( "Other" ), mDelimiterBox ); 421 mRadioOther = new QRadioButton( i18n( "Other" ), mDelimiterBox );
422 delimiterLayout->addWidget( mRadioOther, 0, 2 ); 422 delimiterLayout->addWidget( mRadioOther, 0, 2 );
423 423
424 mDelimiterEdit = new QLineEdit( mDelimiterBox ); 424 mDelimiterEdit = new QLineEdit( mDelimiterBox );
425 delimiterLayout->addWidget( mDelimiterEdit, 1, 2 ); 425 delimiterLayout->addWidget( mDelimiterEdit, 1, 2 );
@@ -480,129 +480,129 @@ void CSVImportDialog::fillTable()
480 S_MAYBE_NORMAL_FIELD, S_NORMAL_FIELD } state = S_START; 480 S_MAYBE_NORMAL_FIELD, S_NORMAL_FIELD } state = S_START;
481 481
482 QChar x; 482 QChar x;
483 QString field = ""; 483 QString field = "";
484 484
485 // store previous assignment 485 // store previous assignment
486 QValueList<int> mTypeOld = mTypeStore; 486 QValueList<int> mTypeOld = mTypeStore;
487 487
488 mTypeStore.clear(); 488 mTypeStore.clear();
489 for ( column = 0; column < mTable->numCols(); ++column ) { 489 for ( column = 0; column < mTable->numCols(); ++column ) {
490 QComboTableItem *item = static_cast<QComboTableItem*>( mTable->item( 0, column ) ); 490 QComboTableItem *item = static_cast<QComboTableItem*>( mTable->item( 0, column ) );
491 491
492 if ( !item || mClearTypeStore ) 492 if ( !item || mClearTypeStore )
493 mTypeStore.append( typeToPos( Undefined ) ); 493 mTypeStore.append( typeToPos( Undefined ) );
494 else if ( item ) 494 else if ( item )
495 mTypeStore.append( item->currentItem() ); 495 mTypeStore.append( item->currentItem() );
496 } 496 }
497 497
498 clearTable(); 498 clearTable();
499 499
500 row = column = 1; 500 row = column = 1;
501 if ( mComboCodec->currentItem () == 0 ) { 501 if ( mComboCodec->currentItem () == 0 ) {
502 mData = QString::fromUtf8( mFileArray.data() ); 502 mData = QString::fromUtf8( mFileArray.data() );
503 } else if ( mComboCodec->currentItem () == 1 ) { 503 } else if ( mComboCodec->currentItem () == 1 ) {
504 mData = QString::fromLatin1( mFileArray.data() ); 504 mData = QString::fromLatin1( mFileArray.data() );
505 } else { 505 } else {
506 mData = QString::fromLocal8Bit( mFileArray.data() ); 506 mData = QString::fromLocal8Bit( mFileArray.data() );
507 } 507 }
508 508
509 QTextStream inputStream( mData, IO_ReadOnly ); 509 QTextStream inputStream( mData, IO_ReadOnly );
510 510
511 if ( mComboCodec->currentItem () == 0 ) { 511 if ( mComboCodec->currentItem () == 0 ) {
512 inputStream.setEncoding( QTextStream::UnicodeUTF8 ); 512 inputStream.setEncoding( QTextStream::UnicodeUTF8 );
513 } else if ( mComboCodec->currentItem () == 1 ) { 513 } else if ( mComboCodec->currentItem () == 1 ) {
514 inputStream.setEncoding( QTextStream::Latin1 ); 514 inputStream.setEncoding( QTextStream::Latin1 );
515 } else { 515 } else {
516 inputStream.setEncoding( QTextStream::Locale ); 516 inputStream.setEncoding( QTextStream::Locale );
517 } 517 }
518 518
519 int maxColumn = 0; 519 int maxColumn = 0;
520 while ( !inputStream.atEnd() ) { 520 while ( !inputStream.atEnd() ) {
521 inputStream >> x; // read one char 521 inputStream >> x; // read one char
522 522
523 if ( x == '\r' ) inputStream >> x; // eat '\r', to handle DOS/LOSEDOWS files correctly 523 if ( x == '\r' ) inputStream >> x; // eat '\r', to handle DOS/LOSEDOWS files correctly
524 524
525 switch ( state ) { 525 switch ( state ) {
526 case S_START : 526 case S_START :
527 if ( x == mTextQuote ) { 527 if ( x == mTextQuote ) {
528 state = S_QUOTED_FIELD; 528 state = S_QUOTED_FIELD;
529 } else if ( x == mDelimiter ) { 529 } else if ( x == mDelimiter ) {
530 if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) 530 if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) )
531 ++column; 531 ++column;
532 lastCharDelimiter = true; 532 lastCharDelimiter = true;
533 } else if ( x == '\n' ) { 533 } else if ( x == '\n' ) {
534 ++row; 534 ++row;
535 column = 1; 535 column = 1;
536 } else { 536 } else {
537 field += x; 537 field += x;
538 state = S_MAYBE_NORMAL_FIELD; 538 state = S_MAYBE_NORMAL_FIELD;
539 } 539 }
540 break; 540 break;
541 case S_QUOTED_FIELD : 541 case S_QUOTED_FIELD :
542 if ( x == mTextQuote ) { 542 if ( x == mTextQuote ) {
543 state = S_MAYBE_END_OF_QUOTED_FIELD; 543 state = S_MAYBE_END_OF_QUOTED_FIELD;
544 } else if ( x == '\n' ) { 544 } else if ( x == '\n' && mTextQuote.isNull() ) {
545 setText( row - mStartLine + 1, column, field ); 545 setText( row - mStartLine + 1, column, field );
546 field = ""; 546 field = "";
547 if ( x == '\n' ) { 547 if ( x == '\n' ) {
548 ++row; 548 ++row;
549 column = 1; 549 column = 1;
550 } else { 550 } else {
551 if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) 551 if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) )
552 ++column; 552 ++column;
553 lastCharDelimiter = true; 553 lastCharDelimiter = true;
554 } 554 }
555 state = S_START; 555 state = S_START;
556 } else { 556 } else {
557 field += x; 557 field += x;
558 } 558 }
559 break; 559 break;
560 case S_MAYBE_END_OF_QUOTED_FIELD : 560 case S_MAYBE_END_OF_QUOTED_FIELD :
561 if ( x == mTextQuote ) { 561 if ( x == mTextQuote ) {
562 field += x; 562 field += x;
563 state = S_QUOTED_FIELD; 563 state = S_QUOTED_FIELD;
564 } else if ( x == mDelimiter || x == '\n' ) { 564 } else if ( x == mDelimiter || x == '\n' ) {
565 setText( row - mStartLine + 1, column, field ); 565 setText( row - mStartLine + 1, column, field );
566 field = ""; 566 field = "";
567 if ( x == '\n' ) { 567 if ( x == '\n' ) {
568 ++row; 568 ++row;
569 column = 1; 569 column = 1;
570 } else { 570 } else {
571 if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) 571 if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) )
572 ++column; 572 ++column;
573 lastCharDelimiter = true; 573 lastCharDelimiter = true;
574 } 574 }
575 state = S_START; 575 state = S_START;
576 } else { 576 } else {
577 state = S_END_OF_QUOTED_FIELD; 577 state = S_END_OF_QUOTED_FIELD;
578 } 578 }
579 break; 579 break;
580 case S_END_OF_QUOTED_FIELD : 580 case S_END_OF_QUOTED_FIELD :
581 if ( x == mDelimiter || x == '\n' ) { 581 if ( x == mDelimiter || x == '\n' ) {
582 setText( row - mStartLine + 1, column, field ); 582 setText( row - mStartLine + 1, column, field );
583 field = ""; 583 field = "";
584 if ( x == '\n' ) { 584 if ( x == '\n' ) {
585 ++row; 585 ++row;
586 column = 1; 586 column = 1;
587 } else { 587 } else {
588 if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) ) 588 if ( ( ignoreDups == false ) || ( lastCharDelimiter == false ) )
589 ++column; 589 ++column;
590 lastCharDelimiter = true; 590 lastCharDelimiter = true;
591 } 591 }
592 state = S_START; 592 state = S_START;
593 } else { 593 } else {
594 state = S_END_OF_QUOTED_FIELD; 594 state = S_END_OF_QUOTED_FIELD;
595 } 595 }
596 break; 596 break;
597 case S_MAYBE_NORMAL_FIELD : 597 case S_MAYBE_NORMAL_FIELD :
598 if ( x == mTextQuote ) { 598 if ( x == mTextQuote ) {
599 field = ""; 599 field = "";
600 state = S_QUOTED_FIELD; 600 state = S_QUOTED_FIELD;
601 break; 601 break;
602 } 602 }
603 case S_NORMAL_FIELD : 603 case S_NORMAL_FIELD :
604 if ( x == mDelimiter || x == '\n' ) { 604 if ( x == mDelimiter || x == '\n' ) {
605 setText( row - mStartLine + 1, column, field ); 605 setText( row - mStartLine + 1, column, field );
606 field = ""; 606 field = "";
607 if ( x == '\n' ) { 607 if ( x == '\n' ) {
608 ++row; 608 ++row;