summaryrefslogtreecommitdiffabout
path: root/kaddressbook/keywidget.cpp
Unidiff
Diffstat (limited to 'kaddressbook/keywidget.cpp') (more/less context) (ignore 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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#include <qfile.h>
25
26#include <qinputdialog.h>
27
28#include <qlabel.h>
29#include <qlayout.h>
30#include <qpushbutton.h>
31
32#ifndef KAB_EMBEDDED
33#include <kaccelmanager.h>
34#include <kio/netaccess.h>
35#include <kmessagebox.h>
36#else //KAB_EMBEDDED
37#include <qmap.h>
38#include <qmessagebox.h>
39#include <qtextstream.h>
40#include <kurl.h>
41#endif //KAB_EMBEDDED
42
43#include <kapplication.h>
44#include <kcombobox.h>
45#include <kdialog.h>
46#include <kfiledialog.h>
47#include <klocale.h>
48#include <ktempfile.h>
49
50#include "keywidget.h"
51
52KeyWidget::KeyWidget( QWidget *parent, const char *name )
53 : QWidget( parent, name )
54{
55 QGridLayout *layout = new QGridLayout( this, 2, 2, KDialog::marginHint(),
56 KDialog::spacingHint() );
57
58 QLabel *label = new QLabel( i18n( "Keys:" ), this );
59 layout->addWidget( label, 0, 0 );
60
61 mKeyCombo = new KComboBox( this );
62 layout->addWidget( mKeyCombo, 0, 1 );
63
64 mAddButton = new QPushButton( i18n( "Add" ), this );
65 layout->addWidget( mAddButton, 1, 0 );
66
67 mRemoveButton = new QPushButton( i18n( "Remove" ), this );
68 mRemoveButton->setEnabled( false );
69 layout->addWidget( mRemoveButton, 1, 1 );
70
71 mExportButton = new QPushButton( i18n( "Export" ), this );
72 mExportButton->setEnabled( false );
73 layout->addMultiCellWidget( mExportButton, 2, 2, 0, 1 );
74
75 connect( mAddButton, SIGNAL( clicked() ), SLOT( addKey() ) );
76 connect( mRemoveButton, SIGNAL( clicked() ), SLOT( removeKey() ) );
77 connect( mExportButton, SIGNAL( clicked() ), SLOT( exportKey() ) );
78}
79
80KeyWidget::~KeyWidget()
81{
82}
83
84void KeyWidget::setKeys( const KABC::Key::List &list )
85{
86 mKeyList = list;
87
88 updateKeyCombo();
89}
90
91KABC::Key::List KeyWidget::keys() const
92{
93 return mKeyList;
94}
95
96void KeyWidget::addKey()
97{
98 QMap<QString, int> keyMap;
99 QStringList keyTypeNames;
100 QStringList existingKeyTypes;
101
102 KABC::Key::List::Iterator listIt;
103 for ( listIt = mKeyList.begin(); listIt != mKeyList.end(); ++listIt ) {
104 if ( (*listIt).type() != KABC::Key::Custom )
105 existingKeyTypes.append( KABC::Key::typeLabel( (*listIt).type() ) );
106 }
107
108 KABC::Key::TypeList typeList = KABC::Key::typeList();
109 KABC::Key::TypeList::Iterator it;
110 for ( it = typeList.begin(); it != typeList.end(); ++it ) {
111 if ( (*it) != KABC::Key::Custom &&
112 !existingKeyTypes.contains( KABC::Key::typeLabel( *it ) ) ) {
113 keyMap.insert( KABC::Key::typeLabel( *it ), *it );
114 keyTypeNames.append( KABC::Key::typeLabel( *it ) );
115 }
116 }
117
118 bool ok;
119 QString name = QInputDialog::getItem( i18n( "Key type" ), i18n( "Select the key type." ), keyTypeNames, 0, true, &ok );
120
121
122
123 if ( !ok || name.isEmpty() )
124 return;
125
126 int type = keyMap[ name ];
127 if ( !keyTypeNames.contains( name ) )
128 type = KABC::Key::Custom;
129
130#ifndef KAB_EMBEDDED
131 KURL url = KFileDialog::getOpenURL();
132
133 if ( url.isEmpty() )
134 return;
135
136 QString tmpFile;
137 if ( KIO::NetAccess::download( url, tmpFile ) ) {
138 QFile file( tmpFile );
139 if ( !file.open( IO_ReadOnly ) ) {
140 QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) );
141 KMessageBox::error( this, text.arg( url.url() ) );
142 return;
143 }
144
145
146#else //KAB_EMBEDDED
147 QString keyfile = KFileDialog::getOpenFileName( "huhu",
148 "Select Key", this );
149
150 if ( keyfile.isEmpty() )
151 return;
152
153 {
154 QFile file( keyfile );
155 if ( !file.open( IO_ReadOnly ) ) {
156 QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) );
157 QString caption( i18n( "Error" ) );
158 QMessageBox::critical( this, caption, text.arg( keyfile ) );
159 return;
160 }
161
162#endif //KAB_EMBEDDED
163
164
165
166 QTextStream s( &file );
167 QString data;
168
169 s.setEncoding( QTextStream::UnicodeUTF8 );
170 s >> data;
171 file.close();
172
173 KABC::Key key( data, type );
174 if ( type == KABC::Key::Custom )
175 key.setCustomTypeString( name );
176 mKeyList.append( key );
177
178 emit changed();
179
180#ifndef KAB_EMBEDDED
181 KIO::NetAccess::removeTempFile( tmpFile );
182#endif //KAB_EMBEDDED
183
184 }
185
186 updateKeyCombo();
187}
188
189void KeyWidget::removeKey()
190{
191 int pos = mKeyCombo->currentItem();
192 if ( pos == -1 )
193 return;
194
195 QString type = mKeyCombo->currentText();
196 QString text = i18n( "<qt>Do you really want to remove the key <b>%1</b>?</qt>" );
197
198
199#ifndef KAB_EMBEDDED
200 if ( KMessageBox::questionYesNo( this, text.arg( type ) ) == KMessageBox::No )
201 return;
202#else //KAB_EMBEDDED
203 QString caption = i18n( "Confirm Delete" );
204 if (QMessageBox::information( this, caption,
205 text.arg( type ),
206 i18n("Yes!"), i18n("No"), 0, 0 ) == 1)
207 return;
208#endif //KAB_EMBEDDED
209
210 mKeyList.remove( mKeyList.at( pos ) );
211 emit changed();
212
213 updateKeyCombo();
214}
215
216void KeyWidget::exportKey()
217{
218 KABC::Key key = (*mKeyList.at( mKeyCombo->currentItem() ) );
219
220#ifndef KAB_EMBEDDED
221 KURL url = KFileDialog::getSaveURL();
222
223 KTempFile tempFile;
224 QTextStream *s = tempFile.textStream();
225 s->setEncoding( QTextStream::UnicodeUTF8 );
226 (*s) << key.textData();
227 tempFile.close();
228
229 KIO::NetAccess::upload( tempFile.name(), url, kapp->mainWidget() );
230#else //KAB_EMBEDDED
231 QString keyfile = KFileDialog::getSaveFileName( "huhu",
232 "Save Key", this );
233
234 if ( keyfile.isEmpty() )
235 return;
236
237 QFile file( keyfile );
238 if ( !file.open( IO_ReadWrite ) ) {
239 QString text( i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ) );
240 QString caption( i18n( "Error" ) );
241 QMessageBox::critical( this, caption, text.arg( keyfile ) );
242 return;
243 }
244
245 QTextStream s( &file );
246 s.setEncoding( QTextStream::UnicodeUTF8 );
247 s << key.textData();
248 file.close();
249
250
251#endif //KAB_EMBEDDED
252
253}
254
255void KeyWidget::updateKeyCombo()
256{
257 int pos = mKeyCombo->currentItem();
258 mKeyCombo->clear();
259
260 KABC::Key::List::Iterator it;
261 for ( it = mKeyList.begin(); it != mKeyList.end(); ++it ) {
262 if ( (*it).type() == KABC::Key::Custom )
263 mKeyCombo->insertItem( (*it).customTypeString() );
264 else
265 mKeyCombo->insertItem( KABC::Key::typeLabel( (*it).type() ) );
266 }
267
268 mKeyCombo->setCurrentItem( pos );
269
270 bool state = ( mKeyList.count() != 0 );
271 mRemoveButton->setEnabled( state );
272 mExportButton->setEnabled( state );
273}
274
275#ifndef KAB_EMBEDDED
276#include "keywidget.moc"
277#endif //KAB_EMBEDDED