Skip to content

Commit

Permalink
greatly extend the Go <-> Qml/JS interoperability
Browse files Browse the repository at this point in the history
These changes introduce two new functions called (*qml.QJSEngine).NewGoType and (*qml.QJSEngine).ToGoType, that can be used (similiar to how core.NewQVariant1 and (*core.QVariant).ToGoType can be used) to convert Go objects and functions to *qml.QJSValues and vice versa.
This allows for a more natural communication between Go and Qml/JS and makes it possible to simply pass a Go structs to Qml/JS and then call Go methods on that object.
For this to work, the object passed to Qml/JS needs to implement the `Pointer() unsafe.Pointer` and `SetPointer(unsafe.Pointer)` functions atm.
Which means, since all Qt classes already implement these functions, that you can now use the whole binding from Qml/JS as well and theoretically create a full Qt application inside an QJSEngine as well. A few example applications almost entirely written in JS can be found here: https://github.com/therecipe/examples/tree/master/js/
Furthermore, the `widgets_playground` example (https://github.com/therecipe/widgets_playground) now fully works on desktop and mobile targets as well.

other changes:
* core.NewQVariant1 and (*core.QVariant).ToGoType now recognize json tags
* workaround for qtmoc issue related to named imports
* speed-up go module android docker deployments
* fix webengine related qtdeploy bug on macOS
* fix int overflow issue for arm docker images
* fix js docker images
  • Loading branch information
therecipe committed Nov 17, 2019
1 parent 5875595 commit 3738bb9
Show file tree
Hide file tree
Showing 66 changed files with 14,846 additions and 87 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Mfile*
*/minimal_*

/internal/binding/dump/*
/internal/binding/runtime/moc*
/internal/cmd/moc/test/**/moc*
/internal/examples/**/deploy
/internal/examples/**/moc*
Expand Down
78 changes: 78 additions & 0 deletions androidextras/androidextras.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package androidextras

import (
"github.com/therecipe/qt"
"github.com/therecipe/qt/core"
"strings"
"unsafe"
Expand Down Expand Up @@ -1543,3 +1544,80 @@ func QtAndroid_StartIntentSender(intentSender QAndroidJniObject_ITF, receiverReq
func (ptr *QtAndroid) StartIntentSender(intentSender QAndroidJniObject_ITF, receiverRequestCode int, resultReceiver QAndroidActivityResultReceiver_ITF) {

}

func init() {
qt.ItfMap["androidextras.QAndroidActivityResultReceiver_ITF"] = QAndroidActivityResultReceiver{}
qt.ItfMap["androidextras.QAndroidBinder_ITF"] = QAndroidBinder{}
qt.FuncMap["androidextras.NewQAndroidBinder"] = NewQAndroidBinder
qt.FuncMap["androidextras.NewQAndroidBinder2"] = NewQAndroidBinder2
qt.EnumMap["androidextras.QAndroidBinder__Normal"] = int64(QAndroidBinder__Normal)
qt.EnumMap["androidextras.QAndroidBinder__OneWay"] = int64(QAndroidBinder__OneWay)
qt.ItfMap["androidextras.QAndroidIntent_ITF"] = QAndroidIntent{}
qt.FuncMap["androidextras.NewQAndroidIntent"] = NewQAndroidIntent
qt.FuncMap["androidextras.NewQAndroidIntent2"] = NewQAndroidIntent2
qt.FuncMap["androidextras.NewQAndroidIntent3"] = NewQAndroidIntent3
qt.FuncMap["androidextras.NewQAndroidIntent4"] = NewQAndroidIntent4
qt.ItfMap["androidextras.QAndroidJniEnvironment_ITF"] = QAndroidJniEnvironment{}
qt.FuncMap["androidextras.NewQAndroidJniEnvironment"] = NewQAndroidJniEnvironment
qt.FuncMap["androidextras.QAndroidJniEnvironment_JavaVM"] = QAndroidJniEnvironment_JavaVM
qt.FuncMap["androidextras.QAndroidJniEnvironment_ExceptionCheck"] = QAndroidJniEnvironment_ExceptionCheck
qt.FuncMap["androidextras.QAndroidJniEnvironment_ExceptionDescribe"] = QAndroidJniEnvironment_ExceptionDescribe
qt.FuncMap["androidextras.QAndroidJniEnvironment_ExceptionClear"] = QAndroidJniEnvironment_ExceptionClear
qt.FuncMap["androidextras.QAndroidJniEnvironment_ExceptionOccurred"] = QAndroidJniEnvironment_ExceptionOccurred
qt.ItfMap["androidextras.QAndroidJniExceptionCleaner_ITF"] = QAndroidJniExceptionCleaner{}
qt.FuncMap["androidextras.NewQAndroidJniExceptionCleaner"] = NewQAndroidJniExceptionCleaner
qt.EnumMap["androidextras.QAndroidJniExceptionCleaner__Silent"] = int64(QAndroidJniExceptionCleaner__Silent)
qt.EnumMap["androidextras.QAndroidJniExceptionCleaner__Verbose"] = int64(QAndroidJniExceptionCleaner__Verbose)
qt.ItfMap["androidextras.QAndroidJniObject_ITF"] = QAndroidJniObject{}
qt.FuncMap["androidextras.NewQAndroidJniObject"] = NewQAndroidJniObject
qt.FuncMap["androidextras.NewQAndroidJniObject2"] = NewQAndroidJniObject2
qt.FuncMap["androidextras.NewQAndroidJniObject3"] = NewQAndroidJniObject3
qt.FuncMap["androidextras.NewQAndroidJniObject4"] = NewQAndroidJniObject4
qt.FuncMap["androidextras.NewQAndroidJniObject5"] = NewQAndroidJniObject5
qt.FuncMap["androidextras.NewQAndroidJniObject6"] = NewQAndroidJniObject6
qt.FuncMap["androidextras.QAndroidJniObject_CallStaticObjectMethod"] = QAndroidJniObject_CallStaticObjectMethod
qt.FuncMap["androidextras.QAndroidJniObject_CallStaticObjectMethod2"] = QAndroidJniObject_CallStaticObjectMethod2
qt.FuncMap["androidextras.QAndroidJniObject_CallStaticObjectMethod3"] = QAndroidJniObject_CallStaticObjectMethod3
qt.FuncMap["androidextras.QAndroidJniObject_CallStaticObjectMethod4"] = QAndroidJniObject_CallStaticObjectMethod4
qt.FuncMap["androidextras.QAndroidJniObject_FromLocalRef"] = QAndroidJniObject_FromLocalRef
qt.FuncMap["androidextras.QAndroidJniObject_FromString"] = QAndroidJniObject_FromString
qt.FuncMap["androidextras.QAndroidJniObject_GetStaticObjectField"] = QAndroidJniObject_GetStaticObjectField
qt.FuncMap["androidextras.QAndroidJniObject_GetStaticObjectField2"] = QAndroidJniObject_GetStaticObjectField2
qt.FuncMap["androidextras.QAndroidJniObject_GetStaticObjectField3"] = QAndroidJniObject_GetStaticObjectField3
qt.FuncMap["androidextras.QAndroidJniObject_GetStaticObjectField4"] = QAndroidJniObject_GetStaticObjectField4
qt.FuncMap["androidextras.QAndroidJniObject_IsClassAvailable"] = QAndroidJniObject_IsClassAvailable
qt.FuncMap["androidextras.QAndroidJniObject_SetStaticField"] = QAndroidJniObject_SetStaticField
qt.FuncMap["androidextras.QAndroidJniObject_SetStaticField3"] = QAndroidJniObject_SetStaticField3
qt.ItfMap["androidextras.QAndroidParcel_ITF"] = QAndroidParcel{}
qt.FuncMap["androidextras.NewQAndroidParcel"] = NewQAndroidParcel
qt.FuncMap["androidextras.NewQAndroidParcel2"] = NewQAndroidParcel2
qt.ItfMap["androidextras.QAndroidService_ITF"] = QAndroidService{}
qt.FuncMap["androidextras.NewQAndroidService"] = NewQAndroidService
qt.ItfMap["androidextras.QAndroidServiceConnection_ITF"] = QAndroidServiceConnection{}
qt.FuncMap["androidextras.NewQAndroidServiceConnection"] = NewQAndroidServiceConnection
qt.FuncMap["androidextras.NewQAndroidServiceConnection2"] = NewQAndroidServiceConnection2
qt.ItfMap["androidextras.QtAndroid_ITF"] = QtAndroid{}
qt.FuncMap["androidextras.QtAndroid_AndroidActivity"] = QtAndroid_AndroidActivity
qt.FuncMap["androidextras.QtAndroid_AndroidContext"] = QtAndroid_AndroidContext
qt.FuncMap["androidextras.QtAndroid_AndroidSdkVersion"] = QtAndroid_AndroidSdkVersion
qt.FuncMap["androidextras.QtAndroid_AndroidService"] = QtAndroid_AndroidService
qt.FuncMap["androidextras.QtAndroid_BindService"] = QtAndroid_BindService
qt.FuncMap["androidextras.QtAndroid_HideSplashScreen"] = QtAndroid_HideSplashScreen
qt.FuncMap["androidextras.QtAndroid_HideSplashScreen2"] = QtAndroid_HideSplashScreen2
qt.FuncMap["androidextras.QtAndroid_ShouldShowRequestPermissionRationale"] = QtAndroid_ShouldShowRequestPermissionRationale
qt.FuncMap["androidextras.QtAndroid_StartActivity"] = QtAndroid_StartActivity
qt.FuncMap["androidextras.QtAndroid_StartActivity2"] = QtAndroid_StartActivity2
qt.FuncMap["androidextras.QtAndroid_StartIntentSender"] = QtAndroid_StartIntentSender
qt.EnumMap["androidextras.QtAndroid__None"] = int64(QtAndroid__None)
qt.EnumMap["androidextras.QtAndroid__AutoCreate"] = int64(QtAndroid__AutoCreate)
qt.EnumMap["androidextras.QtAndroid__DebugUnbind"] = int64(QtAndroid__DebugUnbind)
qt.EnumMap["androidextras.QtAndroid__NotForeground"] = int64(QtAndroid__NotForeground)
qt.EnumMap["androidextras.QtAndroid__AboveClient"] = int64(QtAndroid__AboveClient)
qt.EnumMap["androidextras.QtAndroid__AllowOomManagement"] = int64(QtAndroid__AllowOomManagement)
qt.EnumMap["androidextras.QtAndroid__WaivePriority"] = int64(QtAndroid__WaivePriority)
qt.EnumMap["androidextras.QtAndroid__Important"] = int64(QtAndroid__Important)
qt.EnumMap["androidextras.QtAndroid__AdjustWithActivity"] = int64(QtAndroid__AdjustWithActivity)
qt.EnumMap["androidextras.QtAndroid__ExternalService"] = int64(QtAndroid__ExternalService)
qt.EnumMap["androidextras.QtAndroid__Granted"] = int64(QtAndroid__Granted)
qt.EnumMap["androidextras.QtAndroid__Denied"] = int64(QtAndroid__Denied)
}
77 changes: 77 additions & 0 deletions androidextras/androidextras_android.go
Original file line number Diff line number Diff line change
Expand Up @@ -4503,3 +4503,80 @@ func QtAndroid_StartIntentSender(intentSender QAndroidJniObject_ITF, receiverReq
func (ptr *QtAndroid) StartIntentSender(intentSender QAndroidJniObject_ITF, receiverRequestCode int, resultReceiver QAndroidActivityResultReceiver_ITF) {
C.QtAndroid_QtAndroid_StartIntentSender(PointerFromQAndroidJniObject(intentSender), C.int(int32(receiverRequestCode)), PointerFromQAndroidActivityResultReceiver(resultReceiver))
}

func init() {
qt.ItfMap["androidextras.QAndroidActivityResultReceiver_ITF"] = QAndroidActivityResultReceiver{}
qt.ItfMap["androidextras.QAndroidBinder_ITF"] = QAndroidBinder{}
qt.FuncMap["androidextras.NewQAndroidBinder"] = NewQAndroidBinder
qt.FuncMap["androidextras.NewQAndroidBinder2"] = NewQAndroidBinder2
qt.EnumMap["androidextras.QAndroidBinder__Normal"] = int64(QAndroidBinder__Normal)
qt.EnumMap["androidextras.QAndroidBinder__OneWay"] = int64(QAndroidBinder__OneWay)
qt.ItfMap["androidextras.QAndroidIntent_ITF"] = QAndroidIntent{}
qt.FuncMap["androidextras.NewQAndroidIntent"] = NewQAndroidIntent
qt.FuncMap["androidextras.NewQAndroidIntent2"] = NewQAndroidIntent2
qt.FuncMap["androidextras.NewQAndroidIntent3"] = NewQAndroidIntent3
qt.FuncMap["androidextras.NewQAndroidIntent4"] = NewQAndroidIntent4
qt.ItfMap["androidextras.QAndroidJniEnvironment_ITF"] = QAndroidJniEnvironment{}
qt.FuncMap["androidextras.NewQAndroidJniEnvironment"] = NewQAndroidJniEnvironment
qt.FuncMap["androidextras.QAndroidJniEnvironment_JavaVM"] = QAndroidJniEnvironment_JavaVM
qt.FuncMap["androidextras.QAndroidJniEnvironment_ExceptionCheck"] = QAndroidJniEnvironment_ExceptionCheck
qt.FuncMap["androidextras.QAndroidJniEnvironment_ExceptionDescribe"] = QAndroidJniEnvironment_ExceptionDescribe
qt.FuncMap["androidextras.QAndroidJniEnvironment_ExceptionClear"] = QAndroidJniEnvironment_ExceptionClear
qt.FuncMap["androidextras.QAndroidJniEnvironment_ExceptionOccurred"] = QAndroidJniEnvironment_ExceptionOccurred
qt.ItfMap["androidextras.QAndroidJniExceptionCleaner_ITF"] = QAndroidJniExceptionCleaner{}
qt.FuncMap["androidextras.NewQAndroidJniExceptionCleaner"] = NewQAndroidJniExceptionCleaner
qt.EnumMap["androidextras.QAndroidJniExceptionCleaner__Silent"] = int64(QAndroidJniExceptionCleaner__Silent)
qt.EnumMap["androidextras.QAndroidJniExceptionCleaner__Verbose"] = int64(QAndroidJniExceptionCleaner__Verbose)
qt.ItfMap["androidextras.QAndroidJniObject_ITF"] = QAndroidJniObject{}
qt.FuncMap["androidextras.NewQAndroidJniObject"] = NewQAndroidJniObject
qt.FuncMap["androidextras.NewQAndroidJniObject2"] = NewQAndroidJniObject2
qt.FuncMap["androidextras.NewQAndroidJniObject3"] = NewQAndroidJniObject3
qt.FuncMap["androidextras.NewQAndroidJniObject4"] = NewQAndroidJniObject4
qt.FuncMap["androidextras.NewQAndroidJniObject5"] = NewQAndroidJniObject5
qt.FuncMap["androidextras.NewQAndroidJniObject6"] = NewQAndroidJniObject6
qt.FuncMap["androidextras.QAndroidJniObject_CallStaticObjectMethod"] = QAndroidJniObject_CallStaticObjectMethod
qt.FuncMap["androidextras.QAndroidJniObject_CallStaticObjectMethod2"] = QAndroidJniObject_CallStaticObjectMethod2
qt.FuncMap["androidextras.QAndroidJniObject_CallStaticObjectMethod3"] = QAndroidJniObject_CallStaticObjectMethod3
qt.FuncMap["androidextras.QAndroidJniObject_CallStaticObjectMethod4"] = QAndroidJniObject_CallStaticObjectMethod4
qt.FuncMap["androidextras.QAndroidJniObject_FromLocalRef"] = QAndroidJniObject_FromLocalRef
qt.FuncMap["androidextras.QAndroidJniObject_FromString"] = QAndroidJniObject_FromString
qt.FuncMap["androidextras.QAndroidJniObject_GetStaticObjectField"] = QAndroidJniObject_GetStaticObjectField
qt.FuncMap["androidextras.QAndroidJniObject_GetStaticObjectField2"] = QAndroidJniObject_GetStaticObjectField2
qt.FuncMap["androidextras.QAndroidJniObject_GetStaticObjectField3"] = QAndroidJniObject_GetStaticObjectField3
qt.FuncMap["androidextras.QAndroidJniObject_GetStaticObjectField4"] = QAndroidJniObject_GetStaticObjectField4
qt.FuncMap["androidextras.QAndroidJniObject_IsClassAvailable"] = QAndroidJniObject_IsClassAvailable
qt.FuncMap["androidextras.QAndroidJniObject_SetStaticField"] = QAndroidJniObject_SetStaticField
qt.FuncMap["androidextras.QAndroidJniObject_SetStaticField3"] = QAndroidJniObject_SetStaticField3
qt.ItfMap["androidextras.QAndroidParcel_ITF"] = QAndroidParcel{}
qt.FuncMap["androidextras.NewQAndroidParcel"] = NewQAndroidParcel
qt.FuncMap["androidextras.NewQAndroidParcel2"] = NewQAndroidParcel2
qt.ItfMap["androidextras.QAndroidService_ITF"] = QAndroidService{}
qt.FuncMap["androidextras.NewQAndroidService"] = NewQAndroidService
qt.ItfMap["androidextras.QAndroidServiceConnection_ITF"] = QAndroidServiceConnection{}
qt.FuncMap["androidextras.NewQAndroidServiceConnection"] = NewQAndroidServiceConnection
qt.FuncMap["androidextras.NewQAndroidServiceConnection2"] = NewQAndroidServiceConnection2
qt.ItfMap["androidextras.QtAndroid_ITF"] = QtAndroid{}
qt.FuncMap["androidextras.QtAndroid_AndroidActivity"] = QtAndroid_AndroidActivity
qt.FuncMap["androidextras.QtAndroid_AndroidContext"] = QtAndroid_AndroidContext
qt.FuncMap["androidextras.QtAndroid_AndroidSdkVersion"] = QtAndroid_AndroidSdkVersion
qt.FuncMap["androidextras.QtAndroid_AndroidService"] = QtAndroid_AndroidService
qt.FuncMap["androidextras.QtAndroid_BindService"] = QtAndroid_BindService
qt.FuncMap["androidextras.QtAndroid_HideSplashScreen"] = QtAndroid_HideSplashScreen
qt.FuncMap["androidextras.QtAndroid_HideSplashScreen2"] = QtAndroid_HideSplashScreen2
qt.FuncMap["androidextras.QtAndroid_ShouldShowRequestPermissionRationale"] = QtAndroid_ShouldShowRequestPermissionRationale
qt.FuncMap["androidextras.QtAndroid_StartActivity"] = QtAndroid_StartActivity
qt.FuncMap["androidextras.QtAndroid_StartActivity2"] = QtAndroid_StartActivity2
qt.FuncMap["androidextras.QtAndroid_StartIntentSender"] = QtAndroid_StartIntentSender
qt.EnumMap["androidextras.QtAndroid__None"] = int64(QtAndroid__None)
qt.EnumMap["androidextras.QtAndroid__AutoCreate"] = int64(QtAndroid__AutoCreate)
qt.EnumMap["androidextras.QtAndroid__DebugUnbind"] = int64(QtAndroid__DebugUnbind)
qt.EnumMap["androidextras.QtAndroid__NotForeground"] = int64(QtAndroid__NotForeground)
qt.EnumMap["androidextras.QtAndroid__AboveClient"] = int64(QtAndroid__AboveClient)
qt.EnumMap["androidextras.QtAndroid__AllowOomManagement"] = int64(QtAndroid__AllowOomManagement)
qt.EnumMap["androidextras.QtAndroid__WaivePriority"] = int64(QtAndroid__WaivePriority)
qt.EnumMap["androidextras.QtAndroid__Important"] = int64(QtAndroid__Important)
qt.EnumMap["androidextras.QtAndroid__AdjustWithActivity"] = int64(QtAndroid__AdjustWithActivity)
qt.EnumMap["androidextras.QtAndroid__ExternalService"] = int64(QtAndroid__ExternalService)
qt.EnumMap["androidextras.QtAndroid__Granted"] = int64(QtAndroid__Granted)
qt.EnumMap["androidextras.QtAndroid__Denied"] = int64(QtAndroid__Denied)
}
Loading

0 comments on commit 3738bb9

Please sign in to comment.