You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
344 lines
9.8 KiB
344 lines
9.8 KiB
15 years ago
|
/* -*- c++ -*-
|
||
|
kpgpui.h
|
||
|
|
||
|
Copyright (C) 2001,2002 the KPGP authors
|
||
|
See file AUTHORS.kpgp for details
|
||
|
|
||
|
This file is part of KPGP, the KDE PGP/GnuPG support library.
|
||
|
|
||
|
KPGP 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.
|
||
|
|
||
|
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||
|
*/
|
||
|
|
||
|
#ifndef KPGPUI_H
|
||
|
#define KPGPUI_H
|
||
|
|
||
|
#include <kdialogbase.h> // base class of all dialogs here
|
||
|
#include <qwidget.h> // base class of Config
|
||
|
#include <qcheckbox.h> // used in inlined methods
|
||
|
#include <kdebug.h> // used in inlined methods
|
||
|
#include <qcstring.h> // used in return-by-value
|
||
|
#include <qstring.h> // is a member in KeyRequester
|
||
|
#include <qvaluevector.h> // used in KeyApprovalDialog
|
||
|
|
||
|
#include "kpgp.h"
|
||
|
|
||
|
#include <kdepimmacros.h>
|
||
|
|
||
|
class QString;
|
||
|
class QRegExp;
|
||
|
class QCString;
|
||
|
class QCheckBox; // needed by Config, KeySelectionDialog
|
||
|
class QMultiLineEdit; // needed by CipherTextDialog
|
||
|
class QComboBox; // needed by Config
|
||
|
class QPixmap; // needed by KeySelectionDialog
|
||
|
class QPushButton; // needed by KeyRequester
|
||
|
class QTimer; // needed by KeySelectionDialog
|
||
|
|
||
|
class KListView; // needed by KeySelectionDialog
|
||
|
class KPasswordEdit; // needed by PassphraseDialog
|
||
|
|
||
|
namespace Kpgp {
|
||
|
|
||
|
class Module;
|
||
|
class KeyList; // needed by KeySelectionDialog
|
||
|
class Key; // needed by KeySelectionDialog
|
||
|
class KeyIDList; // needed by KeySelectionDialog
|
||
|
|
||
|
/** the passphrase dialog */
|
||
|
class KDE_EXPORT PassphraseDialog : public KDialogBase
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
PassphraseDialog( QWidget *parent=0, const QString &caption=QString::null,
|
||
|
bool modal=true, const QString &keyID=QString::null);
|
||
|
virtual ~PassphraseDialog();
|
||
|
|
||
|
const char * passphrase();
|
||
|
|
||
|
private:
|
||
|
KPasswordEdit *lineedit;
|
||
|
};
|
||
|
|
||
|
|
||
|
// -------------------------------------------------------------------------
|
||
|
/** a widget for configuring the pgp interface. Can be included into
|
||
|
a tabdialog. This widget by itself does not provide an apply/cancel
|
||
|
button mechanism. */
|
||
|
class KDE_EXPORT Config : public QWidget
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
Config(QWidget *parent = 0, const char *name = 0, bool encrypt =true);
|
||
|
virtual ~Config();
|
||
|
|
||
|
virtual void setValues();
|
||
|
virtual void applySettings();
|
||
|
QGroupBox* optionsGroupBox() { return mpOptionsGroupBox; };
|
||
|
signals:
|
||
|
void changed();
|
||
|
|
||
|
protected:
|
||
|
Module *pgp;
|
||
|
QCheckBox *storePass;
|
||
|
QCheckBox *encToSelf;
|
||
|
QCheckBox *showCipherText;
|
||
|
QCheckBox *showKeyApprovalDlg;
|
||
|
QComboBox *toolCombo;
|
||
|
QGroupBox* mpOptionsGroupBox;
|
||
|
};
|
||
|
|
||
|
|
||
|
// -------------------------------------------------------------------------
|
||
|
#define KeySelectionDialogSuper KDialogBase
|
||
|
class KDE_EXPORT KeySelectionDialog: public KeySelectionDialogSuper
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
enum TrustCheckMode { NoExpensiveTrustCheck,
|
||
|
AllowExpensiveTrustCheck,
|
||
|
ForceTrustCheck
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
/** allowedKeys: see kpgp.h
|
||
|
*/
|
||
|
KeySelectionDialog( const KeyList& keyList,
|
||
|
const QString& title,
|
||
|
const QString& text = QString::null,
|
||
|
const KeyIDList& keyIds = KeyIDList(),
|
||
|
const bool rememberChoice = false,
|
||
|
const unsigned int allowedKeys = AllKeys,
|
||
|
const bool extendedSelection = false,
|
||
|
QWidget *parent=0, const char *name=0,
|
||
|
bool modal=true );
|
||
|
virtual ~KeySelectionDialog();
|
||
|
|
||
|
/** Returns the key ID of the selected key in single selection mode.
|
||
|
Otherwise it returns a null string. */
|
||
|
virtual KeyID key() const;
|
||
|
|
||
|
/** Returns a list of selected key IDs. */
|
||
|
virtual KeyIDList keys() const
|
||
|
{ return mKeyIds; };
|
||
|
|
||
|
virtual bool rememberSelection() const
|
||
|
{ if( mRememberCB )
|
||
|
return mRememberCB->isChecked();
|
||
|
else
|
||
|
return false;
|
||
|
};
|
||
|
|
||
|
protected slots:
|
||
|
virtual void slotRereadKeys();
|
||
|
virtual void slotSelectionChanged( QListViewItem* );
|
||
|
virtual void slotSelectionChanged();
|
||
|
virtual void slotCheckSelection( QListViewItem* = 0 );
|
||
|
virtual void slotRMB( QListViewItem*, const QPoint&, int );
|
||
|
virtual void slotRecheckKey();
|
||
|
virtual void slotOk();
|
||
|
virtual void slotCancel();
|
||
|
virtual void slotSearch( const QString & text );
|
||
|
virtual void slotFilter();
|
||
|
|
||
|
private:
|
||
|
void filterByKeyID( const QString & keyID );
|
||
|
void filterByKeyIDOrUID( const QString & keyID );
|
||
|
void filterByUID( const QString & uid );
|
||
|
void showAllItems();
|
||
|
bool anyChildMatches( const QListViewItem * item, QRegExp & rx ) const;
|
||
|
|
||
|
void initKeylist( const KeyList& keyList, const KeyIDList& keyIds );
|
||
|
|
||
|
QString keyInfo( const Kpgp::Key* ) const;
|
||
|
|
||
|
QString beautifyFingerprint( const QCString& ) const;
|
||
|
|
||
|
// Returns the key ID of the key the given QListViewItem belongs to
|
||
|
KeyID getKeyId( const QListViewItem* ) const;
|
||
|
|
||
|
// Returns: -1 = unusable, 0 = unknown, 1 = valid, but untrusted, 2 = trusted
|
||
|
int keyValidity( const Kpgp::Key* ) const;
|
||
|
|
||
|
// Updates the given QListViewItem with the data of the given key
|
||
|
void updateKeyInfo( const Kpgp::Key*, QListViewItem* ) const;
|
||
|
|
||
|
/** Checks if choosing the given key is allowed
|
||
|
Returns:
|
||
|
-1 = key must not be chosen,
|
||
|
0 = not enough information to decide whether the give key is allowed
|
||
|
or not,
|
||
|
1 = key can be chosen
|
||
|
*/
|
||
|
int keyAdmissibility( QListViewItem*,
|
||
|
TrustCheckMode = NoExpensiveTrustCheck ) const;
|
||
|
|
||
|
// Perform expensive trust checks for the given keys
|
||
|
bool checkKeys( const QValueList<QListViewItem*>& ) const;
|
||
|
|
||
|
private:
|
||
|
KListView *mListView;
|
||
|
QCheckBox *mRememberCB;
|
||
|
QPixmap *mKeyGoodPix, *mKeyBadPix, *mKeyUnknownPix, *mKeyValidPix;
|
||
|
KeyIDList mKeyIds;
|
||
|
unsigned int mAllowedKeys;
|
||
|
QTimer* mCheckSelectionTimer;
|
||
|
QTimer* mStartSearchTimer;
|
||
|
QString mSearchText;
|
||
|
QListViewItem* mCurrentContextMenuItem;
|
||
|
|
||
|
static const int sCheckSelectionDelay;
|
||
|
};
|
||
|
|
||
|
class KDE_EXPORT KeyRequester: public QWidget
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
KeyRequester( QWidget * parent=0, bool multipleKeys=false,
|
||
|
unsigned int allowedKeys=AllKeys, const char * name=0 );
|
||
|
virtual ~KeyRequester();
|
||
|
|
||
|
KeyIDList keyIDs() const;
|
||
|
void setKeyIDs( const KeyIDList & keyIDs );
|
||
|
|
||
|
QPushButton * eraseButton() const { return mEraseButton; }
|
||
|
QPushButton * dialogButton() const { return mDialogButton; }
|
||
|
|
||
|
void setDialogCaption( const QString & caption );
|
||
|
void setDialogMessage( const QString & message );
|
||
|
|
||
|
bool isMultipleKeysEnabled() const;
|
||
|
void setMultipleKeysEnabled( bool enable );
|
||
|
|
||
|
int allowedKeys() const;
|
||
|
void setAllowedKeys( int allowed );
|
||
|
|
||
|
protected:
|
||
|
/** Reimplement this to return a list of selected keys. */
|
||
|
virtual KeyIDList keyRequestHook( Module * pgp ) const = 0;
|
||
|
|
||
|
protected:
|
||
|
QLabel * mLabel;
|
||
|
QPushButton * mEraseButton;
|
||
|
QPushButton * mDialogButton;
|
||
|
QString mDialogCaption, mDialogMessage;
|
||
|
bool mMulti;
|
||
|
int mAllowedKeys;
|
||
|
KeyIDList mKeys;
|
||
|
|
||
|
protected slots:
|
||
|
void slotDialogButtonClicked();
|
||
|
void slotEraseButtonClicked();
|
||
|
|
||
|
signals:
|
||
|
void changed();
|
||
|
|
||
|
private:
|
||
|
class Private;
|
||
|
Private * d;
|
||
|
protected:
|
||
|
virtual void virtual_hook( int, void* );
|
||
|
};
|
||
|
|
||
|
|
||
|
class KDE_EXPORT PublicKeyRequester : public KeyRequester {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
PublicKeyRequester( QWidget * parent=0, bool multipleKeys=false,
|
||
|
unsigned int allowedKeys=PublicKeys, const char * name=0 );
|
||
|
virtual ~PublicKeyRequester();
|
||
|
|
||
|
protected:
|
||
|
KeyIDList keyRequestHook( Module * pgp ) const;
|
||
|
|
||
|
private:
|
||
|
typedef KeyRequester base;
|
||
|
class Private;
|
||
|
Private * d;
|
||
|
protected:
|
||
|
virtual void virtual_hook( int, void* );
|
||
|
};
|
||
|
|
||
|
|
||
|
class KDE_EXPORT SecretKeyRequester : public KeyRequester {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
SecretKeyRequester( QWidget * parent=0, bool multipleKeys=false,
|
||
|
unsigned int allowedKeys=SecretKeys, const char * name=0 );
|
||
|
virtual ~SecretKeyRequester();
|
||
|
|
||
|
protected:
|
||
|
KeyIDList keyRequestHook( Module * pgp ) const;
|
||
|
|
||
|
private:
|
||
|
typedef KeyRequester base;
|
||
|
class Private;
|
||
|
Private * d;
|
||
|
protected:
|
||
|
virtual void virtual_hook( int, void* );
|
||
|
};
|
||
|
|
||
|
|
||
|
// -------------------------------------------------------------------------
|
||
|
class KDE_EXPORT KeyApprovalDialog: public KDialogBase
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
KeyApprovalDialog( const QStringList&,
|
||
|
const QValueVector<KeyIDList>&,
|
||
|
const int allowedKeys,
|
||
|
QWidget *parent = 0, const char *name = 0,
|
||
|
bool modal = true );
|
||
|
virtual ~KeyApprovalDialog() {};
|
||
|
|
||
|
QValueVector<KeyIDList> keys() const { return mKeys; };
|
||
|
|
||
|
bool preferencesChanged() const { return mPrefsChanged; }
|
||
|
|
||
|
protected slots:
|
||
|
void slotPrefsChanged( int ) { mPrefsChanged = true; };
|
||
|
void slotChangeEncryptionKey( int );
|
||
|
virtual void slotOk();
|
||
|
virtual void slotCancel();
|
||
|
|
||
|
private:
|
||
|
QValueVector<KeyIDList> mKeys;
|
||
|
int mAllowedKeys;
|
||
|
int mEncryptToSelf;
|
||
|
bool mPrefsChanged;
|
||
|
QPtrVector<QLabel> mAddressLabels;
|
||
|
QPtrVector<QLabel> mKeyIdsLabels;
|
||
|
//QPtrVector<QListBox> mKeyIdListBoxes;
|
||
|
QPtrVector<QComboBox> mEncrPrefCombos;
|
||
|
};
|
||
|
|
||
|
|
||
|
// -------------------------------------------------------------------------
|
||
|
class KDE_EXPORT CipherTextDialog: public KDialogBase
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
CipherTextDialog( const QCString & text, const QCString & charset=0,
|
||
|
QWidget *parent=0, const char *name=0, bool modal=true );
|
||
|
virtual ~CipherTextDialog() {};
|
||
|
|
||
|
private:
|
||
|
void setMinimumSize();
|
||
|
QMultiLineEdit *mEditBox;
|
||
|
};
|
||
|
|
||
|
} // namespace Kpgp
|
||
|
|
||
|
#endif
|