/* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include #include #include #include #include //Added by qt3to4: #include #ifndef KAB_EMBEDDED #include #include #include #else //KAB_EMBEDDED #include #include #include #include #endif //KAB_EMBEDDED #include #include #include #include #include #include #include "keywidget.h" KeyWidget::KeyWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { Q3GridLayout *layout = new Q3GridLayout( this, 2, 2, KDialog::marginHint(), KDialog::spacingHint() ); QLabel *label = new QLabel( i18n( "Keys:" ), this ); layout->addWidget( label, 0, 0 ); mKeyCombo = new KComboBox( this ); layout->addWidget( mKeyCombo, 0, 1 ); mAddButton = new QPushButton( i18n( "Add" ), this ); layout->addWidget( mAddButton, 1, 0 ); mRemoveButton = new QPushButton( i18n( "Remove" ), this ); mRemoveButton->setEnabled( false ); layout->addWidget( mRemoveButton, 1, 1 ); mExportButton = new QPushButton( i18n( "Export" ), this ); mExportButton->setEnabled( false ); layout->addMultiCellWidget( mExportButton, 2, 2, 0, 1 ); connect( mAddButton, SIGNAL( clicked() ), SLOT( addKey() ) ); connect( mRemoveButton, SIGNAL( clicked() ), SLOT( removeKey() ) ); connect( mExportButton, SIGNAL( clicked() ), SLOT( exportKey() ) ); } KeyWidget::~KeyWidget() { } void KeyWidget::setKeys( const KABC::Key::List &list ) { mKeyList = list; updateKeyCombo(); } KABC::Key::List KeyWidget::keys() const { return mKeyList; } void KeyWidget::addKey() { QMap keyMap; QStringList keyTypeNames; QStringList existingKeyTypes; KABC::Key::List::Iterator listIt; for ( listIt = mKeyList.begin(); listIt != mKeyList.end(); ++listIt ) { if ( (*listIt).type() != KABC::Key::Custom ) existingKeyTypes.append( KABC::Key::typeLabel( (*listIt).type() ) ); } KABC::Key::TypeList typeList = KABC::Key::typeList(); KABC::Key::TypeList::Iterator it; for ( it = typeList.begin(); it != typeList.end(); ++it ) { if ( (*it) != KABC::Key::Custom && !existingKeyTypes.contains( KABC::Key::typeLabel( *it ) ) ) { keyMap.insert( KABC::Key::typeLabel( *it ), *it ); keyTypeNames.append( KABC::Key::typeLabel( *it ) ); } } bool ok; QString name = QInputDialog::getItem( i18n( "Key type" ), i18n( "Select the key type." ), keyTypeNames, 0, true, &ok ); if ( !ok || name.isEmpty() ) return; int type = keyMap[ name ]; if ( !keyTypeNames.contains( name ) ) type = KABC::Key::Custom; #ifndef KAB_EMBEDDED KURL url = KFileDialog::getOpenURL(); if ( url.isEmpty() ) return; QString tmpFile; if ( KIO::NetAccess::download( url, tmpFile ) ) { QFile file( tmpFile ); if ( !file.open( QIODevice::ReadOnly ) ) { QString text( i18n( "Unable to open file %1." ) ); KMessageBox::error( this, text.arg( url.url() ) ); return; } #else //KAB_EMBEDDED QString keyfile = KFileDialog::getOpenFileName( "huhu", "Select Key", this ); if ( keyfile.isEmpty() ) return; { QFile file( keyfile ); if ( !file.open( QIODevice::ReadOnly ) ) { QString text( i18n( "Unable to open file %1." ) ); QString caption( i18n( "Error" ) ); QMessageBox::critical( this, caption, text.arg( keyfile ) ); return; } #endif //KAB_EMBEDDED Q3TextStream s( &file ); QString data; s.setEncoding( Q3TextStream::UnicodeUTF8 ); s >> data; file.close(); KABC::Key key( data, type ); if ( type == KABC::Key::Custom ) key.setCustomTypeString( name ); mKeyList.append( key ); emit changed(); #ifndef KAB_EMBEDDED KIO::NetAccess::removeTempFile( tmpFile ); #endif //KAB_EMBEDDED } updateKeyCombo(); } void KeyWidget::removeKey() { int pos = mKeyCombo->currentItem(); if ( pos == -1 ) return; QString type = mKeyCombo->currentText(); QString text = i18n( "Do you really want to remove the key %1?" ); #ifndef KAB_EMBEDDED if ( KMessageBox::questionYesNo( this, text.arg( type ) ) == KMessageBox::No ) return; #else //KAB_EMBEDDED QString caption = i18n( "Confirm Delete" ); if (QMessageBox::information( this, caption, text.arg( type ), i18n("Yes!"), i18n("No"), 0, 0 ) == 1) return; #endif //KAB_EMBEDDED mKeyList.remove( mKeyList.at( pos ) ); emit changed(); updateKeyCombo(); } void KeyWidget::exportKey() { KABC::Key key = (*mKeyList.at( mKeyCombo->currentItem() ) ); #ifndef KAB_EMBEDDED KURL url = KFileDialog::getSaveURL(); KTempFile tempFile; Q3TextStream *s = tempFile.textStream(); s->setEncoding( Q3TextStream::UnicodeUTF8 ); (*s) << key.textData(); tempFile.close(); KIO::NetAccess::upload( tempFile.name(), url, kapp->mainWidget() ); #else //KAB_EMBEDDED QString keyfile = KFileDialog::getSaveFileName( "huhu", "Save Key", this ); if ( keyfile.isEmpty() ) return; QFile file( keyfile ); if ( !file.open( QIODevice::ReadWrite ) ) { QString text( i18n( "Unable to open file %1." ) ); QString caption( i18n( "Error" ) ); QMessageBox::critical( this, caption, text.arg( keyfile ) ); return; } Q3TextStream s( &file ); s.setEncoding( Q3TextStream::UnicodeUTF8 ); s << key.textData(); file.close(); #endif //KAB_EMBEDDED } void KeyWidget::updateKeyCombo() { int pos = mKeyCombo->currentItem(); mKeyCombo->clear(); KABC::Key::List::Iterator it; for ( it = mKeyList.begin(); it != mKeyList.end(); ++it ) { if ( (*it).type() == KABC::Key::Custom ) mKeyCombo->insertItem( (*it).customTypeString() ); else mKeyCombo->insertItem( KABC::Key::typeLabel( (*it).type() ) ); } mKeyCombo->setCurrentItem( pos ); bool state = ( mKeyList.count() != 0 ); mRemoveButton->setEnabled( state ); mExportButton->setEnabled( state ); } #ifndef KAB_EMBEDDED_ #include "moc_keywidget.cpp" #endif //KAB_EMBEDDED