[Kde-java] QAccel problem

Richard Dale kde-java@kde.org
Sat, 9 Feb 2002 12:48:55 +0000


--------------Boundary-00=_JLN9WLV1IGYGA01EXVV6
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

On Saturday 09 February 2002 12:50 am, Emond Papegaaij wrote:
> Hi,
>
> I'm currently trying out qtjava for qt2, we (our project group) will be
> using it, if it turns out ok. To gain some experience, I decided to convert
> all 14 tutorials. I can send you the code, if you want it. 
Yes please - that's really useful. I'll put the in the cvs in the examples 
section of kdebindings.

> During the
> conversion, I noticed a few problems with qtjava:
>
> 1: The constructors with the default arguments are missing. This is not a
> big problem, you can find the default arguments in the qt-source, but it is
> a problem in our project group. Not everyone understands c++. But it's also
> annoying to have to write
>    quit.setFont(new QFont("Times", 18, QFont.Bold, false));
> in stead of
>    quit.setFont(new QFont("Times", 18, QFont.Bold));
>
> or
>    QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null);
> in stead of
>    QGridLayout grid = new QGridLayout(this, 2, 2, 10);
It generates just two methods for each constructor with defaults - one with 
the least args, and one with the most. I thought if I generated an extra 
method for each default arg, there would be too many methods, and the api 
would look cluttered. But that was probably wrong, and it would be better to 
generate the lot after all.. Meanwhile, it's easy to add missing ones like 
those above by hand.

> 2: This problem is somewhat more complex than the first one. Somehow I
> can't connect a QAccel key to a slot in my custom class:
> QObject::connect: No such slot QWidget::fire()
> QObject::connect:  (sender name:   'unnamed')
> QObject::connect:  (receiver name: 'gameboard')
> This shows up in the last example. However, I can connect a key to a
> default slot, like quit() in qApp().
> The problem seems to be solved in the qtjava bindings for qt3. What causes
> this problem, and is it possible to backport the fix to qtjava for qt2?
It wasn't connecting/disconnecting the java slot correctly in 
QAccel.connectItem() and disconnectItem(). Please find a fixed Qt 2 version 
attached.

> 3: I tried to convert the canvas example, but this example uses
> QCanvasItemLists everywhere. This class is declared in qcanvas.h:
>    class QCanvasItemList : public QValueList<QCanvasItem*>
> QCanvasItemList is not declared as a java class, what would the java
> equivalent for this class be? Or is is impossible to convert such a
> construction to java? QCanvasItemList is commented out throughout the
> qtjava java code.
It sounds as though that really should be added - either as a 
java.util.ArrayList, or to 'QCanvasItemList'. I'll have a look at that, and 
make sure it gets converted next time I regenerate the bindings.

-- Richard
--------------Boundary-00=_JLN9WLV1IGYGA01EXVV6
Content-Type: text/x-c++src;
  charset="iso-8859-1";
  name="QAccel.cpp"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="QAccel.cpp"

/***************************************************************************
                            QAccel.cpp -  description
                             -------------------
    begin                : Sun Aug 26 09:45:02 2001
    copyright            : (C) 2000-2001 Lost Highway Ltd. All rights reserved.
    email                : Lost_Highway@tipitina.demon.co.uk
    generated by         : duke@tipitina on Sun Aug 26 09:45:02 2001, using kdoc parser/custom Java conversion backend.
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
***************************************************************************/

#define _BOOL_H_
#include <qaccel.h>
#include <qstring.h>
#include <qcstring.h>

#include <qtjava/QtSupport.h>
#include <qtjava/QAccel.h>

class QAccelJBridge : public QAccel
{
public:
	QAccelJBridge(QWidget* parent, const char* name) : QAccel(parent, name) {}
	QAccelJBridge(QWidget* watch, QObject* parent, const char* name) : QAccel(watch, parent, name) {}
	~QAccelJBridge() {QtSupport::qtKeyDeleted(this);}
	bool  protected_eventFilter(QObject* arg1, QEvent* arg2) {
		return (bool ) QAccel::eventFilter(arg1, arg2);
	}
	void childEvent(QChildEvent* arg1) {
		if (! QtSupport::eventDelegate(this, "childEvent", arg1, "org.kde.qt.QChildEvent")) {
			QObject::childEvent(arg1);
		}
		return;
	}
	void timerEvent(QTimerEvent* arg1) {
		if (! QtSupport::eventDelegate(this, "timerEvent", arg1, "org.kde.qt.QTimerEvent")) {
			QObject::timerEvent(arg1);
		}
		return;
	}
};


JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_newQAccel__Lorg_kde_qt_QWidget_2Ljava_lang_String_2(JNIEnv *env, jobject obj, jobject parent, jstring name)
{
static QCString * _qstring_name = 0;
	if (QtSupport::getQt(env, obj) == 0) {
		QtSupport::setQt(env, obj, new QAccelJBridge((QWidget*) QtSupport::getQt(env, parent), (char*) QtSupport::toCharString(env, name, &_qstring_name)));
		QtSupport::setObjectForQtKey(env, obj, QtSupport::getQt(env, obj));
	}
	return;
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_newQAccel__Lorg_kde_qt_QWidget_2(JNIEnv *env, jobject obj, jobject parent)
{
	if (QtSupport::getQt(env, obj) == 0) {
		QtSupport::setQt(env, obj, new QAccelJBridge((QWidget*) QtSupport::getQt(env, parent), 0));
		QtSupport::setObjectForQtKey(env, obj, QtSupport::getQt(env, obj));
	}
	return;
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_newQAccel__Lorg_kde_qt_QWidget_2Lorg_kde_qt_QObject_2Ljava_lang_String_2(JNIEnv *env, jobject obj, jobject watch, jobject parent, jstring name)
{
static QCString * _qstring_name = 0;
	if (QtSupport::getQt(env, obj) == 0) {
		QtSupport::setQt(env, obj, new QAccelJBridge((QWidget*) QtSupport::getQt(env, watch), (QObject*) QtSupport::getQt(env, parent), (char*) QtSupport::toCharString(env, name, &_qstring_name)));
		QtSupport::setObjectForQtKey(env, obj, QtSupport::getQt(env, obj));
	}
	return;
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_newQAccel__Lorg_kde_qt_QWidget_2Lorg_kde_qt_QObject_2(JNIEnv *env, jobject obj, jobject watch, jobject parent)
{
	if (QtSupport::getQt(env, obj) == 0) {
		QtSupport::setQt(env, obj, new QAccelJBridge((QWidget*) QtSupport::getQt(env, watch), (QObject*) QtSupport::getQt(env, parent), 0));
		QtSupport::setObjectForQtKey(env, obj, QtSupport::getQt(env, obj));
	}
	return;
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_finalize(JNIEnv *env, jobject obj)
{
	if (QtSupport::allocatedInJavaWorld(env, obj) && ((QAccel*)QtSupport::getQt(env, obj))->parent() == (QObject *) 0) {
		delete (QAccel*)QtSupport::getQt(env, obj);
		QtSupport::setQt(env, obj, 0);
	}
	return;
}

JNIEXPORT jboolean JNICALL
Java_org_kde_qt_QAccel_isEnabled(JNIEnv *env, jobject obj)
{
	return (jboolean) ((QAccelJBridge*) QtSupport::getQt(env, obj))->isEnabled();
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_setEnabled(JNIEnv *env, jobject obj, jboolean arg1)
{
	((QAccelJBridge*) QtSupport::getQt(env, obj))->setEnabled((bool) arg1);
	return;
}

JNIEXPORT jint JNICALL
Java_org_kde_qt_QAccel_count(JNIEnv *env, jobject obj)
{
	return (jint) ((QAccelJBridge*) QtSupport::getQt(env, obj))->count();
}

JNIEXPORT jint JNICALL
Java_org_kde_qt_QAccel_insertItem__II(JNIEnv *env, jobject obj, jint key, jint identifier)
{
	return (jint) ((QAccelJBridge*) QtSupport::getQt(env, obj))->insertItem((int) key, (int) identifier);
}

JNIEXPORT jint JNICALL
Java_org_kde_qt_QAccel_insertItem__I(JNIEnv *env, jobject obj, jint key)
{
	return (jint) ((QAccelJBridge*) QtSupport::getQt(env, obj))->insertItem((int) key, -1);
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_removeItem(JNIEnv *env, jobject obj, jint identifier)
{
	((QAccelJBridge*) QtSupport::getQt(env, obj))->removeItem((int) identifier);
	return;
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_clear(JNIEnv *env, jobject obj)
{
	((QAccelJBridge*) QtSupport::getQt(env, obj))->clear();
	return;
}

JNIEXPORT jint JNICALL
Java_org_kde_qt_QAccel_key(JNIEnv *env, jobject obj, jint identifier)
{
	return (jint) ((QAccelJBridge*) QtSupport::getQt(env, obj))->key((int) identifier);
}

JNIEXPORT jint JNICALL
Java_org_kde_qt_QAccel_findKey(JNIEnv *env, jobject obj, jint key)
{
	return (jint) ((QAccelJBridge*) QtSupport::getQt(env, obj))->findKey((int) key);
}

JNIEXPORT jboolean JNICALL
Java_org_kde_qt_QAccel_isItemEnabled(JNIEnv *env, jobject obj, jint identifier)
{
	return (jboolean) ((QAccelJBridge*) QtSupport::getQt(env, obj))->isItemEnabled((int) identifier);
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_setItemEnabled(JNIEnv *env, jobject obj, jint identifier, jboolean enable)
{
	((QAccelJBridge*) QtSupport::getQt(env, obj))->setItemEnabled((int) identifier, (bool) enable);
	return;
}

JNIEXPORT jboolean JNICALL
Java_org_kde_qt_QAccel_connectItem(JNIEnv *env, jobject obj, jint identifier, jobject receiver, jstring member)
{
static QCString * _qstring_member = 0;
	return (jboolean) ((QAccelJBridge*) QtSupport::getQt(env, obj))->connectItem((int) identifier, (QObject*) QtSupport::slotForReceiver(env, receiver, member), "1invoke()");
}

JNIEXPORT jboolean JNICALL
Java_org_kde_qt_QAccel_disconnectItem(JNIEnv *env, jobject obj, jint identifier, jobject receiver, jstring member)
{
static QCString * _qstring_member = 0;
	return (jboolean) ((QAccelJBridge*) QtSupport::getQt(env, obj))->disconnectItem((int) identifier, (QObject*) QtSupport::slotForReceiver(env, receiver, member), "1invoke()");
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_repairEventFilter(JNIEnv *env, jobject obj)
{
	((QAccelJBridge*) QtSupport::getQt(env, obj))->repairEventFilter();
	return;
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_setWhatsThis(JNIEnv *env, jobject obj, jint identifier, jstring arg1)
{
static QString * _qstring_arg1 = 0;
	((QAccelJBridge*) QtSupport::getQt(env, obj))->setWhatsThis((int) identifier, (QString&) * (QString *) QtSupport::toQString(env, arg1, &_qstring_arg1));
	return;
}

JNIEXPORT jstring JNICALL
Java_org_kde_qt_QAccel_whatsThis(JNIEnv *env, jobject obj, jint identifier)
{
	QString  _qstring;
	_qstring = ((QAccelJBridge*) QtSupport::getQt(env, obj))->whatsThis((int) identifier);
	return QtSupport::fromQString(env, &_qstring);
}

JNIEXPORT void JNICALL
Java_org_kde_qt_QAccel_setIgnoreWhatsThis(JNIEnv *env, jobject obj, jboolean arg1)
{
	((QAccelJBridge*) QtSupport::getQt(env, obj))->setIgnoreWhatsThis((bool) arg1);
	return;
}

JNIEXPORT jboolean JNICALL
Java_org_kde_qt_QAccel_ignoreWhatsThis(JNIEnv *env, jobject obj)
{
	return (jboolean) ((QAccelJBridge*) QtSupport::getQt(env, obj))->ignoreWhatsThis();
}

JNIEXPORT jint JNICALL
Java_org_kde_qt_QAccel_shortcutKey(JNIEnv *env, jclass obj, jstring arg1)
{
static QString * _qstring_arg1 = 0;
	return (jint) QAccelJBridge::shortcutKey((QString&) * (QString *) QtSupport::toQString(env, arg1, &_qstring_arg1));
}

JNIEXPORT jstring JNICALL
Java_org_kde_qt_QAccel_keyToString(JNIEnv *env, jclass obj, jint k)
{
	QString  _qstring;
	_qstring = QAccelJBridge::keyToString((int) k);
	return QtSupport::fromQString(env, &_qstring);
}

JNIEXPORT jint JNICALL
Java_org_kde_qt_QAccel_stringToKey(JNIEnv *env, jclass obj, jstring arg1)
{
static QString * _qstring_arg1 = 0;
	return (jint) QAccelJBridge::stringToKey((QString&) * (QString *) QtSupport::toQString(env, arg1, &_qstring_arg1));
}

JNIEXPORT jboolean JNICALL
Java_org_kde_qt_QAccel_eventFilter(JNIEnv *env, jobject obj, jobject arg1, jobject arg2)
{
	return (jboolean) ((QAccelJBridge*) QtSupport::getQt(env, obj))->protected_eventFilter((QObject*) QtSupport::getQt(env, arg1), (QEvent*) QtSupport::getQt(env, arg2));
}


--------------Boundary-00=_JLN9WLV1IGYGA01EXVV6--