diff options
Diffstat (limited to 'src/modules/objects')
| -rw-r--r-- | src/modules/objects/class_listwidget.cpp | 103 | ||||
| -rw-r--r-- | src/modules/objects/class_listwidget.h | 3 | ||||
| -rw-r--r-- | src/modules/objects/class_tablewidget.cpp | 6 | ||||
| -rw-r--r-- | src/modules/objects/class_tabwidget.cpp | 105 | ||||
| -rw-r--r-- | src/modules/objects/class_tabwidget.h | 9 |
5 files changed, 198 insertions, 28 deletions
diff --git a/src/modules/objects/class_listwidget.cpp b/src/modules/objects/class_listwidget.cpp index 60341f630..be593da66 100644 --- a/src/modules/objects/class_listwidget.cpp +++ b/src/modules/objects/class_listwidget.cpp @@ -27,6 +27,8 @@ #include "kvi_debug.h" #include "class_list.h" #include "class_listwidget.h" +#include "class_pixmap.h" +#include "kvi_iconmanager.h" #include <QListWidget> const int item_flags[] = { @@ -162,6 +164,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_listwidget,"listbox","widget") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,setSelected); KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,isSelected); KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,setFont); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,setIcon); KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,setFlags) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,setChecked); @@ -171,6 +174,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_listwidget,"listbox","widget") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,selectionMode); KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,currentItemChangeEvent); KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,itemEnteredEvent); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_listwidget,setForeground); KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_listwidget,"selectionChangeEvent") @@ -303,6 +307,105 @@ KVSO_CLASS_FUNCTION(listwidget,setFont) pItem->setFont(font); return true; } +KVSO_CLASS_FUNCTION(listwidget,setIcon) +{ + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t uIdx; + KviKvsObject *obPixmap; + kvs_hobject_t obHpixmap; + KviKvsVariant * vPixmap; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("column",KVS_PT_UNSIGNEDINTEGER,0,uIdx) + KVSO_PARAMETER("pixmap",KVS_PT_VARIANT,0,vPixmap) + KVSO_PARAMETERS_END(c) + QListWidgetItem *pItem=((QListWidget *)widget())->item(uIdx); + if(!pItem) return true; + + QPixmap *pix = 0; + if (vPixmap->isEmpty()) {pItem->setIcon(QIcon());return true;} + 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; + } + } + if(pix){ + pItem->setIcon(*pix); + } + else{ + pItem->setIcon(QIcon()); + } + return true; +} +KVSO_CLASS_FUNCTION(listwidget,setForeground) +{ + CHECK_INTERNAL_POINTER(widget()) + kvs_int_t iCol1,iCol2,iCol3,iOpacity,iIdx; + QString szColorMode,szColor; + KviKvsVariant *var1,*var2,*var3; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("index",KVS_PT_INTEGER,0,iIdx) + KVSO_PARAMETER("Color_1_Or_Colorname",KVS_PT_VARIANT,0,var1) + KVSO_PARAMETER("Color_2",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var2) + KVSO_PARAMETER("Colo3_3",KVS_PT_VARIANT,KVS_PF_OPTIONAL,var3) + KVSO_PARAMETER("color_mode",KVS_PT_STRING,KVS_PF_OPTIONAL,szColorMode) + KVSO_PARAMETER("opacity",KVS_PT_INT,KVS_PF_OPTIONAL,iOpacity) + KVSO_PARAMETERS_END(c) + QListWidgetItem *pItem=((QListWidget *)widget())->item(iIdx); + if(!pItem) return true; + QColor col; + if (!var1->asInteger(iCol1)) + { + var1->asString(szColor); + if (c->paramCount()<3) iOpacity=255; + else + { + if (!var2->asInteger(iOpacity)) + { + c->warning(__tr2qs_ctx("The opacity parameter didn't evaluate to integer","objects")); + return true; + } + } + col.setNamedColor(szColor); + col.setAlpha(iOpacity); + } + else + { + if(c->paramCount()<4) + { + c->error(__tr2qs_ctx("Color name or triplette rgb/hsv value required","objects")); + return true; + } + if (!var2->asInteger(iCol2)||!var3->asInteger(iCol3)) + { + c->error(__tr2qs_ctx("One of the triplette parameters didn't evaluate to an integer","objects"));\ + return true; + } + if (c->paramCount()<5) iOpacity=255; + if(KviQString::equalCI(szColorMode, "HSV")) + col.setHsv(iCol1,iCol2,iCol3,iOpacity); + else + col.setRgb(iCol1,iCol2,iCol3,iOpacity); + } + QBrush brush=pItem->foreground(); + brush.setColor(col); + pItem->setForeground(brush); + return true; +} KVSO_CLASS_FUNCTION(listwidget,clear) { CHECK_INTERNAL_POINTER(widget()) diff --git a/src/modules/objects/class_listwidget.h b/src/modules/objects/class_listwidget.h index c143affa7..e0705a9c5 100644 --- a/src/modules/objects/class_listwidget.h +++ b/src/modules/objects/class_listwidget.h @@ -56,6 +56,9 @@ protected: bool setSelected(KviKvsObjectFunctionCall *c);
bool setFlags(KviKvsObjectFunctionCall *c);
bool selectedItems(KviKvsObjectFunctionCall *c);
+
+ bool setForeground(KviKvsObjectFunctionCall *c);
+ bool setIcon(KviKvsObjectFunctionCall *c);
bool currentItemChangeEvent(KviKvsObjectFunctionCall *c);
bool itemEnteredEvent(KviKvsObjectFunctionCall *c);
bool setChecked(KviKvsObjectFunctionCall *c);
diff --git a/src/modules/objects/class_tablewidget.cpp b/src/modules/objects/class_tablewidget.cpp index c455c881a..03de81d8d 100644 --- a/src/modules/objects/class_tablewidget.cpp +++ b/src/modules/objects/class_tablewidget.cpp @@ -163,7 +163,11 @@ KVSO_END_CONSTRUCTOR(KviKvsObject_tablewidget) KVSO_BEGIN_DESTRUCTOR(KviKvsObject_tablewidget) -delete m_pCellItemDelegate; +/*if (m_pCellItemDelegate) +{ + delete m_pCellItemDelegate; + m_pCellItemDelegate=0; +}*/ KVSO_END_DESTRUCTOR(KviKvsObject_tablewidget) bool KviKvsObject_tablewidget::init(KviKvsRunTimeContext *c,KviKvsVariantList *) diff --git a/src/modules/objects/class_tabwidget.cpp b/src/modules/objects/class_tabwidget.cpp index cb38dc9d1..611caf4e4 100644 --- a/src/modules/objects/class_tabwidget.cpp +++ b/src/modules/objects/class_tabwidget.cpp @@ -70,6 +70,8 @@ Returns the current page index. !fn: <string> $tabLabel(<index:uinteger>) Returns the tab label of the <index>. + !fn: <hobject> $widgetAt(<index:integer>) + Returns the tab widget of the <index> or 0 if index is out of the tabs count. !fn: <string> $currentTabLabel() Returns the label of the current tab. !fn: $removePage(<tab_widget:object>) @@ -77,10 +79,17 @@ !fn: $setTabPosition(<tab_position:string>) Sets TabPosition. Valid parameters are : Top, Bottom. !fn: <integer> $count() - This property holds the number of tabs in the tab bar. + Returns the number of tabs in the tab bar. + !fn: $setTabsClosable(<enable:bool>) + Sets whether close buttons are automatically added to each tab !fn: $currentChangedEvent() This function is invoched when the current tab was changed.[br] The default implementation emits the [classfnc]$currentChange[/classfnc]() signal. + !fn: $tabCloseRequestEvent() + This function is invoched when when the close button on a tab is clicked. + The index is the index of the tab that should be removed.[br] + The default implementation emits the [classfnc]$tabCloseRequest[/classfnc]() signal. + See also [classfnc]$setTabsClosable[/classfnc](). @examples: [example] # First we'll create the main tabwidget. @@ -140,9 +149,11 @@ %Tabwidget->$show() [/example] @signals: - !sg: $currentChange() + !sg: $currentChange(<index:integer>) This signal is emitted by the default implementation of [classfnc]$currentChangedEvent[/classfnc]().[br] If you reimplement that function you will have to emit the signal manually (if you still need it).[br] + !sg: $tabCloseRequest(<index:integer>) + This signal is emitted by the default implementation of [classfnc]tabCloseRequestEvent[/classfnc]().[br] */ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_tabwidget,"tabwidget","widget") @@ -160,10 +171,13 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_tabwidget,"tabwidget","widget") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tabwidget,count) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tabwidget,removePage) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tabwidget,widgetAt) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tabwidget,setTabPosition) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tabwidget,setTabsClosable) // events KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tabwidget,currentChangedEvent) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_tabwidget,tabCloseRequestEvent) @@ -175,15 +189,28 @@ KVSO_END_CONSTRUCTOR(KviKvsObject_tabwidget) KVSO_BEGIN_DESTRUCTOR(KviKvsObject_tabwidget) - +tabsList.clear();; KVSO_END_CONSTRUCTOR(KviKvsObject_tabwidget) bool KviKvsObject_tabwidget::init(KviKvsRunTimeContext *,KviKvsVariantList *) { SET_OBJECT(QTabWidget) connect(widget(),SIGNAL(currentChanged(int)),this,SLOT(slotCurrentChanged(int))); + connect(widget(),SIGNAL(tabCloseRequested(int)),this,SLOT(slotTabCloseRequest(int))); + + return true; +} +KVSO_CLASS_FUNCTION(tabwidget,setTabsClosable) +{ + CHECK_INTERNAL_POINTER(widget()) + bool bClosable; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("bool_flag",KVS_PT_BOOLEAN,0,bClosable) + KVSO_PARAMETERS_END(c) + ((QTabWidget *)widget())->setTabsClosable(bClosable); return true; } + KVSO_CLASS_FUNCTION(tabwidget,addTab) { CHECK_INTERNAL_POINTER(widget()) @@ -198,11 +225,22 @@ KVSO_CLASS_FUNCTION(tabwidget,addTab) pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); CHECK_HOBJECT_IS_WIDGET(pObject) QPixmap * pix = g_pIconManager->getImage(szIcon); - if(pix){ ((QTabWidget *)widget())->addTab(((QWidget *)(pObject->object())),QIcon(*pix),szLabel); } else((QTabWidget *)widget())->addTab(((QWidget *)(pObject->object())),szLabel); + tabsList.append(hObject); + return true; +} +KVSO_CLASS_FUNCTION(tabwidget,widgetAt) +{ + CHECK_INTERNAL_POINTER(widget()) + kvs_int_t iIndex; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("index",KVS_PT_INTEGER,0,iIndex) + KVSO_PARAMETERS_END(c) + if (iIndex>=tabsList.count()) c->returnValue()->setHObject((kvs_hobject_t)0); + else c->returnValue()->setHObject(tabsList.at(iIndex)); return true; } @@ -211,21 +249,22 @@ KVSO_CLASS_FUNCTION(tabwidget,insertTab) CHECK_INTERNAL_POINTER(widget()) KviKvsObject *pObject; QString szLabel,szIcon; - kvs_uint_t iIndex; + kvs_uint_t uIndex; kvs_hobject_t hObject; KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("tab_widget",KVS_PT_HOBJECT,0,hObject) KVSO_PARAMETER("label",KVS_PT_STRING,0,szLabel) - KVSO_PARAMETER("index",KVS_PT_UNSIGNEDINTEGER,0,iIndex) + KVSO_PARAMETER("index",KVS_PT_UNSIGNEDINTEGER,0,uIndex) KVSO_PARAMETER("icon_id",KVS_PT_STRING,KVS_PF_OPTIONAL,szIcon) KVSO_PARAMETERS_END(c) pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); CHECK_HOBJECT_IS_WIDGET(pObject) QPixmap * pix = g_pIconManager->getImage(szIcon); if(pix){ - ((QTabWidget *)widget())->insertTab(iIndex,(QWidget *)(pObject->object()),QIcon(*pix),szLabel); + ((QTabWidget *)widget())->insertTab(uIndex,(QWidget *)(pObject->object()),QIcon(*pix),szLabel); } - else ((QTabWidget *)widget())->insertTab(iIndex,((QWidget *)(pObject->object())),szLabel); + else ((QTabWidget *)widget())->insertTab(uIndex,((QWidget *)(pObject->object())),szLabel); + tabsList.insert(uIndex,hObject); return true; } @@ -251,13 +290,13 @@ KVSO_CLASS_FUNCTION(tabwidget,setTabToolTip) KVSO_PARAMETERS_END(c) pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); CHECK_HOBJECT_IS_WIDGET(pObject) - int ctrl = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))); - if (ctrl == -1) + int iIdx = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))); + if (iIdx == -1) { c->warning(__tr2qs_ctx("Can't find the tab ","objects")); return true; } - ((QTabWidget *)widget())->setTabToolTip(ctrl,szTooltip); + ((QTabWidget *)widget())->setTabToolTip(iIdx,szTooltip); return true; } KVSO_CLASS_FUNCTION(tabwidget,removeTabToolTip) @@ -270,13 +309,13 @@ KVSO_CLASS_FUNCTION(tabwidget,removeTabToolTip) KVSO_PARAMETERS_END(c) pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); CHECK_HOBJECT_IS_WIDGET(pObject) - int ctrl = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))) ; - if (ctrl==-1) + int iIdx = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))) ; + if (iIdx==-1) { c->warning(__tr2qs_ctx("Can't find the tab ","objects")); return true; } - ((QTabWidget *)widget())->setTabToolTip(ctrl,QString()); + ((QTabWidget *)widget())->setTabToolTip(iIdx,QString()); return true; } @@ -292,13 +331,13 @@ KVSO_CLASS_FUNCTION(tabwidget,setTabLabel) KVSO_PARAMETERS_END(c) pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); CHECK_HOBJECT_IS_WIDGET(pObject) - int ctrl = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))); - if (ctrl == -1) + int iIdx = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))); + if (iIdx == -1) { c->warning(__tr2qs_ctx("Can't find the tab ","objects")); return true; } - ((QTabWidget *)widget())->setTabText(ctrl,szLabel); + ((QTabWidget *)widget())->setTabText(iIdx,szLabel); return true; } KVSO_CLASS_FUNCTION(tabwidget,currentPageIndex) @@ -317,7 +356,7 @@ KVSO_CLASS_FUNCTION(tabwidget,tabLabel) KVSO_PARAMETERS_END(c) QString label=((QTabWidget *)widget())->tabText(uIndex); c->returnValue()->setString(label); - return true; + return true; } @@ -335,7 +374,7 @@ KVSO_CLASS_FUNCTION(tabwidget,currentTabLabel) int i= ((QTabWidget *)widget())->currentIndex(); QString label=((QTabWidget *)widget())->tabText(i); c->returnValue()->setString(label); - return true; + return true; } KVSO_CLASS_FUNCTION(tabwidget,removePage) { @@ -347,13 +386,15 @@ KVSO_CLASS_FUNCTION(tabwidget,removePage) KVSO_PARAMETERS_END(c) pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); CHECK_HOBJECT_IS_WIDGET(pObject) - int ctrl = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))); - if (ctrl == -1) + int iIdx = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))); + if (iIdx == -1) { c->warning(__tr2qs_ctx("Can't find the tab ","objects")); return true; } - ((QTabWidget *)widget())->removeTab(ctrl); + ((QTabWidget *)widget())->removeTab(iIdx); + debug("rimuovo l'indice %d",iIdx); + tabsList.removeAt(iIdx); return true; } @@ -370,15 +411,15 @@ KVSO_CLASS_FUNCTION(tabwidget,changeTab) KVSO_PARAMETERS_END(c) pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); CHECK_HOBJECT_IS_WIDGET(pObject) - int ctrl = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))); - if (ctrl == -1) + int iIdx = ((QTabWidget *)widget())->indexOf (((QWidget *)(pObject->object()))); + if (iIdx == -1) { c->warning(__tr2qs_ctx("Can't find the tab","objects")); return true; } QPixmap * pix = g_pIconManager->getImage(szIcon); - if(pix)((QTabWidget *)widget())->setTabIcon(ctrl,QIcon(*pix)); - ((QTabWidget *)widget())->setTabText(ctrl,szLabel); + if(pix)((QTabWidget *)widget())->setTabIcon(iIdx,QIcon(*pix)); + ((QTabWidget *)widget())->setTabText(iIdx,szLabel); return true; } @@ -410,6 +451,18 @@ void KviKvsObject_tabwidget::slotCurrentChanged(int value) callFunction(this,"currentChangedEvent",¶ms); } +KVSO_CLASS_FUNCTION(tabwidget,tabCloseRequestEvent) +{ + + emitSignal("tabCloseRequested",c,c->params()); + return true; +} + +void KviKvsObject_tabwidget::slotTabCloseRequest(int iIndex) +{ + KviKvsVariantList params(new KviKvsVariant((kvs_int_t)iIndex)); + callFunction(this,"tabCloseRequestEvent",¶ms); +} #ifndef COMPILE_USE_STANDALONE_MOC_SOURCES #include "m_class_tabwidget.moc" #endif //!COMPILE_USE_STANDALONE_MOC_SOURCES diff --git a/src/modules/objects/class_tabwidget.h b/src/modules/objects/class_tabwidget.h index bb160c8cd..ea7d2a2ca 100644 --- a/src/modules/objects/class_tabwidget.h +++ b/src/modules/objects/class_tabwidget.h @@ -37,6 +37,7 @@ public: QWidget * widget() { return (QWidget *)object(); }; protected: virtual bool init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams); + QList<kvs_hobject_t> tabsList; bool addTab(KviKvsObjectFunctionCall *c); bool insertTab(KviKvsObjectFunctionCall *c); @@ -49,12 +50,18 @@ protected: bool currentTabLabel(KviKvsObjectFunctionCall *c); bool count(KviKvsObjectFunctionCall *c); bool changeTab(KviKvsObjectFunctionCall *c); - bool currentChangedEvent(KviKvsObjectFunctionCall *c); bool removePage(KviKvsObjectFunctionCall *c); bool setTabPosition(KviKvsObjectFunctionCall *c); + bool setTabsClosable(KviKvsObjectFunctionCall *c); + bool widgetAt(KviKvsObjectFunctionCall *c); + + // events + bool currentChangedEvent(KviKvsObjectFunctionCall *c); + bool tabCloseRequestEvent(KviKvsObjectFunctionCall *c); protected slots: void slotCurrentChanged(int); + void slotTabCloseRequest(int); }; #endif //!_CLASS_TABWIDGET_H_ |
