diff options
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/objects/class_sql.cpp | 20 | ||||
| -rw-r--r-- | src/modules/objects/class_tablewidget.cpp | 505 | ||||
| -rw-r--r-- | src/modules/objects/class_tablewidget.h | 4 | ||||
| -rw-r--r-- | src/modules/objects/class_treewidget.cpp | 21 | ||||
| -rw-r--r-- | src/modules/objects/class_treewidget.h | 2 | ||||
| -rw-r--r-- | src/modules/objects/class_widget.cpp | 16 |
6 files changed, 333 insertions, 235 deletions
diff --git a/src/modules/objects/class_sql.cpp b/src/modules/objects/class_sql.cpp index a08e88868..9755cb020 100644 --- a/src/modules/objects/class_sql.cpp +++ b/src/modules/objects/class_sql.cpp @@ -101,6 +101,8 @@ static void KviKvsSqlInstanceUnregister(KviKvsObject_sql *instance) Closes the connection <connection_name>. !fn: <size:integer> $queryResultsSize() Returns the query size in rows or -1 if the query is empty or the database driver doesn' support the function. + !fn: <error:string> $lastError(<more_details:boolean>) + Returns last error occurred. Use the more_details flag for more info about the error. !fn: <ok:boolean> $queryExec([<query:string>]) Execs the current query <query>. The string must follow the right syntax against the database in use. If there are no parameters, it will exec the query previously done. @@ -545,12 +547,20 @@ KVSO_CLASS_FUNCTION(sql,queryRecord) KVSO_CLASS_FUNCTION(sql,lastError) { CHECK_QUERY_IS_INIT - QString szError; + bool bMoreErrorDetails; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("more",KVS_PT_BOOLEAN,KVS_PF_OPTIONAL,bMoreErrorDetails) + KVSO_PARAMETERS_END(c) + QString szError; QSqlError error=m_pCurrentSQlQuery->lastError(); - if (error.type()==QSqlError::StatementError) szError="SyntaxError"; - else if (error.type()==QSqlError::ConnectionError) szError="ConnectionError"; - else if (error.type()==QSqlError::TransactionError) szError="TransactionError"; - else szError="UnkonwnError"; + if (bMoreErrorDetails) szError=error.text(); + else + { + if (error.type()==QSqlError::StatementError) szError="SyntaxError"; + else if (error.type()==QSqlError::ConnectionError) szError="ConnectionError"; + else if (error.type()==QSqlError::TransactionError) szError="TransactionError"; + else szError="UnkonwnError"; + } c->returnValue()->setString(szError); return true; } diff --git a/src/modules/objects/class_tablewidget.cpp b/src/modules/objects/class_tablewidget.cpp index 03de81d8d..4f8ee1c0b 100644 --- a/src/modules/objects/class_tablewidget.cpp +++ b/src/modules/objects/class_tablewidget.cpp @@ -85,25 +85,79 @@ const char * const itemflags_tbl[] = { @description: This widget provides a table. @functions: - !fn: $setText(<row:integer>,<col:integer>,[<text:string>]) + !fn: $setText(<row:uint>,<col:uint>,[<text:string>]) Sets the contents of the cell pointeid by row and col to text. - !fn: $setNumber(<row:integer>,<col:integer>,[<number:integer>]). + !fn: $setTooltip(<row:uint>,<col:uint>,[<text:string>]) + Sets the tooltip of the cell pointeid by row and col to text. + !fn: $setNumber(<row:uint>,<col:uint>,[<number:integer>]). Sets the contents of the cell pointeid by row and col to number. !fn: <string> $text(<row:integer>,<col:integer>) Returns the text of the cell pointed by row and col. !fn: $setHorizontalHeaderLabels(<string array>) + Sets the horizontal header labels using labels. !fn: $showHorizontalHeader() + Shows the horizontal header. !fn: $hideHorizontalHeader() + Hides the horizontal header. !fn: $setVerticalHeaderLabels(<string array>) + Sets the vertical header labels using labels. !fn: $showVerticalHeader() - !fn: $hideVerticalHeader() - !fn: $setRowCount(<integer>) - !fn: <integer> $rowCount() - !fn: $setColumnCount(<integer>) - !fn: <integer> $columnCount() - !fn: $setCellWidget(<hobject>) - !fn: $setIcon() - !fn: $clear() + Shows the vertical header. + !fn: $hideVerticalHeader() + Hides the vertical header. + !fn: $setRowCount(<integer>) + Sets the number of rows in the table. + !fn: <integer> $rowCount() + Returns the number of rows in the table. + !fn: <integer> $currentRow() + Returns the current row. + Useful in the [classfnc]customContextMenuRequestedEvent[/classfnc]. + !fn: $setColumnCount(<integer>) + Sets the number of columns in the table. + !fn: <integer> $columnCount() + Returns the number of columns in the table. + !fn: <integer> $currentRow() + Returns the current column. + Useful in the [classfnc]customContextMenuRequestedEvent[/classfnc] + !fn: $setFlag(<row:uint>,<col:uint>,<flag1:string>, <flag2:string>, ...) + Sets the flags for the cell pointed by row and col to the given flags. + These determine whether the cell can be selected or modified. + Supported flags are: + - noitemflag : no flag sets; + - selectable : cell is selecatble; + - editable : cell is editable; + - dragEnabled : cell can dragged; + - dropEnabled : cell can used as drop target; + - userCheckable : cell is checkable; + - enabled :cell is enabled; + - tristate : cell is checkable with three separate states. + !fn: $setCellWidget(<row:uint>,<column:uint>,<widget:hobject>) + Sets the given widget to be displayed in the cell in the given row and column, passing the ownership of the widget to the table. + !fn: $setIcon(<row:uint>,<column:uint>,<icon:imageid or hobject>) + Sets the cell icon pointed by <row>,<column>. + Icon parameter can be a standard KVIrc [doc:image_id]image identifier[/doc] icon or a KVS pixmap's object. + !fn: $hideRow(<row:uint>) + Hides the row <row>. + !fn: $showRow(<row:uint>) + Shows the row <row>. + !fn: $hideColumn(<col:uint>) + Hides the column <col>. + !fn: $showColumn(<col:uint>) + Shows the column <col>. + !fn: $clear() + Clears the table. + !fn: <row,col> $itemEnteredEvent() + This event is triggered when the mouse cursor enters an cell. + !fn: <row,col> $cellActivatedEvent() + This event is triggered when the cell specified by row and column has been activated + !fn: <row,col> $cellDoubleClickedEvent() + This event is triggered whenever a cell in the table is double clicked. + !fn: $paintCellEvent(<painter:hobject>,<row,uint>,<col:uint>) + This event handler can be reimplemented to repaint cells. + The framework will pass the row/col coordinates and, as parameter, a [class]painter[/class]object. + You don't need to begin/end/delete the painter. + !fn: $sizeHintCellRequestEvent() + !fn; $resizeRowsToContents() @signals: !sg: $clicked() This signal is emitted by the default implementation of [classfnc]$clickEvent[/classfnc](). @@ -137,7 +191,10 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_tablewidget,"tablewidget","widget") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,hideColumn) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,showColumn) - // Item (text. icon, widget) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,resizeRowsToContents) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,resizeColumnsToContents) + + // Item (text. icon, widget) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,setText) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,setNumber) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tablewidget,setToolTip) @@ -192,136 +249,152 @@ KVSO_CLASS_FUNCTION(tablewidget,clear) ((QTableWidget *)widget())->clear(); return true; } +KVSO_CLASS_FUNCTION(tablewidget,resizeRowsToContents) +{ + CHECK_INTERNAL_POINTER(widget()) +// debug("resize row to contents"); + + ((QTableWidget *)widget())->resizeRowsToContents(); + return true; +} +KVSO_CLASS_FUNCTION(tablewidget,resizeColumnsToContents) +{ + CHECK_INTERNAL_POINTER(widget()) +// debug("resize coluns to contents"); + ((QTableWidget *)widget())->resizeColumnsToContents(); + return true; +} + KVSO_CLASS_FUNCTION(tablewidget,setText) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iCol,iRow; - QString szText; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETER("text",KVS_PT_STRING,0,szText) - KVSO_PARAMETERS_END(c) - if(iRow>=((QTableWidget *)widget())->rowCount() || iRow>=((QTableWidget *)widget())->rowCount()) - c->warning(__tr2qs_ctx("Item out of the tablewidget size","objects")); - QTableWidgetItem *item=((QTableWidget *)widget())->item(iRow,iCol); - if(!item) - { - item=new QTableWidgetItem(); + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iCol,iRow; + QString szText; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETER("text",KVS_PT_STRING,0,szText) + KVSO_PARAMETERS_END(c) + if(iRow>=((QTableWidget *)widget())->rowCount() || iRow>=((QTableWidget *)widget())->rowCount()) + c->warning(__tr2qs_ctx("Item out of the tablewidget size","objects")); + QTableWidgetItem *item=((QTableWidget *)widget())->item(iRow,iCol); + if(!item) + { + item=new QTableWidgetItem(); ((QTableWidget *)widget())->setItem(iRow,iCol,item); - } - item->setText(szText); - return true; + } + item->setText(szText); + return true; } KVSO_CLASS_FUNCTION(tablewidget,setNumber) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iCol,iRow; - kvs_int_t iNumber; - QString szText; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETER("number",KVS_PT_INT,0,iNumber) - KVSO_PARAMETERS_END(c) - if(iRow>=((QTableWidget *)widget())->rowCount() || iRow>=((QTableWidget *)widget())->rowCount()) - c->warning(__tr2qs_ctx("Item out of the tablewidget size","objects")); - QTableWidgetItem *item=((QTableWidget *)widget())->item(iRow,iCol); - if(!item) - { + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iCol,iRow; + kvs_int_t iNumber; + QString szText; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETER("number",KVS_PT_INT,0,iNumber) + KVSO_PARAMETERS_END(c) + if(iRow>=((QTableWidget *)widget())->rowCount() || iRow>=((QTableWidget *)widget())->rowCount()) + c->warning(__tr2qs_ctx("Item out of the tablewidget size","objects")); + QTableWidgetItem *item=((QTableWidget *)widget())->item(iRow,iCol); + if(!item) + { item=new QTableWidgetItem(); ((QTableWidget *)widget())->setItem(iRow,iCol,item); - } - item->setData(0,(int)iNumber); - return true; + } + item->setData(0,(int)iNumber); + return true; } KVSO_CLASS_FUNCTION(tablewidget,setIcon) { - kvs_uint_t iCol,iRow; - KviKvsObject *obPixmap; - kvs_hobject_t obHpixmap; - KviKvsVariant * vPixmap; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETER("icon",KVS_PT_VARIANT,0,vPixmap) - KVSO_PARAMETERS_END(c) - QPixmap *pix = 0; - if(vPixmap->isHObject()) - { - vPixmap->asHObject(obHpixmap); - obPixmap=KviKvsKernel::instance()->objectController()->lookupObject(obHpixmap); - if (!obPixmap->inheritsClass("pixmap")) - { - c->warning(__tr2qs_ctx("Pixmap object or image Id required","objects")); - return true; - } - pix=((KviKvsObject_pixmap *)obPixmap)->getPixmap(); - } else { - QString szPix; + kvs_uint_t iCol,iRow; + KviKvsObject *obPixmap; + kvs_hobject_t obHpixmap; + KviKvsVariant * vPixmap; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETER("icon",KVS_PT_VARIANT,0,vPixmap) + KVSO_PARAMETERS_END(c) + QPixmap *pix = 0; + if(vPixmap->isHObject()) + { + vPixmap->asHObject(obHpixmap); + obPixmap=KviKvsKernel::instance()->objectController()->lookupObject(obHpixmap); + if (!obPixmap->inheritsClass("pixmap")) + { + c->warning(__tr2qs_ctx("Pixmap object or image Id required","objects")); + return true; + } + pix=((KviKvsObject_pixmap *)obPixmap)->getPixmap(); + } else { + QString szPix; vPixmap->asString(szPix); pix=g_pIconManager->getImage(szPix); if(!pix) { - c->warning(__tr2qs_ctx("Error occured: the suitable file '%Q' is not of the correct format or it is not a valid icon number.","objects"),&szPix); - return true; + c->warning(__tr2qs_ctx("Error occured: the suitable file '%Q' is not of the correct format or it is not a valid icon number.","objects"),&szPix); + return true; } - } - QTableWidgetItem *item=((QTableWidget *)widget())->item(iRow,iCol); - if(!item) - { - item=new QTableWidgetItem(); + } + QTableWidgetItem *item=((QTableWidget *)widget())->item(iRow,iCol); + if(!item) + { + item=new QTableWidgetItem(); ((QTableWidget *)widget())->setItem(iRow,iCol,item); - } - item->setIcon(QIcon(*pix)); - return true; + } + item->setIcon(QIcon(*pix)); + return true; } KVSO_CLASS_FUNCTION(tablewidget,text) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iCol,iRow; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETERS_END(c) - QTableWidgetItem *item=((QTableWidget *)widget())->item(iRow,iCol); - if(!item) c->returnValue()->setNothing(); - else c->returnValue()->setString(((QTableWidget *)widget())->item(iRow,iCol)->text()); - return true; + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iCol,iRow; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETERS_END(c) + QTableWidgetItem *item=((QTableWidget *)widget())->item(iRow,iCol); + if(!item) c->returnValue()->setNothing(); + else c->returnValue()->setString(((QTableWidget *)widget())->item(iRow,iCol)->text()); + return true; } KVSO_CLASS_FUNCTION(tablewidget,setRowCount) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iRow; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETERS_END(c) - ((QTableWidget *)widget())->setRowCount(iRow); - return true; + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iRow; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETERS_END(c) + ((QTableWidget *)widget())->setRowCount(iRow); + return true; } KVSO_CLASS_FUNCTION(tablewidget,rowCount) { - CHECK_INTERNAL_POINTER(widget()) - c->returnValue()->setInteger(((QTableWidget *)widget())->rowCount()); - return true; + CHECK_INTERNAL_POINTER(widget()) + c->returnValue()->setInteger(((QTableWidget *)widget())->rowCount()); + return true; } KVSO_CLASS_FUNCTION(tablewidget,currentRow) { - CHECK_INTERNAL_POINTER(widget()) - c->returnValue()->setInteger(((QTableWidget *)widget())->currentRow()); - return true; + CHECK_INTERNAL_POINTER(widget()) + c->returnValue()->setInteger(((QTableWidget *)widget())->currentRow()); + return true; } KVSO_CLASS_FUNCTION(tablewidget,currentColumn) { - CHECK_INTERNAL_POINTER(widget()) - c->returnValue()->setInteger(((QTableWidget *)widget())->currentColumn()); - return true; + CHECK_INTERNAL_POINTER(widget()) + c->returnValue()->setInteger(((QTableWidget *)widget())->currentColumn()); + return true; } KVSO_CLASS_FUNCTION(tablewidget,columnCount) { - CHECK_INTERNAL_POINTER(widget()) - c->returnValue()->setInteger(((QTableWidget *)widget())->columnCount()); - return true; + CHECK_INTERNAL_POINTER(widget()) + c->returnValue()->setInteger(((QTableWidget *)widget())->columnCount()); + return true; } KVSO_CLASS_FUNCTION(tablewidget,itemRowColAt) { @@ -332,85 +405,93 @@ KVSO_CLASS_FUNCTION(tablewidget,itemRowColAt) KVSO_PARAMETER("uY",KVS_PT_UNSIGNEDINTEGER,0,uY) KVSO_PARAMETERS_END(c) KviKvsArray *pArray; - QTableWidgetItem *pItem=((QTableWidget *)widget())->itemAt(QPoint(uX,uY)); - pArray=new KviKvsArray; - pArray->set(0,new KviKvsVariant((kvs_int_t)pItem->row())); - pArray->set(1,new KviKvsVariant((kvs_int_t)pItem->column())); - c->returnValue()->setArray(pArray); + QTableWidgetItem *pItem=((QTableWidget *)widget())->itemAt(uX,uY); + pArray=new KviKvsArray; + if (!pItem) { + pArray->set(0,new KviKvsVariant((kvs_int_t)-1)); + pArray->set(1,new KviKvsVariant((kvs_int_t)-1)); + } + else { + pArray->set(0,new KviKvsVariant((kvs_int_t)pItem->row())); + pArray->set(1,new KviKvsVariant((kvs_int_t)pItem->column())); + } + c->returnValue()->setArray(pArray); return true; } KVSO_CLASS_FUNCTION(tablewidget,setToolTip) { CHECK_INTERNAL_POINTER(widget()) QString szTooltip; - kvs_uint_t uX,uY; + kvs_uint_t uRow,uCol; KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("uX",KVS_PT_UNSIGNEDINTEGER,0,uX) - KVSO_PARAMETER("uY",KVS_PT_UNSIGNEDINTEGER,0,uY) + KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,uRow) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,uCol) KVSO_PARAMETER("tooltip",KVS_PT_STRING,0,szTooltip) KVSO_PARAMETERS_END(c) - ((QTableWidget *)widget())->itemAt(uX,uY)->setToolTip(szTooltip); + QTableWidgetItem *pItem=((QTableWidget *)widget())->item(uRow,uCol); + if (pItem) pItem->setToolTip(szTooltip); return true; } KVSO_CLASS_FUNCTION(tablewidget,setColumnCount) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iCol; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETERS_END(c) - ((QTableWidget *)widget())->setColumnCount(iCol); - return true; + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iCol; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETERS_END(c) + ((QTableWidget *)widget())->setColumnCount(iCol); + return true; } KVSO_CLASS_FUNCTION(tablewidget,hideColumn) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iCol; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETERS_END(c) - ((QTableWidget *)widget())->hideColumn(iCol); - return true; + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iCol; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETERS_END(c) + ((QTableWidget *)widget())->hideColumn(iCol); + return true; } KVSO_CLASS_FUNCTION(tablewidget,showColumn) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iCol; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETERS_END(c) - ((QTableWidget *)widget())->showColumn(iCol); - return true; + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iCol; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETERS_END(c) + ((QTableWidget *)widget())->showColumn(iCol); + return true; }KVSO_CLASS_FUNCTION(tablewidget,hideRow) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iRow; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETERS_END(c) - ((QTableWidget *)widget())->hideRow(iRow); - return true; -}KVSO_CLASS_FUNCTION(tablewidget,showRow) + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iRow; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETERS_END(c) + ((QTableWidget *)widget())->hideRow(iRow); + return true; +} +KVSO_CLASS_FUNCTION(tablewidget,showRow) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iRow; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETERS_END(c) - ((QTableWidget *)widget())->showRow(iRow); - return true; + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iRow; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETERS_END(c) + ((QTableWidget *)widget())->showRow(iRow); + return true; } KVSO_CLASS_FUNCTION(tablewidget,setHorizontalHeaderLabels) { - CHECK_INTERNAL_POINTER(widget()) - KviKvsArrayCast ac; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("labels",KVS_PT_ARRAYCAST,0,ac) - KVSO_PARAMETERS_END(c) - QStringList szColumns; - if(KviKvsArray * a = ac.array()) - { + CHECK_INTERNAL_POINTER(widget()) + KviKvsArrayCast ac; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("labels",KVS_PT_ARRAYCAST,0,ac) + KVSO_PARAMETERS_END(c) + QStringList szColumns; + if(KviKvsArray * a = ac.array()) + { kvs_int_t uIdx = 0; kvs_int_t uSize = a->size(); while(uIdx < uSize) @@ -425,21 +506,21 @@ KVSO_CLASS_FUNCTION(tablewidget,setHorizontalHeaderLabels) else szColumns.append(""); uIdx++; } - } - ((QTableWidget *)object())->setHorizontalHeaderLabels(szColumns); - return true; + } + ((QTableWidget *)object())->setHorizontalHeaderLabels(szColumns); + return true; } KVSO_CLASS_FUNCTION(tablewidget,setVerticalHeaderLabels) { - CHECK_INTERNAL_POINTER(widget()) - KviKvsArrayCast ac; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("labels",KVS_PT_ARRAYCAST,0,ac) - KVSO_PARAMETERS_END(c) - QStringList szColumns; - if(KviKvsArray * a = ac.array()) - { + CHECK_INTERNAL_POINTER(widget()) + KviKvsArrayCast ac; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("labels",KVS_PT_ARRAYCAST,0,ac) + KVSO_PARAMETERS_END(c) + QStringList szColumns; + if(KviKvsArray * a = ac.array()) + { kvs_int_t uIdx = 0; kvs_int_t uSize = a->size(); while(uIdx < uSize) @@ -454,65 +535,65 @@ KVSO_CLASS_FUNCTION(tablewidget,setVerticalHeaderLabels) else szColumns.append(""); uIdx++; } - } - ((QTableWidget *)object())->setVerticalHeaderLabels(szColumns); - return true; + } + ((QTableWidget *)object())->setVerticalHeaderLabels(szColumns); + return true; } KVSO_CLASS_FUNCTION(tablewidget,setCellWidget) { - CHECK_INTERNAL_POINTER(widget()) - KviKvsObject * pObject; - kvs_hobject_t hObject; - kvs_uint_t iRow,iCol; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETER("column",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETER("widget",KVS_PT_HOBJECT,0,hObject) - KVSO_PARAMETERS_END(c) - pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); - CHECK_HOBJECT_IS_WIDGET(pObject) - ((QTableWidget *)object())->setCellWidget(iRow,iCol,((QWidget *)(pObject->object()))); - return true; + CHECK_INTERNAL_POINTER(widget()) + KviKvsObject * pObject; + kvs_hobject_t hObject; + kvs_uint_t iRow,iCol; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETER("column",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETER("widget",KVS_PT_HOBJECT,0,hObject) + KVSO_PARAMETERS_END(c) + pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); + CHECK_HOBJECT_IS_WIDGET(pObject) + ((QTableWidget *)object())->setCellWidget(iRow,iCol,((QWidget *)(pObject->object()))); + return true; } KVSO_CLASS_FUNCTION(tablewidget,hideHorizontalHeader) { Q_UNUSED(c); - ((QTableWidget *)widget())->horizontalHeader()->hide(); - return true; + ((QTableWidget *)widget())->horizontalHeader()->hide(); + return true; } KVSO_CLASS_FUNCTION(tablewidget,hideVerticalHeader) { Q_UNUSED(c); - ((QTableWidget *)widget())->verticalHeader()->hide(); - return true; + ((QTableWidget *)widget())->verticalHeader()->hide(); + return true; } KVSO_CLASS_FUNCTION(tablewidget,showHorizontalHeader) { Q_UNUSED(c); - ((QTableWidget *)widget())->horizontalHeader()->show(); - return true; + ((QTableWidget *)widget())->horizontalHeader()->show(); + return true; } KVSO_CLASS_FUNCTION(tablewidget,showVerticalHeader) { Q_UNUSED(c); - ((QTableWidget *)widget())->verticalHeader()->show(); - return true; + ((QTableWidget *)widget())->verticalHeader()->show(); + return true; } KVSO_CLASS_FUNCTION(tablewidget,setItemFlags) { - CHECK_INTERNAL_POINTER(widget()) + CHECK_INTERNAL_POINTER(widget()) - QStringList itemflags; + QStringList itemflags; kvs_uint_t iRow,iCol; KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) - KVSO_PARAMETER("column",KVS_PT_UNSIGNEDINTEGER,0,iCol) - KVSO_PARAMETER("flags",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,itemflags) - KVSO_PARAMETERS_END(c) - int flag,sum=0; + KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,iRow) + KVSO_PARAMETER("column",KVS_PT_UNSIGNEDINTEGER,0,iCol) + KVSO_PARAMETER("flags",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,itemflags) + KVSO_PARAMETERS_END(c) + int flag,sum=0; for ( int i=0;i<itemflags.count();i++) { flag = 0; @@ -525,8 +606,8 @@ KVSO_CLASS_FUNCTION(tablewidget,setItemFlags) } } if(flag){ - // if (flag==Qt::ItemIsUserCheckable) - // pItem->setCheckState(0,Qt::Unchecked); + // if (flag==Qt::ItemIsUserCheckable) + // pItem->setCheckState(0,Qt::Unchecked); sum = sum | flag; } else @@ -540,8 +621,7 @@ KVSO_CLASS_FUNCTION(tablewidget,setItemFlags) void KviKvsObject_tablewidget::slotItemEntered(QTableWidgetItem * i) { - // if (!i) callFunction(this,"itecurrentItemChangeEvent",0,0); - KviKvsVariantList params(new KviKvsVariant((kvs_int_t)i->row()),new KviKvsVariant((kvs_int_t)i->column())); + KviKvsVariantList params(new KviKvsVariant((kvs_int_t)i->row()),new KviKvsVariant((kvs_int_t)i->column())); callFunction(this,"itemEnteredEvent",0,¶ms); } KVSO_CLASS_FUNCTION(tablewidget,itemEnteredEvent) @@ -574,6 +654,21 @@ KVSO_CLASS_FUNCTION(tablewidget,cellDoubleClickedEvent) emitSignal("cellDoubleClicked",c,c->params()); return true; } +KVSO_CLASS_FUNCTION(tablewidget,customContextMenuRequestedEvent) +{ + emitSignal("rightButtonClicked",c,c->params()); + emitSignal("customContextMenuRequested",c,c->params()); + return true; +} + +void KviKvsObject_tablewidget::slotCustomContextMenuRequested(const QPoint &pnt) +{ + KviKvsVariant *xpos=new KviKvsVariant((kvs_int_t)pnt.x()); + KviKvsVariant *ypos=new KviKvsVariant((kvs_int_t)pnt.y()); + KviKvsVariantList params(xpos,ypos); + callFunction(this,"customContextMenuRequestedEvent",0,¶ms); +} + bool KviKvsObject_tablewidget::paint(QPainter * p, const QStyleOptionViewItem & option, const QModelIndex & index) { diff --git a/src/modules/objects/class_tablewidget.h b/src/modules/objects/class_tablewidget.h index e4857c8fc..5f2f4c9a2 100644 --- a/src/modules/objects/class_tablewidget.h +++ b/src/modules/objects/class_tablewidget.h @@ -99,9 +99,13 @@ public: bool showColumn(KviKvsObjectFunctionCall *c); bool hideRow(KviKvsObjectFunctionCall *c); bool showRow(KviKvsObjectFunctionCall *c); + bool customContextMenuRequestedEvent(KviKvsObjectFunctionCall *c); + bool resizeRowsToContents(KviKvsObjectFunctionCall *c); + bool resizeColumnsToContents(KviKvsObjectFunctionCall *c); protected slots: void slotItemEntered(QTableWidgetItem *); + void slotCustomContextMenuRequested(const QPoint &pnt); void cellActivated(int iRow,int iCol); void cellDoubleClicked(int iRow,int iCol); }; diff --git a/src/modules/objects/class_treewidget.cpp b/src/modules/objects/class_treewidget.cpp index 5014f2599..e926c8a0a 100644 --- a/src/modules/objects/class_treewidget.cpp +++ b/src/modules/objects/class_treewidget.cpp @@ -221,9 +221,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_treewidget,"listview","widget") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_treewidget,itemExpandedEvent); KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_treewidget,itemCollapsedEvent); KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_treewidget,itemChangedEvent); - KVSO_REGISTER_HANDLER(KviKvsObject_treewidget,"rightButtonClickedEvent",customContextMenuRequestedEvent); - KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_treewidget,customContextMenuRequestedEvent); - KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_treewidget,setAcceptDrops); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_treewidget,setAcceptDrops); KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_treewidget,"fileDroppedEvent") KVSO_END_REGISTERCLASS(KviKvsObject_treewidget) @@ -251,9 +249,6 @@ bool KviKvsObject_treewidget::init(KviKvsRunTimeContext *,KviKvsVariantList *) connect(widget(),SIGNAL(itemExpanded(QTreeWidgetItem *)),this,SLOT(slotItemExpanded(QTreeWidgetItem *))); connect(widget(),SIGNAL(itemCollapsed(QTreeWidgetItem *)),this,SLOT(slotItemCollapsed(QTreeWidgetItem *))); connect(widget(),SIGNAL(itemChanged(QTreeWidgetItem *,int)),this,SLOT(slotItemChanged(QTreeWidgetItem *,int))); - widget()->setContextMenuPolicy(Qt::CustomContextMenu); - connect(widget(),SIGNAL(customContextMenuRequested(const QPoint &)),this,SLOT(slotCustomContextMenuRequested(const QPoint &))); - return true; } @@ -578,21 +573,7 @@ void KviKvsObject_treewidget::slotItemCollapsed(QTreeWidgetItem * i) callFunction(this,"itemCollapsedEvent",0,¶ms); } -KVSO_CLASS_FUNCTION(treewidget,customContextMenuRequestedEvent) -{ - emitSignal("rightButtonClicked",c,c->params()); - emitSignal("customContextMenuRequested",c,c->params()); - return true; -} -void KviKvsObject_treewidget::slotCustomContextMenuRequested(const QPoint &pnt) -{ - KviKvsVariant *xpos=new KviKvsVariant((kvs_int_t)pnt.x()); - KviKvsVariant *ypos=new KviKvsVariant((kvs_int_t)pnt.y()); - QTreeWidgetItem *it=(QTreeWidgetItem *) ((QTreeWidget *)widget())->itemAt(pnt); - KviKvsVariantList params(new KviKvsVariant(KviKvsObject_treewidgetitem::itemToHandle(it)),xpos,ypos); - callFunction(this,"customContextMenuRequestedEvent",0,¶ms); -} KVSO_CLASS_FUNCTION(treewidget,itemChangedEvent) { diff --git a/src/modules/objects/class_treewidget.h b/src/modules/objects/class_treewidget.h index aaccd43cf..0a2af67ce 100644 --- a/src/modules/objects/class_treewidget.h +++ b/src/modules/objects/class_treewidget.h @@ -59,7 +59,6 @@ protected: bool itemExpandedEvent(KviKvsObjectFunctionCall *c); bool itemCollapsedEvent(KviKvsObjectFunctionCall *c); bool itemChangedEvent(KviKvsObjectFunctionCall *c); - bool customContextMenuRequestedEvent(KviKvsObjectFunctionCall *c); bool selectedItems(KviKvsObjectFunctionCall *c); bool currentItem(KviKvsObjectFunctionCall *c); bool setSelectionMode(KviKvsObjectFunctionCall *c); @@ -74,7 +73,6 @@ protected: bool topLevelItemCount(KviKvsObjectFunctionCall *c); protected slots: void slotClicked(QTreeWidgetItem *,int); - void slotCustomContextMenuRequested(const QPoint &pnt); void slotSelectionChanged(); void slotCurrentChanged(QTreeWidgetItem *,QTreeWidgetItem *); void slotItemActivated(QTreeWidgetItem *,int col); diff --git a/src/modules/objects/class_widget.cpp b/src/modules/objects/class_widget.cpp index f96f19339..e096bab5e 100644 --- a/src/modules/objects/class_widget.cpp +++ b/src/modules/objects/class_widget.cpp @@ -55,6 +55,7 @@ #include <QPrinter> #include <QApplication> #include <QPoint> +#include <QContextMenuEvent> #ifdef COMPILE_WEBKIT_SUPPORT #include <QtWebKit/QWebView> @@ -502,7 +503,10 @@ const char * const widgettypes_tbl[] = { PaintOnScreen - Indicates that the widget wants to draw directly onto the screen. NoMousePropagation - Prohibits mouse events from being propagated to the widget's parent. !fn: $setStyleSheet(<string>) - + Set a style sheet for this widget. + !fn: $customContextMenuRequestedEvent(<x_mouse_pos:integer>,<y_mouse_pos:integer>) + This event is triggered when the user has requested a context menu on the widget (i.e. right clicking on the widget). + The x,y coordinates are widget relative. !fn: $array(<red:integer,green:integer,blue:integer) $colorPalette(<color_role:string><color_group:string>) Returns the color in color_group(disabled, active or inactive), used for color_role. Valid color role are: @@ -713,6 +717,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_widget,"widget","object") KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"sizeHintRequestEvent") KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"maybeTipEvent") KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"shortCutEvent") + KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"customContextMenuRequestedEvent") #ifdef COMPILE_WEBKIT_SUPPORT KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_widget,setWebView) @@ -731,7 +736,6 @@ bool KviKvsObject_widget::init(KviKvsRunTimeContext *c,KviKvsVariantList *) { setObject(new KviKvsWidget(this,parentScriptWidget())); m_pContext=c; - widget()->setObjectName(getName()); return true; } @@ -747,7 +751,13 @@ bool KviKvsObject_widget::eventFilter(QObject *o,QEvent *e) switch(e->type()) { - + case QEvent::ContextMenu: + { + QPoint iPoint=widget()->mapFromGlobal(((QContextMenuEvent *)e)->globalPos()); + KviKvsVariantList params(new KviKvsVariant((kvs_int_t)iPoint.x()),new KviKvsVariant((kvs_int_t)iPoint.y())); + callFunction(this,"customContextMenuRequestedEvent",retv,¶ms); + break; + } case QEvent::Shortcut: { KviKvsVariantList params(new KviKvsVariant((kvs_int_t)((QShortcutEvent *)e)->shortcutId())); |
