summaryrefslogtreecommitdiffabout
path: root/kaddressbook/xxport/csvimportdialog.cpp
Side-by-side diff
Diffstat (limited to 'kaddressbook/xxport/csvimportdialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/xxport/csvimportdialog.cpp73
1 files changed, 58 insertions, 15 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;