changeset 149:7bc921c7100a

QDesktopServices.setUrlHandler - temporary solution
author eldar
date Sat, 13 Jun 2009 16:37:42 +0000
parents ae34188ddd84
children a8d76a9a85aa
files build/core.makefile build/gui.makefile cpp/qt_gui/UrlHandler_shell.cpp cpp/qt_gui/UrlHandler_shell.h generator/typesystem_gui-java.java generator/typesystem_gui.xml qt/gui/UrlHandler.d
diffstat 7 files changed, 167 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/build/core.makefile	Sat Jun 13 14:05:32 2009 +0000
+++ b/build/core.makefile	Sat Jun 13 16:37:42 2009 +0000
@@ -74,4 +74,4 @@
     QProcess \
     QBuffer \
     QMetaType \
-    QLibraryInfo
\ No newline at end of file
+    QLibraryInfo 
\ No newline at end of file
--- a/build/gui.makefile	Sat Jun 13 14:05:32 2009 +0000
+++ b/build/gui.makefile	Sat Jun 13 16:37:42 2009 +0000
@@ -362,4 +362,5 @@
 QShortcut \
 QSizeGrip \
 QSortFilterProxyModel \
-QSound
\ No newline at end of file
+QSound \
+UrlHandler
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cpp/qt_gui/UrlHandler_shell.cpp	Sat Jun 13 16:37:42 2009 +0000
@@ -0,0 +1,98 @@
+#include "UrlHandler_shell.h"
+
+#include "qtd_core.h"
+
+UrlHandler::UrlHandler(void *d_ptr, QObject*  parent0)
+    : QObject(parent0),
+      Qtd_QObjectEntity(d_ptr)
+{
+}
+
+extern "C" void qtd_UrlHandler_handleUrl_QUrl_dispatch(void *d_entity, void* name1);
+void UrlHandler::handleUrl(const QUrl &url)
+{
+    qtd_UrlHandler_handleUrl_QUrl_dispatch(this->d_entity(), &(QUrl& )url);
+}
+
+extern "C" DLL_PUBLIC void qtd_UrlHandler_destructor(void *ptr)
+{
+    delete (UrlHandler *)ptr;
+}
+
+extern "C" DLL_PUBLIC void* qtd_UrlHandler_UrlHandler_QObject
+(void *d_ptr,
+ void* parent0)
+{
+    QObject*  __qt_parent0 = (QObject* ) parent0;
+    UrlHandler *__qt_this = new UrlHandler(d_ptr, (QObject* )__qt_parent0);
+    return (void *) __qt_this;
+}
+
+
+/* ---------------------------------------- */
+
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'urlhandler.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 61
+#error "This file was generated using the moc from 4.5.0. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_UrlHandler[] = {
+
+ // content:
+       2,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   12, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+
+ // slots: signature, parameters, type, tag, flags
+      16,   12,   11,   11, 0x0a,
+
+       0        // eod
+};
+
+static const char qt_meta_stringdata_UrlHandler[] = {
+    "UrlHandler\0\0url\0handleUrl(QUrl)\0"
+};
+
+const QMetaObject UrlHandler::staticMetaObject = {
+    { &QObject::staticMetaObject, qt_meta_stringdata_UrlHandler,
+      qt_meta_data_UrlHandler, 0 }
+};
+
+const QMetaObject *UrlHandler::metaObject() const
+{
+    return &staticMetaObject;
+}
+
+void *UrlHandler::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_UrlHandler))
+        return static_cast<void*>(const_cast< UrlHandler*>(this));
+    if (!strcmp(_clname, "Qtd_QObjectEntity"))
+        return static_cast< Qtd_QObjectEntity*>(const_cast< UrlHandler*>(this));
+    return QObject::qt_metacast(_clname);
+}
+
+int UrlHandler::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        switch (_id) {
+        case 0: handleUrl((*reinterpret_cast< const QUrl(*)>(_a[1]))); break;
+        default: ;
+        }
+        _id -= 1;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cpp/qt_gui/UrlHandler_shell.h	Sat Jun 13 16:37:42 2009 +0000
@@ -0,0 +1,13 @@
+#include <QUrl>
+#include <QObjectEntity.h>
+
+class UrlHandler : public QObject, public Qtd_QObjectEntity
+{
+    Q_OBJECT
+
+public:
+    UrlHandler(void *d_ptr, QObject *parent = 0);
+
+public slots:
+    void handleUrl(const QUrl &url);
+};
--- a/generator/typesystem_gui-java.java	Sat Jun 13 14:05:32 2009 +0000
+++ b/generator/typesystem_gui-java.java	Sat Jun 13 16:37:42 2009 +0000
@@ -588,37 +588,18 @@
 }// class
 
 class QDesktopServices___ extends QDesktopServices {
-/*
-    private static java.util.Hashtable<String, InternalUrlHandler> __rcUrlHandlers = new java.util.Hashtable<String, InternalUrlHandler>();
-
-    public static interface UrlHandler {
-        public void handleUrl(qt.core.QUrl url);
-    }
-
-    private static class InternalUrlHandler extends qt.core.QObject {
-
-        private UrlHandler urlHandler;
 
-        private InternalUrlHandler(UrlHandler urlHandler) {
-            this.urlHandler = urlHandler;
-        }
+    private static UrlHandler[string] __rcUrlHandlers;
+    public static void setUrlHandler(string scheme, void delegate(QUrl) dg) {
+        UrlHandler receiver = dg !is null ? new UrlHandler(dg) : null;
 
-        private void handleUrl(qt.core.QUrl url) {
-            urlHandler.handleUrl(url);
-        }
-
-    }
-
-    public static void setUrlHandler(String scheme, UrlHandler urlHandler) {
-        InternalUrlHandler receiver = urlHandler != null ? new InternalUrlHandler(urlHandler) : null;
-
-        if (receiver == null)
+        if (receiver is null)
             __rcUrlHandlers.remove(scheme);
         else
-            __rcUrlHandlers.put(scheme, receiver);
-        setUrlHandler(scheme, receiver, QNativePointer.createCharPointer("handleUrl"));
+            __rcUrlHandlers[scheme] = receiver;
+    
+        setUrlHandler(scheme, receiver, "handleUrl");
     }
-*/
 }// class
 
 class QWizardPage___ extends QWizardPage {
--- a/generator/typesystem_gui.xml	Sat Jun 13 14:05:32 2009 +0000
+++ b/generator/typesystem_gui.xml	Sat Jun 13 16:37:42 2009 +0000
@@ -2844,6 +2844,9 @@
   </object-type>
   <object-type name="QDateEdit"/>
   <object-type name="QDesktopServices">
+          <extra-includes>
+            <include file-name="qt.gui.UrlHandler" location="java"/>
+        </extra-includes>
     <modify-function signature="setUrlHandler(const QString &amp;, QObject *, const char *)" access="private">
         <modify-argument index="2">
             <reference-count action="ignore"/> <!-- Handled in injected code -->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qt/gui/UrlHandler.d	Sat Jun 13 16:37:42 2009 +0000
@@ -0,0 +1,43 @@
+module qt.gui.UrlHandler;
+
+import qt.core.QUrl;
+
+alias void delegate(QUrl) UrlHandlerDg;
+
+package class UrlHandler : QObject {
+    public this(UrlHandlerDg dg) {
+        _dg = dg;
+        void* __qt_return_value = qtd_UrlHandler_UrlHandler_QObject(cast(void*) this, null);
+        this(__qt_return_value, true);
+    }
+    
+    void handleUrl(QUrl url) {
+        _dg(url);
+    }
+    
+    private UrlHandlerDg _dg;
+    
+    public this(void* native_id, bool gc_managed) {
+        super(native_id, gc_managed);
+    }
+
+
+    protected void __free_native_resources() {
+        qtd_UrlHandler_destructor(nativeId());
+    }
+
+    void __set_native_ownership(bool ownership_) {
+        __no_real_delete = ownership_;
+    }
+}
+extern (C) void qtd_UrlHandler_destructor(void *ptr);
+
+private extern(C) void* qtd_UrlHandler_UrlHandler_QObject(void *d_ptr,
+ void* parent0);
+
+private extern(C) void qtd_UrlHandler_handleUrl_QUrl_dispatch(void *d_entity, void* name1)
+{
+    auto d_object = cast(UrlHandler) d_entity;
+    scope name1_d_ref = new QUrl(name1, true);
+    d_object.handleUrl(name1_d_ref);
+}