author | paule <paule> | 2007-01-29 05:23:30 (UTC) |
---|---|---|
committer | paule <paule> | 2007-01-29 05:23:30 (UTC) |
commit | 865225eccc619cbd196d181e80ef27167b124090 (patch) (side-by-side diff) | |
tree | bac8ca323c2af7c3b40c044271db619de2649c0c | |
parent | 7c04a4a9ceb843a3ca52b27840145ed598210068 (diff) | |
download | opie-865225eccc619cbd196d181e80ef27167b124090.zip opie-865225eccc619cbd196d181e80ef27167b124090.tar.gz opie-865225eccc619cbd196d181e80ef27167b124090.tar.bz2 |
Change buttons from QLabel to QPushButton, which enables entering the PIN using directional buttons and space/enter (which is all that is available on some PDAs if the screen is uncalibrated). In addition, you can now enter numbers using number keys if your device has them.
-rw-r--r-- | noncore/securityplugins/pin/pin.cpp | 67 | ||||
-rw-r--r-- | noncore/securityplugins/pin/pinDialogBase.ui | 775 |
2 files changed, 366 insertions, 476 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 ); - } - else if ( o == button_Skip ) { - isSkip = TRUE; - emit skip(); - } - else { - QLabel *l = (QLabel*)o; - input(l->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()); +} + +void PinDialog::slotSkip() +{ + isSkip = TRUE; + emit skip(); +} + +void PinDialog::slotOK() +{ + emit passwordEntered( text ); +} + +void PinDialog::slotBackspace() +{ + if(text.length() > 0) { + text.truncate( text.length() - 1 ); + display->setText( text ); + } +} + 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>alignment</name> - <set>AlignCenter</set> + <name>name</name> + <cstring>button_3</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>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>name</name> + <cstring>button_6</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>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> |