summaryrefslogtreecommitdiffstats
path: root/qtjava/javalib/examples/demo/sql
diff options
context:
space:
mode:
Diffstat (limited to 'qtjava/javalib/examples/demo/sql')
-rw-r--r--qtjava/javalib/examples/demo/sql/BookForm.java191
-rw-r--r--qtjava/javalib/examples/demo/sql/ConnectDialog.java138
-rw-r--r--qtjava/javalib/examples/demo/sql/EditBookForm.java267
-rw-r--r--qtjava/javalib/examples/demo/sql/Main.java20
4 files changed, 616 insertions, 0 deletions
diff --git a/qtjava/javalib/examples/demo/sql/BookForm.java b/qtjava/javalib/examples/demo/sql/BookForm.java
new file mode 100644
index 00000000..67670357
--- /dev/null
+++ b/qtjava/javalib/examples/demo/sql/BookForm.java
@@ -0,0 +1,191 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'book.ui'
+**
+** Created: Wed Aug 8 03:34:02 2001
+** by: The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+import org.kde.qt.*;
+
+public class BookForm extends QWidget {
+ QDataTable AuthorDataTable;
+ QDataTable BookDataTable;
+ QPushButton connectButton;
+ QPushButton editButton;
+
+ QGridLayout BookFormLayout;
+ QSizePolicy policy_1;
+ QSizePolicy policy_2;
+ QSpacerItem spacer;
+ QSpacerItem spacer_2;
+
+ QSqlCursor authorCursor;
+ QSqlCursor bookCursor;
+
+/*
+ * Constructs a BookForm which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ */
+BookForm( QWidget parent, String name, int fl )
+{
+ super( parent, name, fl );
+ if ( name == null )
+ setName( "BookForm" );
+ resize( 478, 498 );
+ setCaption( trUtf8( "Book" ) );
+ BookFormLayout = new QGridLayout( this );
+ BookFormLayout.setSpacing( 6 );
+ BookFormLayout.setMargin( 11 );
+
+ AuthorDataTable = new QDataTable( this, "AuthorDataTable" );
+ AuthorDataTable.addColumn( "surname", trUtf8( "Surname", "" ) );
+ AuthorDataTable.addColumn( "forename", trUtf8( "Forename", "" ) );
+ AuthorDataTable.setSorting( true );
+ AuthorDataTable.setConfirmDelete( true );
+ AuthorDataTable.setSort( new String[] { "surname ASC", "forename ASC" } );
+
+ BookFormLayout.addMultiCellWidget( AuthorDataTable, 1, 1, 0, 2 );
+ spacer = new QSpacerItem( 20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum );
+ BookFormLayout.addMultiCell( spacer, 0, 0, 1, 2 );
+
+ BookDataTable = new QDataTable( this, "BookDataTable" );
+ BookDataTable.addColumn( "title", trUtf8( "Title", "" ) );
+ BookDataTable.addColumn( "price", trUtf8( "Price", "" ) );
+ BookDataTable.addColumn( "notes", trUtf8( "Notes", "" ) );
+ BookDataTable.setReadOnly( true );
+ BookDataTable.setSorting( true );
+ BookDataTable.setSort( new String[] { "title ASC" } );
+
+ BookFormLayout.addMultiCellWidget( BookDataTable, 2, 2, 0, 2 );
+ spacer_2 = new QSpacerItem( 20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum );
+ BookFormLayout.addMultiCell( spacer_2, 3, 3, 0, 1 );
+
+ connectButton = new QPushButton( this, "connectButton" );
+ policy_1 = new QSizePolicy( (int)0, (int)0, connectButton.sizePolicy().hasHeightForWidth() );
+ connectButton.setSizePolicy( policy_1 );
+ connectButton.setText( trUtf8( "&Connect..." ) );
+
+ BookFormLayout.addWidget( connectButton, 0, 0 );
+
+ editButton = new QPushButton( this, "editButton" );
+ editButton.setEnabled( false );
+ policy_2 = new QSizePolicy( (int)0, (int)0, editButton.sizePolicy().hasHeightForWidth() );
+ editButton.setSizePolicy( policy_2 );
+ editButton.setText( trUtf8( "&Edit Books" ) );
+
+ BookFormLayout.addWidget( editButton, 3, 2 );
+
+ // database support
+
+
+
+
+
+ // signals and slots connections
+ connect( editButton, SIGNAL( "clicked()" ), this, SLOT( "editClicked()" ) );
+ connect( AuthorDataTable, SIGNAL( "primeInsert(QSqlRecord)" ), this, SLOT( "primeInsertAuthor(QSqlRecord)" ) );
+ connect( AuthorDataTable, SIGNAL( "currentChanged(QSqlRecord)" ), this, SLOT( "newCurrentAuthor(QSqlRecord)" ) );
+ connect( connectButton, SIGNAL( "clicked()" ), this, SLOT( "connectClicked()" ) );
+
+ // tab order
+ setTabOrder( connectButton, editButton );
+ init();
+}
+
+BookForm( QWidget parent, String name )
+{
+ this(parent, name, 0);
+}
+
+BookForm( QWidget parent )
+{
+ this(parent, null, 0);
+}
+
+BookForm( )
+{
+ this(null, null, 0);
+}
+
+void init()
+{
+}
+
+public void destroy()
+{
+}
+
+void editClicked()
+{
+ EditBookForm dialog = new EditBookForm( this, "Edit Book Form", true, 0 );
+ QSqlCursor cur = new QSqlCursor( "book" );
+ dialog.BookDataBrowser.setSqlCursor( cur );
+ dialog.BookDataBrowser.setFilter( BookDataTable.filter() );
+ String[] sort = new String[BookDataTable.sort().size()];
+ sort = (String[]) BookDataTable.sort().toArray(sort);
+ dialog.BookDataBrowser.setSort(QSqlIndex.fromStringList(
+ sort, cur ) );
+ dialog.BookDataBrowser.refresh();
+ int i = BookDataTable.currentRow();
+ if ( i == -1 ) i = 0; // Always use the first row
+ dialog.BookDataBrowser.seek( i );
+ dialog.exec();
+ dialog = null;
+ BookDataTable.refresh();
+}
+
+void connectClicked()
+{
+ boolean ok = false;
+ ConnectDialog dialog = new ConnectDialog( this, "Connect", true, 0 );
+ String[] drivers = new String[QSqlDatabase.drivers().size()];;
+ drivers = (String[]) QSqlDatabase.drivers().toArray(drivers);
+ dialog.comboDriver.insertStringList( drivers );
+ dialog.editDatabase.setText( "book" );
+ if ( dialog.exec() == QDialog.Accepted ) {
+ // QSqlDatabase.removeDatabase( QSqlDatabase.defaultConnection() );
+ QSqlDatabase db = QSqlDatabase.addDatabase( dialog.comboDriver.currentText() );
+ db.setDatabaseName( dialog.editDatabase.text() );
+ db.setUserName( dialog.editUsername.text() );
+ db.setPassword( dialog.editPassword.text() );
+ db.setHostName( dialog.editHostname.text() );
+ if ( !db.open() ) {
+ //## warning?
+ ok= false;
+ } else
+ ok = true;
+ }
+ if ( !ok ) {
+ editButton.setEnabled( false );
+ BookDataTable.setSqlCursor( (QSqlCursor) null );
+ AuthorDataTable.setSqlCursor( (QSqlCursor) null );
+ } else {
+ editButton.setEnabled( true );
+ authorCursor = new QSqlCursor( "author" );
+ AuthorDataTable.setSqlCursor( authorCursor, false, true );
+ bookCursor = new QSqlCursor( "book" );
+ BookDataTable.setSqlCursor( bookCursor, false, true );
+ AuthorDataTable.refresh( QDataTable.RefreshAll );
+ BookDataTable.refresh( QDataTable.RefreshAll );
+ }
+ dialog = null;
+}
+
+void newCurrentAuthor(QSqlRecord author)
+{
+ BookDataTable.setFilter( "authorid=" + author.value( "id" ).toString() );
+ BookDataTable.refresh();
+}
+
+void primeInsertAuthor(QSqlRecord buffer)
+{
+ QSqlQuery q = new QSqlQuery();
+ q.exec( "UPDATE sequence SET sequence = sequence + 1 WHERE tablename='author';" );
+ q.exec( "SELECT sequence FROM sequence WHERE tablename='author';" );
+ if ( q.next() ) {
+ buffer.setValue( "id", q.value( 0 ) );
+ }
+}
+
+}
diff --git a/qtjava/javalib/examples/demo/sql/ConnectDialog.java b/qtjava/javalib/examples/demo/sql/ConnectDialog.java
new file mode 100644
index 00000000..bbd17391
--- /dev/null
+++ b/qtjava/javalib/examples/demo/sql/ConnectDialog.java
@@ -0,0 +1,138 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'connect.ui'
+**
+** Created: Wed Aug 8 03:35:48 2001
+** by: The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+import org.kde.qt.*;
+
+public class ConnectDialog extends QDialog {
+ QLineEdit editDatabase;
+ QLabel TextLabel3;
+ QLineEdit editPassword;
+ QLabel TextLabel4;
+ QLabel TextLabel4_2;
+ QLabel TextLabel2;
+ QLabel TextLabel5;
+ QComboBox comboDriver;
+ QLineEdit editHostname;
+ QLineEdit editUsername;
+ QPushButton PushButton1;
+ QPushButton PushButton2;
+
+ QGridLayout ConnectDialogLayout;
+ QSpacerItem spacer;
+
+/*
+ * Constructs a ConnectDialog 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.
+ */
+ConnectDialog( QWidget parent, String name, boolean modal, int fl )
+{
+ super( parent, name, modal, fl );
+ if ( name == null )
+ setName( "ConnectDialog" );
+ resize( 294, 207 );
+ setCaption( trUtf8( "Connect..." ) );
+ ConnectDialogLayout = new QGridLayout( this );
+ ConnectDialogLayout.setSpacing( 6 );
+ ConnectDialogLayout.setMargin( 11 );
+
+ editDatabase = new QLineEdit( this, "editDatabase" );
+
+ ConnectDialogLayout.addMultiCellWidget( editDatabase, 1, 1, 2, 3 );
+
+ TextLabel3 = new QLabel( this, "TextLabel3" );
+ TextLabel3.setText( trUtf8( "Database Name:" ) );
+
+ ConnectDialogLayout.addMultiCellWidget( TextLabel3, 1, 1, 0, 1 );
+
+ editPassword = new QLineEdit( this, "editPassword" );
+ editPassword.setEchoMode( QLineEdit.Password );
+
+ ConnectDialogLayout.addMultiCellWidget( editPassword, 3, 3, 2, 3 );
+
+ TextLabel4 = new QLabel( this, "TextLabel4" );
+ TextLabel4.setText( trUtf8( "&Username:" ) );
+
+ ConnectDialogLayout.addMultiCellWidget( TextLabel4, 2, 2, 0, 1 );
+
+ TextLabel4_2 = new QLabel( this, "TextLabel4_2" );
+ TextLabel4_2.setText( trUtf8( "&Password:" ) );
+
+ ConnectDialogLayout.addMultiCellWidget( TextLabel4_2, 3, 3, 0, 1 );
+
+ TextLabel2 = new QLabel( this, "TextLabel2" );
+ TextLabel2.setText( trUtf8( "D&river" ) );
+
+ ConnectDialogLayout.addMultiCellWidget( TextLabel2, 0, 0, 0, 1 );
+
+ TextLabel5 = new QLabel( this, "TextLabel5" );
+ TextLabel5.setText( trUtf8( "&Hostname:" ) );
+
+ ConnectDialogLayout.addMultiCellWidget( TextLabel5, 4, 4, 0, 1 );
+
+ comboDriver = new QComboBox( false, this, "comboDriver" );
+ comboDriver.setEditable( true );
+
+ ConnectDialogLayout.addMultiCellWidget( comboDriver, 0, 0, 2, 3 );
+
+ editHostname = new QLineEdit( this, "editHostname" );
+
+ ConnectDialogLayout.addMultiCellWidget( editHostname, 4, 4, 2, 3 );
+
+ editUsername = new QLineEdit( this, "editUsername" );
+
+ ConnectDialogLayout.addMultiCellWidget( editUsername, 2, 2, 2, 3 );
+
+ PushButton1 = new QPushButton( this, "PushButton1" );
+ PushButton1.setText( trUtf8( "&OK" ) );
+ PushButton1.setDefault( true );
+
+ ConnectDialogLayout.addMultiCellWidget( PushButton1, 5, 5, 1, 2 );
+
+ PushButton2 = new QPushButton( this, "PushButton2" );
+ PushButton2.setText( trUtf8( "&Cancel" ) );
+
+ ConnectDialogLayout.addWidget( PushButton2, 5, 3 );
+ spacer = new QSpacerItem( 20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum );
+ ConnectDialogLayout.addItem( spacer, 5, 0 );
+
+
+
+
+
+ // signals and slots connections
+ connect( PushButton1, SIGNAL( "clicked()" ), this, SLOT( "accept()" ) );
+ connect( PushButton2, SIGNAL( "clicked()" ), this, SLOT( "reject()" ) );
+
+ // tab order
+ setTabOrder( comboDriver, editDatabase );
+ setTabOrder( editDatabase, editUsername );
+ setTabOrder( editUsername, editPassword );
+ setTabOrder( editPassword, editHostname );
+ setTabOrder( editHostname, PushButton1 );
+ setTabOrder( PushButton1, PushButton2 );
+
+ // buddies
+ TextLabel4.setBuddy( editUsername );
+ TextLabel4_2.setBuddy( editPassword );
+ TextLabel2.setBuddy( comboDriver );
+ TextLabel5.setBuddy( editHostname );
+ init();
+}
+
+void init()
+{
+}
+
+public void destroy()
+{
+}
+
+}
diff --git a/qtjava/javalib/examples/demo/sql/EditBookForm.java b/qtjava/javalib/examples/demo/sql/EditBookForm.java
new file mode 100644
index 00000000..6c07176f
--- /dev/null
+++ b/qtjava/javalib/examples/demo/sql/EditBookForm.java
@@ -0,0 +1,267 @@
+/****************************************************************************
+** 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.kde.qt.*;
+import java.util.HashMap;
+
+public class EditBookForm extends QDialog {
+ QDataBrowser BookDataBrowser;
+ QLabel labelPrice;
+ QLabel labelTitle;
+ QLineEdit QLineEditTitle;
+ QLineEdit QLineEditPrice;
+ QPushButton PushButtonInsert;
+ QPushButton PushButtonUpdate;
+ QPushButton PushButtonDelete;
+ QPushButton PushButtonClose;
+ QPushButton PushButtonFirst;
+ QPushButton PushButtonPrev;
+ QPushButton PushButtonNext;
+ QPushButton PushButtonLast;
+ QLabel TextLabel1;
+ QComboBox ComboBoxAuthor;
+
+ QVBoxLayout EditBookFormLayout;
+ QGridLayout BookDataBrowserLayout;
+ QGridLayout Layout2;
+ QHBoxLayout Layout6;
+ QHBoxLayout Layout3;
+ QHBoxLayout Layout6_2;
+
+ HashMap authorMap;
+ QSizePolicy policy_1;
+ QSqlForm 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( QWidget 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 QVBoxLayout( this );
+ EditBookFormLayout.setSpacing( 6 );
+ EditBookFormLayout.setMargin( 11 );
+
+ BookDataBrowser = new QDataBrowser( this, "BookDataBrowser" );
+ BookDataBrowserLayout = new QGridLayout( BookDataBrowser );
+ BookDataBrowser.setSort( new String[] { "title ASC" } );
+ BookDataBrowserLayout.setSpacing( 6 );
+ BookDataBrowserLayout.setMargin( 11 );
+
+ Layout2 = new QGridLayout();
+ Layout2.setSpacing( 6 );
+ Layout2.setMargin( 0 );
+
+ labelPrice = new QLabel( BookDataBrowser, "labelPrice" );
+ labelPrice.setText( trUtf8( "Price" ) );
+
+ Layout2.addWidget( labelPrice, 1, 0 );
+
+ labelTitle = new QLabel( BookDataBrowser, "labelTitle" );
+ labelTitle.setText( trUtf8( "Title" ) );
+
+ Layout2.addWidget( labelTitle, 0, 0 );
+
+ QLineEditTitle = new QLineEdit( BookDataBrowser, "QLineEditTitle" );
+
+ Layout2.addWidget( QLineEditTitle, 0, 1 );
+
+ QLineEditPrice = new QLineEdit( BookDataBrowser, "QLineEditPrice" );
+
+ Layout2.addWidget( QLineEditPrice, 1, 1 );
+
+ BookDataBrowserLayout.addLayout( Layout2, 0, 0 );
+
+ Layout6 = new QHBoxLayout();
+ Layout6.setSpacing( 6 );
+ Layout6.setMargin( 0 );
+
+ PushButtonInsert = new QPushButton( BookDataBrowser, "PushButtonInsert" );
+ PushButtonInsert.setText( trUtf8( "&Insert" ) );
+ Layout6.addWidget( PushButtonInsert );
+
+ PushButtonUpdate = new QPushButton( BookDataBrowser, "PushButtonUpdate" );
+ PushButtonUpdate.setText( trUtf8( "&Update" ) );
+ PushButtonUpdate.setDefault( true );
+ Layout6.addWidget( PushButtonUpdate );
+
+ PushButtonDelete = new QPushButton( BookDataBrowser, "PushButtonDelete" );
+ PushButtonDelete.setText( trUtf8( "&Delete" ) );
+ Layout6.addWidget( PushButtonDelete );
+
+ PushButtonClose = new QPushButton( BookDataBrowser, "PushButtonClose" );
+ PushButtonClose.setText( trUtf8( "&Close" ) );
+ Layout6.addWidget( PushButtonClose );
+
+ BookDataBrowserLayout.addLayout( Layout6, 3, 0 );
+
+ Layout3 = new QHBoxLayout();
+ Layout3.setSpacing( 6 );
+ Layout3.setMargin( 0 );
+
+ PushButtonFirst = new QPushButton( BookDataBrowser, "PushButtonFirst" );
+ PushButtonFirst.setText( trUtf8( "|< &First" ) );
+ Layout3.addWidget( PushButtonFirst );
+
+ PushButtonPrev = new QPushButton( BookDataBrowser, "PushButtonPrev" );
+ PushButtonPrev.setText( trUtf8( "<< &Prev" ) );
+ Layout3.addWidget( PushButtonPrev );
+
+ PushButtonNext = new QPushButton( BookDataBrowser, "PushButtonNext" );
+ PushButtonNext.setText( trUtf8( "&Next >>" ) );
+ Layout3.addWidget( PushButtonNext );
+
+ PushButtonLast = new QPushButton( BookDataBrowser, "PushButtonLast" );
+ PushButtonLast.setText( trUtf8( "&Last >|" ) );
+ Layout3.addWidget( PushButtonLast );
+
+ BookDataBrowserLayout.addLayout( Layout3, 2, 0 );
+
+ Layout6_2 = new QHBoxLayout();
+ Layout6_2.setSpacing( 6 );
+ Layout6_2.setMargin( 0 );
+
+ TextLabel1 = new QLabel( BookDataBrowser, "TextLabel1" );
+ TextLabel1.setText( trUtf8( "Author" ) );
+ Layout6_2.addWidget( TextLabel1 );
+
+ ComboBoxAuthor = new QComboBox( false, BookDataBrowser, "ComboBoxAuthor" );
+ policy_1 = new QSizePolicy( (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 QSqlForm( this, "BookDataBrowserForm" );
+ BookDataBrowserForm.insert( QLineEditTitle, "title" );
+ BookDataBrowserForm.insert( QLineEditPrice, "price" );
+ BookDataBrowser.setForm( BookDataBrowserForm );
+
+
+
+
+
+ // signals and slots connections
+ connect( PushButtonFirst, SIGNAL( "clicked()" ), BookDataBrowser, SLOT( "first()" ) );
+ connect( BookDataBrowser, SIGNAL( "firstRecordAvailable( boolean )" ), PushButtonFirst, SLOT( "setEnabled(boolean)" ) );
+ connect( PushButtonPrev, SIGNAL( "clicked()" ), BookDataBrowser, SLOT( "prev()" ) );
+ connect( BookDataBrowser, SIGNAL( "prevRecordAvailable( boolean )" ), PushButtonPrev, SLOT( "setEnabled(boolean)" ) );
+ connect( PushButtonNext, SIGNAL( "clicked()" ), BookDataBrowser, SLOT( "next()" ) );
+ connect( BookDataBrowser, SIGNAL( "nextRecordAvailable( boolean )" ), PushButtonNext, SLOT( "setEnabled(boolean)" ) );
+ connect( PushButtonLast, SIGNAL( "clicked()" ), BookDataBrowser, SLOT( "last()" ) );
+ connect( BookDataBrowser, SIGNAL( "lastRecordAvailable( boolean )" ), PushButtonLast, SLOT( "setEnabled(boolean)" ) );
+ connect( PushButtonInsert, SIGNAL( "clicked()" ), BookDataBrowser, SLOT( "insert()" ) );
+ connect( PushButtonUpdate, SIGNAL( "clicked()" ), BookDataBrowser, SLOT( "update()" ) );
+ connect( PushButtonDelete, SIGNAL( "clicked()" ), BookDataBrowser, SLOT( "del()" ) );
+ connect( PushButtonClose, SIGNAL( "clicked()" ), this, SLOT( "accept()" ) );
+ connect( BookDataBrowser, SIGNAL( "primeUpdate(QSqlRecord)" ), this, SLOT( "primeUpdateBook(QSqlRecord)" ) );
+ connect( BookDataBrowser, SIGNAL( "beforeUpdate(QSqlRecord)" ), this, SLOT( "beforeUpdateBook(QSqlRecord)" ) );
+ connect( BookDataBrowser, SIGNAL( "beforeInsert(QSqlRecord)" ), this, SLOT( "beforeUpdateBook(QSqlRecord)" ) );
+ connect( BookDataBrowser, SIGNAL( "primeInsert(QSqlRecord)" ), this, SLOT( "primeInsertBook(QSqlRecord)" ) );
+ connect( BookDataBrowser, SIGNAL( "primeInsert(QSqlRecord)" ), this, SLOT( "primeInsertBook(QSqlRecord)" ) );
+
+ // tab order
+ setTabOrder( QLineEditTitle, QLineEditPrice );
+ setTabOrder( QLineEditPrice, 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 ) {
+ QSqlCursor cursor = new QSqlCursor( "book" );
+ BookDataBrowser.setSqlCursor( cursor, true );
+ BookDataBrowser.refresh();
+ BookDataBrowser.first();
+ }
+ }
+ super.polish();
+}
+
+void beforeUpdateBook(QSqlRecord buffer)
+{
+ int[] id = { 0 };
+ mapAuthor( ComboBoxAuthor.currentText(), id, false );
+ buffer.setValue( "authorid", new QVariant(id[0]) );
+}
+
+void mapAuthor(String name, int[] id, boolean populate)
+{
+// if ( populate )
+// authorMap[ name ] = id;
+// else
+// id[0] = authorMap[ name ];
+}
+
+void primeInsertBook(QSqlRecord buffer)
+{
+ QSqlQuery q = new QSqlQuery();
+ 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(QSqlRecord buffer)
+{
+ // Who is this book's author?
+ QSqlQuery query = new QSqlQuery( "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();
+ QSqlQuery query = new QSqlQuery( "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()
+{
+}
+
+}
diff --git a/qtjava/javalib/examples/demo/sql/Main.java b/qtjava/javalib/examples/demo/sql/Main.java
new file mode 100644
index 00000000..1bf81c88
--- /dev/null
+++ b/qtjava/javalib/examples/demo/sql/Main.java
@@ -0,0 +1,20 @@
+import org.kde.qt.*;
+
+public class Main {
+
+ public static void main(String[] args)
+ {
+ QApplication a = new QApplication(args);
+ BookForm form = new BookForm();
+
+ a.setMainWidget( form );
+ form.show();
+ a.exec();
+
+ return;
+ }
+
+ static {
+ qtjava.initialize();
+ }
+}