• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

kleopatra

  • sources
  • kde-4.12
  • kdepim
  • kleopatra
  • crypto
  • gui
signerresolvepage.cpp
Go to the documentation of this file.
1 /* -*- mode: c++; c-basic-offset:4 -*-
2  crypto/gui/signerresolvepage.cpp
3 
4  This file is part of Kleopatra, the KDE keymanager
5  Copyright (c) 2007 Klarälvdalens Datakonsult AB
6 
7  Kleopatra is free software; you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 2 of the License, or
10  (at your option) any later version.
11 
12  Kleopatra is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program; if not, write to the Free Software
19  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 
21  In addition, as a special exception, the copyright holders give
22  permission to link the code of this program with any edition of
23  the Qt library by Trolltech AS, Norway (or with modified versions
24  of Qt that use the same license as Qt), and distribute linked
25  combinations including the two. You must obey the GNU General
26  Public License in all respects for all of the code used other than
27  Qt. If you modify this file, you may extend this exception to
28  your version of the file, but you are not obligated to do so. If
29  you do not wish to do so, delete this exception statement from
30  your version.
31 */
32 
33 #if !defined(QT_STL)
34 #define QT_STL
35 #endif
36 
37 #include <config-kleopatra.h>
38 
39 #include "signerresolvepage.h"
40 #include "signerresolvepage_p.h"
41 
42 #include "signingcertificateselectiondialog.h"
43 
44 #include <crypto/certificateresolver.h>
45 
46 #include <models/keycache.h>
47 
48 #include <utils/formatting.h>
49 #include <utils/kleo_assert.h>
50 
51 #include <kmime/kmime_header_parsing.h>
52 
53 #include <gpgme++/key.h>
54 
55 #include <KDialog>
56 #include <KLocale>
57 
58 #include <QButtonGroup>
59 #include <QCheckBox>
60 #include <QGridLayout>
61 #include <QGroupBox>
62 #include <QLabel>
63 #include <QPointer>
64 #include <QPushButton>
65 #include <QRadioButton>
66 #include <QStackedLayout>
67 #include <QVBoxLayout>
68 #include <QVector>
69 
70 #include <cassert>
71 
72 using namespace GpgME;
73 using namespace Kleo;
74 using namespace Kleo::Crypto;
75 using namespace Kleo::Crypto::Gui;
76 using namespace boost;
77 
78 namespace {
79  static SignerResolvePage::Operation operationFromFlags( bool sign, bool encrypt ) {
80  if ( !encrypt && sign )
81  return SignerResolvePage::SignOnly;
82  if ( !sign && encrypt )
83  return SignerResolvePage::EncryptOnly;
84  return SignerResolvePage::SignAndEncrypt;
85  }
86 
87  static QString formatLabel( Protocol p, const Key & key ) {
88  return i18nc( "%1=protocol (S/Mime, OpenPGP), %2=certificate", "Sign using %1: %2", Formatting::displayName( p ),
89  !key.isNull() ? Formatting::formatForComboBox( key ) : i18n( "No certificate selected" ) );
90  }
91 
92  static std::vector<Protocol> supportedProtocols() {
93  std::vector<Protocol> protocols;
94  protocols.push_back( OpenPGP );
95  protocols.push_back( CMS );
96  return protocols;
97  }
98 }
99 
100 AbstractSigningProtocolSelectionWidget::AbstractSigningProtocolSelectionWidget( QWidget* p, Qt::WindowFlags f ) : QWidget( p, f ) {
101 }
102 
103 ReadOnlyProtocolSelectionWidget::ReadOnlyProtocolSelectionWidget( QWidget* p, Qt::WindowFlags f ) : AbstractSigningProtocolSelectionWidget( p, f ) {
104  QVBoxLayout * const layout = new QVBoxLayout( this );
105  layout->setMargin( 0 );
106  Q_FOREACH ( const Protocol i, supportedProtocols() ) { //krazy:exclude=foreach
107  QLabel * const l = new QLabel;
108  l->setText( formatLabel( i, Key() ) );
109  layout->addWidget( l );
110  m_labels[i] = l;
111  }
112 }
113 
114 void ReadOnlyProtocolSelectionWidget::setProtocolChecked( Protocol protocol, bool checked ) {
115  QLabel * const l = label( protocol );
116  assert( l );
117  l->setVisible( checked );
118 }
119 
120 bool ReadOnlyProtocolSelectionWidget::isProtocolChecked( Protocol protocol ) const {
121  QLabel * const l = label( protocol );
122  assert( l );
123  return l->isVisible();
124 }
125 
126 std::vector<Protocol> ReadOnlyProtocolSelectionWidget::checkedProtocols() const {
127  std::vector<Protocol> res;
128  Q_FOREACH( const Protocol i, supportedProtocols() ) //krazy:exclude=foreach
129  if( isProtocolChecked( i ) )
130  res.push_back( i );
131  return res;
132 
133 }
134 
135 SigningProtocolSelectionWidget::SigningProtocolSelectionWidget( QWidget* parent, Qt::WindowFlags f )
136  : AbstractSigningProtocolSelectionWidget( parent, f ) {
137 
138  m_buttonGroup = new QButtonGroup( this );
139  connect( m_buttonGroup, SIGNAL(buttonClicked(int)), this, SIGNAL(userSelectionChanged()) );
140 
141  QVBoxLayout * const layout = new QVBoxLayout( this );
142  layout->setMargin( 0 );
143  Q_FOREACH ( const Protocol i, supportedProtocols() ) { //krazy:exclude=foreach
144  QCheckBox * const b = new QCheckBox;
145  b->setText( formatLabel( i, Key() ) );
146  m_buttons[i] = b;
147  layout->addWidget( b );
148  m_buttonGroup->addButton( b );
149  }
150  setExclusive( true );
151  }
152 
153 void SigningProtocolSelectionWidget::setProtocolChecked( Protocol p, bool checked ) {
154  assert( p != UnknownProtocol );
155  QCheckBox * const b = button( p );
156  assert( b );
157  b->setChecked( checked );
158 }
159 
160 bool SigningProtocolSelectionWidget::isProtocolChecked( Protocol p ) const {
161  assert( p != UnknownProtocol );
162  const QAbstractButton * const b = button( p );
163  assert( b );
164  return b->isChecked();
165 }
166 
167 std::vector<Protocol> SigningProtocolSelectionWidget::checkedProtocols() const {
168  std::vector<Protocol> res;
169  for ( std::map<Protocol,QCheckBox*>::const_iterator it = m_buttons.begin(), end = m_buttons.end();
170  it != end;
171  ++it )
172  if ( it->second->isChecked() )
173  res.push_back( it->first );
174  return res;
175 }
176 
177 void SigningProtocolSelectionWidget::setExclusive( bool exclusive ) {
178  if ( exclusive == isExclusive() )
179  return;
180  m_buttonGroup->setExclusive( exclusive );
181  emit userSelectionChanged();
182 }
183 
184 QCheckBox * SigningProtocolSelectionWidget::button( Protocol p ) const
185 {
186  const std::map<Protocol,QCheckBox*>::const_iterator it = m_buttons.find( p );
187  return it == m_buttons.end() ? 0 : it->second;
188 }
189 
190 QLabel * ReadOnlyProtocolSelectionWidget::label( Protocol p ) const
191 {
192  const std::map<Protocol,QLabel*>::const_iterator it = m_labels.find( p );
193  return it == m_labels.end() ? 0 : it->second;
194 }
195 
196 bool SigningProtocolSelectionWidget::isExclusive() const {
197  return m_buttonGroup->exclusive();
198 }
199 
200 void SigningProtocolSelectionWidget::setCertificate( Protocol prot, const Key & key ) {
201  QAbstractButton * const b = button( prot );
202  assert( b );
203  b->setText( formatLabel( prot, key ) );
204 }
205 
206 void ReadOnlyProtocolSelectionWidget::setCertificate( Protocol prot, const Key & key ) {
207  QLabel * const l = label( prot );
208  l->setText( formatLabel( prot, key ) );
209 }
210 
211 namespace {
212 
213  class ValidatorImpl : public SignerResolvePage::Validator {
214  public:
215  QString explanation() const { return QString(); }
216  bool isComplete() const { return true; }
217  QString customWindowTitle() const { return QString(); }
218  };
219 }
220 
221 class SignerResolvePage::Private {
222  friend class ::Kleo::Crypto::Gui::SignerResolvePage;
223  SignerResolvePage * const q;
224 public:
225  explicit Private( SignerResolvePage * qq );
226  ~Private();
227 
228  void setOperation( Operation operation );
229  void operationButtonClicked( int operation );
230  void selectCertificates();
231  void setCertificates( const QMap<GpgME::Protocol, GpgME::Key>& certs );
232  void updateModeSelectionWidgets();
233  void updateUi();
234  bool protocolSelected( Protocol p ) const;
235  bool protocolSelectionActuallyUserMutable() const;
236 
237 private:
238  QButtonGroup* signEncryptGroup;
239  QRadioButton* signAndEncryptRB;
240  QRadioButton* encryptOnlyRB;
241  QRadioButton* signOnlyRB;
242  QGroupBox* signingCertificateBox;
243  QLabel * signerLabelLabel;
244  QLabel * signerLabel;
245  QGroupBox * encryptBox;
246  QCheckBox * textArmorCO;
247  QCheckBox * removeUnencryptedCO;
248  QPushButton * selectCertificatesButton;
249  SigningProtocolSelectionWidget* signingProtocolSelectionWidget;
250  ReadOnlyProtocolSelectionWidget* readOnlyProtocolSelectionWidget;
251  std::vector<Protocol> presetProtocols;
252  bool signingMutable;
253  bool encryptionMutable;
254  bool signingSelected;
255  bool encryptionSelected;
256  bool multipleProtocolsAllowed;
257  bool protocolSelectionUserMutable;
258  QMap<GpgME::Protocol,GpgME::Key> certificates;
259  shared_ptr<SignerResolvePage::Validator> validator;
260  shared_ptr<SigningPreferences> signingPreferences;
261 };
262 
263 bool SignerResolvePage::Private::protocolSelectionActuallyUserMutable() const {
264  return ( q->protocolSelectionUserMutable() || presetProtocols.empty() ) && q->operation() == SignOnly;
265 }
266 
267 SignerResolvePage::Private::Private( SignerResolvePage * qq )
268  : q( qq )
269  , presetProtocols()
270  , signingMutable( true )
271  , encryptionMutable( true )
272  , signingSelected( false )
273  , encryptionSelected( false )
274  , multipleProtocolsAllowed( false )
275  , protocolSelectionUserMutable( true )
276  , validator( new ValidatorImpl )
277 
278 {
279  QVBoxLayout* layout = new QVBoxLayout( q );
280  layout->setSpacing( KDialog::spacingHint() );
281 
282  signEncryptGroup = new QButtonGroup( q );
283  q->connect( signEncryptGroup, SIGNAL(buttonClicked(int)), q, SLOT(operationButtonClicked(int)) );
284 
285  signAndEncryptRB = new QRadioButton;
286  signAndEncryptRB->setText( i18n( "Sign and encrypt (OpenPGP only)" ) );
287  signAndEncryptRB->setChecked( true );
288  signEncryptGroup->addButton( signAndEncryptRB, SignAndEncrypt );
289  layout->addWidget( signAndEncryptRB );
290 
291  encryptOnlyRB = new QRadioButton;
292  encryptOnlyRB->setText( i18n( "Encrypt only" ) );
293  signEncryptGroup->addButton( encryptOnlyRB, EncryptOnly );
294  layout->addWidget( encryptOnlyRB );
295 
296  signOnlyRB = new QRadioButton;
297  signOnlyRB->setText( i18n( "Sign only" ) );
298  signEncryptGroup->addButton( signOnlyRB, SignOnly );
299  layout->addWidget( signOnlyRB );
300 
301  encryptBox = new QGroupBox;
302  encryptBox->setTitle( i18n( "Encryption Options" ) );
303  QBoxLayout * const encryptLayout = new QVBoxLayout( encryptBox );
304  textArmorCO = new QCheckBox;
305  textArmorCO->setText( i18n( "Text output (ASCII armor)" ) );
306  encryptLayout->addWidget( textArmorCO );
307  removeUnencryptedCO = new QCheckBox;
308  removeUnencryptedCO->setText( i18n( "Remove unencrypted original file when done" ) );
309  removeUnencryptedCO->setChecked( false );
310  encryptLayout->addWidget( removeUnencryptedCO );
311  layout->addWidget( encryptBox );
312 
313  signingCertificateBox = new QGroupBox;
314  signingCertificateBox->setTitle( i18n( "Signing Options" ) );
315  QGridLayout* signerLayout = new QGridLayout( signingCertificateBox );
316  signerLayout->setColumnStretch( 1, 1 );
317 
318  signerLabelLabel = new QLabel;
319  signerLabelLabel->setText( i18n( "Signer:" ) );
320  signerLayout->addWidget( signerLabelLabel, 1, 0 );
321  signerLabel = new QLabel;
322  signerLayout->addWidget( signerLabel, 1, 1 );
323  signerLabelLabel->setVisible( false );
324  signerLabel->setVisible( false );
325 
326  signingProtocolSelectionWidget = new SigningProtocolSelectionWidget;
327  connect( signingProtocolSelectionWidget, SIGNAL(userSelectionChanged()), q, SLOT(updateUi()) );
328  signerLayout->addWidget( signingProtocolSelectionWidget, 2, 0, 1, -1 );
329 
330  readOnlyProtocolSelectionWidget = new ReadOnlyProtocolSelectionWidget;
331  signerLayout->addWidget( readOnlyProtocolSelectionWidget, 3, 0, 1, -1 );
332 
333  selectCertificatesButton = new QPushButton;
334  selectCertificatesButton->setText( i18n( "Change Signing Certificates..." ) );
335  selectCertificatesButton->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed );
336  signerLayout->addWidget( selectCertificatesButton, 4, 0, 1, -1, Qt::AlignLeft );
337  q->connect( selectCertificatesButton, SIGNAL(clicked()),
338  q, SLOT(selectCertificates()) );
339  layout->addWidget( signingCertificateBox );
340  layout->addStretch();
341 }
342 
343 void SignerResolvePage::setValidator( const boost::shared_ptr<SignerResolvePage::Validator>& validator )
344 {
345  assert( validator );
346  d->validator = validator;
347  d->updateUi();
348 }
349 
350 shared_ptr<SignerResolvePage::Validator> SignerResolvePage::validator() const
351 {
352  return d->validator;
353 }
354 
355 SignerResolvePage::Private::~Private() {}
356 
357 
358 bool SignerResolvePage::Private::protocolSelected( Protocol p ) const {
359  assert( p != UnknownProtocol );
360  return signingProtocolSelectionWidget->isProtocolChecked( p );
361 }
362 
363 void SignerResolvePage::Private::setCertificates( const QMap<GpgME::Protocol, GpgME::Key>& certs )
364 {
365  certificates = certs;
366  Q_FOREACH ( const Protocol i, certs.keys() ) { //krazy:exclude=foreach
367  const Key key = certs.value( i );
368  readOnlyProtocolSelectionWidget->setCertificate( i, key );
369  signingProtocolSelectionWidget->setCertificate( i, key );
370  }
371  updateUi();
372 }
373 
374 void SignerResolvePage::Private::updateUi() {
375  const bool ismutable = protocolSelectionActuallyUserMutable();
376  readOnlyProtocolSelectionWidget->setVisible( !ismutable );
377  signingProtocolSelectionWidget->setVisible( ismutable );
378 
379  q->setExplanation( validator->explanation() );
380  emit q->completeChanged();
381 
382  const QString customTitle = validator->customWindowTitle();
383  if ( !customTitle.isEmpty() )
384  emit q->windowTitleChanged( customTitle );
385  selectCertificatesButton->setEnabled(signingProtocolSelectionWidget->checkedProtocols().size()>0);
386 }
387 
388 
389 void SignerResolvePage::setProtocolSelectionUserMutable( bool ismutable ) {
390  if ( d->protocolSelectionUserMutable == ismutable )
391  return;
392  d->protocolSelectionUserMutable = ismutable;
393  d->updateModeSelectionWidgets();
394 }
395 
396 bool SignerResolvePage::protocolSelectionUserMutable() const {
397  return d->protocolSelectionUserMutable;
398 }
399 
400 void SignerResolvePage::setMultipleProtocolsAllowed( bool allowed )
401 {
402  if ( d->multipleProtocolsAllowed == allowed )
403  return;
404  d->multipleProtocolsAllowed = allowed;
405  d->updateModeSelectionWidgets();
406 }
407 
408 bool SignerResolvePage::multipleProtocolsAllowed() const
409 {
410  return d->multipleProtocolsAllowed;
411 }
412 
413 void SignerResolvePage::Private::updateModeSelectionWidgets()
414 {
415  const bool bothMutable = signingMutable && encryptionMutable;
416  const bool noSigningPossible = !signingSelected && !signingMutable;
417  const bool noEncryptionPossible = !encryptionSelected && !encryptionMutable;
418  signAndEncryptRB->setChecked( signingSelected && encryptionSelected );
419  signOnlyRB->setChecked( signingSelected && !encryptionSelected );
420  encryptOnlyRB->setChecked( encryptionSelected && !signingSelected );
421  const bool canSignAndEncrypt = !noSigningPossible && !noEncryptionPossible; bothMutable && presetProtocols != std::vector<Protocol>( 1, CMS );
422  const bool canSignOnly = !encryptionSelected || encryptionMutable;
423  const bool canEncryptOnly = !signingSelected || signingMutable;
424 
425  signAndEncryptRB->setEnabled( canSignAndEncrypt );
426  signOnlyRB->setEnabled( canSignOnly );
427  encryptOnlyRB->setEnabled( canEncryptOnly );
428  const bool buttonsVisible = signingMutable || encryptionMutable;
429  signOnlyRB->setVisible( buttonsVisible );
430  encryptOnlyRB->setVisible( buttonsVisible );
431  signAndEncryptRB->setVisible( buttonsVisible );
432  signingProtocolSelectionWidget->setExclusive( !multipleProtocolsAllowed );
433  signingCertificateBox->setVisible( !noSigningPossible );
434  encryptBox->setVisible( !noEncryptionPossible );
435  updateUi();
436 }
437 
438 void SignerResolvePage::Private::selectCertificates()
439 {
440  QPointer<SigningCertificateSelectionDialog> dlg = new SigningCertificateSelectionDialog( q );
441  dlg->setAllowedProtocols( QVector<Protocol>::fromStdVector( signingProtocolSelectionWidget->checkedProtocols() ) );
442  if ( dlg->exec() == QDialog::Accepted && dlg )
443  {
444  const QMap<Protocol, Key> certs = dlg->selectedCertificates();
445  setCertificates( certs );
446  if ( signingPreferences && dlg->rememberAsDefault() ) {
447  signingPreferences->setPreferredCertificate( OpenPGP, certs.value( OpenPGP ) );
448  signingPreferences->setPreferredCertificate( CMS, certs.value( CMS ) );
449  }
450  }
451 
452  delete dlg;
453  updateUi();
454 }
455 
456 void SignerResolvePage::Private::operationButtonClicked( int mode_ )
457 {
458  const Operation op = static_cast<SignerResolvePage::Operation>( mode_ );
459  signingCertificateBox->setEnabled( op != EncryptOnly );
460  encryptBox->setEnabled( op != SignOnly );
461  if ( op == SignAndEncrypt ) {
462  signingProtocolSelectionWidget->setProtocolChecked( CMS, false );
463  readOnlyProtocolSelectionWidget->setProtocolChecked( CMS, false );
464  signingProtocolSelectionWidget->setProtocolChecked( OpenPGP, true );
465  readOnlyProtocolSelectionWidget->setProtocolChecked( OpenPGP, true );
466  }
467  updateUi();
468 }
469 
470 void SignerResolvePage::Private::setOperation( Operation op ) {
471  switch ( op ) {
472  case SignOnly:
473  signOnlyRB->click();
474  break;
475  case EncryptOnly:
476  encryptOnlyRB->click();
477  break;
478  case SignAndEncrypt:
479  signAndEncryptRB->click();
480  break;
481  }
482 }
483 
484 SignerResolvePage::Operation SignerResolvePage::operation() const
485 {
486  return operationFromFlags( signingSelected(), encryptionSelected() );
487 }
488 
489 
490 SignerResolvePage::SignerResolvePage( QWidget * parent, Qt::WindowFlags f )
491  : WizardPage( parent, f ), d( new Private( this ) )
492 {
493  setTitle( i18n( "<b>Choose Operation to be Performed</b>" ) );
494 // setSubTitle( i18n( "TODO" ) );
495  setPresetProtocol( UnknownProtocol );
496  d->setCertificates( QMap<GpgME::Protocol, GpgME::Key>() );
497  d->updateModeSelectionWidgets();
498  d->operationButtonClicked( EncryptOnly );
499 }
500 
501 SignerResolvePage::~SignerResolvePage() {}
502 
503 void SignerResolvePage::setSignersAndCandidates( const std::vector<KMime::Types::Mailbox> & signers,
504  const std::vector< std::vector<GpgME::Key> > & keys )
505 {
506  kleo_assert( signers.empty() || signers.size() == keys.size() );
507 
508  switch ( signers.size() )
509  {
510  case 0:
511  d->signerLabelLabel->setVisible( false );
512  d->signerLabel->setVisible( false ); // TODO: use default identity?
513  break;
514  case 1:
515  d->signerLabelLabel->setVisible( true );
516  d->signerLabel->setVisible( true ); // TODO: use default identity?
517  d->signerLabel->setText( signers.front().prettyAddress() );
518  break;
519  default: // > 1
520  kleo_assert( !"Resolving multiple signers not implemented" );
521  }
522  d->updateUi();
523 }
524 
525 
526 void SignerResolvePage::setPresetProtocol( Protocol protocol )
527 {
528  std::vector<Protocol> protocols;
529  if ( protocol != CMS )
530  protocols.push_back( OpenPGP );
531  if ( protocol != OpenPGP )
532  protocols.push_back( CMS );
533  setPresetProtocols( protocols );
534  d->updateUi();
535 }
536 
537 
538 void SignerResolvePage::setPresetProtocols( const std::vector<Protocol>& protocols )
539 {
540  d->presetProtocols = protocols;
541  Q_FOREACH ( const Protocol i, supportedProtocols() ) { //krazy:exclude=foreach
542  const bool checked = std::find( protocols.begin(), protocols.end(), i ) != protocols.end();
543  d->signingProtocolSelectionWidget->setProtocolChecked( i, checked );
544  d->readOnlyProtocolSelectionWidget->setProtocolChecked( i, checked );
545  }
546  d->updateModeSelectionWidgets();
547 }
548 
549 std::vector<Protocol> SignerResolvePage::selectedProtocols() const {
550  return d->signingProtocolSelectionWidget->checkedProtocols();
551 }
552 
553 std::vector<Key> SignerResolvePage::signingCertificates( Protocol protocol ) const
554 {
555  std::vector<Key> result;
556  if ( protocol != CMS && d->signingProtocolSelectionWidget->isProtocolChecked( OpenPGP ) && !d->certificates[OpenPGP].isNull() )
557  result.push_back( d->certificates[OpenPGP] );
558  if ( protocol != OpenPGP && d->signingProtocolSelectionWidget->isProtocolChecked( CMS ) && !d->certificates[CMS].isNull() )
559  result.push_back( d->certificates[CMS] );
560  return result;
561 }
562 
563 std::vector<Key> SignerResolvePage::resolvedSigners() const
564 {
565  std::vector<Key> result = signingCertificates( CMS );
566  const std::vector<Key> pgp = signingCertificates( OpenPGP );
567  result.insert( result.end(), pgp.begin(), pgp.end() );
568  return result;
569 }
570 
571 bool SignerResolvePage::isComplete() const
572 {
573  assert( d->validator );
574  return d->validator->isComplete();
575 }
576 
577 bool SignerResolvePage::encryptionSelected() const
578 {
579  return !d->signOnlyRB->isChecked();
580 }
581 
582 void SignerResolvePage::setEncryptionSelected( bool selected )
583 {
584  d->encryptionSelected = selected;
585  d->updateModeSelectionWidgets();
586  d->setOperation( operationFromFlags( d->signingSelected, d->encryptionSelected ) );
587 }
588 
589 bool SignerResolvePage::signingSelected() const
590 {
591  return !d->encryptOnlyRB->isChecked();
592 }
593 
594 void SignerResolvePage::setSigningSelected( bool selected )
595 {
596  d->signingSelected = selected;
597  d->updateModeSelectionWidgets();
598  d->setOperation( operationFromFlags( d->signingSelected, d->encryptionSelected ) );
599 }
600 
601 bool SignerResolvePage::isEncryptionUserMutable() const
602 {
603  return d->encryptionMutable;
604 }
605 
606 bool SignerResolvePage::isSigningUserMutable() const
607 {
608  return d->signingMutable;
609 }
610 
611 void SignerResolvePage::setEncryptionUserMutable( bool ismutable )
612 {
613  d->encryptionMutable = ismutable;
614  d->updateModeSelectionWidgets();
615 }
616 
617 void SignerResolvePage::setSigningUserMutable( bool ismutable )
618 {
619  d->signingMutable = ismutable;
620  d->updateModeSelectionWidgets();
621 }
622 
623 std::vector<Protocol> SignerResolvePage::selectedProtocolsWithoutSigningCertificate() const {
624  std::vector<Protocol> res;
625  Q_FOREACH ( const Protocol i, selectedProtocols() ) //krazy:exclude=foreach
626  if ( signingCertificates( i ).empty() )
627  res.push_back( i );
628  return res;
629 }
630 
631 bool SignerResolvePage::isAsciiArmorEnabled() const
632 {
633  return d->textArmorCO->isChecked();
634 }
635 
636 void SignerResolvePage::setAsciiArmorEnabled( bool enabled )
637 {
638  d->textArmorCO->setChecked( enabled );
639 }
640 
641 bool SignerResolvePage::removeUnencryptedFile() const
642 {
643  return d->removeUnencryptedCO->isChecked();
644 }
645 
646 void SignerResolvePage::setRemoveUnencryptedFile( bool remove )
647 {
648  d->removeUnencryptedCO->setChecked( remove );
649 }
650 
651 void SignerResolvePage::setSigningPreferences( const boost::shared_ptr<SigningPreferences>& prefs )
652 {
653  d->signingPreferences = prefs;
654  QMap<Protocol,Key> map;
655  map[OpenPGP] = prefs ? prefs->preferredCertificate( OpenPGP ) : Key();
656  map[CMS] = prefs ? prefs->preferredCertificate( CMS ) : Key();
657  d->setCertificates( map );
658 }
659 
660 shared_ptr<SigningPreferences> SignerResolvePage::signingPreferences() const
661 {
662  return d->signingPreferences;
663 }
664 
665 void SignerResolvePage::onNext()
666 {
667 }
668 
669 #include "moc_signerresolvepage.cpp"
670 #include "moc_signerresolvepage_p.cpp"
671 
Kleo::Crypto::Gui::SignerResolvePage::operation
Operation operation() const
Definition: signerresolvepage.cpp:484
Kleo::Crypto::Gui::AbstractSigningProtocolSelectionWidget
Definition: signerresolvepage_p.h:50
signerresolvepage_p.h
Kleo::Crypto::Gui::SignerResolvePage::setAsciiArmorEnabled
void setAsciiArmorEnabled(bool enabled)
Definition: signerresolvepage.cpp:636
Kleo::Crypto::Gui::SignerResolvePage::signingPreferences
boost::shared_ptr< SigningPreferences > signingPreferences() const
Definition: signerresolvepage.cpp:660
Kleo::Crypto::Gui::SignerResolvePage::multipleProtocolsAllowed
bool multipleProtocolsAllowed() const
Definition: signerresolvepage.cpp:408
Kleo::Crypto::Gui::ReadOnlyProtocolSelectionWidget::setProtocolChecked
void setProtocolChecked(GpgME::Protocol protocol, bool checked)
Definition: signerresolvepage.cpp:114
Kleo::Crypto::Gui::SignerResolvePage::isEncryptionUserMutable
bool isEncryptionUserMutable() const
Definition: signerresolvepage.cpp:601
Kleo::Crypto::Gui::SignerResolvePage::protocolSelectionUserMutable
bool protocolSelectionUserMutable() const
Definition: signerresolvepage.cpp:396
Kleo::Crypto::Gui::SignerResolvePage::setValidator
void setValidator(const boost::shared_ptr< Validator > &)
Definition: signerresolvepage.cpp:343
Kleo::Crypto::Gui::SignerResolvePage::validator
boost::shared_ptr< Validator > validator() const
Definition: signerresolvepage.cpp:350
Kleo::Crypto::Gui::SigningProtocolSelectionWidget::SigningProtocolSelectionWidget
SigningProtocolSelectionWidget(QWidget *parent=0, Qt::WindowFlags flags=0)
Definition: signerresolvepage.cpp:135
Kleo::Crypto::Gui::SignerResolvePage::setSigningUserMutable
void setSigningUserMutable(bool ismutable)
Definition: signerresolvepage.cpp:617
Kleo::Formatting::displayName
QString displayName(GpgME::Protocol prot)
QWidget
formatting.h
Kleo::Crypto::Gui::SignerResolvePage::Operation
Operation
Definition: signerresolvepage.h:103
Kleo::Crypto::Gui::SigningProtocolSelectionWidget::setCertificate
void setCertificate(GpgME::Protocol protocol, const GpgME::Key &key)
Definition: signerresolvepage.cpp:200
Kleo::Crypto::Gui::SignerResolvePage::setRemoveUnencryptedFile
void setRemoveUnencryptedFile(bool remove)
Definition: signerresolvepage.cpp:646
Kleo::Crypto::Gui::WizardPage::setTitle
void setTitle(const QString &title)
Definition: wizardpage.cpp:102
Kleo::Crypto::Gui::SignerResolvePage::setEncryptionUserMutable
void setEncryptionUserMutable(bool ismutable)
Definition: signerresolvepage.cpp:611
Kleo::Crypto::Gui::SignerResolvePage::signingSelected
bool signingSelected() const
Definition: signerresolvepage.cpp:589
Kleo::Crypto::Gui::SigningProtocolSelectionWidget::setExclusive
void setExclusive(bool exclusive)
Definition: signerresolvepage.cpp:177
Kleo::Crypto::Gui::SignerResolvePage::~SignerResolvePage
~SignerResolvePage()
Definition: signerresolvepage.cpp:501
kleo_assert.h
Kleo::Formatting::formatForComboBox
QString formatForComboBox(const GpgME::Key &key)
Definition: formatting.cpp:497
boost::shared_ptr
Definition: encryptemailcontroller.h:51
Kleo::Crypto::Gui::SignerResolvePage::selectedProtocolsWithoutSigningCertificate
std::vector< GpgME::Protocol > selectedProtocolsWithoutSigningCertificate() const
Definition: signerresolvepage.cpp:623
d
#define d
Definition: adduseridcommand.cpp:90
Kleo::Crypto::Gui::SignerResolvePage::SignerResolvePage
SignerResolvePage(QWidget *parent=0, Qt::WindowFlags f=0)
Definition: signerresolvepage.cpp:490
Kleo::Crypto::Gui::AbstractSigningProtocolSelectionWidget::userSelectionChanged
void userSelectionChanged()
Kleo::Crypto::Gui::SignerResolvePage::setMultipleProtocolsAllowed
void setMultipleProtocolsAllowed(bool allowed)
Definition: signerresolvepage.cpp:400
Kleo::Crypto::Gui::SignerResolvePage::setSignersAndCandidates
void setSignersAndCandidates(const std::vector< KMime::Types::Mailbox > &signers, const std::vector< std::vector< GpgME::Key > > &keys)
Definition: signerresolvepage.cpp:503
Kleo::Crypto::Gui::SignerResolvePage::removeUnencryptedFile
bool removeUnencryptedFile() const
Definition: signerresolvepage.cpp:641
Kleo::Class::OpenPGP
Definition: classify.h:49
Kleo::Crypto::Gui::SignerResolvePage::resolvedSigners
std::vector< GpgME::Key > resolvedSigners() const
Definition: signerresolvepage.cpp:563
Kleo::Class::CMS
Definition: classify.h:48
Kleo::Crypto::Gui::ReadOnlyProtocolSelectionWidget
Definition: signerresolvepage_p.h:81
signerresolvepage.h
Kleo::Crypto::Gui::ReadOnlyProtocolSelectionWidget::setCertificate
void setCertificate(GpgME::Protocol protocol, const GpgME::Key &key)
Definition: signerresolvepage.cpp:206
Kleo::Crypto::Gui::ReadOnlyProtocolSelectionWidget::ReadOnlyProtocolSelectionWidget
ReadOnlyProtocolSelectionWidget(QWidget *parent=0, Qt::WindowFlags flags=0)
Definition: signerresolvepage.cpp:103
Kleo::Crypto::Gui::SignerResolvePage
Definition: signerresolvepage.h:57
Kleo::Crypto::Gui::SignerResolvePage::isAsciiArmorEnabled
bool isAsciiArmorEnabled() const
Definition: signerresolvepage.cpp:631
kleo_assert
#define kleo_assert(cond)
Definition: kleo_assert.h:84
Kleo::Crypto::Gui::SignerResolvePage::selectedProtocols
std::vector< GpgME::Protocol > selectedProtocols() const
Definition: signerresolvepage.cpp:549
Kleo::Crypto::Gui::SignerResolvePage::setSigningSelected
void setSigningSelected(bool selected)
Definition: signerresolvepage.cpp:594
Kleo::Crypto::Gui::SignerResolvePage::setSigningPreferences
void setSigningPreferences(const boost::shared_ptr< SigningPreferences > &prefs)
Definition: signerresolvepage.cpp:651
Kleo::Crypto::Gui::SigningProtocolSelectionWidget::setProtocolChecked
void setProtocolChecked(GpgME::Protocol protocol, bool checked)
Definition: signerresolvepage.cpp:153
Kleo::Crypto::Gui::SignerResolvePage::setProtocolSelectionUserMutable
void setProtocolSelectionUserMutable(bool ismutable)
Definition: signerresolvepage.cpp:389
signingcertificateselectiondialog.h
q
#define q
Definition: adduseridcommand.cpp:91
Kleo::Crypto::Gui::SigningProtocolSelectionWidget::isExclusive
bool isExclusive() const
Definition: signerresolvepage.cpp:196
Kleo::Crypto::Gui::SignerResolvePage::setPresetProtocols
void setPresetProtocols(const std::vector< GpgME::Protocol > &protocols)
Definition: signerresolvepage.cpp:538
Kleo::Crypto::Gui::SignerResolvePage::setEncryptionSelected
void setEncryptionSelected(bool selected)
Definition: signerresolvepage.cpp:582
Kleo::Crypto::Gui::SignerResolvePage::signingCertificates
std::vector< GpgME::Key > signingCertificates(GpgME::Protocol protocol=GpgME::UnknownProtocol) const
Definition: signerresolvepage.cpp:553
Kleo::Crypto::Gui::SigningCertificateSelectionDialog
Definition: signingcertificateselectiondialog.h:49
Kleo::Crypto::Gui::SignerResolvePage::isComplete
bool isComplete() const
Definition: signerresolvepage.cpp:571
certificateresolver.h
Kleo::Crypto::Gui::ReadOnlyProtocolSelectionWidget::checkedProtocols
std::vector< GpgME::Protocol > checkedProtocols() const
Definition: signerresolvepage.cpp:126
Kleo::Crypto::Gui::SignerResolvePage::EncryptOnly
Definition: signerresolvepage.h:106
Kleo::Crypto::Gui::SigningProtocolSelectionWidget::isProtocolChecked
bool isProtocolChecked(GpgME::Protocol protocol) const
Definition: signerresolvepage.cpp:160
Kleo::Crypto::Gui::ReadOnlyProtocolSelectionWidget::isProtocolChecked
bool isProtocolChecked(GpgME::Protocol protocol) const
Definition: signerresolvepage.cpp:120
Kleo::Crypto::Gui::SignerResolvePage::Validator
Definition: signerresolvepage.h:111
Kleo::Crypto::Gui::WizardPage
Definition: wizardpage.h:48
keycache.h
Kleo::Crypto::Gui::SignerResolvePage::setPresetProtocol
void setPresetProtocol(GpgME::Protocol protocol)
Definition: signerresolvepage.cpp:526
Kleo::Crypto::Gui::SignerResolvePage::encryptionSelected
bool encryptionSelected() const
Definition: signerresolvepage.cpp:577
Kleo::Crypto::Gui::SigningProtocolSelectionWidget
Definition: signerresolvepage_p.h:63
QMap< GpgME::Protocol, GpgME::Key >
Kleo::Crypto::Gui::SigningProtocolSelectionWidget::checkedProtocols
std::vector< GpgME::Protocol > checkedProtocols() const
Definition: signerresolvepage.cpp:167
Kleo::Crypto::Gui::SignerResolvePage::isSigningUserMutable
bool isSigningUserMutable() const
Definition: signerresolvepage.cpp:606
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:56:42 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kleopatra

Skip menu "kleopatra"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal