diff options
Diffstat (limited to 'examples/SQL/sqlsubclass5.py')
-rwxr-xr-x | examples/SQL/sqlsubclass5.py | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/examples/SQL/sqlsubclass5.py b/examples/SQL/sqlsubclass5.py new file mode 100755 index 0000000..0fdc78c --- /dev/null +++ b/examples/SQL/sqlsubclass5.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python + +#**************************************************************************** +#** $Id: sqlsubclass5.py,v 1.3 2002/07/06 13:35:41 phil Exp $ +#** +#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. +#** +#** This file is part of an example program for PyTQt. This example +#** program may be used, distributed and modified without limitation. +#** +#*****************************************************************************/ + +import sys +from python_tqt.qt import * +from python_tqt.qtsql import * + +from dbconnect import createConnection + +TRUE = 1 +FALSE = 0 + +class CustomTable(TQDataTable): + def __init__(self, cursor, autoPopulate = FALSE, parent = None, name = None): + TQDataTable.__init__(self, cursor, autoPopulate, parent, name) + + def paintField(self, p, field, cr, b): + if not field: + return + fn = str(field.name()) + if fn == "pricesid": + query = TQSqlQuery("SELECT name FROM prices WHERE id=%s" % + field.value().toString()) + value = "" + if next(query): + value = query.value(0).toString() + p.drawText(2, 2, cr.width()-4, cr.height()-4, + self.fieldAlignment(field), value) + elif fn == "quantity": + p.drawText(2, 2, cr.width()-6, cr.height()-4, + TQt.AlignRight|TQt.AlignVCenter, field.value().toString()) + elif fn in ("price", "cost"): + v = field.value().toDouble() + if v < 0: + p.setPen(TQColor("red")) + value = TQString("%.2f \u20ac" % v) + p.drawText(2, 2, cr.width()-6, cr.height()-4, + TQt.AlignRight|TQt.AlignVCenter, value) + elif fn == "paiddate": + if field.value().toDate().isNull(): + v = TQString("not yet") + p.setPen(TQColor("red")) + else: + v = field.value().toDate().toString(TQt.LocalDate) + p.drawText(2, 2, cr.width()-4, cr.height()-4, + TQt.AlignHCenter|TQt.AlignVCenter, v) + else: + TQDataTable.paintField(self, p, field, cr, b) + + +class InvoiceItemCursor(TQSqlCursor): + def __init__(self): + TQSqlCursor.__init__(self, "invoiceitem") + + productPrice = TQSqlFieldInfo("price", TQVariant.Double) + self.append(productPrice) + self.setCalculated(productPrice.name(), TRUE) + + productCost = TQSqlFieldInfo("cost", TQVariant.Double) + self.append(productCost) + self.setCalculated(productCost.name(), TRUE) + + def calculateField(self, name): + fn = str(name) + if fn == "productname": + query = TQSqlQuery("SELECT name FROM prices WHERE id=%d;" % + (self.field("pricesid").value().toInt())) + if next(query): + return query.value(0) + elif fn == "price": + query = TQSqlQuery("SELECT price FROM prices WHERE id=%d;" % + (self.field("pricesid").value().toInt())) + if next(query): + return query.value(0) + elif fn == "cost": + query = TQSqlQuery("SELECT price FROM prices WHERE id=%d;" % + (self.field("pricesid").value().toInt())) + if next(query): + return TQVariant(query.value(0).toDouble() * + self.value("quantity").toDouble()) + return TQVariant(TQString.null) + + def primeInsert(self): + buffer = self.editBuffer() + buffer.setValue("id", TQVariant(0)) + buffer.setValue("paiddate", TQVariant(TQDate.currentDate())) + buffer.setValue("quantity", TQVariant(1)) + return buffer + + +class ProductPicker(TQComboBox): + def __init__(self, parent = None, name = None): + TQComboBox.__init__(self, parent, name) + cur = TQSqlCursor("prices") + cur.select(cur.index("id")) + while next(cur): + self.insertItem(cur.value("name").toString(), cur.value("id").toInt()) + + +class CustomSqlEditorFactory(TQSqlEditorFactory): + def __init__(self): + TQSqlEditorFactory.__init__(self) + + def createEditor(self, parent, field): + try: + if str(field.name()) == "pricesid": + return ProductPicker(parent) + except AttributeError: + pass + return TQSqlEditorFactory.createEditor(self, parent, field) + +class Table(CustomTable): + def __init__(self): + self.invoiceItemCursor = InvoiceItemCursor() + TQDataTable.__init__(self, self.invoiceItemCursor) + self.propMap = TQSqlPropertyMap() + self.editorFactory = CustomSqlEditorFactory() + self.propMap.insert("ProductPicker", "pricesid") + self.installPropertyMap(self.propMap) + self.installEditorFactory(self.editorFactory) + + for cn, ch in (("pricesid", "Product"), + ("quantity", "Quantity"), + ("price", "Price" ), + ("cost", "Cost"), + ("paiddate", "Paid")): + self.addColumn(cn, ch) + self.setColumnWidth(0 , 150) + self.setColumnWidth(1, 70) + self.resize(600, 250) + self.refresh() + + +if __name__=='__main__': + app = TQApplication(sys.argv) + if createConnection(): + t = Table() + app.setMainWidget(t) + t.show() + app.exec_loop() + + |