* assuan.h (assuan_error_t, assuan_context_t): New aliases.
[pinentry.git] / qt / pinentrydialog.cpp
1 /* pinentrydialog.cpp - A secure KDE dialog for PIN entry.
2    Copyright (C) 2002 Klarälvdalens Datakonsult AB
3    Written by Steffen Hansen <steffen@klaralvdalens-datakonsult.se>.
4    
5    This program is free software; you can redistribute it and/or
6    modify it under the terms of the GNU General Public License as
7    published by the Free Software Foundation; either version 2 of the
8    License, or (at your option) any later version.
9  
10    This program is distributed in the hope that it will be useful, but
11    WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    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
18    02111-1307, USA  */
19
20 #include <qlayout.h>
21 #include <qpushbutton.h>
22 #include <qlabel.h>
23 #include <qmessagebox.h>
24
25 #include "secqlineedit.h"
26
27 #include "pinentrydialog.h"
28
29 PinEntryDialog::PinEntryDialog( QWidget* parent, const char* name, bool modal )
30   : QDialog( parent, name, modal ), _grabbed( false )
31 {
32   QBoxLayout* top = new QVBoxLayout( this, 6 );
33   QBoxLayout* upperLayout = new QHBoxLayout( top );
34
35   _icon = new QLabel( this );
36   _icon->setPixmap( QMessageBox::standardIcon( QMessageBox::Information ) );
37   upperLayout->addWidget( _icon );
38
39   QBoxLayout* labelLayout = new QVBoxLayout( upperLayout );
40
41   _error = new QLabel( this );
42   labelLayout->addWidget( _error );
43
44   _desc = new QLabel( this );
45   labelLayout->addWidget( _desc );
46
47   QBoxLayout* l = new QHBoxLayout( top );
48   _prompt = new QLabel( this );
49   l->addWidget( _prompt );
50   _edit = new SecQLineEdit( this );
51   _edit->setMaxLength( 256 );
52   _edit->setEchoMode( SecQLineEdit::Password );
53   l->addWidget( _edit );
54
55   l = new QHBoxLayout( top );
56   
57   _ok = new QPushButton( tr("OK"), this );
58   _cancel = new QPushButton( tr("Cancel"), this );
59
60   l->addWidget( _ok );
61   l->addStretch();
62   l->addWidget( _cancel );
63
64   _ok->setDefault(true);
65
66   connect( _ok, SIGNAL( clicked() ),
67            this, SIGNAL( accepted() ) );
68   connect( _cancel, SIGNAL( clicked() ),
69            this, SIGNAL( rejected() ) );
70
71   connect (this, SIGNAL (accepted ()),
72            this, SLOT (accept ()));
73   connect (this, SIGNAL (rejected ()),
74            this, SLOT (reject ()));
75
76   _edit->setFocus();
77 }
78
79 void PinEntryDialog::paintEvent( QPaintEvent* ev )
80 {
81   // Grab keyboard when widget is mapped to screen
82   // It might be a little weird to do it here, but it works!
83   if( !_grabbed ) {
84     _edit->grabKeyboard();
85     _grabbed = true;
86   }
87   QDialog::paintEvent( ev );
88 }
89
90 void PinEntryDialog::hideEvent( QHideEvent* ev )
91 {
92   _edit->releaseKeyboard();
93   _grabbed = false;
94   QDialog::hideEvent( ev );
95 }
96
97 void PinEntryDialog::keyPressEvent( QKeyEvent* e ) 
98 {
99   if ( e->state() == 0 && e->key() == Key_Escape ) {
100     emit rejected();
101     return;
102   }
103   QDialog::keyPressEvent( e );
104 }
105
106 void PinEntryDialog::setDescription( const QString& txt ) 
107 {
108   _desc->setText( txt );
109   _icon->setPixmap( QMessageBox::standardIcon( QMessageBox::Information ) );
110   setError( QString::null );
111 }
112
113 QString PinEntryDialog::description() const 
114 {
115   return _desc->text();
116 }
117
118 void PinEntryDialog::setError( const QString& txt ) 
119 {
120   if( !txt.isNull() )_icon->setPixmap( QMessageBox::standardIcon( QMessageBox::Critical ) );
121   _error->setText( txt );
122 }
123
124 QString PinEntryDialog::error() const 
125 {
126   return _error->text();
127 }
128
129 void PinEntryDialog::setText( const SecQString& txt ) 
130 {
131   _edit->setText( txt );
132 }
133
134 SecQString PinEntryDialog::text() const 
135 {
136   return _edit->text();
137 }
138
139 void PinEntryDialog::setPrompt( const QString& txt ) 
140 {
141   _prompt->setText( txt );
142 }
143
144 QString PinEntryDialog::prompt() const 
145 {
146   return _prompt->text();
147 }
148
149 void PinEntryDialog::setOkText( const QString& txt )
150 {
151   _ok->setText( txt );
152 }
153
154 void PinEntryDialog::setCancelText( const QString& txt )
155 {
156   _cancel->setText( txt );
157 }