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

kleopatra

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

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