summaryrefslogtreecommitdiffabout
path: root/kaddressbook/keywidget.cpp
Side-by-side diff
Diffstat (limited to 'kaddressbook/keywidget.cpp') (more/less context) (show whitespace changes)
-rw-r--r--kaddressbook/keywidget.cpp277
1 files changed, 277 insertions, 0 deletions
diff --git a/kaddressbook/keywidget.cpp b/kaddressbook/keywidget.cpp
new file mode 100644
index 0000000..c117d34
--- a/dev/null
+++ b/kaddressbook/keywidget.cpp
@@ -0,0 +1,277 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ 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 <qfile.h>
+
+#include <qinputdialog.h>
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+
+#ifndef KAB_EMBEDDED
+#include <kaccelmanager.h>
+#include <kio/netaccess.h>
+#include <kmessagebox.h>
+#else //KAB_EMBEDDED
+#include <qmap.h>
+#include <qmessagebox.h>
+#include <qtextstream.h>
+#include <kurl.h>
+#endif //KAB_EMBEDDED
+
+#include <kapplication.h>
+#include <kcombobox.h>
+#include <kdialog.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <ktempfile.h>
+
+#include "keywidget.h"
+
+KeyWidget::KeyWidget( QWidget *parent, const char *name )
+ : QWidget( parent, name )
+{
+ QGridLayout *layout = new QGridLayout( 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<QString, int> 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( IO_ReadOnly ) ) {
+ QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) );
+ 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( IO_ReadOnly ) ) {
+ QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) );
+ QString caption( i18n( "Error" ) );
+ QMessageBox::critical( this, caption, text.arg( keyfile ) );
+ return;
+ }
+
+#endif //KAB_EMBEDDED
+
+
+
+ QTextStream s( &file );
+ QString data;
+
+ s.setEncoding( QTextStream::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( "<qt>Do you really want to remove the key <b>%1</b>?</qt>" );
+
+
+#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;
+ QTextStream *s = tempFile.textStream();
+ s->setEncoding( QTextStream::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( IO_ReadWrite ) ) {
+ QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) );
+ QString caption( i18n( "Error" ) );
+ QMessageBox::critical( this, caption, text.arg( keyfile ) );
+ return;
+ }
+
+ QTextStream s( &file );
+ s.setEncoding( QTextStream::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 "keywidget.moc"
+#endif //KAB_EMBEDDED