javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/slotcallback.cpp
changeset 21 2a9601315dfc
child 35 85266cc22c7f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/slotcallback.cpp	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#include <QPoint>
+#include <QString>
+#include <QUrl>
+#include <QModelIndex>
+#ifdef __SYMBIAN32__
+#include <cntservicescontact.h>
+#endif
+
+#include "QItemSelection"
+#include "QListWidgetItem"
+
+#include "slotcallback.h"
+#include "swt.h"
+#include "jniutils.h"
+#include "swtapplication.h"
+
+using namespace Java::eSWT;
+
+SlotCallback::SlotCallback(JNIEnv* aJniEnv, jobject aPeer, QObject* aParent, const int& aSignalId)
+      : QObject(aParent),
+        mJniEnv(aJniEnv),
+        mPeer(NULL),
+        mJmethod(NULL),
+        mSignalId(aSignalId)
+{
+    SWT_LOG_FUNC_CALL();
+
+    // If Java peer is not Display then jobject ref and methodID are needed.
+    // Otherwise they are managed by JniUtils.
+    if (!swtApp->jniUtils().isDisplay(aPeer))
+    {
+        mPeer = aJniEnv->NewGlobalRef(aPeer);
+        if(!mPeer)
+        {
+            throw std::bad_alloc();
+        }
+        mJmethod = swtApp->jniUtils().FindJavaMethodID(aJniEnv, mPeer, "eventProcess",
+                "(IIIIIIIILjava/lang/String;)Z");
+        if(!mJmethod)
+        {
+            throw std::bad_alloc();
+        }
+    }
+}
+
+SlotCallback::~SlotCallback()
+{
+    SWT_LOG_FUNC_CALL();
+    if (mPeer)
+    {
+        mJniEnv->DeleteGlobalRef(mPeer);
+    }
+}
+
+void SlotCallback::callJava(const int& a1, const int& a2, const int& a3,
+        const int& a4, const int& a5, const jstring aString)
+{
+    JniUtils& jniUtils = swtApp->jniUtils();
+    if (mPeer)
+    {
+        // Call non-Display peer using our own jobject ref and jmethodID
+        jniUtils.eventProcess(mPeer, mJmethod, reinterpret_cast<int>(parent()), mSignalId, a1, a2, a3, a4, a5, aString);
+    }
+    else
+    {
+        // Call Display peer, JniUtils manages the jobject ref and jmethodID
+        jniUtils.eventProcess(parent(), mSignalId, a1, a2, a3, a4, a5, aString);
+    }
+}
+
+void SlotCallback::widgetSignal()
+{
+    SWT_LOG_FUNC_CALL();
+    callJava();
+}
+
+void SlotCallback::widgetSignal(int aInt)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(aInt);
+}
+#ifndef QT_NO_SYSTEMTRAYICON
+void SlotCallback::widgetSignal(QSystemTrayIcon::ActivationReason aReason)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(aReason);
+}
+#endif
+void SlotCallback::widgetSignal(int aInt1, int aInt2)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(aInt1, aInt2);
+}
+
+void SlotCallback::widgetSignal(int aInt1, int aInt2, int aInt3)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(aInt1, aInt2, aInt3);
+}
+
+void SlotCallback::widgetSignal(int aInt1, int aInt2, int aInt3, int aInt4)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(aInt1, aInt2, aInt3, aInt4);
+}
+
+void SlotCallback::widgetSignal(int aInt1, int aInt2, int aInt3, int aInt4,
+        int aInt5)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(aInt1, aInt2, aInt3, aInt4, aInt5);
+}
+
+void SlotCallback::widgetSignal(bool aBoolean)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(aBoolean ? 1 : 0);
+}
+
+void SlotCallback::widgetSignal(const QPoint& aPoint)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(aPoint.x(), aPoint.y());
+}
+
+void SlotCallback::widgetSignal(const QString& aString)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(0, 0, 0, 0, 0, swtApp->jniUtils().QStringToJavaString(mJniEnv, aString));
+}
+
+void SlotCallback::widgetSignal(const QUrl& aUrl)
+{
+    widgetSignal(aUrl.toString());
+}
+
+void SlotCallback::widgetSignal(const QDateTime& /*aDateTime*/)
+{
+    // QDateTime parameter is not needed, just ignore it
+    widgetSignal();
+}
+
+void SlotCallback::widgetSignal(const QItemSelection& aSelected,
+        const QItemSelection& aDeSelected)
+{
+    SWT_LOG_FUNC_CALL();
+    const jint selectionHandle = reinterpret_cast<jint> (&aSelected);
+    const jint deSelectionHandle = reinterpret_cast<jint> (&aDeSelected);
+    callJava(selectionHandle, deSelectionHandle);
+}
+
+void SlotCallback::widgetSignal(QListWidgetItem* aSelected)
+{
+    SWT_LOG_FUNC_CALL();
+    jint selectionHandle = reinterpret_cast<jint> (aSelected);
+    callJava(selectionHandle);
+}
+
+void SlotCallback::widgetSignal(QTreeWidgetItem* aSelected, int aColumn)
+{
+    SWT_LOG_FUNC_CALL();
+    jint selectionHandle = reinterpret_cast<jint> (aSelected);
+    callJava(selectionHandle, aColumn);
+}
+
+void SlotCallback::widgetSignal(QTreeWidgetItem* aSelected)
+{
+    SWT_LOG_FUNC_CALL();
+    jint selectionHandle = reinterpret_cast<jint> (aSelected);
+    callJava(selectionHandle);
+}
+
+void SlotCallback::widgetSignal( const QModelIndex& index )
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(index.row(), index.column());
+}
+
+void SlotCallback::widgetSignal( QWidget* aWidget1, QWidget* aWidget2 )
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(reinterpret_cast<jint>(aWidget1), reinterpret_cast<jint>(aWidget2));
+}
+
+void SlotCallback::widgetSignal(const QVariant& value)
+{
+    SWT_LOG_FUNC_CALL();
+    callJava(reinterpret_cast<jint>(&value));
+}
+
+#ifdef __SYMBIAN32__
+Q_IMPLEMENT_USER_METATYPE(CntServicesContact)
+Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)
+#endif
+