/***************************************************************************
* $Id$
**
* Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
**
* This file is part of an example program for Qt.  This example
* program may be used, distributed and modified without limitation.
**
****************************************************************************/

import org.kde.qt.*;

class Wizard  extends QWizard
{
protected QHBox page1, page2, page3;
protected QLineEdit key, firstName, lastName, address, phone, email;
protected QLabel lKey, lFirstName, lLastName, lAddress, lPhone, lEmail;




Wizard( )
{
	this(null, null);
}

Wizard( QWidget parent, String name )
{
    super( parent, name, true );
    setupPage1();
    setupPage2();
    setupPage3();
    connect(this, SIGNAL("selected(String)"), this, SLOT("doShowPage(String)"));
    connect(finishButton(), SIGNAL("clicked()"), qApp(), SLOT("quit()"));
    key.setFocus();
}

void setupPage1()
{
    page1 = new QHBox( this );
    page1.setSpacing(8);

    QLabel info = new QLabel( page1 );
    info.setPalette( new QPalette(yellow()) );
    info.setText( "Enter your personal\n"
                   + "key here.\n\n"
                   + "Your personal key\n"
                   + "consists of 4 digits" );
    info.setIndent( 8 );
    info.setMaximumWidth( info.sizeHint().width() );

    QVBox page = new QVBox( page1 );

    QHBox row1 = new QHBox( page );

    new QLabel( "Key:", row1 );

    key = new QLineEdit( row1 );
    key.setMaxLength( 4 );
    key.setValidator( new QIntValidator( 1000, 9999, key ) );

    connect( key, SIGNAL(" textChanged( String )"),
	     this, SLOT(" keyChanged( String )") );

    addPage( page1, "Personal Key" );

    setNextEnabled( page1, false );
    setHelpEnabled( page1, false );
}

void setupPage2()
{
    page2 = new QHBox( this );
    page2.setSpacing(8);

    QLabel info = new QLabel( page2 );
    info.setPalette( new QPalette(yellow()) );
    info.setText( "\n"
                   + "  Enter your personal  \n"
                   + "  data here.  \n\n"
                   + "  The required fields are  \n"
                   + "  First Name, Last Name \n"
                   + "  and E-Mail.  \n" );
    info.setIndent(8);
    info.setMaximumWidth( info.sizeHint().width() );

    QVBox page = new QVBox( page2 );

    QHBox row1 = new QHBox( page );
    QHBox row2 = new QHBox( page );
    QHBox row3 = new QHBox( page );
    QHBox row4 = new QHBox( page );
    QHBox row5 = new QHBox( page );

    QLabel label1 = new QLabel( " First Name: ", row1 );
    label1.setAlignment( Qt.AlignVCenter );
    QLabel label2 = new QLabel( " Last Name: ", row2 );
    label2.setAlignment( Qt.AlignVCenter );
    QLabel label3 = new QLabel( " Address: ", row3 );
    label3.setAlignment( Qt.AlignVCenter );
    QLabel label4 = new QLabel( " Phone Number: ", row4 );
    label4.setAlignment( Qt.AlignVCenter );
    QLabel label5 = new QLabel( " E-Mail: ", row5 );
    label5.setAlignment( Qt.AlignVCenter );

    label1.setMinimumWidth( label4.sizeHint().width() );
    label2.setMinimumWidth( label4.sizeHint().width() );
    label3.setMinimumWidth( label4.sizeHint().width() );
    label4.setMinimumWidth( label4.sizeHint().width() );
    label5.setMinimumWidth( label4.sizeHint().width() );

    firstName = new QLineEdit( row1 );
    lastName = new QLineEdit( row2 );
    address = new QLineEdit( row3 );
    phone = new QLineEdit( row4 );
    email = new QLineEdit( row5 );

    connect( firstName, SIGNAL(" textChanged( String )"),
	     this, SLOT(" dataChanged( String )") );
    connect( lastName, SIGNAL(" textChanged( String )"),
	     this, SLOT(" dataChanged( String )") );
    connect( email, SIGNAL(" textChanged( String )"),
	     this, SLOT(" dataChanged( String )") );

    addPage( page2, "Personal Data" );

    setHelpEnabled( page2, false );
}

void setupPage3()
{
    page3 = new QHBox( this );
    page3.setSpacing(8);

    QLabel info = new QLabel( page3 );
    info.setPalette( new QPalette(yellow()) );
    info.setText( "\n"
                   + "  Look here to see of  \n"
                   + "  the data you entered  \n"
                   + "  is correct. To confirm,  \n"
                   + "  press the [Finish] button  \n"
                   + "  else go back to correct  \n"
                   + "  mistakes." );
    info.setIndent(8);
    info.setAlignment( AlignTop|AlignLeft );
    info.setMaximumWidth( info.sizeHint().width() );

    QVBox page = new QVBox( page3 );

    QHBox row1 = new QHBox( page );
    QHBox row2 = new QHBox( page );
    QHBox row3 = new QHBox( page );
    QHBox row4 = new QHBox( page );
    QHBox row5 = new QHBox( page );
    QHBox row6 = new QHBox( page );

    QLabel label1 = new QLabel( " Personal Key: ", row1 );
    label1.setAlignment( Qt.AlignVCenter );
    QLabel label2 = new QLabel( " First Name: ", row2 );
    label2.setAlignment( Qt.AlignVCenter );
    QLabel label3 = new QLabel( " Last Name: ", row3 );
    label3.setAlignment( Qt.AlignVCenter );
    QLabel label4 = new QLabel( " Address: ", row4 );
    label4.setAlignment( Qt.AlignVCenter );
    QLabel label5 = new QLabel( " Phone Number: ", row5 );
    label5.setAlignment( Qt.AlignVCenter );
    QLabel label6 = new QLabel( " E-Mail: ", row6 );
    label6.setAlignment( Qt.AlignVCenter );

    label1.setMinimumWidth( label1.sizeHint().width() );
    label2.setMinimumWidth( label1.sizeHint().width() );
    label3.setMinimumWidth( label1.sizeHint().width() );
    label4.setMinimumWidth( label1.sizeHint().width() );
    label5.setMinimumWidth( label1.sizeHint().width() );
    label6.setMinimumWidth( label1.sizeHint().width() );

    lKey = new QLabel( row1 );
    lFirstName = new QLabel( row2 );
    lLastName = new QLabel( row3 );
    lAddress = new QLabel( row4 );
    lPhone = new QLabel( row5 );
    lEmail = new QLabel( row6 );

    addPage( page3, "Finish" );

    setFinish( page3, true );
    setHelpEnabled( page3, false );
}

// The QWizard.showPage() virtual method callback isn't implemented in the java
// bindings yet, so use the selected() signal connected to this slot 'doShowPage()'
// instead..
public void doShowPage( String title )
{
	QWidget page = currentPage();

    if ( page == page1 ) {
    } else if ( page == page2 ) {
    } else if ( page == page3 ) {
        lKey.setText( key.text() );
        lFirstName.setText( firstName.text() );
        lLastName.setText( lastName.text() );
        lAddress.setText( address.text() );
        lPhone.setText( phone.text() );
        lEmail.setText( email.text() );
    }

    if ( page == page1 ) {
        keyChanged( key.text() );
        key.setFocus();
    } else if ( page == page2 ) {
        dataChanged( firstName.text() );
        firstName.setFocus();
    } else if ( page == page3 ) {
        finishButton().setEnabled( true );
        finishButton().setFocus();
    }
}

void keyChanged( String text )
{
    StringBuffer t = new StringBuffer(text);
    int[] p = { 0 };
    boolean on = ( key.validator().validate(t, p) == QValidator.Acceptable );
    nextButton().setEnabled( on );
}

void dataChanged( String s )
{
    if ( !firstName.text().equals("") &&
         !lastName.text().equals("") &&
         !email.text().equals("") )
        nextButton().setEnabled( true );
    else
        nextButton().setEnabled( false );
}
}
