diff options
| author | 2009-03-13 18:14:17 +0000 | |
|---|---|---|
| committer | 2009-03-13 18:14:17 +0000 | |
| commit | 38ae7a1a3c344436e1dafc0f85cebaef40982c26 (patch) | |
| tree | 585a1ecdd955612f0fc17c77e56682d42362f1e8 /src/modules/objects | |
| parent | Fixed text formatting (diff) | |
| download | KVIrc-38ae7a1a3c344436e1dafc0f85cebaef40982c26.tar.gz KVIrc-38ae7a1a3c344436e1dafc0f85cebaef40982c26.tar.bz2 KVIrc-38ae7a1a3c344436e1dafc0f85cebaef40982c26.zip | |
Some fix/improvements in objects module
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3132 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/objects')
| -rw-r--r-- | src/modules/objects/class_sql.cpp | 57 | ||||
| -rw-r--r-- | src/modules/objects/class_sql.h | 3 | ||||
| -rw-r--r-- | src/modules/objects/class_tablewidget.cpp | 79 | ||||
| -rw-r--r-- | src/modules/objects/class_tablewidget.h | 1 |
4 files changed, 119 insertions, 21 deletions
diff --git a/src/modules/objects/class_sql.cpp b/src/modules/objects/class_sql.cpp index 9be8cf774..112edaa73 100644 --- a/src/modules/objects/class_sql.cpp +++ b/src/modules/objects/class_sql.cpp @@ -136,6 +136,7 @@ static void KviKvsSqlInstanceUnregister(KviKvsObject_sql *instance) KVSO_BEGIN_REGISTERCLASS(KviKvsObject_sql,"sql","object") + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,queryLastInsertId) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,commit) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,beginTransaction) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,setConnection) @@ -155,7 +156,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_sql,"sql","object") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,queryFirst) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,queryRecord) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,lastError) - + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,features) KVSO_END_REGISTERCLASS(KviKvsObject_sql) @@ -214,6 +215,51 @@ KVSO_CLASS_FUNCTION(sql,setConnection) c->returnValue()->setBoolean(db.open()); return true; } +KVSO_CLASS_FUNCTION(sql,queryLastInsertId) +{ + CHECK_QUERY_IS_INIT + KviKvsHash *pHash=new KviKvsHash(); + KviKvsVariant *pValue=0; + QVariant value=m_pCurrentSQlQuery->lastInsertId(); + if (value.type()==QVariant::LongLong){ + c->returnValue()->setInteger((kvs_int_t) value.toLongLong()); + } + + return true; + } +KVSO_CLASS_FUNCTION(sql,features) +{ + QString szConnectionName; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("connectionName",KVS_PT_STRING,0,szConnectionName) + KVSO_PARAMETERS_END(c) + + QStringList connections = QSqlDatabase::connectionNames(); + if (!connections.contains(szConnectionName)) + { + c->warning(__tr2qs_ctx("Connection %Q does not exists","objects"),&szConnectionName); + return true; + } + QSqlDatabase db=QSqlDatabase::database(szConnectionName); + QSqlDriver *sqlDriver=db.driver(); + QStringList features; + if (sqlDriver->hasFeature(QSqlDriver::Transactions)) features.append("transactions"); + if (sqlDriver->hasFeature(QSqlDriver::QuerySize)) features.append("querysize"); + if (sqlDriver->hasFeature(QSqlDriver::BLOB)) features.append("blob"); + if (sqlDriver->hasFeature(QSqlDriver::PreparedQueries)) features.append("preparedqueries"); + if (sqlDriver->hasFeature(QSqlDriver::NamedPlaceholders)) features.append("namedplaceholders"); + if (sqlDriver->hasFeature(QSqlDriver::PositionalPlaceholders)) features.append("positionaplaceholders"); + if (sqlDriver->hasFeature(QSqlDriver::LastInsertId)) features.append("lastinsertid"); + if (sqlDriver->hasFeature(QSqlDriver::BatchOperations)) features.append("batchoperations"); + if (sqlDriver->hasFeature(QSqlDriver::SimpleLocking)) features.append("simplelocking"); + if (sqlDriver->hasFeature(QSqlDriver::LowPrecisionNumbers)) features.append("lowprecisionnumbers"); + if (sqlDriver->hasFeature(QSqlDriver::EventNotifications)) features.append("eventnotifications"); + if (sqlDriver->hasFeature(QSqlDriver::FinishQuery)) features.append("finishquery"); + if (sqlDriver->hasFeature(QSqlDriver::MultipleResultSets)) features.append("multipleresults"); + c->returnValue()->setString(features.join(",")); + return true; +} + KVSO_CLASS_FUNCTION(sql,beginTransaction) { QString szConnectionName; @@ -480,18 +526,21 @@ KVSO_CLASS_FUNCTION(sql,queryRecord) { KviKvsVariant *pValue=0; QVariant value=record.value(i); - if (value.type()==QVariant::LongLong) pValue=new KviKvsVariant((kvs_int_t) value.toLongLong()); - else if (value.type()==QVariant::String) pValue=new KviKvsVariant(value.toString()); + if (value.type()==QVariant::LongLong){debug ("set long"); pValue=new KviKvsVariant((kvs_int_t) value.toLongLong());} + else if (value.type()==QVariant::String) {debug ("set string");pValue=new KviKvsVariant(value.toString());} else if (value.type()==QVariant::ByteArray) { + debug("qbyte array"); KviKvsObjectClass * pClass = KviKvsKernel::instance()->objectController()->lookupClass("memoryBuffer"); KviKvsVariantList params(new KviKvsVariant(QString())); KviKvsObject * pObject = pClass->allocateInstance(0,"",c->context(),¶ms); *((KviKvsObject_memorybuffer *)pObject)->pBuffer()=value.toByteArray(); pValue=new KviKvsVariant(pObject->handle()); } - else pValue=new KviKvsVariant(QString()); + else {debug("empty value in name %s",record.fieldName(i).toUtf8().data());pValue=new KviKvsVariant(QString());} pHash->set(record.fieldName(i),pValue); + KviKvsVariant *value2=pHash->get(record.fieldName(i)); + value2->type(); } c->returnValue()->setHash(pHash); return true; diff --git a/src/modules/objects/class_sql.h b/src/modules/objects/class_sql.h index db0327c88..dec5ebb99 100644 --- a/src/modules/objects/class_sql.h +++ b/src/modules/objects/class_sql.h @@ -49,6 +49,9 @@ protected: return *m_pCurrentSQlQuery; }; bool setConnection(KviKvsObjectFunctionCall *c); + bool features(KviKvsObjectFunctionCall *c); + bool queryLastInsertId(KviKvsObjectFunctionCall *c); + bool tablesList(KviKvsObjectFunctionCall *c); bool beginTransaction(KviKvsObjectFunctionCall *c); bool commit(KviKvsObjectFunctionCall *c); diff --git a/src/modules/objects/class_tablewidget.cpp b/src/modules/objects/class_tablewidget.cpp index 4a835b95c..b6627b0fd 100644 --- a/src/modules/objects/class_tablewidget.cpp +++ b/src/modules/objects/class_tablewidget.cpp @@ -28,6 +28,7 @@ #include "kvi_iconmanager.h" #include "kvi_file.h" +#include "kvi_kvs_arraycast.h" #include "class_tablewidget.h" #include "class_pixmap.h" #include <QTableWidget> @@ -40,7 +41,7 @@ #include <QPoint> #include <QPaintEvent> /* - @doc:tablewidget + @doc:tablewidget @title: tablewidget class @type: @@ -54,10 +55,12 @@ This widget provides a table widget. @functions: !fn: $setText([<text:string>]) - !fn: $text() - !fn: $setHorizontalHeaderLabels - !fn: $hideHorizontalHeaderLabels - !fn: $setHorizontalHeaderLabels + !fn: $text() + !fn: $setHorizontalHeaderLabels() + !fn: $hideHorizontalHeaderLabels() + !fn: $setVerticalHeaderLabels() + !fn: $hideVerticalHeaderLabels() + !fn: $clear() @signals: !sg: $clicked() This signal is emitted by the default implementation of [classfnc]$clickEvent[/classfnc](). @@ -88,6 +91,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_tablewidget,"tablewidget","widget") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,text) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,setCellWidget) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,setIcon) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,clear) KVSO_END_REGISTERCLASS(KviKvsObject_tablewidget) @@ -105,6 +109,12 @@ bool KviKvsObject_tablewidget::init(KviKvsRunTimeContext *,KviKvsVariantList *) SET_OBJECT(QTableWidget) return true; } +KVSO_CLASS_FUNCTION(tablewidget,clear) +{ + CHECK_INTERNAL_POINTER(widget()) + ((QTableWidget *)widget())->clear(); + return true; +} KVSO_CLASS_FUNCTION(tablewidget,setText) { CHECK_INTERNAL_POINTER(widget()) @@ -113,7 +123,7 @@ KVSO_CLASS_FUNCTION(tablewidget,setText) KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,uRow) KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,uCol) - KVSO_PARAMETER("col",KVS_PT_STRING,0,szText) + KVSO_PARAMETER("text",KVS_PT_STRING,0,szText) KVSO_PARAMETERS_END(c) if(uRow>=((QTableWidget *)widget())->rowCount() || uRow>=((QTableWidget *)widget())->rowCount()) c->warning(__tr2qs_ctx("Item out of the tablewidget size","objects")); @@ -135,7 +145,7 @@ KVSO_CLASS_FUNCTION(tablewidget,setIcon) KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,uRow) KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,uCol) - KVSO_PARAMETER("pixmap",KVS_PT_VARIANT,0,vPixmap) + KVSO_PARAMETER("icon",KVS_PT_VARIANT,0,vPixmap) KVSO_PARAMETERS_END(c) QPixmap *pix = 0; if(vPixmap->isHObject()) @@ -169,7 +179,7 @@ KVSO_CLASS_FUNCTION(tablewidget,setIcon) } KVSO_CLASS_FUNCTION(tablewidget,text) { - CHECK_INTERNAL_POINTER(widget()) + CHECK_INTERNAL_POINTER(widget()) kvs_uint_t uCol,uRow; KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,uRow) @@ -178,7 +188,7 @@ KVSO_CLASS_FUNCTION(tablewidget,text) QTableWidgetItem *item=((QTableWidget *)widget())->item(uRow,uCol); if(!item) c->returnValue()->setNothing(); else c->returnValue()->setString(((QTableWidget *)widget())->item(uRow,uCol)->text()); - return true; + return true; } KVSO_CLASS_FUNCTION(tablewidget,setRowCount) { @@ -217,27 +227,62 @@ KVSO_CLASS_FUNCTION(tablewidget,setColumnCount) KVSO_CLASS_FUNCTION(tablewidget,setHorizontalHeaderLabels) { CHECK_INTERNAL_POINTER(widget()) - QStringList columns; + KviKvsArrayCast ac; KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("labels",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,columns) + KVSO_PARAMETER("labels",KVS_PT_ARRAYCAST,0,ac) KVSO_PARAMETERS_END(c) - ((QTableWidget *)object())->setHorizontalHeaderLabels(columns); + QStringList szColumns; + if(KviKvsArray * a = ac.array()) + { + kvs_uint_t uIdx = 0; + kvs_uint_t uSize = a->size(); + while(uIdx < uSize) + { + KviKvsVariant * v = a->at(uIdx); + if(v) + { + QString tmp; + v->asString(tmp); + szColumns.append(tmp); + } + else szColumns.append(""); + uIdx++; + } + } + ((QTableWidget *)object())->setHorizontalHeaderLabels(szColumns); return true; } - KVSO_CLASS_FUNCTION(tablewidget,setVerticalHeaderLabels) { CHECK_INTERNAL_POINTER(widget()) - QStringList columns; + KviKvsArrayCast ac; KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("labels",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,columns) + KVSO_PARAMETER("labels",KVS_PT_ARRAYCAST,0,ac) KVSO_PARAMETERS_END(c) - debug("list count %d",columns.count()); - ((QTableWidget *)object())->setVerticalHeaderLabels(columns); + QStringList szColumns; + if(KviKvsArray * a = ac.array()) + { + kvs_uint_t uIdx = 0; + kvs_uint_t uSize = a->size(); + while(uIdx < uSize) + { + KviKvsVariant * v = a->at(uIdx); + if(v) + { + QString tmp; + v->asString(tmp); + szColumns.append(tmp); + } + else szColumns.append(""); + uIdx++; + } + } + ((QTableWidget *)object())->setVerticalHeaderLabels(szColumns); return true; } + KVSO_CLASS_FUNCTION(tablewidget,setCellWidget) { CHECK_INTERNAL_POINTER(widget()) diff --git a/src/modules/objects/class_tablewidget.h b/src/modules/objects/class_tablewidget.h index 795c5f336..125bf61a4 100644 --- a/src/modules/objects/class_tablewidget.h +++ b/src/modules/objects/class_tablewidget.h @@ -59,6 +59,7 @@ protected: bool showHorizontalHeader(KviKvsObjectFunctionCall *c); bool hideVerticalHeader(KviKvsObjectFunctionCall *c); bool showVerticalHeader(KviKvsObjectFunctionCall *c); + bool clear(KviKvsObjectFunctionCall *c); //bool clickEvent(KviKvsObjectFunctionCall *c); protected slots: |
