aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/objects')
-rw-r--r--src/modules/objects/class_listwidget.cpp103
-rw-r--r--src/modules/objects/class_listwidget.h3
-rw-r--r--src/modules/objects/class_tablewidget.cpp6
-rw-r--r--src/modules/objects/class_tabwidget.cpp105
-rw-r--r--src/modules/objects/class_tabwidget.h9
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",&params);
}
+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",&params);
+}
#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_