/****************************************************************************
** Form implementation generated from reading ui file 'editbook.ui'
**
** Created: Wed Aug 8 03:37:45 2001
**      by:  The User Interface Compiler (uic)
**
** WARNING! All changes made in this file will be lost!
****************************************************************************/
import org.trinitydesktop.qt.*;
import java.util.HashMap;

public class EditBookForm extends TQDialog { 
    TQDataBrowser BookDataBrowser;
    TQLabel labelPrice;
    TQLabel labelTitle;
    TQLineEdit TQLineEditTitle;
    TQLineEdit TQLineEditPrice;
    TQPushButton PushButtonInsert;
    TQPushButton PushButtonUpdate;
    TQPushButton PushButtonDelete;
    TQPushButton PushButtonClose;
    TQPushButton PushButtonFirst;
    TQPushButton PushButtonPrev;
    TQPushButton PushButtonNext;
    TQPushButton PushButtonLast;
    TQLabel TextLabel1;
    TQComboBox ComboBoxAuthor;

    TQVBoxLayout EditBookFormLayout;
    TQGridLayout BookDataBrowserLayout;
    TQGridLayout Layout2;
    TQHBoxLayout Layout6;
    TQHBoxLayout Layout3;
    TQHBoxLayout Layout6_2;

	HashMap authorMap;
	TQSizePolicy policy_1;
	TQSqlForm BookDataBrowserForm;

/* 
 *  Constructs a EditBookForm which is a child of 'parent', with the 
 *  name 'name' and widget flags set to 'f' 
 *
 *  The dialog will by default be modeless, unless you set 'modal' to
 *  true to construct a modal dialog.
 */
EditBookForm( TQWidget parent,  String name, boolean modal, int fl )
{
    super( parent, name, modal, fl );
    if ( name == null )
	setName( "EditBookForm" );
    resize( 524, 371 );
    setCaption( trUtf8( "Edit Books" ) );
    EditBookFormLayout = new TQVBoxLayout( this );
    EditBookFormLayout.setSpacing( 6 );
    EditBookFormLayout.setMargin( 11 );

    BookDataBrowser = new TQDataBrowser( this, "BookDataBrowser" );
    BookDataBrowserLayout = new TQGridLayout( BookDataBrowser );
    BookDataBrowser.setSort( new String[] { "title ASC" } );
    BookDataBrowserLayout.setSpacing( 6 );
    BookDataBrowserLayout.setMargin( 11 );

    Layout2 = new TQGridLayout();
    Layout2.setSpacing( 6 );
    Layout2.setMargin( 0 );

    labelPrice = new TQLabel( BookDataBrowser, "labelPrice" );
    labelPrice.setText( trUtf8( "Price" ) );

    Layout2.addWidget( labelPrice, 1, 0 );

    labelTitle = new TQLabel( BookDataBrowser, "labelTitle" );
    labelTitle.setText( trUtf8( "Title" ) );

    Layout2.addWidget( labelTitle, 0, 0 );

    TQLineEditTitle = new TQLineEdit( BookDataBrowser, "TQLineEditTitle" );

    Layout2.addWidget( TQLineEditTitle, 0, 1 );

    TQLineEditPrice = new TQLineEdit( BookDataBrowser, "TQLineEditPrice" );

    Layout2.addWidget( TQLineEditPrice, 1, 1 );

    BookDataBrowserLayout.addLayout( Layout2, 0, 0 );

    Layout6 = new TQHBoxLayout(); 
    Layout6.setSpacing( 6 );
    Layout6.setMargin( 0 );

    PushButtonInsert = new TQPushButton( BookDataBrowser, "PushButtonInsert" );
    PushButtonInsert.setText( trUtf8( "&Insert" ) );
    Layout6.addWidget( PushButtonInsert );

    PushButtonUpdate = new TQPushButton( BookDataBrowser, "PushButtonUpdate" );
    PushButtonUpdate.setText( trUtf8( "&Update" ) );
    PushButtonUpdate.setDefault( true );
    Layout6.addWidget( PushButtonUpdate );

    PushButtonDelete = new TQPushButton( BookDataBrowser, "PushButtonDelete" );
    PushButtonDelete.setText( trUtf8( "&Delete" ) );
    Layout6.addWidget( PushButtonDelete );

    PushButtonClose = new TQPushButton( BookDataBrowser, "PushButtonClose" );
    PushButtonClose.setText( trUtf8( "&Close" ) );
    Layout6.addWidget( PushButtonClose );

    BookDataBrowserLayout.addLayout( Layout6, 3, 0 );

    Layout3 = new TQHBoxLayout();
    Layout3.setSpacing( 6 );
    Layout3.setMargin( 0 );

    PushButtonFirst = new TQPushButton( BookDataBrowser, "PushButtonFirst" );
    PushButtonFirst.setText( trUtf8( "|< &First" ) );
    Layout3.addWidget( PushButtonFirst );

    PushButtonPrev = new TQPushButton( BookDataBrowser, "PushButtonPrev" );
    PushButtonPrev.setText( trUtf8( "<< &Prev" ) );
    Layout3.addWidget( PushButtonPrev );

    PushButtonNext = new TQPushButton( BookDataBrowser, "PushButtonNext" );
    PushButtonNext.setText( trUtf8( "&Next >>" ) );
    Layout3.addWidget( PushButtonNext );

    PushButtonLast = new TQPushButton( BookDataBrowser, "PushButtonLast" );
    PushButtonLast.setText( trUtf8( "&Last >|" ) );
    Layout3.addWidget( PushButtonLast );

    BookDataBrowserLayout.addLayout( Layout3, 2, 0 );

    Layout6_2 = new TQHBoxLayout();
    Layout6_2.setSpacing( 6 );
    Layout6_2.setMargin( 0 );

    TextLabel1 = new TQLabel( BookDataBrowser, "TextLabel1" );
    TextLabel1.setText( trUtf8( "Author" ) );
    Layout6_2.addWidget( TextLabel1 );

    ComboBoxAuthor = new TQComboBox( false, BookDataBrowser, "ComboBoxAuthor" );
	policy_1 = new TQSizePolicy( (int)7, (int)0, ComboBoxAuthor.sizePolicy().hasHeightForWidth() );
    ComboBoxAuthor.setSizePolicy( policy_1  );
    Layout6_2.addWidget( ComboBoxAuthor );

    BookDataBrowserLayout.addLayout( Layout6_2, 1, 0 );
    EditBookFormLayout.addWidget( BookDataBrowser );

    // database support
    BookDataBrowserForm =  new TQSqlForm( this, "BookDataBrowserForm" );
    BookDataBrowserForm.insert( TQLineEditTitle, "title" );
    BookDataBrowserForm.insert( TQLineEditPrice, "price" );
    BookDataBrowser.setForm( BookDataBrowserForm );





    // signals and slots connections
    connect( PushButtonFirst, TQ_SIGNAL( "clicked()" ), BookDataBrowser, TQ_SLOT( "first()" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "firstRecordAvailable( boolean )" ), PushButtonFirst, TQ_SLOT( "setEnabled(boolean)" ) );
    connect( PushButtonPrev, TQ_SIGNAL( "clicked()" ), BookDataBrowser, TQ_SLOT( "prev()" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "prevRecordAvailable( boolean )" ), PushButtonPrev, TQ_SLOT( "setEnabled(boolean)" ) );
    connect( PushButtonNext, TQ_SIGNAL( "clicked()" ), BookDataBrowser, TQ_SLOT( "next()" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "nextRecordAvailable( boolean )" ), PushButtonNext, TQ_SLOT( "setEnabled(boolean)" ) );
    connect( PushButtonLast, TQ_SIGNAL( "clicked()" ), BookDataBrowser, TQ_SLOT( "last()" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "lastRecordAvailable( boolean )" ), PushButtonLast, TQ_SLOT( "setEnabled(boolean)" ) );
    connect( PushButtonInsert, TQ_SIGNAL( "clicked()" ), BookDataBrowser, TQ_SLOT( "insert()" ) );
    connect( PushButtonUpdate, TQ_SIGNAL( "clicked()" ), BookDataBrowser, TQ_SLOT( "update()" ) );
    connect( PushButtonDelete, TQ_SIGNAL( "clicked()" ), BookDataBrowser, TQ_SLOT( "del()" ) );
    connect( PushButtonClose, TQ_SIGNAL( "clicked()" ), this, TQ_SLOT( "accept()" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "primeUpdate(TQSqlRecord)" ), this, TQ_SLOT( "primeUpdateBook(TQSqlRecord)" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "beforeUpdate(TQSqlRecord)" ), this, TQ_SLOT( "beforeUpdateBook(TQSqlRecord)" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "beforeInsert(TQSqlRecord)" ), this, TQ_SLOT( "beforeUpdateBook(TQSqlRecord)" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "primeInsert(TQSqlRecord)" ), this, TQ_SLOT( "primeInsertBook(TQSqlRecord)" ) );
    connect( BookDataBrowser, TQ_SIGNAL( "primeInsert(TQSqlRecord)" ), this, TQ_SLOT( "primeInsertBook(TQSqlRecord)" ) );

    // tab order
    setTabOrder( TQLineEditTitle, TQLineEditPrice );
    setTabOrder( TQLineEditPrice, ComboBoxAuthor );
    setTabOrder( ComboBoxAuthor, PushButtonFirst );
    setTabOrder( PushButtonFirst, PushButtonPrev );
    setTabOrder( PushButtonPrev, PushButtonNext );
    setTabOrder( PushButtonNext, PushButtonLast );
    setTabOrder( PushButtonLast, PushButtonInsert );
    setTabOrder( PushButtonInsert, PushButtonUpdate );
    setTabOrder( PushButtonUpdate, PushButtonDelete );
    setTabOrder( PushButtonDelete, PushButtonClose );
    init();
}

/*
 *  Widget polish.  Reimplemented to handle
 *  default data browser initialization
 */
public void polish()
{
    if ( BookDataBrowser != null ) {
        if ( BookDataBrowser.sqlCursor() == null ) {
            TQSqlCursor cursor = new TQSqlCursor( "book" );
            BookDataBrowser.setSqlCursor( cursor, true );
            BookDataBrowser.refresh();
            BookDataBrowser.first();
        }
    }
    super.polish();
}

void beforeUpdateBook(TQSqlRecord buffer)
{
    int[] id = { 0 };
    mapAuthor( ComboBoxAuthor.currentText(), id, false );
    buffer.setValue( "authorid", new TQVariant(id[0]) );
}

void mapAuthor(String name, int[] id, boolean populate)
{
//    if ( populate )
//	authorMap[ name ] = id;
//    else
//	id[0] = authorMap[ name ];
}

void primeInsertBook(TQSqlRecord buffer)
{
    TQSqlQuery q = new TQSqlQuery();
    q.exec( "UPDATE sequence SET sequence = sequence + 1 WHERE tablename='book';" );
    q.exec( "SELECT sequence FROM sequence WHERE tablename='book';" );
    if ( q.next() ) {
	buffer.setValue( "id", q.value( 0 ) );
    }
}

void primeUpdateBook(TQSqlRecord buffer)
{
    // Who is this book's author?
    TQSqlQuery query = new TQSqlQuery( "SELECT surname FROM author WHERE id=" +
	buffer.value( "authorid" ).toString() + ";" );
    String author = "";
    if ( query.next() )
	author = query.value( 0 ).toString();
    // Set the ComboBox to the right author
    for ( int i = 0; i < ComboBoxAuthor.count(); i++ ) {
	if ( ComboBoxAuthor.text( i ) == author ) {
	    ComboBoxAuthor.setCurrentItem( i ) ;
	    break;
	}
    }
}

void init()
{
	authorMap = new HashMap();
    TQSqlQuery query = new TQSqlQuery( "SELECT surname, id FROM author ORDER BY surname;" );
    while ( query.next() ) {
	ComboBoxAuthor.insertItem( query.value( 0 ).toString() );
	int[] id = new int[1];
	id[0] = query.value( 1 ).toInt();
	mapAuthor( query.value( 0 ).toString(), id, true );
    }
}

public void destroy()
{
}

}
