aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects
diff options
context:
space:
mode:
authorGravatar Noldor2009-03-13 18:14:17 +0000
committerGravatar Noldor2009-03-13 18:14:17 +0000
commit38ae7a1a3c344436e1dafc0f85cebaef40982c26 (patch)
tree585a1ecdd955612f0fc17c77e56682d42362f1e8 /src/modules/objects
parentFixed text formatting (diff)
downloadKVIrc-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.cpp57
-rw-r--r--src/modules/objects/class_sql.h3
-rw-r--r--src/modules/objects/class_tablewidget.cpp79
-rw-r--r--src/modules/objects/class_tablewidget.h1
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(),&params);
*((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: