summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/securityplugins/pin/pin.cpp61
-rw-r--r--noncore/securityplugins/pin/pinDialogBase.ui775
2 files changed, 363 insertions, 473 deletions
diff --git a/noncore/securityplugins/pin/pin.cpp b/noncore/securityplugins/pin/pin.cpp
index 2accb9c..f1c52c5 100644
--- a/noncore/securityplugins/pin/pin.cpp
+++ b/noncore/securityplugins/pin/pin.cpp
@@ -1,355 +1,396 @@
/**
* \note Taken from opie-security and libqpe password.cpp, and modified for Opie multiauth by Clement Seveillac
*/
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "pin.h"
#include "pinDialogBase.h"
/* OPIE */
#include <opie2/odebug.h>
#include <opie2/oapplication.h>
/* QT */
#include <qpe/config.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qtextview.h>
#include <qstring.h>
#include <qdialog.h>
/* UNIX */
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
extern "C" char *crypt(const char *key, const char *salt);
using Opie::Security::MultiauthConfigWidget;
using Opie::Security::MultiauthPluginObject;
/// set to TRUE when we press the 'Skip' button
static bool isSkip = FALSE;
/// PIN input graphical widget.
/**
* Inherits the PinDialogBase class defined originally in pinDialogBase.ui interface file.
* \sa PinDlg and PinDialog (the class generated from the .ui file)
* It comes from the original PIN locking code in Opie :
* \sa http://dudu.dyn.2-h.org/opiedoxydoc/library_2password_8cpp-source.html
*/
class PinDialog : public PinDialogBase
{
Q_OBJECT
public:
PinDialog( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~PinDialog();
void clear();
void setPrompt( const QString& );
signals:
/// emitted when we press the Enter button
void passwordEntered( const QString& );
/// emitted when we press the Skip button
void skip();
protected:
bool eventFilter( QObject*, QEvent* );
private:
void input( QString );
friend class PinPlugin;
QString text;
+
+ private slots:
+ void slotInput();
+ void slotSkip();
+ void slotOK();
+ void slotBackspace();
};
/// Constructs a PinDialog widget, and initializes things
PinDialog::PinDialog( QWidget* parent, const char* name, WFlags fl )
: PinDialogBase( parent, name, fl )
{
QRect desk = oApp->desktop()->geometry();
if ( desk.width() < 220 ) {
QFont f( font() );
f.setPointSize( 18 );
setFont( f );
f.setPointSize( 12 );
prompt->setFont( f );
}
+ connect ( button_0, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_1, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_2, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_3, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_4, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_5, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_6, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_7, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_8, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_9, SIGNAL( clicked()), SLOT( slotInput()));
+ connect ( button_Skip, SIGNAL( clicked()), SLOT( slotSkip()));
+ connect ( button_OK, SIGNAL( clicked()), SLOT( slotOK()));
+
button_0->installEventFilter( this );
button_1->installEventFilter( this );
button_2->installEventFilter( this );
button_3->installEventFilter( this );
button_4->installEventFilter( this );
button_5->installEventFilter( this );
button_6->installEventFilter( this );
button_7->installEventFilter( this );
button_8->installEventFilter( this );
button_9->installEventFilter( this );
button_Skip->installEventFilter( this );
button_OK->installEventFilter( this );
- setFocus();
+ button_OK->setFocus();
}
/// nothing to do
PinDialog::~PinDialog()
{
// no need to delete child widgets, Qt does it all for us
}
-/// Record the pressed numbers, and the Skip and Enter commands
+/// Handle keyboard events
bool PinDialog::eventFilter( QObject*o, QEvent*e )
{
- if ( e->type() == QEvent::MouseButtonRelease ) {
- if ( o == button_OK ) {
- emit passwordEntered( text );
+ if(e->type() == QEvent::KeyPress) {
+ switch(((QKeyEvent *)e)->key()) {
+ case Key_0...Key_9:
+ input(((QKeyEvent *)e)->text());
+ return TRUE;
+ case Key_Backspace:
+ slotBackspace();
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void PinDialog::slotInput()
+{
+ QPushButton *l = (QPushButton*)sender();
+ input(l->text().stripWhiteSpace());
}
- else if ( o == button_Skip ) {
+
+void PinDialog::slotSkip()
+{
isSkip = TRUE;
emit skip();
}
- else {
- QLabel *l = (QLabel*)o;
- input(l->text());
+
+void PinDialog::slotOK()
+{
+ emit passwordEntered( text );
}
+
+void PinDialog::slotBackspace()
+{
+ if(text.length() > 0) {
+ text.truncate( text.length() - 1 );
+ display->setText( text );
}
- return FALSE;
}
void PinDialog::input( QString c )
{
text += c;
display->setText( text );
}
void PinDialog::setPrompt( const QString& s )
{
prompt->setText( s );
}
void PinDialog::clear()
{
text = "";
input("");
}
/// PIN dialog
/**
* Dialog containing the PinDialog widget (which asks for a PIN) and interfacing with its I/O.
* \sa PinDialog
*/
class PinDlg : public QDialog
{
public:
PinDlg( QWidget *parent, const char * name, bool modal, bool fullscreen = FALSE )
: QDialog( parent, name, modal, fullscreen ? WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop : 0 ),
modl(modal)
{
pinD = new PinDialog( this );
if ( fullscreen ) {
QRect desk = oApp->desktop()->geometry();
setGeometry( 0, 0, desk.width(), desk.height() );
}
connect( pinD, SIGNAL(passwordEntered(const QString&)),
this, SLOT(accept()) );
connect( pinD, SIGNAL(skip()), this, SLOT(accept()) );
}
void resizeEvent( QResizeEvent * )
{
pinD->resize( size() );
}
void reset()
{
pinD->clear();
}
/// Slot receiving the Skip or Enter commands, and closing the QDialog
void accept()
{
if ( !modl )
oApp->exit_loop();
QDialog::accept();
}
PinDialog *pinD;
bool modl;
};
/// generate a fairly random salt and return the PIN hashed by crypt()
QString PinPlugin::encrypt(const QString& pin)
{
// the salt must begin by "$1$" if we want crypt() to use MD5
char salt[] = "$1$........";
const char *const seedchars = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// initialize the random generator
srandom(time(0));
int i;
for(i = 0; i < 8; i++)
{
// initialize the salt with random()
salt[i+3] = seedchars[random() % 64];
}
return QString::fromLatin1(crypt(pin.latin1(),salt));
}
/// verify a PIN against its crypt() hash
/**
* \return true if the \a pin matches its \a hash
*/
bool PinPlugin::verify(const QString& pin, const QString& hash)
{
// the hash, which contains the salt (8 chars after "$1$"), can be given as the salt
return hash.compare( QString::fromLatin1(crypt( pin.latin1(), hash.latin1() )) ) == 0 ? true : false;
}
/// Displays a PinDialog and returns the typed in PIN
/**
* The returned value is QString::null if the user cancels the operation,
* or the empty string if the user enters no password (but confirms the
* dialog).
*/
QString PinPlugin::getPIN( const QString& prompt )
{
PinDlg pd(0,0,TRUE);
pd.pinD->setPrompt( prompt );
pd.showMaximized();
int r = pd.exec();
if ( r == QDialog::Accepted ) {
if (pd.pinD->text.isEmpty())
return "";
else
return pd.pinD->text;
}
else
return QString::null;
}
/// Displays the PIN dialog and returns a hash of the typed in PIN
/**
* \return the hashed ( =one-way encrypted) PIN typed in by the user
* \param prompt the prompt to display in the PinDialog
*/
QString PinPlugin::getCryptedPIN( const QString& prompt )
{
return encrypt(getPIN(prompt));
}
/// Displays the PIN dialog, asks 2 times for a new PIN, saves it if entered two times
/**
* writes nothing if we enter nothing the first time
*/
void PinPlugin::changePIN()
{
QString new1, new2;
do {
new1 = getPIN(QObject::tr("Enter new PIN"));
if ( new1.isNull() )
return;
new2 = getPIN(QObject::tr("Re-enter new PIN"));
} while (new1 != new2);
odebug << "writing new PIN hash in Security.conf" << oendl;
Config cfg("Security");
cfg.setGroup("PinPlugin");
cfg.writeEntry("hashedPIN", encrypt(new1));
}
/// Removes the PIN hashed value in the config file
void PinPlugin::clearPIN()
{
Config cfg("Security");
cfg.setGroup("PinPlugin");
cfg.removeEntry("hashedPIN");
}
/// Prompt, fullscreen, for the user's PIN and compare it to the stored one.
/**
* \return the result code, as a MultiauthPluginObject::authResult object
*/
int PinPlugin::authenticate()
{
// reset skip (if we ran Pin two times in a row, skipping the first time, it must be put to 0 again)
isSkip = FALSE;
// fetch value in config
Config cfg("Security");
cfg.setGroup("PinPlugin");
QString hashedPin = cfg.readEntry("hashedPIN");
if (!hashedPin.isEmpty())
{
// prompt for the PIN in a fullscreen modal dialog
PinDlg pd(0,0,TRUE,TRUE);
pd.reset();
pd.exec();
// analyse the result
if (isSkip == TRUE)
return MultiauthPluginObject::Skip;
else if (verify(pd.pinD->text, hashedPin))
return MultiauthPluginObject::Success;
else
return MultiauthPluginObject::Failure;
}
owarn << "No PIN has been defined! We consider it as a successful authentication though." << oendl;
return MultiauthPluginObject::Success;
}
/// Standard c'tor
PinPlugin::PinPlugin() : MultiauthPluginObject(), m_pinW(0) {
}
/// deletes m_pinW if we need to
PinPlugin::~PinPlugin() {
if (m_pinW != 0)
delete m_pinW;
}
/// Simply returns the plugin name (PIN plugin)
QString PinPlugin::pluginName() const {
return "PIN Plugin";
}
QString PinPlugin::pixmapNameWidget() const {
return "security/pinplugin";
}
QString PinPlugin::pixmapNameConfig() const {
return "security/pinplugin";
}
/// returns a PinConfigWidget
MultiauthConfigWidget * PinPlugin::configWidget(QWidget * parent) {
if (m_pinW == 0) {
m_pinW = new PinConfigWidget(parent, "PIN configuration widget");
connect(m_pinW->changePIN, SIGNAL( clicked() ), this, SLOT( changePIN() ));
connect(m_pinW->clearPIN, SIGNAL( clicked() ), this, SLOT( clearPIN() ));
}
return m_pinW;
}
#include "pin.moc"
diff --git a/noncore/securityplugins/pin/pinDialogBase.ui b/noncore/securityplugins/pin/pinDialogBase.ui
index f84587b..7fde488 100644
--- a/noncore/securityplugins/pin/pinDialogBase.ui
+++ b/noncore/securityplugins/pin/pinDialogBase.ui
@@ -1,1142 +1,991 @@
<!DOCTYPE UI><UI>
<class>PinDialogBase</class>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>PinDialogBase</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
- <width>231</width>
- <height>293</height>
+ <width>257</width>
+ <height>280</height>
</rect>
</property>
<property stdset="1">
<name>font</name>
<font>
<pointsize>24</pointsize>
</font>
</property>
<property stdset="1">
<name>caption</name>
<string>PinDialogBase</string>
</property>
<grid>
<property stdset="1">
<name>margin</name>
<number>11</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>6</number>
</property>
- <widget row="3" column="0" >
- <class>QLabel</class>
+ <widget row="4" column="0" >
+ <class>QPushButton</class>
<property stdset="1">
<name>name</name>
- <cstring>button_4</cstring>
+ <cstring>button_7</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
+ <name>text</name>
+ <string>7</string>
</property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QPushButton</class>
<property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
+ <name>name</name>
+ <cstring>button_1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
</property>
<property stdset="1">
<name>text</name>
- <string>4</string>
+ <string>1</string>
+ </property>
+ </widget>
+ <widget row="2" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_3</cstring>
</property>
<property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
</property>
- <property>
- <name>hAlign</name>
+ <property stdset="1">
+ <name>text</name>
+ <string>3</string>
</property>
</widget>
- <widget row="4" column="0" >
- <class>QLabel</class>
+ <widget row="4" column="2" >
+ <class>QPushButton</class>
<property stdset="1">
<name>name</name>
- <cstring>button_7</cstring>
+ <cstring>button_9</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
+ <name>text</name>
+ <string> 9 </string>
</property>
+ </widget>
+ <widget row="3" column="2" >
+ <class>QPushButton</class>
<property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
+ <name>name</name>
+ <cstring>button_6</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
</property>
<property stdset="1">
<name>text</name>
- <string>7</string>
+ <string>6</string>
</property>
+ </widget>
+ <widget row="5" column="0" >
+ <class>QPushButton</class>
<property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
+ <name>name</name>
+ <cstring>button_0</cstring>
</property>
- <property>
- <name>hAlign</name>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string> 0 </string>
</property>
</widget>
<widget row="0" column="0" rowspan="1" colspan="3" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<cstring>prompt</cstring>
</property>
<property stdset="1">
<name>font</name>
<font>
<pointsize>18</pointsize>
</font>
</property>
<property stdset="1">
<name>text</name>
<string>Enter your PIN</string>
</property>
</widget>
<widget row="1" column="0" rowspan="1" colspan="3" >
<class>QLineEdit</class>
<property stdset="1">
<name>name</name>
<cstring>display</cstring>
</property>
<property stdset="1">
<name>enabled</name>
<bool>false</bool>
</property>
<property stdset="1">
<name>palette</name>
<palette>
<active>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>228</red>
<green>228</green>
<blue>228</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>242</red>
<green>242</green>
<blue>242</blue>
</color>
<color>
<red>78</red>
<green>78</green>
<blue>78</blue>
</color>
<color>
<red>183</red>
<green>183</green>
<blue>183</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>220</red>
<green>220</green>
<blue>220</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>10</red>
<green>95</green>
<blue>137</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</active>
<disabled>
<color>
<red>128</red>
<green>128</green>
<blue>128</blue>
</color>
<color>
<red>228</red>
<green>228</green>
<blue>228</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>114</red>
<green>114</green>
<blue>114</blue>
</color>
<color>
<red>152</red>
<green>152</green>
<blue>152</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>220</red>
<green>220</green>
<blue>220</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>128</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</disabled>
<inactive>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>228</red>
<green>228</green>
<blue>228</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>242</red>
<green>242</green>
<blue>242</blue>
</color>
<color>
<red>78</red>
<green>78</green>
<blue>78</blue>
</color>
<color>
<red>183</red>
<green>183</green>
<blue>183</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>220</red>
<green>220</green>
<blue>220</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>10</red>
<green>95</green>
<blue>137</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</inactive>
</palette>
</property>
<property stdset="1">
<name>echoMode</name>
<enum>Password</enum>
</property>
</widget>
- <widget row="2" column="0" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>button_1</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>1</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
- </property>
- </widget>
- <widget row="2" column="1" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>button_2</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>2</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
- </property>
- </widget>
- <widget row="3" column="1" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>button_5</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>5</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
- </property>
- </widget>
- <widget row="3" column="2" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>button_6</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>6</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
- </property>
- </widget>
- <widget row="2" column="2" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>button_3</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>3</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
- </property>
- </widget>
- <widget row="5" column="0" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>button_0</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>0</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
- </property>
- <property>
- <name>layoutMargin</name>
- </property>
- <property>
- <name>layoutSpacing</name>
- </property>
- </widget>
- <widget row="4" column="1" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>button_8</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>8</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
- </property>
- </widget>
- <widget row="4" column="2" >
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>button_9</cstring>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>9</string>
- </property>
- <property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
- </property>
- <property>
- <name>layoutMargin</name>
- </property>
- <property>
- <name>layoutSpacing</name>
- </property>
- </widget>
<widget row="5" column="2" >
- <class>QLabel</class>
+ <class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>button_OK</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>palette</name>
<palette>
<active>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
- <red>192</red>
- <green>192</green>
- <blue>192</blue>
+ <red>170</red>
+ <green>255</green>
+ <blue>0</blue>
</color>
<color>
- <red>255</red>
+ <red>212</red>
<green>255</green>
- <blue>255</blue>
+ <blue>127</blue>
</color>
<color>
- <red>223</red>
- <green>223</green>
- <blue>223</blue>
+ <red>191</red>
+ <green>255</green>
+ <blue>63</blue>
</color>
<color>
- <red>96</red>
- <green>96</green>
- <blue>96</blue>
+ <red>85</red>
+ <green>127</green>
+ <blue>0</blue>
</color>
<color>
- <red>128</red>
- <green>128</green>
- <blue>128</blue>
+ <red>113</red>
+ <green>170</green>
+ <blue>0</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
- <red>0</red>
- <green>170</green>
- <blue>0</blue>
+ <red>238</red>
+ <green>238</green>
+ <blue>230</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
+ <red>255</red>
+ <green>221</green>
+ <blue>118</blue>
+ </color>
+ <color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
</active>
<disabled>
<color>
<red>128</red>
<green>128</green>
<blue>128</blue>
</color>
<color>
- <red>192</red>
- <green>192</green>
- <blue>192</blue>
+ <red>170</red>
+ <green>255</green>
+ <blue>0</blue>
</color>
<color>
- <red>255</red>
+ <red>212</red>
<green>255</green>
- <blue>255</blue>
+ <blue>127</blue>
</color>
<color>
- <red>220</red>
- <green>220</green>
- <blue>220</blue>
+ <red>183</red>
+ <green>255</green>
+ <blue>38</blue>
</color>
<color>
- <red>96</red>
- <green>96</green>
- <blue>96</blue>
+ <red>85</red>
+ <green>127</green>
+ <blue>0</blue>
</color>
<color>
- <red>128</red>
- <green>128</green>
- <blue>128</blue>
+ <red>113</red>
+ <green>170</green>
+ <blue>0</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>128</red>
<green>128</green>
<blue>128</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
- <red>0</red>
- <green>170</green>
- <blue>0</blue>
+ <red>238</red>
+ <green>238</green>
+ <blue>230</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
+ <red>255</red>
+ <green>221</green>
+ <blue>118</blue>
+ </color>
+ <color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
</disabled>
<inactive>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
- <red>192</red>
- <green>192</green>
- <blue>192</blue>
+ <red>170</red>
+ <green>255</green>
+ <blue>0</blue>
</color>
<color>
- <red>255</red>
+ <red>212</red>
<green>255</green>
- <blue>255</blue>
+ <blue>127</blue>
</color>
<color>
- <red>220</red>
- <green>220</green>
- <blue>220</blue>
+ <red>183</red>
+ <green>255</green>
+ <blue>38</blue>
</color>
<color>
- <red>96</red>
- <green>96</green>
- <blue>96</blue>
+ <red>85</red>
+ <green>127</green>
+ <blue>0</blue>
</color>
<color>
- <red>128</red>
- <green>128</green>
- <blue>128</blue>
+ <red>113</red>
+ <green>170</green>
+ <blue>0</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
- <red>0</red>
- <green>170</green>
- <blue>0</blue>
+ <red>238</red>
+ <green>238</green>
+ <blue>230</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
+ <red>255</red>
+ <green>221</green>
+ <blue>118</blue>
+ </color>
+ <color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
</inactive>
</palette>
</property>
<property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
+ <name>text</name>
+ <string>OK</string>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_4</cstring>
</property>
<property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
</property>
<property stdset="1">
<name>text</name>
- <string>Enter</string>
+ <string>4</string>
</property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QPushButton</class>
<property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
+ <name>name</name>
+ <cstring>button_2</cstring>
</property>
- <property>
- <name>hAlign</name>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>2</string>
+ </property>
+ </widget>
+ <widget row="3" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_5</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>5</string>
+ </property>
+ </widget>
+ <widget row="4" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_8</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>8</string>
</property>
</widget>
<widget row="5" column="1" >
- <class>QLabel</class>
+ <class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>button_Skip</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>palette</name>
<palette>
<active>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
- <red>192</red>
- <green>192</green>
- <blue>192</blue>
+ <red>255</red>
+ <green>255</green>
+ <blue>127</blue>
</color>
<color>
<red>255</red>
<green>255</green>
- <blue>255</blue>
+ <blue>254</blue>
</color>
<color>
- <red>223</red>
- <green>223</green>
- <blue>223</blue>
+ <red>255</red>
+ <green>255</green>
+ <blue>190</blue>
</color>
<color>
- <red>96</red>
- <green>96</green>
- <blue>96</blue>
+ <red>127</red>
+ <green>127</green>
+ <blue>63</blue>
</color>
<color>
- <red>128</red>
- <green>128</green>
- <blue>128</blue>
+ <red>170</red>
+ <green>170</green>
+ <blue>85</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
- <red>255</red>
- <green>255</green>
- <blue>127</blue>
+ <red>238</red>
+ <green>238</green>
+ <blue>230</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
+ <red>255</red>
+ <green>221</green>
+ <blue>118</blue>
+ </color>
+ <color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
</active>
<disabled>
<color>
<red>128</red>
<green>128</green>
<blue>128</blue>
</color>
<color>
- <red>192</red>
- <green>192</green>
- <blue>192</blue>
+ <red>255</red>
+ <green>255</green>
+ <blue>127</blue>
</color>
<color>
<red>255</red>
<green>255</green>
- <blue>255</blue>
+ <blue>254</blue>
</color>
<color>
- <red>220</red>
- <green>220</green>
- <blue>220</blue>
+ <red>255</red>
+ <green>255</green>
+ <blue>165</blue>
</color>
<color>
- <red>96</red>
- <green>96</green>
- <blue>96</blue>
+ <red>127</red>
+ <green>127</green>
+ <blue>63</blue>
</color>
<color>
- <red>128</red>
- <green>128</green>
- <blue>128</blue>
+ <red>170</red>
+ <green>170</green>
+ <blue>85</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>128</red>
<green>128</green>
<blue>128</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
- <red>255</red>
- <green>255</green>
- <blue>127</blue>
+ <red>238</red>
+ <green>238</green>
+ <blue>230</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
+ <red>255</red>
+ <green>221</green>
+ <blue>118</blue>
+ </color>
+ <color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
</disabled>
<inactive>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
- <red>192</red>
- <green>192</green>
- <blue>192</blue>
+ <red>255</red>
+ <green>255</green>
+ <blue>127</blue>
</color>
<color>
<red>255</red>
<green>255</green>
- <blue>255</blue>
+ <blue>254</blue>
</color>
<color>
- <red>220</red>
- <green>220</green>
- <blue>220</blue>
+ <red>255</red>
+ <green>255</green>
+ <blue>165</blue>
</color>
<color>
- <red>96</red>
- <green>96</green>
- <blue>96</blue>
+ <red>127</red>
+ <green>127</green>
+ <blue>63</blue>
</color>
<color>
- <red>128</red>
- <green>128</green>
- <blue>128</blue>
+ <red>170</red>
+ <green>170</green>
+ <blue>85</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
<color>
- <red>255</red>
- <green>255</green>
- <blue>127</blue>
+ <red>238</red>
+ <green>238</green>
+ <blue>230</blue>
</color>
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
<color>
+ <red>255</red>
+ <green>221</green>
+ <blue>118</blue>
+ </color>
+ <color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
</inactive>
</palette>
</property>
<property stdset="1">
- <name>frameShape</name>
- <enum>Box</enum>
- </property>
- <property stdset="1">
- <name>frameShadow</name>
- <enum>Raised</enum>
- </property>
- <property stdset="1">
<name>text</name>
<string>Skip</string>
</property>
<property stdset="1">
- <name>alignment</name>
- <set>AlignCenter</set>
- </property>
- <property>
- <name>hAlign</name>
+ <name>autoResize</name>
+ <bool>false</bool>
</property>
</widget>
</grid>
</widget>
+<customwidgets>
+ <customwidget>
+ <class>QWidget</class>
+ <header location="global">qwidget.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+<tabstops>
+ <tabstop>display</tabstop>
+ <tabstop>button_1</tabstop>
+ <tabstop>button_2</tabstop>
+ <tabstop>button_3</tabstop>
+ <tabstop>button_4</tabstop>
+ <tabstop>button_5</tabstop>
+ <tabstop>button_6</tabstop>
+ <tabstop>button_7</tabstop>
+ <tabstop>button_8</tabstop>
+ <tabstop>button_9</tabstop>
+ <tabstop>button_0</tabstop>
+ <tabstop>button_Skip</tabstop>
+ <tabstop>button_OK</tabstop>
+</tabstops>
</UI>