diff --git a/dotherside.build.bash b/dotherside.build.bash index bbfde8a..21deb8a 100755 --- a/dotherside.build.bash +++ b/dotherside.build.bash @@ -1,20 +1,9 @@ #!/usr/bin/env bash BASEDIR="$(pwd)" -if [ ! -f dotherside/lib/src/DosQAbstractItemModel.o ]; then cd dotherside git submodule update --init mkdir build; cd build CC="${CHICKEN_CC}" CXX="${CHICKEN_CXX}" cmake .. CC="${CHICKEN_CC}" CXX="${CHICKEN_CXX}" make -j8 -cd ../lib/src -ODIR=../../build/lib/CMakeFiles/DOtherSide.dir/src -cp "${ODIR}/DosQAbstractItemModel.cpp.o" DosQAbstractItemModel.o -cp "${ODIR}/DosQDeclarative.cpp.o" DosQDeclarative.o -cp "${ODIR}/DosQMetaObject.cpp.o" DosQMetaObject.o -cp "${ODIR}/DosQObject.cpp.o" DosQObject.o -cp "${ODIR}/DosQObjectImpl.cpp.o" DosQObjectImpl.o -cp "${ODIR}/DosQQuickImageProvider.cpp.o" DosQQuickImageProvider.o -cp "${ODIR}/DOtherSide.cpp.o" DOtherSide.o -cp "${ODIR}/DOtherSideTypesCpp.cpp.o" DOtherSideTypesCpp.o cd "${BASEDIR}" -fi +cp dotherside/build/lib/*.{so,a} diff --git a/qml.core.scm b/qml.core.scm new file mode 100644 index 0000000..1969a3b --- /dev/null +++ b/qml.core.scm @@ -0,0 +1,207 @@ +(module (qml core) + * + (import (scheme base)) + (import (chicken gc)) + (import (chicken string)) + (import (qml lowlevel)) + (import coops coops-primitive-objects coops-extras) + + ;; Enums + (define-class () + ((value accessor: value))) + + (define-class ()) + (define (qevent-loop-process-event-flag value) + (case value + ((process-all-events:) + (make 'value DosQEventLoopProcessEventFlagProcessAllEvents)) + ((exclude-user-input-events:) + (make 'value DosQEventLoopProcessEventFlagExcludeUserInputEvents)) + ((process-exclude-socket-notifiers:) + (make 'value DosQEventLoopProcessEventFlagProcessExcludeSocketNotifiers)) + ((process-all-events-wait-for-more-events:) + (make 'value DosQEventLoopProcessEventFlagProcessAllEventsWaitForMoreEvents)))) + + (define-class ()) + (define (qt-connection-type value) + (case value + ((auto-connection:) + (make 'value DosQtConnectionTypeAutoConnection)) + ((direct-connection:) + (make 'value DosQtConnectionTypeDirectConnection)) + ((queued-connection:) + (make 'value DosQtConnectionTypeQueuedConnection)) + ((blocking-connection:) + (make 'value DosQtConnectionTypeBlockingConnection)) + ((unique-connection:) + (make 'value DosQtConnectionTypeUniqueConnection)))) + + ;; Helpers + (define (application-dir-path) + (dos_qcoreapplication_application_dir_path)) + (define-method (process-events (flag )) + (dos_qcoreapplication_process_events (value flag))) + (define-method (process-events-timed (flag ) (timed )) + (dos_qcoreapplication_process_events_timed (value flag) timed)) + + (define (gui-application-create) + (dos_qguiapplication_create)) + (define (gui-application-exec) + (dos_qguiapplication_exec)) + (define (gui-application-quit) + (dos_qguiapplication_quit)) + (define (gui-application-delete) + (dos_qguiapplication_delete)) + + (define (qapplication-create) + (dos_qapplication_create)) + (define (qapplication-exec) + (dos_qapplication_exec)) + (define (qapplication-quit) + (dos_qapplication_quit)) + (define (qapplication-delete) + (dos_qapplication_delete)) + + (define (qquickstyle-set-style style) + (dos_qquickstyle_set_style style)) + (define (qquickstyle-set-fallback-style style) + (dos_qquickstyle_set_fallback_style style)) + + ;; Objects + (define-class () + ((ptr accessor: ptr))) + + (define-class () + ((ptr accessor: ptr))) + + (define-class () + ((ptr accessor: ptr))) + (define-method (base-url (context )) + (dos_qqmlcontext_baseUrl (ptr context))) + (define-method (set-property (context ) (name ) (value )) + (dos_qqmlcontext_setcontextproperty (ptr context) name (ptr value))) + + (define-class () + ((ptr accessor: ptr))) + (define (new-QUrl url) + (let ((qurl (make 'ptr (dos_qurl_create url 0)))) + qurl)) + (define-method (to-string (qurl )) + (dos_qurl_to_string (ptr qurl))) + (define-method (valid? (qurl )) + (dos_qurl_isValid (ptr qurl))) + (define-method (delete (qurl )) + (dos_qurl_delete (ptr qurl))) + + (define-class () + ((ptr accessor: ptr))) + (define (new-QPixmap) + (make 'ptr (dos_qpixmap_create))) + (define (new-QPixmap width height) + (make 'ptr (dos_qpixmap_create_width_and_height width height))) + (define-method (copy (qpix )) + (make 'ptr (dos_qpixmap_create_qpixmap (ptr qpix)))) + (define-method (load (qpix ) (filepath ) (format )) + (dos_qpixmap_load (ptr qpix) filepath format)) + (define-method (load-from-data (qpix ) (data ) (len )) + (dos_qpixmap_loadFromData (ptr qpix) data len)) + (define-method (fill (qpix ) (r ) (g ) (b ) (a )) + (dos_qpixmap_fill (ptr qpix) r g b a)) + (define-method (assign (qpix ) (other )) + (dos_qpixmap_assign (ptr qpix) (ptr other))) + (define-method (is-null? (qpix )) + (dos_qpixmap_isNull (ptr qpix))) + (define-method (delete (qpix )) + (dos_qpixmap_delete (ptr qpix))) + + (define-class () + ((ptr accessor: ptr))) + (define-method (new-QQuickImageProvider callback) + (make 'ptr (dos_qquickimageprovider_create callback))) + (define-method (delete (qip )) + (dos_qquickimageprovider_delete (ptr qip))) + + (define-class () + ((ptr accessor: ptr))) + (define (new-QQmlApplicationEngine) + (make 'ptr (dos_qqmlapplicationengine_create))) + (define-method (load (appengine ) (filePath )) + (dos_qqmlapplicationengine_load (ptr appengine) filePath)) + (define-method (load-url (appengine ) (qurl )) + (dos_qqmlapplicationengine_load_url (ptr appengine) (ptr qurl))) + (define-method (load-data (appengine ) (data )) + (dos_qqmlapplicationengine_load_data (ptr appengine) data)) + (define-method (add-import-path (appengine ) (import-path )) + (dos_qqmlapplicationengine_add_import_path (ptr appengine) import-path)) + (define-method (context (appengine )) + (make 'ptr (dos_qqmlapplicationengine_context (ptr appengine)))) + (define-method (add-image-provider (appengine ) (provider-id ) (provider )) + (dos_qqmlapplicationengine_addImageProvider (ptr appengine) provider-id (ptr provider))) + (define-method (delete (appengine )) + (dos_qqmlapplicationengine_delete (ptr appengine))) + + (define-class ()) + (define (qquick-view-resize-mode value) + (case value + ((size-view-to-root-object:) (make 'value 0)) + ((size-root-object-to-view:) (make 'value 1)))) + + (define-class () + ((ptr accessor: ptr))) + (define (new-QQuickView) + (make 'ptr (dos_qquickview_create))) + (define-method (show (qqv )) + (dos_qquickview_show (ptr qqv))) + (define-method (source (qqv )) + (dos_qquickview_source (ptr qqv))) + (define-method (set-source-url (qqv ) (qurl )) + (dos_qquickview_set_source_url (ptr qqv) (ptr qurl))) + (define-method (set-source (qqv ) (filename )) + (dos_qquickview_set_source (ptr qqv) filename)) + (define-method (set-resize-mode (qqv ) (mode )) + (dos_qquickview_set_resize_mode (ptr qqv) (value mode))) + (define-method (root-context (qqv )) + (make 'ptr (dos_qquickview_rootContext (ptr qqv)))) + (define-method (delete (qqv )) + (dos_qquickview_delete (ptr qqv))) + + (define-class () + ((ptr accessor: ptr))) + (define-method (initialize-instance (qv )) + (call-next-method) + (set! (ptr qv) (dos_qvariant_create))) + (define-method (qvariant (value )) + (make 'ptr (dos_qvariant_create_int value))) + (define-method (qvariant (value )) + (make 'ptr (dos_qvariant_create_bool value))) + (define-method (qvariant (value )) + (make 'ptr (dos_qvariant_create_string value))) + (define-method (qvariant (value )) + (make 'ptr (dos_qvariant_create_qobject (ptr value)))) + (define-method (qvariant (value )) + (make 'ptr (dos_qvariant_create_float value))) + (define-method (set (qv ) (value )) + (dos_qvariant_setInt (ptr qv) value)) + (define-method (set (qv ) (value )) + (dos_qvariant_setBool (ptr qv) value)) + (define-method (set (qv ) (value )) + (dos_qvariant_setFloat (ptr qv) value)) + (define-method (set (qv ) (value )) + (dos_qvariant_setString (ptr qv) value)) + (define-method (set (qv ) (value )) + (dos_qvariant_setQObject (ptr qv) (ptr value))) + (define-method (to (qv ) (target )) + (case target + ((integer:) (dos_qvariant_toInt (ptr qv))) + ((boolean:) (dos_qvariant_toBool (ptr qv))) + ((string:) (dos_qvariant_toString (ptr qv))) + ((flonum:) (dos_qvariant_toFloat (ptr qv))) + ((qobject:) (dos_qvariant_toQObject (ptr qv))))) + (define-method (is-null? (qv )) + (dos_qvariant_isnull (ptr qv))) + (define-method (assign (qv ) (other )) + (dos_qvariant_assign (ptr qv) (ptr other))) + (define-method (copy (qv )) + (make 'ptr (dos_qvariant_create_qvariant (ptr qv)))) + (define-method (delete (qv )) + (dos_qvariant_delete (ptr qv)))) diff --git a/qml.egg b/qml.egg index 128efa8..9598206 100644 --- a/qml.egg +++ b/qml.egg @@ -3,7 +3,7 @@ (synopsis "A Chicken wrapper for DOtherSide") (category ui) (license "LGPLv3") - (dependencies r7rs foreigners utf8) + (dependencies coops coops-utils foreigners utf8) (foreign-dependencies dotherside Qt5Core Qt5Widgets @@ -13,29 +13,40 @@ Qt5Test opengl) (components - ;; (c-object dotherside/lib/src/DosQAbstractItemModel - ;; (custom-build "dotherside.build.bash")) - ;; (c-object dotherside/lib/src/DosQDeclarative - ;; (custom-build "dotherside.build.bash")) - ;; (c-object dotherside/lib/src/DosQMetaObject - ;; (custom-build "dotherside.build.bash")) - ;; (c-object dotherside/lib/src/DosQObject - ;; (custom-build "dotherside.build.bash")) - ;; (c-object dotherside/lib/src/DosQObjectImpl - ;; (custom-build "dotherside.build.bash")) - ;; (c-object dotherside/lib/src/DosQQuickImageProvider - ;; (custom-build "dotherside.build.bash")) - ;; (c-object dotherside/lib/src/DOtherSide - ;; (custom-build "dotherside.build.bash")) - ;; (c-object dotherside/lib/src/DOtherSideTypes - ;; (custom-build "dotherside.build.bash")) + (c-object dotherside/lib/src/DosQAbstractItemModel + (source "dotherside/lib/src/DosQAbstractItemModel.cpp") + (csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC")) + (c-object dotherside/lib/src/DosQDeclarative + (source "dotherside/lib/src/DosQDeclarative.cpp") + (csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC")) + (c-object dotherside/lib/src/DosQMetaObject + (source "dotherside/lib/src/DosQMetaObject.cpp") + (csc-options "-c++" "-Idotherside/lib/include" "-Idotherside/lib/include/Qt" + "-I/usr/include/qt5" "-C" "-fPIC")) + (c-object dotherside/lib/src/DosQObject + (source "dotherside/lib/src/DosQObject.cpp") + (csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC")) + (c-object dotherside/lib/src/DosQObjectImpl + (source "dotherside/lib/src/DosQObjectImpl.cpp") + (csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC")) + (c-object dotherside/lib/src/DosQQuickImageProvider + (source "dotherside/lib/src/DosQQuickImageProvider.cpp") + (csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC")) + (c-object dotherside/lib/src/DOtherSide + (source "dotherside/lib/src/DOtherSide.cpp") + (csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC")) + (c-object dotherside/lib/src/DOtherSideTypesCpp + (source "dotherside/lib/src/DOtherSideTypesCpp.cpp") + (csc-options "-c++" "-Idotherside/lib/include" "-I/usr/include/qt5" "-C" "-fPIC")) (extension qml.lowlevel - ;; (objects dotherside/lib/src/DosQAbstractItemModel - ;; dotherside/lib/src/DosQDeclarative - ;; dotherside/lib/src/DosQMetaObject - ;; dotherside/lib/src/DosQObject - ;; dotherside/lib/src/DosQObjectImpl - ;; dotherside/lib/src/DosQQuickImageProvider - ;; dotherside/lib/src/DOtherSide - ;; dotherside/lib/src/DOtherSideTypes) - (csc-options "-c++" "-Idotherside/lib/include" "-Ldotherside/build/lib")))) + (objects dotherside/lib/src/DosQAbstractItemModel + dotherside/lib/src/DosQDeclarative + dotherside/lib/src/DosQMetaObject + dotherside/lib/src/DosQObject + dotherside/lib/src/DosQObjectImpl + dotherside/lib/src/DosQQuickImageProvider + dotherside/lib/src/DOtherSide + dotherside/lib/src/DOtherSideTypesCpp) + (csc-options "-c++" "-Idotherside/lib/include" "-L." "-Wl,libDOtherSide.so" "-rpath" ".")) + (extension qml.core + (component-dependencies qml.lowlevel)))) diff --git a/qml.lowlevel.scm b/qml.lowlevel.scm index 33c5282..6c3ba59 100644 --- a/qml.lowlevel.scm +++ b/qml.lowlevel.scm @@ -1,9 +1,8 @@ -(import (r7rs)) -(define-library (qml lowlevel) +(module (qml lowlevel) + * (import (scheme base)) (import (chicken foreign)) (import foreigners) - (export *) (begin (foreign-declare "#include ") (foreign-declare "#include ") @@ -110,20 +109,28 @@ (define-foreign-type DosQAbstractItemModelCallbacks (struct "DosQAbstractItemModelCallbacks")) (define-foreign-type DosQEventLoopProcessEventFlag (enum "DosQEventLoopProcessEventFlag")) + (define DosQEventLoopProcessEventFlagProcessAllEvents (foreign-value "0x00" byte)) + (define DosQEventLoopProcessEventFlagExcludeUserInputEvents (foreign-value "0x01" byte)) + (define DosQEventLoopProcessEventFlagProcessExcludeSocketNotifiers (foreign-value "0x02" byte)) + (define DosQEventLoopProcessEventFlagProcessAllEventsWaitForMoreEvents (foreign-value "0x03" byte)) + (define-foreign-type DosQtConnectionType (enum "DosQtConnectionType")) + (define DosQtConnectionTypeAutoConnection 0) + (define DosQtConnectionTypeDirectConnection 1) + (define DosQtConnectionTypeQueuedConnection 2) + (define DosQtConnectionTypeBlockingConnection 3) + (define DosQtConnectionTypeUniqueConnection (foreign-value "0x80" byte)) ;; Functions ;; QCoreApplication (define dos_qcoreapplication_application_dir_path - (foreign-lambda* c-string () - "C_return(dos_qcoreapplication_application_dir_path());")) + (foreign-lambda c-string "dos_qcoreapplication_application_dir_path")) (define dos_qcoreapplication_process_events - (foreign-lambda* void ((DosQEventLoopProcessEventFlag flags)) - "dos_qcoreapplication_process_events(flags);")) + (foreign-lambda void "dos_qcoreapplication_process_events" + DosQEventLoopProcessEventFlag)) (define dos_qcoreapplication_process_events_timed - (foreign-lambda* void ((DosQEventLoopProcessEventFlag flags) - (int ms)) - "dos_qcoreapplication_process_events_timed(flags, ms);")) + (foreign-lambda void "dos_qcoreapplication_process_events_timed" + DosQEventLoopProcessEventFlag int)) ;; QGuiApplication (define dos_qguiapplication_create @@ -723,5 +730,5 @@ (c-pointer DosQPointer))) (define dos_qpointer_data (foreign-lambda (c-pointer DosQObject) "dos_qpointer_data" - (c-pointer DosQPointer))) -)) + (c-pointer DosQPointer))))) +