#!/usr/bin/env python

#****************************************************************************
#** $Id: sqlcustom1.py,v 1.0 2002/06/15 21:21:02 frispete Exp $
#**
#** Copyright (C) 1992-1998 Troll Tech AS.  All rights reserved.
#**
#** This file is part of an example program for PyQt.  This example
#** program may be used, distributed and modified without limitation.
#**
#*****************************************************************************/

import sys
from qt import *
from qtsql import *

TRUE  = 1
FALSE = 0

#DB_QTDRIVER = "QPSQL7"
DB_QTDRIVER = "QMYSQL3"
DB_HOSTNAME = "server"
DB_DATABASE = "testdb"
DB_USERNAME = "xy"
DB_PASSWORD = "zzz"

class CustomEdit(QLineEdit):
    def __init__(self, parent = None, name = None):
        QLineEdit.__init__(self, parent, name)
        QObject.connect(self, SIGNAL("textChanged()"), self.changed)

    def changed(self):
        line = self.text()
        self.setUpperLine(line)

    def setUpperLine(self, line):
        self.upperLineText = line.upper()
        self.setText(self.upperLineText)

    def upperLine(self):
        return self.upperLineText

class FormDialog(QDialog):
    def __init__(self):
        apply(QDialog.__init__, (self,))
        self.forenameLabel = QLabel("Forename:", self)
        self.forenameEdit = CustomEdit(self)
        self.surnameLabel = QLabel("Surname:", self)
        self.surnameEdit = CustomEdit(self)
        self.salaryLabel = QLabel("Salary:", self)
        self.salaryEdit = QLineEdit(self)
        self.salaryEdit.setAlignment(Qt.AlignRight)
        self.saveButton = QPushButton("&Save", self)
        QObject.connect(self.saveButton, SIGNAL("clicked()"), self.save)

        self.grid = QGridLayout()
        self.grid.addWidget(self.forenameLabel, 0, 0)
        self.grid.addWidget(self.forenameEdit, 0, 1)
        self.grid.addWidget(self.surnameLabel, 1, 0)
        self.grid.addWidget(self.surnameLabel, 1, 1)
        self.grid.addWidget(self.salaryLabel, 2, 0)
        self.grid.addWidget(self.salaryEdit, 2, 1)
        self.grid.addWidget(self.saveButton, 3, 0)
        self.grid.activate()

        self.staffCursor = QSqlCursor("staff")
        self.staffCursor.setTrimmed("forename", TRUE)
        self.staffCursor.setTrimmed("surname", TRUE)
        self.idIndex = self.staffCursor.index("id")
        self.staffCursor.select(self.idIndex)
        self.staffCursor.first()

        self.propMap = QSqlPropertyMap()
        self.propMap.insert(self.forenameEdit.className(), "upperline")

        self.sqlForm = QSqlForm()
        self.sqlForm.setRecord(self.staffCursor.primeUpdate())
        self.sqlForm.installPropertyMap(self.propMap)
        self.sqlForm.insert(self.forenameEdit, "forename")
        self.sqlForm.insert(self.surnameEdit, "surname")
        self.sqlForm.insert(self.salaryEdit, "salary")
        self.sqlForm.readFields()

    def save(self):
        self.sqlForm.writeFields()
        self.staffCursor.update()
        self.staffCursor.select(self.idIndex)
        self.staffCursor.first()


def createConnection():
    db = QSqlDatabase.addDatabase(DB_QTDRIVER)
    if db:
        db.setHostName(DB_HOSTNAME)
        db.setDatabaseName(DB_DATABASE)
        db.setUserName(DB_USERNAME)
        db.setPassword(DB_PASSWORD)
        if db.open():
            return TRUE
        else:
            print "Could not open testdb database"
            print db.lastError().driverText()
            print db.lastError().databaseText()
    else:
        print "Could not activate database driver"
    return FALSE

if __name__=='__main__':
    app = QApplication( sys.argv )

    if createConnection():
        formDialog = FormDialog()
        formDialog.show()

        app.setMainWidget(formDialog)
        app.exec_loop()


