diff --git a/examples/helloworld.qml b/examples/helloworld.qml new file mode 100644 index 0000000..b162072 --- /dev/null +++ b/examples/helloworld.qml @@ -0,0 +1,21 @@ +import QtQuick 2.5 +import QtQuick.Window 2.2 + +Window { + visible: true + width: 320 + height: 480 + Rectangle { + id: page + width: 320; height: 480 + color: "lightgray" + + Text { + id: helloText + text: "Hello world!" + y: 30 + anchors.horizontalCenter: page.horizontalCenter + font.pointSize: 24; font.bold: true + } + } +} diff --git a/examples/helloworld.scm b/examples/helloworld.scm new file mode 100644 index 0000000..9d33328 --- /dev/null +++ b/examples/helloworld.scm @@ -0,0 +1,11 @@ +(import (qml core) + coops) + +(gui-application-create) +(define engine (make )) +(define loc (new-QUrl "examples/helloworld.qml")) +(load-url engine loc) + +(do ((loop #t)) + ((not loop) #t) + (process-events-timed (qevent-loop-process-event-flag process-all-events:) 50)) diff --git a/qml.core.scm b/qml.core.scm index 5c89555..c6ebcdd 100644 --- a/qml.core.scm +++ b/qml.core.scm @@ -1,13 +1,132 @@ ;; -*- geiser-scheme: chicken -*- -(module (qml core) - * - (import scheme) +(import (r7rs)) + +(define-library (qml core) (import (chicken gc)) (import (chicken string)) - (import (chicken base)) (import (chicken condition)) (import (qml lowlevel)) + (import (scheme base)) (import coops coops-primitive-objects coops-extras srfi-1 srfi-69) + (export application-dir-path + process-events + process-events-timed + + gui-application-create + gui-application-exec + gui-application-quit + gui-application-delete + + qapplication-create + qapplication-exec + qapplication-quit + qapplication-delete + + qquickstyle-set-style + qquickstyle-set-fallback-style + + initialize-instance + set + to + is-null? + assign + copy + delete-pointer + delete-pointer-later + + + + qevent-loop-process-event-flag + + + qt-connection-type + + + qquick-view-resize-mode + + + qitem-data-role + + + qt-orientation + + + add-ptrentry + remove-ptrentry + + + signal-emit + + + qvariant + + + base-url + set-property + + + new-QUrl + to-string + valid? + + + new-QPixmap + load + load-from-data + fill + assign + + + new-QQuickImageProvider + + + load + load-url + load-data + add-import-path + context + add-image-provider + + + show + source + set-source-url + set-source + set-resize-mode + root-context + + + new-QMetaObject + invoke-method + + + row + column + valid? + data + parent + child + sibling + assign + + + new-QAbstractItemModel + set-data + flags + header-data + + + new-QAbstractListModel + index + parent + column-count + + + new-QAbstractTableModel + index + parent + ) + (begin ;; Enums (define-class () @@ -119,7 +238,9 @@ (define-method (add-ptrentry (qbase )) (hash-table-update! callback-registry (ptr qbase) (lambda (alist) - (alist-update refcount: (+ 1 (refcount alist)) alist)) + (let* ((refc (refcount alist)) + (alist (alist-delete refcount: alist))) + (alist-cons refcount: (+ 1 refc) alist))) (lambda () (alist-cons refcount: 1 '())))) (define-method (remove-ptrentry (qbase )) @@ -127,7 +248,9 @@ (hash-table-delete! callback-registry (ptr qbase)) (hash-table-update! callback-registry (ptr qbase) (lambda (alist) - (alist-update refcount: (- (refcount alist) 1) alist))))) + (let* ((refc (refcount alist)) + (alist (alist-delete refcount: alist))) + (alist-cons refcount: (- refc 1) alist))) ))) (define-method (initialize-instance (qbase )) (call-next-method) (add-ptrentry qbase) @@ -292,7 +415,7 @@ (dos_qmodelindex_row (ptr qmi))) (define-method (column (qmi )) (dos_qmodelindex_column (ptr qmi))) - (define-method (is-valid? (qmi )) + (define-method (valid? (qmi )) (dos_qmodelindex_isValid (ptr qmi))) (define-method (data (qmi ) (role )) (dos_qmodelindex_data (ptr qmi) (val role))) @@ -333,4 +456,6 @@ (define-method (index (qatm ) (row ) (column ) (parent )) (dos_qabstracttablemodel_index (ptr qatm) row column (ptr parent))) (define-method (parent (qatm ) (child )) - (dos_qabstracttablemodel_parent (ptr qatm) (ptr child)))) + (dos_qabstracttablemodel_parent (ptr qatm) (ptr child))) + ) +) diff --git a/qml.egg b/qml.egg index cbb2de4..faa17e6 100644 --- a/qml.egg +++ b/qml.egg @@ -50,7 +50,8 @@ dotherside/lib/src/DosQQuickImageProvider dotherside/lib/src/DOtherSide dotherside/lib/src/DOtherSideTypesCpp) - (csc-options "-c++" "-Idotherside/lib/include" + (csc-options "-X" "r7rs" "-R" "r7rs" "-sJ" + "-c++" "-Idotherside/lib/include" "-L" "-lQt5Core" "-L" "-lQt5Widgets" "-L" "-lQt5Gui" @@ -63,4 +64,5 @@ "-L" "-lQt5QuickTest" "-L" "-lOpenGL")) (extension qml.core + (csc-options "-X" "r7rs" "-R" "r7rs" "-sJ") (component-dependencies qml.lowlevel)))) diff --git a/qml.lowlevel.scm b/qml.lowlevel.scm index bda6a3e..da4f293 100644 --- a/qml.lowlevel.scm +++ b/qml.lowlevel.scm @@ -1,9 +1,118 @@ ;; -*- geiser-scheme: chicken -*- -(module (qml lowlevel) - * - (import scheme) +(import (r7rs)) + +(define-library (qml lowlevel) + (import (scheme base)) (import (chicken foreign)) (import foreigners) + (export DosQEventLoopProcessEventFlagProcessAllEvents + DosQEventLoopProcessEventFlagExcludeUserInputEvents + DosQEventLoopProcessEventFlagProcessExcludeSocketNotifiers + DosQEventLoopProcessEventFlagProcessAllEventsWaitForMoreEvents + DosQtConnectionTypeAutoConnection + DosQtConnectionTypeDirectConnection + DosQtConnectionTypeQueuedConnection + DosQtConnectionTypeBlockingConnection + DosQtConnectionTypeUniqueConnection + + dos_qcoreapplication_application_dir_path + dos_qcoreapplication_process_events + dos_qcoreapplication_process_events_timed + dos_qguiapplication_create + dos_qguiapplication_exec + dos_qguiapplication_quit + dos_qguiapplication_delete + dos_qapplication_create + dos_qapplication_exec + dos_qapplication_quit + dos_qapplication_delete + dos_qquickstyle_set_style + dos_qquickstyle_set_fallback_style + dos_qobject_signal_emit + dos_qobject_delete + dos_qobject_deleteLater + dos_qvariant_create + dos_qvariant_create_int + dos_qvariant_create_bool + dos_qvariant_create_string + dos_qvariant_create_qobject + dos_qvariant_create_float + dos_qvariant_setInt + dos_qvariant_setBool + dos_qvariant_setFloat + dos_qvariant_setString + dos_qvariant_setQObject + dos_qvariant_toInt + dos_qvariant_toBool + dos_qvariant_toString + dos_qvariant_toFloat + dos_qvariant_toQObject + dos_qvariant_isnull + dos_qvariant_assign + dos_qvariant_create_qvariant + dos_qvariant_delete + dos_qqmlcontext_baseUrl + dos_qqmlcontext_setcontextproperty + dos_qurl_create + dos_qurl_to_string + dos_qurl_isValid + dos_qurl_delete + dos_qpixmap_create + dos_qpixmap_create_width_and_height + dos_qpixmap_create_qpixmap + dos_qpixmap_load + dos_qpixmap_loadFromData + dos_qpixmap_fill + dos_qpixmap_assign + dos_qpixmap_isNull + dos_qpixmap_delete + dos_qquickimageprovider_create + dos_qquickimageprovider_delete + dos_qqmlapplicationengine_create + dos_qqmlapplicationengine_load + dos_qqmlapplicationengine_load_url + dos_qqmlapplicationengine_load_data + dos_qqmlapplicationengine_add_import_path + dos_qqmlapplicationengine_context + dos_qqmlapplicationengine_addImageProvider + dos_qqmlapplicationengine_delete + dos_qquickview_create + dos_qquickview_show + dos_qquickview_source + dos_qquickview_set_source_url + dos_qquickview_set_source + dos_qquickview_set_resize_mode + dos_qquickview_rootContext + dos_qquickview_delete + dos_qmetaobject_create + dos_qmetaobject_invoke_method + dos_qmetaobject_delete + dos_qobject_qmetaobject + dos_qabstractitemmodel_qmetaobject + dos_qabstracttablemodel_qmetaobject + dos_qabstractlistmodel_qmetaobject + dos_qmodelindex_create + dos_qmodelindex_create_qmodelindex + dos_qmodelindex_row + dos_qmodelindex_column + dos_qmodelindex_isValid + dos_qmodelindex_data + dos_qmodelindex_parent + dos_qmodelindex_child + dos_qmodelindex_sibling + dos_qmodelindex_assign + dos_qmodelindex_delete + dos_qabstractitemmodel_create + dos_qabstractitemmodel_setData + dos_qabstractitemmodel_flags + dos_qabstractitemmodel_headerData + dos_qabstractlistmodel_create + dos_qabstractlistmodel_index + dos_qabstractlistmodel_parent + dos_qabstractlistmodel_columnCount + dos_qabstracttablemodel_create + dos_qabstracttablemodel_index + dos_qabstracttablemodel_parent) (begin (foreign-declare "#include ") (foreign-declare "#include ")