diff -r e8e63152f320 -r 2a9601315dfc javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/slotcallback.cpp --- /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 +#include +#include +#include +#ifdef __SYMBIAN32__ +#include +#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(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 (&aSelected); + const jint deSelectionHandle = reinterpret_cast (&aDeSelected); + callJava(selectionHandle, deSelectionHandle); +} + +void SlotCallback::widgetSignal(QListWidgetItem* aSelected) +{ + SWT_LOG_FUNC_CALL(); + jint selectionHandle = reinterpret_cast (aSelected); + callJava(selectionHandle); +} + +void SlotCallback::widgetSignal(QTreeWidgetItem* aSelected, int aColumn) +{ + SWT_LOG_FUNC_CALL(); + jint selectionHandle = reinterpret_cast (aSelected); + callJava(selectionHandle, aColumn); +} + +void SlotCallback::widgetSignal(QTreeWidgetItem* aSelected) +{ + SWT_LOG_FUNC_CALL(); + jint selectionHandle = reinterpret_cast (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(aWidget1), reinterpret_cast(aWidget2)); +} + +void SlotCallback::widgetSignal(const QVariant& value) +{ + SWT_LOG_FUNC_CALL(); + callJava(reinterpret_cast(&value)); +} + +#ifdef __SYMBIAN32__ +Q_IMPLEMENT_USER_METATYPE(CntServicesContact) +Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList) +#endif +