kaddressbook Library API Documentation

keywidget.cpp

00001 /* 00002 This file is part of KAddressBook. 00003 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 00019 As a special exception, permission is given to link this program 00020 with any edition of Qt, and distribute the resulting executable, 00021 without including the source code for Qt in the source distribution. 00022 */ 00023 00024 #include <qfile.h> 00025 #include <qlabel.h> 00026 #include <qlayout.h> 00027 #include <qpushbutton.h> 00028 00029 #include <kapplication.h> 00030 #include <kcombobox.h> 00031 #include <kdialog.h> 00032 #include <kfiledialog.h> 00033 #include <kio/netaccess.h> 00034 #include <kinputdialog.h> 00035 #include <klocale.h> 00036 #include <kmessagebox.h> 00037 #include <ktempfile.h> 00038 00039 #include "keywidget.h" 00040 00041 KeyWidget::KeyWidget( QWidget *parent, const char *name ) 00042 : QWidget( parent, name ) 00043 { 00044 QGridLayout *layout = new QGridLayout( this, 4, 2, KDialog::marginHint(), 00045 KDialog::spacingHint() ); 00046 00047 QLabel *label = new QLabel( i18n( "Keys:" ), this ); 00048 layout->addWidget( label, 0, 0 ); 00049 00050 mKeyCombo = new KComboBox( this ); 00051 layout->addWidget( mKeyCombo, 0, 1 ); 00052 00053 mAddButton = new QPushButton( i18n( "Add..." ), this ); 00054 layout->addMultiCellWidget( mAddButton, 1, 1, 0, 1 ); 00055 00056 mRemoveButton = new QPushButton( i18n( "Remove" ), this ); 00057 mRemoveButton->setEnabled( false ); 00058 layout->addMultiCellWidget( mRemoveButton, 2, 2, 0, 1 ); 00059 00060 mExportButton = new QPushButton( i18n( "Export..." ), this ); 00061 mExportButton->setEnabled( false ); 00062 layout->addMultiCellWidget( mExportButton, 3, 3, 0, 1 ); 00063 00064 connect( mAddButton, SIGNAL( clicked() ), SLOT( addKey() ) ); 00065 connect( mRemoveButton, SIGNAL( clicked() ), SLOT( removeKey() ) ); 00066 connect( mExportButton, SIGNAL( clicked() ), SLOT( exportKey() ) ); 00067 } 00068 00069 KeyWidget::~KeyWidget() 00070 { 00071 } 00072 00073 void KeyWidget::setKeys( const KABC::Key::List &list ) 00074 { 00075 mKeyList = list; 00076 00077 updateKeyCombo(); 00078 } 00079 00080 KABC::Key::List KeyWidget::keys() const 00081 { 00082 return mKeyList; 00083 } 00084 00085 void KeyWidget::addKey() 00086 { 00087 QMap<QString, int> keyMap; 00088 QStringList keyTypeNames; 00089 QStringList existingKeyTypes; 00090 00091 KABC::Key::List::Iterator listIt; 00092 for ( listIt = mKeyList.begin(); listIt != mKeyList.end(); ++listIt ) { 00093 if ( (*listIt).type() != KABC::Key::Custom ) 00094 existingKeyTypes.append( KABC::Key::typeLabel( (*listIt).type() ) ); 00095 } 00096 00097 KABC::Key::TypeList typeList = KABC::Key::typeList(); 00098 KABC::Key::TypeList::Iterator it; 00099 for ( it = typeList.begin(); it != typeList.end(); ++it ) { 00100 if ( (*it) != KABC::Key::Custom && 00101 !existingKeyTypes.contains( KABC::Key::typeLabel( *it ) ) ) { 00102 keyMap.insert( KABC::Key::typeLabel( *it ), *it ); 00103 keyTypeNames.append( KABC::Key::typeLabel( *it ) ); 00104 } 00105 } 00106 00107 bool ok; 00108 QString name = KInputDialog::getItem( i18n( "Key Type" ), i18n( "Select the key type:" ), keyTypeNames, 0, true, &ok ); 00109 if ( !ok || name.isEmpty() ) 00110 return; 00111 00112 int type = keyMap[ name ]; 00113 if ( !keyTypeNames.contains( name ) ) 00114 type = KABC::Key::Custom; 00115 00116 KURL url = KFileDialog::getOpenURL(); 00117 if ( url.isEmpty() ) 00118 return; 00119 00120 QString tmpFile; 00121 if ( KIO::NetAccess::download( url, tmpFile, this ) ) { 00122 QFile file( tmpFile ); 00123 if ( !file.open( IO_ReadOnly ) ) { 00124 QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) ); 00125 KMessageBox::error( this, text.arg( url.url() ) ); 00126 return; 00127 } 00128 00129 QTextStream s( &file ); 00130 QString data; 00131 00132 s.setEncoding( QTextStream::UnicodeUTF8 ); 00133 s >> data; 00134 file.close(); 00135 00136 KABC::Key key( data, type ); 00137 if ( type == KABC::Key::Custom ) 00138 key.setCustomTypeString( name ); 00139 mKeyList.append( key ); 00140 00141 emit changed(); 00142 00143 KIO::NetAccess::removeTempFile( tmpFile ); 00144 } 00145 00146 updateKeyCombo(); 00147 } 00148 00149 void KeyWidget::removeKey() 00150 { 00151 int pos = mKeyCombo->currentItem(); 00152 if ( pos == -1 ) 00153 return; 00154 00155 QString type = mKeyCombo->currentText(); 00156 QString text = i18n( "<qt>Do you really want to remove the key <b>%1</b>?</qt>" ); 00157 if ( KMessageBox::warningContinueCancel( this, text.arg( type ), "", KGuiItem( i18n("&Delete"), "editdelete") ) == KMessageBox::Cancel ) 00158 return; 00159 00160 mKeyList.remove( mKeyList.at( pos ) ); 00161 emit changed(); 00162 00163 updateKeyCombo(); 00164 } 00165 00166 void KeyWidget::exportKey() 00167 { 00168 KABC::Key key = (*mKeyList.at( mKeyCombo->currentItem() ) ); 00169 00170 KURL url = KFileDialog::getSaveURL(); 00171 00172 KTempFile tempFile; 00173 QTextStream *s = tempFile.textStream(); 00174 s->setEncoding( QTextStream::UnicodeUTF8 ); 00175 (*s) << key.textData(); 00176 tempFile.close(); 00177 00178 KIO::NetAccess::upload( tempFile.name(), url, kapp->mainWidget() ); 00179 } 00180 00181 void KeyWidget::updateKeyCombo() 00182 { 00183 int pos = mKeyCombo->currentItem(); 00184 mKeyCombo->clear(); 00185 00186 KABC::Key::List::Iterator it; 00187 for ( it = mKeyList.begin(); it != mKeyList.end(); ++it ) { 00188 if ( (*it).type() == KABC::Key::Custom ) 00189 mKeyCombo->insertItem( (*it).customTypeString() ); 00190 else 00191 mKeyCombo->insertItem( KABC::Key::typeLabel( (*it).type() ) ); 00192 } 00193 00194 mKeyCombo->setCurrentItem( pos ); 00195 00196 bool state = ( mKeyList.count() != 0 ); 00197 mRemoveButton->setEnabled( state ); 00198 mExportButton->setEnabled( state ); 00199 } 00200 00201 #include "keywidget.moc"
KDE Logo
This file is part of the documentation for kaddressbook Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Oct 21 19:46:37 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003