aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/modules/objects/class_listbox.cpp49
-rw-r--r--src/modules/objects/class_listbox.h4
-rw-r--r--src/modules/objects/class_widget.cpp62
-rw-r--r--src/modules/objects/class_widget.h24
4 files changed, 129 insertions, 10 deletions
diff --git a/src/modules/objects/class_listbox.cpp b/src/modules/objects/class_listbox.cpp
index 077114e9e..cbfe3bc83 100644
--- a/src/modules/objects/class_listbox.cpp
+++ b/src/modules/objects/class_listbox.cpp
@@ -2,7 +2,7 @@
// File : class_listbox.cpp
// Creation date : Sat Oct 2 03:40:28 CET 2004 by Szymon Stefanek
//
-// This file is part of the KVirc irc client distribution
+// This file is part of the KVirc irc client distribution
// Copyright (C) 2004 Szymon Stefanek (pragma at kvirc dot net)
//
// This program is FREE software. You can redistribute it and/or
@@ -113,6 +113,8 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_listbox,"listbox","widget")
KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"currentText", functioncurrentText)
KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"currentItem", functioncurrentItem)
KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"textAt", functiontextAt);
+ KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"itemAt", functionitemAt);
+ KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"itemRect", functionitemRect);
KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"setCurrentItem", functionsetCurrentItem);
@@ -121,6 +123,7 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_listbox,"listbox","widget")
KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"setSelected",functionsetSelected);
KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"isSelected",functionisSelected);
KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"currentItemChangeEvent",functioncurrentItemChangeEvent);
+ KVSO_REGISTER_HANDLER(KviKvsObject_listbox,"currentnItemEvent",functiononItemEvent);
KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_listbox,"selectionChangeEvent")
@@ -142,6 +145,9 @@ bool KviKvsObject_listbox::init(KviKvsRunTimeContext * pContext,KviKvsVariantLis
b->setSelectionMode(QListBox::Single);
connect(b,SIGNAL(selectionChanged()),this,SLOT(selectionChanged()));
connect(b,SIGNAL(currentChanged(QListBoxItem *)),this,SLOT(currentItemChanged(QListBoxItem *)));
+
+ connect(b,SIGNAL(onItem(QListBoxItem *)),this,SLOT(onItem(QListBoxItem *)));
+
setObject(b,true);;
return true;
}
@@ -302,6 +308,17 @@ bool KviKvsObject_listbox::functionsetSelected(KviKvsObjectFunctionCall *c)
if(widget()) ((QListBox *)widget())->setSelected(uIndex,bSel);
return true;
}
+bool KviKvsObject_listbox::functionitemAt(KviKvsObjectFunctionCall *c)
+{
+ kvs_uint_t uX,uY;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("uX",KVS_PT_UNSIGNEDINTEGER,0,uX)
+ KVSO_PARAMETER("uY",KVS_PT_UNSIGNEDINTEGER,0,uY)
+ KVSO_PARAMETERS_END(c)
+ if(widget())
+ c->returnValue()->setInteger(((QListBox *)widget())->index(((QListBox *)widget())->itemAt(QPoint(uX,uY))));
+ return true;
+}
bool KviKvsObject_listbox::functioncurrentItemChangeEvent(KviKvsObjectFunctionCall *c)
{
@@ -326,8 +343,38 @@ void KviKvsObject_listbox::currentItemChanged(QListBoxItem *item)
}
}
+bool KviKvsObject_listbox::functiononItemEvent(KviKvsObjectFunctionCall *c)
+{
+ emitSignal("onItem",c,c->params());
+ return true;
+}
+void KviKvsObject_listbox::onItem(QListBoxItem *item)
+{
+ KviKvsVariantList params(new KviKvsVariant(item->text()));
+ callFunction(this,"onItemEvent",0,&params);
+}
+
+
+bool KviKvsObject_listbox::functionitemRect(KviKvsObjectFunctionCall *c)
+{
+kvs_uint_t uIndex;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("uIndex",KVS_PT_UNSIGNEDINTEGER,0,uIndex)
+ KVSO_PARAMETERS_END(c)
+ if(widget())
+ {
+ QRect rect=((QListBox *)widget())->itemRect(((QListBox *)widget())->item(uIndex));
+ KviKvsArray * a = new KviKvsArray();
+ a->set(0,new KviKvsVariant((kvs_int_t)rect.left()));
+ a->set(1,new KviKvsVariant((kvs_int_t)rect.top()));
+ a->set(2,new KviKvsVariant((kvs_int_t)rect.bottom()));
+ a->set(3,new KviKvsVariant((kvs_int_t)rect.right()));
+ c->returnValue()->setArray(a);
+ }
+ return true;
+}
diff --git a/src/modules/objects/class_listbox.h b/src/modules/objects/class_listbox.h
index 39c401b6d..30991927d 100644
--- a/src/modules/objects/class_listbox.h
+++ b/src/modules/objects/class_listbox.h
@@ -56,9 +56,13 @@ protected:
bool functionsetSelected(KviKvsObjectFunctionCall *c);
bool functionisSelected(KviKvsObjectFunctionCall *c);
bool functioncurrentItemChangeEvent(KviKvsObjectFunctionCall *c);
+ bool functiononItemEvent(KviKvsObjectFunctionCall *c);
+ bool functionitemAt(KviKvsObjectFunctionCall *c);
+ bool functionitemRect(KviKvsObjectFunctionCall *c);
protected slots:
void selectionChanged();
void currentItemChanged(QListBoxItem *);
+ void onItem(QListBoxItem *);
};
diff --git a/src/modules/objects/class_widget.cpp b/src/modules/objects/class_widget.cpp
index 869fd0fc6..488d5f650 100644
--- a/src/modules/objects/class_widget.cpp
+++ b/src/modules/objects/class_widget.cpp
@@ -75,7 +75,6 @@ const int widgettypes_cod[] = {
#define widgettypes_num (sizeof(widgettypes_tbl) / sizeof(widgettypes_tbl[0]))
-
/*
@doc: widget
@keyterms:
@@ -452,6 +451,22 @@ const int widgettypes_cod[] = {
[/example]
*/
+KviKvsTip::KviKvsTip(KviKvsObject_widget * pParent,QWidget *pWidget)
+: QToolTip(pWidget,0)
+{
+ m_pParent=pParent;
+}
+KviKvsTip::~KviKvsTip()
+{
+}
+
+void KviKvsTip::maybeTip(const QPoint &pnt)
+{
+ KviKvsVariant *x=new KviKvsVariant((kvs_int_t)pnt.x());
+ KviKvsVariant *y=new KviKvsVariant((kvs_int_t)pnt.y());
+ KviKvsVariantList params(x,y);
+ m_pParent->callFunction(m_pParent,"maybeTipEvent",0,&params);
+}
@@ -547,6 +562,9 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_widget,"widget","object")
KVSO_REGISTER_HANDLER(KviKvsObject_widget,"setBackgroundImage",function_setBackgroundImage)
KVSO_REGISTER_HANDLER(KviKvsObject_widget,"backgroundColor",function_backgroundColor)
KVSO_REGISTER_HANDLER(KviKvsObject_widget,"foregroundColor",function_foregroundColor)
+ KVSO_REGISTER_HANDLER(KviKvsObject_widget,"enableDynamicToolTip",function_enableDynamicToolTip)
+ KVSO_REGISTER_HANDLER(KviKvsObject_widget,"disableDynamicToolTip",function_disableDynamicToolTip)
+ KVSO_REGISTER_HANDLER(KviKvsObject_widget,"setDynamicToolTip",function_setDynamicToolTip)
// events
KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"mousePressEvent")
@@ -564,18 +582,23 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_widget,"widget","object")
KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"moveEvent")
KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"paintEvent")
KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"keyPressEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KviKvsObject_widget,"maybeTipEvent")
KVSO_END_REGISTERCLASS(KviKvsObject_widget)
KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_widget,KviKvsObject)
-
+ m_pTip=0;
KVSO_END_CONSTRUCTOR(KviKvsObject_widget)
-
KVSO_BEGIN_DESTRUCTOR(KviKvsObject_widget)
emit aboutToDie();
+ if (m_pTip)
+ {
+ delete m_pTip;
+ m_pTip=0;
+ }
KVSO_END_CONSTRUCTOR(KviKvsObject_widget)
@@ -1593,4 +1616,37 @@ bool KviKvsObject_widget::function_globalCursorY(KviKvsObjectFunctionCall *c)
if(widget())c->returnValue()->setInteger(QCursor::pos().y());
return true;
}
+bool KviKvsObject_widget::function_enableDynamicToolTip(KviKvsObjectFunctionCall *c)
+{
+ if (!m_pTip) m_pTip=new KviKvsTip(this,widget());
+ return true;
+}
+bool KviKvsObject_widget::function_disableDynamicToolTip(KviKvsObjectFunctionCall *c)
+{
+ if (m_pTip)
+ {
+ delete m_pTip;
+ m_pTip=0;
+ }
+ return true;
+}
+
+bool KviKvsObject_widget::function_setDynamicToolTip(KviKvsObjectFunctionCall *c)
+{
+ if (!m_pTip)m_pTip=new KviKvsTip(this,widget());
+
+ QString szTip;
+ kvs_int_t uXstart,uYstart,uXend,uYend;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("tip_text",KVS_PT_STRING,0,szTip)
+ KVSO_PARAMETER("left",KVS_PT_INT,0,uXstart)
+ KVSO_PARAMETER("top",KVS_PT_INT,0,uYstart)
+ KVSO_PARAMETER("right",KVS_PT_INT,0,uXend)
+ KVSO_PARAMETER("bottom",KVS_PT_INT,0,uYend)
+ KVSO_PARAMETERS_END(c)
+ if(!widget())return true;
+ m_pTip->doTip(QRect(QPoint(uXstart,uYstart),QPoint(uXend,uYend)),szTip);
+ return true;
+}
+
#include "m_class_widget.moc"
diff --git a/src/modules/objects/class_widget.h b/src/modules/objects/class_widget.h
index 8f5453c10..38f7a5414 100644
--- a/src/modules/objects/class_widget.h
+++ b/src/modules/objects/class_widget.h
@@ -23,13 +23,10 @@
//
#include "kvi_string.h"
-
-
-
-
-
+#include "qtooltip.h"
#include "object_macros.h"
+class KviKvsTip;
class KviKvsObject_widget : public KviKvsObject
{
Q_OBJECT
@@ -51,7 +48,7 @@ protected:
// so the name of the C++ function matches exactly the name of the KVS function at this point
// let's also try to keep alphabetic order for the functions here.. so one can find them quickly
-
+ KviKvsTip *m_pTip;
bool function_addWidgetToWrappedLayout(KviKvsObjectFunctionCall *c);
bool function_backgroundColor(KviKvsObjectFunctionCall *c);
bool function_caption(KviKvsObjectFunctionCall *c);
@@ -102,9 +99,24 @@ protected:
bool function_width(KviKvsObjectFunctionCall *);
bool function_x(KviKvsObjectFunctionCall *);
bool function_y(KviKvsObjectFunctionCall *);
+ bool function_enableDynamicToolTip(KviKvsObjectFunctionCall *c);
+ bool function_disableDynamicToolTip(KviKvsObjectFunctionCall *c);
+ bool function_setDynamicToolTip(KviKvsObjectFunctionCall *c);
+
signals:
void aboutToDie();
};
+class KviKvsTip : public QToolTip
+{
+public:
+ KviKvsTip(KviKvsObject_widget * pParent,QWidget *pWidget);
+ ~KviKvsTip();
+public:
+ void maybeTip(const QPoint &pnt);
+ void doTip(const QRect &rct,const QString &str){ tip(rct,str); };
+protected:
+ KviKvsObject_widget * m_pParent;
+};
#endif // !_CLASS_WIDGET_H_