summaryrefslogtreecommitdiffstats
path: root/ksirc/puke/pobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ksirc/puke/pobject.cpp')
-rw-r--r--ksirc/puke/pobject.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/ksirc/puke/pobject.cpp b/ksirc/puke/pobject.cpp
new file mode 100644
index 00000000..f2481a04
--- /dev/null
+++ b/ksirc/puke/pobject.cpp
@@ -0,0 +1,138 @@
+#include "pobject.h"
+#include "commands.h"
+
+
+PObject::PObject(QObject *pobject, const char *name)
+ : QObject(pobject, name)
+{
+ // Connect slots as needed
+ obj = 0;
+ setWidget(0);
+ manualTerm = FALSE;
+ deleteAble = TRUE;
+ m_hasError = false;
+}
+
+PObject::~PObject()
+{
+ if(isDeleteAble())
+ delete widget();
+ obj = 0;
+ setWidget(0);
+}
+
+PObject *PObject::createWidget(CreateArgs &ca)
+{
+ PObject *pw = new PObject(ca.parent);
+ QObject *o;
+ if(ca.parent != 0)
+ o = new QObject(ca.parent->widget());
+ else
+ o = new QObject();
+ pw->setWidget(o);
+ pw->setWidgetId(ca.pwI);
+ pw->setPukeController(ca.pc);
+ return pw;
+}
+
+void PObject::messageHandler(int fd, PukeMessage *pm)
+{
+ PukeMessage pmRet;
+ if(pm->iCommand == PUKE_WIDGET_DELETE){
+ /**
+ * Emit the ack before the delete since we don't exist afterwards.
+ */
+ pmRet.iCommand = PUKE_WIDGET_DELETE_ACK;
+ pmRet.iWinId = pm->iWinId;
+ pmRet.iArg = 0;
+ pmRet.cArg = 0;
+ emit outputMessage(fd, &pmRet);
+
+ manTerm();
+ delete this;
+ }
+ if(pm->iCommand == PUKE_RELEASEWIDGET){
+ /**
+ * Emit the ack before the delete since we don't exist afterwards.
+ */
+ pmRet.iCommand = PUKE_RELEASEWIDGET_ACK;
+ pmRet.iWinId = pm->iWinId;
+ pmRet.iArg = 0;
+ pmRet.cArg = 0;
+ emit outputMessage(fd, &pmRet);
+
+ /**
+ * By setting the widget to 0 we loose the pointer and then don't delete it
+ */
+ setWidget(0);
+ manTerm();
+ delete this;
+ }
+ else {
+ qWarning("PObject: Unkown Command: %d", pm->iCommand);
+ pmRet.iCommand = PUKE_INVALID;
+ pmRet.iWinId = pm->iWinId;
+ pmRet.iArg = 0;
+ pmRet.cArg = 0;
+ emit outputMessage(fd, &pmRet);
+ }
+}
+
+void PObject::setWidget(QObject *_o)
+{
+ // Disconnect everything from the object we where listning too
+ // Just in case it fires something off, we don't want to get it
+ if(widget() != 0){
+ disconnect(widget(), SIGNAL(destroyed()),
+ this, SLOT(swidgetDestroyed()));
+ }
+
+ obj = _o;
+ if(obj != 0){
+ connect(widget(), SIGNAL(destroyed()),
+ this, SLOT(swidgetDestroyed()));
+ }
+}
+
+QObject *PObject::widget()
+{
+ // kdDebug(5008) << "PObject widget called" << endl;
+ return obj;
+}
+
+void PObject::setWidgetId(widgetId *pwI)
+{
+ wI = *pwI;
+ // kdDebug(5008) << "PObject: set widget id " << wI.iWinId << endl;
+}
+
+widgetId PObject::widgetIden()
+{
+ // kdDebug(5008) << "PObject: called widget id " << wI.iWinId << endl;
+ return wI;
+}
+
+void PObject::swidgetDestroyed(){
+ setWidget(0x0);
+ if(manualTerm == FALSE){
+ manTerm();
+ delete this;
+ }
+}
+
+PukeController *PObject::controller() {
+
+ return pController;
+}
+
+void PObject::manTerm() {
+ manualTerm = TRUE;
+}
+
+void PObject::errorInvalidSet(QObject *_w)
+{
+ m_error = QString("Tried setting a %1 to %2").arg(_w->className()).arg(className());
+ m_hasError = true;
+}
+#include "pobject.moc"
+