Vendor chez-qt and gherkin-runtime; fix treesitter FFI guard and qt_chez_shim build
ober
91c25d0511c17e53a9baf5de0e0d58fdf5566a4c
--- a/CLAUDE.md +++ b/CLAUDE.md @@ -37,7 +37,7 @@ Common pitfalls when step 3 fails: - **`library (std ...) not found`**: The Docker image has a stale jerboa `std/` tree. New modules must be added to the sync list in the `linux-static-qt-docker` Makefile target AND compiled into the WPO step in `build-binary-qt.ss`. - **`Dynamic loading not supported`**: Any `load-shared-object` call must be guarded with the `JEMACS_STATIC` env var check (the binary sets `JEMACS_STATIC=1`). - **`final:` or other unsupported keywords**: jerbuild doesn't support all Gerbil `defstruct` keywords — remove them. -- **Dependencies not in gerbil-qt**: This project uses `~/mine/chez-qt`, NOT `~/mine/gerbil-qt`. The `CHEZ_QT_SHIM_DIR` must point to `.` (local project root) for runtime, and `vendor/` for the build header. +- **Dependencies not in gerbil-qt**: This project uses `vendor/chez-qt` (vendored from `github.com/ober/chez-qt`), NOT `~/mine/gerbil-qt`. The `CHEZ_QT_SHIM_DIR` must point to `.` (local project root) for runtime, and `vendor/` for the build header. Do NOT rely on `make run-qt` (interpreted mode) as proof the binary works — the static binary has different constraints (no `load-shared-object`, all libraries must be compiled in). --- a/Dockerfile +++ b/Dockerfile @@ -252,12 +252,14 @@ COPY --from=pcre2-src . /deps/chez-pcre2 COPY --from=sci-src . /deps/chez-scintilla COPY --from=qt-src . /deps/chez-qt COPY --from=qtshim-src . /deps/gerbil-qt +# qt_chez_shim.c is maintained in vendor/ (not in chez-qt) — copy it in +COPY vendor/qt_chez_shim.c vendor/qt_shim.h /deps/chez-qt/ # Pre-compile all Chez library dependencies. # These .so files are baked into the image so jemacs builds only # need to compile jemacs-specific modules. RUN /opt/chez/bin/scheme \ - --libdirs /deps/jerboa/lib:/deps/gherkin/src:/deps/jsh/src:/deps/chez-pcre2:/deps/chez-scintilla/src:/deps/chez-qt \ + --libdirs /deps/jerboa/lib:/deps/gherkin:/deps/jsh/src:/deps/chez-pcre2:/deps/chez-scintilla/src:/deps/chez-qt \ --compile-imported-libraries \ --script /dev/stdin <<'EOF' #!chezscheme --- a/Makefile +++ b/Makefile @@ -1,13 +1,14 @@ SCHEME = scheme JERBOA = $(HOME)/mine/jerboa JSH = vendor/jerboa-shell/src -GHERKIN = $(HOME)/mine/gherkin/src -LIBDIRS = --libdirs lib:$(JERBOA)/lib:$(JSH):$(GHERKIN):$(HOME)/mine/chez-pcre2:$(HOME)/mine/chez-scintilla/src:$(HOME)/mine/chez-qt +GHERKIN = vendor/gherkin-runtime +CHEZ_QT = vendor/chez-qt +LIBDIRS = --libdirs lib:$(JERBOA)/lib:$(JSH):$(GHERKIN):$(HOME)/mine/chez-pcre2:$(HOME)/mine/chez-scintilla/src:$(CHEZ_QT) JERBUILD = $(SCHEME) --libdirs $(JERBOA)/lib --script $(JERBOA)/jerbuild.ss -export LD_LIBRARY_PATH := .:$(HOME)/mine/chez-pcre2:$(HOME)/mine/chez-scintilla:$(HOME)/mine/chez-qt:vendor/jerboa-shell:$(LD_LIBRARY_PATH) +export LD_LIBRARY_PATH := .:$(HOME)/mine/chez-pcre2:$(HOME)/mine/chez-scintilla:vendor/jerboa-shell:$(LD_LIBRARY_PATH) export CHEZ_SCINTILLA_LIB := $(HOME)/mine/chez-scintilla export CHEZ_PCRE2_LIB := $(HOME)/mine/chez-pcre2 -export CHEZ_QT_LIB := $(HOME)/mine/chez-qt +export CHEZ_QT_LIB := $(CURDIR) export CHEZ_QT_SHIM_DIR := . .PHONY: all build rebuild run test-tier0 test-tier2 test-tier3 test-tier4 test-tier5 test-org test-extra test clean clean-generated \ @@ -49,8 +50,9 @@ libqt_shim.so: vendor/qt_shim.cpp -o libqt_shim.so \ -lQt6Core -lQt6Gui -lQt6Widgets -lqscintilla2_qt6 -lvterm -lutil -qt_chez_shim.so: vendor/qt_chez_shim.c vendor/qt_shim.h - gcc -shared -fPIC -O2 -o qt_chez_shim.so vendor/qt_chez_shim.c -Ivendor -Wall +qt_chez_shim.so: vendor/qt_chez_shim.c vendor/qt_shim.h libqt_shim.so + gcc -shared -fPIC -O2 -o qt_chez_shim.so vendor/qt_chez_shim.c -Ivendor -Wall \ + -DQT_SCINTILLA_AVAILABLE -L. -lqt_shim -Wl,-rpath,'$$ORIGIN' run-qt: build repl_shim.so libqt_shim.so vterm_shim.so qt_chez_shim.so LD_PRELOAD=./qt_chez_shim.so $(SCHEME) $(LIBDIRS) --script qt-main.ss @@ -248,11 +250,11 @@ GID := $(shell id -g) # Dependency source directories (all ~/mine/* local checkouts) JERBOA_SRC ?= $(HOME)/mine/jerboa -GHERKIN_SRC ?= $(HOME)/mine/gherkin +GHERKIN_SRC ?= $(CURDIR)/vendor/gherkin-runtime JSH_SRC ?= $(HOME)/mine/jerboa-shell PCRE2_SRC ?= $(HOME)/mine/chez-pcre2 SCI_SRC ?= $(HOME)/mine/chez-scintilla -QT_SRC ?= $(HOME)/mine/chez-qt +QT_SRC ?= $(CURDIR)/vendor/chez-qt QTSHIM_SRC ?= $(HOME)/mine/gerbil-qt JSH_COREUTILS_LIB ?= $(JSH_SRC)/rust-coreutils/target/x86_64-unknown-linux-musl/release/libjsh_coreutils.a @@ -318,8 +320,6 @@ build-jemacs-qt-static: check-root ar rcs /deps/gerbil-qt/vendor/libqt_shim.a \ /deps/gerbil-qt/vendor/qt_shim_static.o; \ fi && \ - cp /src/vendor/chez-qt-ffi-static.ss /deps/chez-qt/chez-qt/ffi.ss && \ - cp /src/vendor/chez-qt-qt.ss /deps/chez-qt/chez-qt/qt.ss && \ /opt/chez/bin/scheme --libdirs /deps/chez-qt \ --compile-imported-libraries --script /deps/chez-qt/compile-libs.ss && \ rm -f /deps/chez-qt/chez-qt/*.wpo && \ @@ -367,7 +367,7 @@ build-jemacs-qt-static: check-root CHEZ_DIR=$(CHEZ_MUSL_DIR) \ JERBOA_DIR=/deps/jerboa/lib \ JSH_DIR=/deps/jsh/src \ - GHERKIN_DIR=/deps/gherkin/src \ + GHERKIN_DIR=/src/vendor/gherkin-runtime \ CHEZ_PCRE2_DIR=/deps/chez-pcre2 \ CHEZ_SCINTILLA_DIR=/deps/chez-scintilla/src \ CHEZ_QT_DIR=/deps/chez-qt \ @@ -380,7 +380,7 @@ build-jemacs-qt-static: check-root TREE_SITTER_QUERIES_OBJ=/tmp/jemacs-build/treesitter_queries.o \ PKG_CONFIG_PATH=/opt/qt6-static/lib/pkgconfig \ /opt/chez/bin/scheme \ - --libdirs lib:/deps/jerboa/lib:/deps/jsh/src:/deps/gherkin/src:/deps/chez-pcre2:/deps/chez-scintilla/src:/deps/chez-qt \ + --libdirs lib:/deps/jerboa/lib:/deps/jsh/src:/src/vendor/gherkin-runtime:/deps/chez-pcre2:/deps/chez-scintilla/src:/deps/chez-qt \ --script build-binary-qt.ss linux-static-qt-docker: @@ -444,8 +444,8 @@ stress-test: stress-burn: build repl_shim.so libqt_shim.so vterm_shim.so qt_chez_shim.so @echo "=== Starting jemacs-qt stress burn-in ===" @rm -f $(HOME)/.jerboa-repl-port stress-test.log - @xvfb-run -a env LD_PRELOAD=./qt_chez_shim.so \ - $(SCHEME) $(LIBDIRS) --script qt-main.ss --repl 0 & + @xvfb-run -a env CHEZ_QT_SHIM_DIR=$(CURDIR) \ + $(SCHEME) $(LIBDIRS) --script $(CURDIR)/qt-main.ss --repl 0 & @for i in $$(seq 1 30); do \ [ -f $(HOME)/.jerboa-repl-port ] && break; \ sleep 0.5; \ @@ -501,8 +501,8 @@ stress-burn-static: test-behavioral: build repl_shim.so libqt_shim.so vterm_shim.so qt_chez_shim.so @echo "=== Starting jemacs-qt behavioral tests ===" @rm -f $(HOME)/.jerboa-repl-port - @xvfb-run -a env LD_PRELOAD=./qt_chez_shim.so \ - $(SCHEME) $(LIBDIRS) --script qt-main.ss --repl 0 & + @xvfb-run -a env CHEZ_QT_SHIM_DIR=$(CURDIR) \ + $(SCHEME) $(LIBDIRS) --script $(CURDIR)/qt-main.ss --repl 0 & @for i in $$(seq 1 30); do \ [ -f $(HOME)/.jerboa-repl-port ] && break; \ sleep 0.5; \ --- a/src/jerboa-emacs/treesitter.ss +++ b/src/jerboa-emacs/treesitter.ss @@ -69,71 +69,80 @@ (string-append dir "/treesitter_shim.so"))))))) ;;;============================================================================ -;;; FFI bindings +;;; FFI bindings — only evaluated when shim is available +;;; +;;; IMPORTANT: In Chez Scheme, (foreign-procedure ...) resolves the symbol at +;;; DEFINITION time (when the form is evaluated), not at call time. We must +;;; therefore guard every binding with (if ts-shim-loaded ...) so that the +;;; foreign-procedure forms are only evaluated after the .so is confirmed loaded. +;;; Without this guard, loading the module crashes with +;;; "no entry for ts_shim_parser_new" whenever treesitter_shim.so is absent. ;;;============================================================================ ;; Parser lifecycle (define ffi-ts-parser-new - (foreign-procedure "ts_shim_parser_new" () void*)) + (if ts-shim-loaded (foreign-procedure "ts_shim_parser_new" () void*) #f)) (define ffi-ts-parser-delete - (foreign-procedure "ts_shim_parser_delete" (void*) void)) + (if ts-shim-loaded (foreign-procedure "ts_shim_parser_delete" (void*) void) #f)) (define ffi-ts-parser-set-language - (foreign-procedure "ts_shim_parser_set_language" (void* string) int)) + (if ts-shim-loaded (foreign-procedure "ts_shim_parser_set_language" (void* string) int) #f)) ;; Parsing (define ffi-ts-parse-string - (foreign-procedure "ts_shim_parse_string" (void* void* string int) void*)) + (if ts-shim-loaded (foreign-procedure "ts_shim_parse_string" (void* void* string int) void*) #f)) (define ffi-ts-parse-incremental - (foreign-procedure "ts_shim_parse_incremental" - (void* void* string int int int int int int int int int int) void*)) + (if ts-shim-loaded + (foreign-procedure "ts_shim_parse_incremental" + (void* void* string int int int int int int int int int int) void*) + #f)) (define ffi-ts-tree-delete - (foreign-procedure "ts_shim_tree_delete" (void*) void)) + (if ts-shim-loaded (foreign-procedure "ts_shim_tree_delete" (void*) void) #f)) ;; Node slots (define ffi-ts-tree-root-node - (foreign-procedure "ts_shim_tree_root_node" (void* int) void)) + (if ts-shim-loaded (foreign-procedure "ts_shim_tree_root_node" (void* int) void) #f)) (define ffi-ts-node-start-byte - (foreign-procedure "ts_shim_node_start_byte" (int) int)) + (if ts-shim-loaded (foreign-procedure "ts_shim_node_start_byte" (int) int) #f)) (define ffi-ts-node-end-byte - (foreign-procedure "ts_shim_node_end_byte" (int) int)) + (if ts-shim-loaded (foreign-procedure "ts_shim_node_end_byte" (int) int) #f)) (define ffi-ts-node-type - (foreign-procedure "ts_shim_node_type" (int) string)) + (if ts-shim-loaded (foreign-procedure "ts_shim_node_type" (int) string) #f)) (define ffi-ts-node-is-null - (foreign-procedure "ts_shim_node_is_null" (int) int)) + (if ts-shim-loaded (foreign-procedure "ts_shim_node_is_null" (int) int) #f)) ;; Query (define ffi-ts-query-new - (foreign-procedure "ts_shim_query_new" (string string int u8* u8*) void*)) + (if ts-shim-loaded (foreign-procedure "ts_shim_query_new" (string string int u8* u8*) void*) #f)) (define ffi-ts-query-delete - (foreign-procedure "ts_shim_query_delete" (void*) void)) + (if ts-shim-loaded (foreign-procedure "ts_shim_query_delete" (void*) void) #f)) ;; Query cursor (define ffi-ts-query-cursor-new - (foreign-procedure "ts_shim_query_cursor_new" () void*)) + (if ts-shim-loaded (foreign-procedure "ts_shim_query_cursor_new" () void*) #f)) (define ffi-ts-query-cursor-delete - (foreign-procedure "ts_shim_query_cursor_delete" (void*) void)) + (if ts-shim-loaded (foreign-procedure "ts_shim_query_cursor_delete" (void*) void) #f)) (define ffi-ts-query-cursor-exec - (foreign-procedure "ts_shim_query_cursor_exec" (void* void* int) void)) + (if ts-shim-loaded (foreign-procedure "ts_shim_query_cursor_exec" (void* void* int) void) #f)) (define ffi-ts-query-cursor-set-byte-range - (foreign-procedure "ts_shim_query_cursor_set_byte_range" (void* int int) void)) + (if ts-shim-loaded (foreign-procedure "ts_shim_query_cursor_set_byte_range" (void* int int) void) #f)) ;; Batch highlight captures (define ffi-ts-highlight-captures - (foreign-procedure "ts_shim_highlight_captures" (void* void* u8* int) int)) + (if ts-shim-loaded (foreign-procedure "ts_shim_highlight_captures" (void* void* u8* int) int) #f)) ;; Capture name lookup (define ffi-ts-query-capture-name - (foreign-procedure "ts_shim_query_capture_name" (void* int) string)) + (if ts-shim-loaded (foreign-procedure "ts_shim_query_capture_name" (void* int) string) #f)) ;; Changed ranges (define ffi-ts-tree-changed-ranges - (foreign-procedure "ts_shim_tree_changed_ranges" (void* void* u8* int) int)) + (if ts-shim-loaded (foreign-procedure "ts_shim_tree_changed_ranges" (void* void* u8* int) int) #f)) ;; Embedded queries (define ffi-ts-get-highlight-query - (foreign-procedure "ts_shim_get_highlight_query" (string) string)) + (if ts-shim-loaded (foreign-procedure "ts_shim_get_highlight_query" (string) string) #f)) (define ffi-ts-get-highlight-query-len - (foreign-procedure "ts_shim_get_highlight_query_len" (string) int)) + (if ts-shim-loaded (foreign-procedure "ts_shim_get_highlight_query_len" (string) int) #f)) ;;;============================================================================ ;;; High-level Scheme API @@ -141,11 +150,13 @@ (def (ts-parser-create lang-name) "Create a parser configured for the given language. - Returns parser pointer or #f." - (let ((p (ffi-ts-parser-new))) - (if (= 1 (ffi-ts-parser-set-language p lang-name)) - p - (begin (ffi-ts-parser-delete p) #f)))) + Returns parser pointer or #f (also #f if tree-sitter shim not available)." + (if (not ts-shim-loaded) + #f + (let ((p (ffi-ts-parser-new))) + (if (= 1 (ffi-ts-parser-set-language p lang-name)) + p + (begin (ffi-ts-parser-delete p) #f))))) (def (ts-parser-delete! parser) (when parser (ffi-ts-parser-delete parser))) --- a/tests/test-behavioral.ss +++ b/tests/test-behavioral.ss @@ -177,7 +177,7 @@ (lambda (e) (set! *phase-fail* (+ *phase-fail* 1)) (displayln "FAIL: " - (with-output-to-string (lambda () (display-exception e))))) + (with-output-to-string (lambda () (display-condition e))))) (lambda () (thunk) (set! *phase-pass* (+ *phase-pass* 1)) @@ -1438,7 +1438,7 @@ (with-catch (lambda (e) - (displayln "FATAL: " (with-output-to-string (lambda () (display-exception e)))) + (displayln "FATAL: " (with-output-to-string (lambda () (display-condition e)))) (disconnect!) (exit 1)) (lambda () deleted file mode 100644 --- a/vendor/chez-qt-ffi-static.ss +++ /dev/null @@ -1,3304 +0,0 @@ -;;; ffi.ss — Low-level FFI bindings to Qt via qt_shim + qt_chez_shim -;;; -;;; Loads shared libraries and defines foreign-procedure bindings. -;;; The high-level API lives in qt.ss. - -(library (chez-qt ffi) - (export - ;; Callback registration (called once at init) - ffi-set-void-callback ffi-set-string-callback - ffi-set-int-callback ffi-set-bool-callback - - ;; Application lifecycle - ffi-qt-app-create ffi-qt-app-exec ffi-qt-app-quit - ffi-qt-app-process-events ffi-qt-app-destroy ffi-qt-app-is-running - - ;; Widget base - ffi-qt-widget-create ffi-qt-widget-show ffi-qt-widget-hide - ffi-qt-widget-close ffi-qt-widget-set-enabled ffi-qt-widget-is-enabled - ffi-qt-widget-set-visible ffi-qt-widget-is-visible - ffi-qt-widget-set-updates-enabled - ffi-qt-widget-set-fixed-size ffi-qt-widget-set-minimum-size - ffi-qt-widget-set-maximum-size - ffi-qt-widget-set-minimum-width ffi-qt-widget-set-minimum-height - ffi-qt-widget-set-maximum-width ffi-qt-widget-set-maximum-height - ffi-qt-widget-set-cursor ffi-qt-widget-unset-cursor - ffi-qt-widget-resize ffi-qt-widget-set-style-sheet ffi-qt-widget-set-attribute - ffi-qt-widget-set-tooltip ffi-qt-widget-set-font-size - ffi-qt-widget-destroy - - ;; Main Window - ffi-qt-main-window-create ffi-qt-main-window-set-title - ffi-qt-main-window-set-central-widget - - ;; Layouts - ffi-qt-vbox-layout-create ffi-qt-hbox-layout-create - ffi-qt-layout-add-widget ffi-qt-layout-add-stretch - ffi-qt-layout-set-spacing ffi-qt-layout-set-margins - - ;; Labels - ffi-qt-label-create ffi-qt-label-set-text ffi-qt-label-text - ffi-qt-label-set-alignment ffi-qt-label-set-word-wrap - - ;; Push Button - ffi-qt-push-button-create ffi-qt-push-button-set-text - ffi-qt-push-button-text ffi-qt-push-button-on-clicked - - ;; Line Edit - ffi-qt-line-edit-create ffi-qt-line-edit-set-text ffi-qt-line-edit-text - ffi-qt-line-edit-set-placeholder ffi-qt-line-edit-set-read-only - ffi-qt-line-edit-set-echo-mode - ffi-qt-line-edit-on-text-changed ffi-qt-line-edit-on-return-pressed - - ;; Check Box - ffi-qt-check-box-create ffi-qt-check-box-set-text - ffi-qt-check-box-set-checked ffi-qt-check-box-is-checked - ffi-qt-check-box-on-toggled - - ;; Combo Box - ffi-qt-combo-box-create ffi-qt-combo-box-add-item - ffi-qt-combo-box-set-current-index ffi-qt-combo-box-current-index - ffi-qt-combo-box-current-text ffi-qt-combo-box-count - ffi-qt-combo-box-clear ffi-qt-combo-box-on-current-index-changed - - ;; Text Edit - ffi-qt-text-edit-create ffi-qt-text-edit-set-text ffi-qt-text-edit-text - ffi-qt-text-edit-set-placeholder ffi-qt-text-edit-set-read-only - ffi-qt-text-edit-append ffi-qt-text-edit-clear - ffi-qt-text-edit-scroll-to-bottom ffi-qt-text-edit-html - ffi-qt-text-edit-on-text-changed - - ;; Spin Box - ffi-qt-spin-box-create ffi-qt-spin-box-set-value ffi-qt-spin-box-value - ffi-qt-spin-box-set-range ffi-qt-spin-box-set-single-step - ffi-qt-spin-box-set-prefix ffi-qt-spin-box-set-suffix - ffi-qt-spin-box-on-value-changed - - ;; Dialog - ffi-qt-dialog-create ffi-qt-dialog-exec ffi-qt-dialog-accept - ffi-qt-dialog-reject ffi-qt-dialog-set-title - - ;; Message Box - ffi-qt-message-box-information ffi-qt-message-box-warning - ffi-qt-message-box-question ffi-qt-message-box-critical - - ;; File Dialog - ffi-qt-file-dialog-open-file ffi-qt-file-dialog-save-file - ffi-qt-file-dialog-open-directory - - ;; Menu Bar - ffi-qt-main-window-menu-bar - - ;; Menu - ffi-qt-menu-bar-add-menu ffi-qt-menu-add-menu - ffi-qt-menu-add-action ffi-qt-menu-add-separator - - ;; Action - ffi-qt-action-create ffi-qt-action-set-text ffi-qt-action-text - ffi-qt-action-set-shortcut ffi-qt-action-set-enabled ffi-qt-action-is-enabled - ffi-qt-action-set-checkable ffi-qt-action-is-checkable - ffi-qt-action-set-checked ffi-qt-action-is-checked - ffi-qt-action-set-tooltip ffi-qt-action-set-status-tip - ffi-qt-action-on-triggered ffi-qt-action-on-toggled - - ;; Toolbar - ffi-qt-toolbar-create ffi-qt-main-window-add-toolbar - ffi-qt-toolbar-add-action ffi-qt-toolbar-add-separator - ffi-qt-toolbar-add-widget ffi-qt-toolbar-set-movable - ffi-qt-toolbar-set-icon-size - - ;; Status Bar - ffi-qt-main-window-set-status-bar-text - - ;; Grid Layout - ffi-qt-grid-layout-create ffi-qt-grid-layout-add-widget - ffi-qt-grid-layout-set-row-stretch ffi-qt-grid-layout-set-column-stretch - ffi-qt-grid-layout-set-row-minimum-height - ffi-qt-grid-layout-set-column-minimum-width - - ;; Timer - ffi-qt-timer-create ffi-qt-timer-start ffi-qt-timer-stop - ffi-qt-timer-set-single-shot ffi-qt-timer-is-active - ffi-qt-timer-interval ffi-qt-timer-set-interval - ffi-qt-timer-on-timeout ffi-qt-timer-single-shot - ffi-qt-timer-destroy - - ;; Clipboard - ffi-qt-clipboard-text ffi-qt-clipboard-set-text - ffi-qt-clipboard-on-changed - - ;; Tree Widget - ffi-qt-tree-widget-create ffi-qt-tree-widget-set-column-count - ffi-qt-tree-widget-column-count ffi-qt-tree-widget-set-header-label - ffi-qt-tree-widget-set-header-item-text - ffi-qt-tree-widget-add-top-level-item ffi-qt-tree-widget-top-level-item-count - ffi-qt-tree-widget-top-level-item ffi-qt-tree-widget-current-item - ffi-qt-tree-widget-set-current-item - ffi-qt-tree-widget-expand-item ffi-qt-tree-widget-collapse-item - ffi-qt-tree-widget-expand-all ffi-qt-tree-widget-collapse-all - ffi-qt-tree-widget-clear - ffi-qt-tree-widget-on-current-item-changed - ffi-qt-tree-widget-on-item-double-clicked - ffi-qt-tree-widget-on-item-expanded ffi-qt-tree-widget-on-item-collapsed - - ;; Tree Widget Item - ffi-qt-tree-item-create ffi-qt-tree-item-set-text ffi-qt-tree-item-text - ffi-qt-tree-item-add-child ffi-qt-tree-item-child-count - ffi-qt-tree-item-child ffi-qt-tree-item-parent - ffi-qt-tree-item-set-expanded ffi-qt-tree-item-is-expanded - - ;; List Widget - ffi-qt-list-widget-create ffi-qt-list-widget-add-item - ffi-qt-list-widget-insert-item ffi-qt-list-widget-remove-item - ffi-qt-list-widget-current-row ffi-qt-list-widget-set-current-row - ffi-qt-list-widget-item-text ffi-qt-list-widget-count - ffi-qt-list-widget-clear - ffi-qt-list-widget-set-item-data ffi-qt-list-widget-item-data - ffi-qt-list-widget-on-current-row-changed - ffi-qt-list-widget-on-item-double-clicked - - ;; Table Widget - ffi-qt-table-widget-create ffi-qt-table-widget-set-item - ffi-qt-table-widget-item-text - ffi-qt-table-widget-set-horizontal-header-item - ffi-qt-table-widget-set-vertical-header-item - ffi-qt-table-widget-set-row-count ffi-qt-table-widget-set-column-count - ffi-qt-table-widget-row-count ffi-qt-table-widget-column-count - ffi-qt-table-widget-current-row ffi-qt-table-widget-current-column - ffi-qt-table-widget-clear ffi-qt-table-widget-on-cell-clicked - - ;; Tab Widget - ffi-qt-tab-widget-create ffi-qt-tab-widget-add-tab - ffi-qt-tab-widget-set-current-index ffi-qt-tab-widget-current-index - ffi-qt-tab-widget-count ffi-qt-tab-widget-set-tab-text - ffi-qt-tab-widget-on-current-changed - - ;; Progress Bar - ffi-qt-progress-bar-create ffi-qt-progress-bar-set-value - ffi-qt-progress-bar-value ffi-qt-progress-bar-set-range - ffi-qt-progress-bar-set-format - - ;; Slider - ffi-qt-slider-create ffi-qt-slider-set-value ffi-qt-slider-value - ffi-qt-slider-set-range ffi-qt-slider-set-single-step - ffi-qt-slider-set-tick-interval ffi-qt-slider-set-tick-position - ffi-qt-slider-on-value-changed - - ;; Window State - ffi-qt-widget-show-minimized ffi-qt-widget-show-maximized - ffi-qt-widget-show-fullscreen ffi-qt-widget-show-normal - ffi-qt-widget-window-state ffi-qt-widget-move - ffi-qt-widget-x ffi-qt-widget-y ffi-qt-widget-width ffi-qt-widget-height - ffi-qt-widget-set-focus - - ;; App Style Sheet - ffi-qt-app-set-style-sheet - - ;; Scroll Area - ffi-qt-scroll-area-create ffi-qt-scroll-area-set-widget - ffi-qt-scroll-area-set-widget-resizable - ffi-qt-scroll-area-set-horizontal-scrollbar-policy - ffi-qt-scroll-area-set-vertical-scrollbar-policy - - ;; Splitter - ffi-qt-splitter-create ffi-qt-splitter-add-widget - ffi-qt-splitter-insert-widget ffi-qt-splitter-index-of - ffi-qt-splitter-widget ffi-qt-splitter-count - ffi-qt-splitter-set-sizes-2 ffi-qt-splitter-set-sizes-3 ffi-qt-splitter-set-sizes-4 ffi-qt-splitter-size-at - ffi-qt-splitter-set-stretch-factor ffi-qt-splitter-set-handle-width - ffi-qt-splitter-set-collapsible ffi-qt-splitter-is-collapsible - ffi-qt-splitter-set-orientation - - ;; Keyboard Events - ffi-qt-install-key-handler ffi-qt-install-key-handler-consuming - ffi-qt-last-key-code ffi-qt-last-key-modifiers ffi-qt-last-key-text - ffi-qt-last-key-autorepeat - ffi-qt-send-key-event - - ;; Pixmap - ffi-qt-pixmap-load ffi-qt-pixmap-width ffi-qt-pixmap-height - ffi-qt-pixmap-is-null ffi-qt-pixmap-scaled ffi-qt-pixmap-destroy - ffi-qt-pixmap-save ffi-qt-widget-grab - ffi-qt-label-set-pixmap - - ;; Icon - ffi-qt-icon-create ffi-qt-icon-create-from-pixmap - ffi-qt-icon-is-null ffi-qt-icon-destroy - ffi-qt-push-button-set-icon ffi-qt-action-set-icon - ffi-qt-widget-set-window-icon - - ;; Radio Button - ffi-qt-radio-button-create ffi-qt-radio-button-text - ffi-qt-radio-button-set-text - ffi-qt-radio-button-is-checked ffi-qt-radio-button-set-checked - ffi-qt-radio-button-on-toggled - - ;; Button Group - ffi-qt-button-group-create ffi-qt-button-group-add-button - ffi-qt-button-group-remove-button ffi-qt-button-group-checked-id - ffi-qt-button-group-set-exclusive ffi-qt-button-group-is-exclusive - ffi-qt-button-group-on-clicked ffi-qt-button-group-destroy - - ;; Group Box - ffi-qt-group-box-create ffi-qt-group-box-title - ffi-qt-group-box-set-title - ffi-qt-group-box-set-checkable ffi-qt-group-box-is-checkable - ffi-qt-group-box-set-checked ffi-qt-group-box-is-checked - ffi-qt-group-box-on-toggled - - ;; Font - ffi-qt-font-create ffi-qt-font-family ffi-qt-font-point-size - ffi-qt-font-is-bold ffi-qt-font-set-bold - ffi-qt-font-is-italic ffi-qt-font-set-italic - ffi-qt-font-destroy ffi-qt-widget-set-font ffi-qt-widget-font - - ;; Color - ffi-qt-color-create ffi-qt-color-create-name - ffi-qt-color-red ffi-qt-color-green ffi-qt-color-blue ffi-qt-color-alpha - ffi-qt-color-name ffi-qt-color-is-valid ffi-qt-color-destroy - - ;; Constants - ffi-qt-const-align-left ffi-qt-const-align-right ffi-qt-const-align-center - ffi-qt-const-align-top ffi-qt-const-align-bottom - ffi-qt-const-echo-normal ffi-qt-const-echo-no-echo - ffi-qt-const-echo-password ffi-qt-const-echo-password-on-edit - ffi-qt-const-horizontal ffi-qt-const-vertical - ffi-qt-const-ticks-none ffi-qt-const-ticks-above - ffi-qt-const-ticks-below ffi-qt-const-ticks-both-sides - ffi-qt-const-window-no-state ffi-qt-const-window-minimized - ffi-qt-const-window-maximized ffi-qt-const-window-full-screen - ffi-qt-const-scrollbar-as-needed ffi-qt-const-scrollbar-always-off - ffi-qt-const-scrollbar-always-on - ffi-qt-const-cursor-arrow ffi-qt-const-cursor-cross - ffi-qt-const-cursor-wait ffi-qt-const-cursor-ibeam - ffi-qt-const-cursor-pointing-hand ffi-qt-const-cursor-forbidden - ffi-qt-const-cursor-busy - - ;; Frame constants - ffi-qt-const-frame-no-frame ffi-qt-const-frame-box ffi-qt-const-frame-panel - ffi-qt-const-frame-win-panel ffi-qt-const-frame-hline ffi-qt-const-frame-vline - ffi-qt-const-frame-styled-panel - ffi-qt-const-frame-plain ffi-qt-const-frame-raised ffi-qt-const-frame-sunken - - ;; Button box constants - ffi-qt-const-button-ok ffi-qt-const-button-cancel ffi-qt-const-button-apply - ffi-qt-const-button-close ffi-qt-const-button-yes ffi-qt-const-button-no - ffi-qt-const-button-reset ffi-qt-const-button-help ffi-qt-const-button-save - ffi-qt-const-button-discard - ffi-qt-const-button-role-invalid ffi-qt-const-button-role-accept - ffi-qt-const-button-role-reject ffi-qt-const-button-role-destructive - ffi-qt-const-button-role-action ffi-qt-const-button-role-help - ffi-qt-const-button-role-yes ffi-qt-const-button-role-no - ffi-qt-const-button-role-apply ffi-qt-const-button-role-reset - - ;; Day-of-week constants - ffi-qt-const-monday ffi-qt-const-tuesday ffi-qt-const-wednesday - ffi-qt-const-thursday ffi-qt-const-friday ffi-qt-const-saturday ffi-qt-const-sunday - - ;; Settings constants - ffi-qt-const-settings-native ffi-qt-const-settings-ini - - ;; Completer constants - ffi-qt-const-completer-popup ffi-qt-const-completer-inline - ffi-qt-const-completer-unfiltered-popup - - ;; Case sensitivity - ffi-qt-const-case-insensitive ffi-qt-const-case-sensitive - - ;; Match filter mode - ffi-qt-const-match-starts-with ffi-qt-const-match-contains - ffi-qt-const-match-ends-with - - ;; Validator state - ffi-qt-const-validator-invalid ffi-qt-const-validator-intermediate - ffi-qt-const-validator-acceptable - - ;; PlainTextEdit wrap - ffi-qt-const-plain-no-wrap ffi-qt-const-plain-widget-wrap - - ;; ToolButton constants - ffi-qt-const-delayed-popup ffi-qt-const-menu-button-popup ffi-qt-const-instant-popup - ffi-qt-const-no-arrow ffi-qt-const-up-arrow ffi-qt-const-down-arrow - ffi-qt-const-left-arrow ffi-qt-const-right-arrow - ffi-qt-const-tool-button-icon-only ffi-qt-const-tool-button-text-only - ffi-qt-const-tool-button-text-beside-icon ffi-qt-const-tool-button-text-under-icon - - ;; Size policy - ffi-qt-const-size-fixed ffi-qt-const-size-minimum ffi-qt-const-size-minimum-expanding - ffi-qt-const-size-maximum ffi-qt-const-size-preferred ffi-qt-const-size-expanding - ffi-qt-const-size-ignored - - ;; Graphics constants - ffi-qt-const-item-movable ffi-qt-const-item-selectable ffi-qt-const-item-focusable - ffi-qt-const-drag-none ffi-qt-const-drag-scroll ffi-qt-const-drag-rubber-band - ffi-qt-const-render-antialiasing ffi-qt-const-render-smooth-pixmap - ffi-qt-const-render-text-antialiasing - - ;; Process state - ffi-qt-const-process-not-running ffi-qt-const-process-starting - ffi-qt-const-process-running - - ;; MDI view mode - ffi-qt-const-mdi-subwindow ffi-qt-const-mdi-tabbed - - ;; LCD constants - ffi-qt-const-lcd-dec ffi-qt-const-lcd-hex ffi-qt-const-lcd-oct ffi-qt-const-lcd-bin - ffi-qt-const-lcd-outline ffi-qt-const-lcd-filled ffi-qt-const-lcd-flat - - ;; Dir filter flags - ffi-qt-const-dir-dirs ffi-qt-const-dir-files ffi-qt-const-dir-hidden - ffi-qt-const-dir-no-dot-and-dot-dot - - ;; Cursor movement - ffi-qt-const-cursor-no-move ffi-qt-const-cursor-start ffi-qt-const-cursor-up - ffi-qt-const-cursor-start-of-line ffi-qt-const-cursor-start-of-block - ffi-qt-const-cursor-previous-char ffi-qt-const-cursor-previous-block - ffi-qt-const-cursor-end-of-line ffi-qt-const-cursor-end-of-block - ffi-qt-const-cursor-next-char ffi-qt-const-cursor-next-block - ffi-qt-const-cursor-end ffi-qt-const-cursor-down - ffi-qt-const-cursor-left ffi-qt-const-cursor-word-left - ffi-qt-const-cursor-next-word ffi-qt-const-cursor-right - ffi-qt-const-cursor-word-right ffi-qt-const-cursor-previous-word - ffi-qt-const-move-anchor ffi-qt-const-keep-anchor - - ;; Find flags - ffi-qt-const-find-backward ffi-qt-const-find-case-sensitive - ffi-qt-const-find-whole-words - - ;; Dock area - ffi-qt-const-dock-left ffi-qt-const-dock-right - ffi-qt-const-dock-top ffi-qt-const-dock-bottom - - ;; Tray icon message type - ffi-qt-const-tray-no-icon ffi-qt-const-tray-information - ffi-qt-const-tray-warning ffi-qt-const-tray-critical - - ;; Key constants - ffi-qt-const-key-escape ffi-qt-const-key-tab ffi-qt-const-key-backtab - ffi-qt-const-key-backspace ffi-qt-const-key-return ffi-qt-const-key-enter - ffi-qt-const-key-insert ffi-qt-const-key-delete ffi-qt-const-key-pause - ffi-qt-const-key-home ffi-qt-const-key-end - ffi-qt-const-key-left ffi-qt-const-key-up ffi-qt-const-key-right ffi-qt-const-key-down - ffi-qt-const-key-page-up ffi-qt-const-key-page-down - ffi-qt-const-key-f1 ffi-qt-const-key-f2 ffi-qt-const-key-f3 ffi-qt-const-key-f4 - ffi-qt-const-key-f5 ffi-qt-const-key-f6 ffi-qt-const-key-f7 ffi-qt-const-key-f8 - ffi-qt-const-key-f9 ffi-qt-const-key-f10 ffi-qt-const-key-f11 ffi-qt-const-key-f12 - ffi-qt-const-key-space - - ;; Keyboard modifiers - ffi-qt-const-mod-none ffi-qt-const-mod-shift ffi-qt-const-mod-control - ffi-qt-const-mod-alt ffi-qt-const-mod-meta - - ;; Selection mode/behavior - ffi-qt-const-select-no-selection ffi-qt-const-select-single - ffi-qt-const-select-multi ffi-qt-const-select-extended ffi-qt-const-select-contiguous - ffi-qt-const-select-items ffi-qt-const-select-rows ffi-qt-const-select-columns - - ;; Edit triggers - ffi-qt-const-no-edit-triggers ffi-qt-const-edit-double-click - ffi-qt-const-edit-selected-click ffi-qt-const-edit-any-key-pressed - ffi-qt-const-edit-all-triggers - - ;; Sort order - ffi-qt-const-sort-ascending ffi-qt-const-sort-descending - - ;; Header resize mode - ffi-qt-const-header-interactive ffi-qt-const-header-stretch - ffi-qt-const-header-fixed ffi-qt-const-header-resize-to-contents - - ;; Check state - ffi-qt-const-unchecked ffi-qt-const-partially-checked ffi-qt-const-checked - - ;; ListView flow - ffi-qt-const-flow-top-to-bottom ffi-qt-const-flow-left-to-right - - ;; Font Dialog / Color Dialog - ffi-qt-font-dialog-get-font ffi-qt-color-dialog-get-color - - ;; Stacked Widget - ffi-qt-stacked-widget-create ffi-qt-stacked-widget-add-widget - ffi-qt-stacked-widget-set-current-index ffi-qt-stacked-widget-current-index - ffi-qt-stacked-widget-count ffi-qt-stacked-widget-on-current-changed - - ;; Dock Widget - ffi-qt-dock-widget-create ffi-qt-dock-widget-set-widget - ffi-qt-dock-widget-widget ffi-qt-dock-widget-set-title ffi-qt-dock-widget-title - ffi-qt-dock-widget-set-floating ffi-qt-dock-widget-is-floating - ffi-qt-main-window-add-dock-widget - - ;; System Tray Icon - ffi-qt-system-tray-icon-create ffi-qt-system-tray-icon-set-tooltip - ffi-qt-system-tray-icon-set-icon ffi-qt-system-tray-icon-show - ffi-qt-system-tray-icon-hide ffi-qt-system-tray-icon-show-message - ffi-qt-system-tray-icon-set-context-menu - ffi-qt-system-tray-icon-on-activated - ffi-qt-system-tray-icon-is-available ffi-qt-system-tray-icon-destroy - - ;; QPainter - ffi-qt-pixmap-create-blank ffi-qt-pixmap-fill - ffi-qt-painter-create ffi-qt-painter-end ffi-qt-painter-destroy - ffi-qt-painter-set-pen-color ffi-qt-painter-set-pen-width - ffi-qt-painter-set-brush-color ffi-qt-painter-set-font-painter - ffi-qt-painter-set-antialiasing - ffi-qt-painter-draw-line ffi-qt-painter-draw-rect ffi-qt-painter-fill-rect - ffi-qt-painter-draw-ellipse ffi-qt-painter-draw-text ffi-qt-painter-draw-text-rect - ffi-qt-painter-draw-pixmap ffi-qt-painter-draw-point ffi-qt-painter-draw-arc - ffi-qt-painter-save ffi-qt-painter-restore - ffi-qt-painter-translate ffi-qt-painter-rotate ffi-qt-painter-scale - - ;; Drag and Drop - ffi-qt-widget-set-accept-drops - ffi-qt-drop-filter-install ffi-qt-drop-filter-last-text - ffi-qt-drop-filter-destroy ffi-qt-drag-text - - ;; Double Spin Box - ffi-qt-double-spin-box-create ffi-qt-double-spin-box-set-value - ffi-qt-double-spin-box-value ffi-qt-double-spin-box-set-range - ffi-qt-double-spin-box-set-single-step ffi-qt-double-spin-box-set-decimals - ffi-qt-double-spin-box-decimals ffi-qt-double-spin-box-set-prefix - ffi-qt-double-spin-box-set-suffix ffi-qt-double-spin-box-on-value-changed - - ;; Date Edit - ffi-qt-date-edit-create ffi-qt-date-edit-set-date - ffi-qt-date-edit-year ffi-qt-date-edit-month ffi-qt-date-edit-day - ffi-qt-date-edit-date-string ffi-qt-date-edit-set-minimum-date - ffi-qt-date-edit-set-maximum-date ffi-qt-date-edit-set-calendar-popup - ffi-qt-date-edit-set-display-format ffi-qt-date-edit-on-date-changed - - ;; Time Edit - ffi-qt-time-edit-create ffi-qt-time-edit-set-time - ffi-qt-time-edit-hour ffi-qt-time-edit-minute ffi-qt-time-edit-second - ffi-qt-time-edit-time-string ffi-qt-time-edit-set-display-format - ffi-qt-time-edit-on-time-changed - - ;; Frame - ffi-qt-frame-create ffi-qt-frame-set-frame-shape ffi-qt-frame-frame-shape - ffi-qt-frame-set-frame-shadow ffi-qt-frame-frame-shadow - ffi-qt-frame-set-line-width ffi-qt-frame-line-width ffi-qt-frame-set-mid-line-width - - ;; Progress Dialog - ffi-qt-progress-dialog-create ffi-qt-progress-dialog-set-value - ffi-qt-progress-dialog-value ffi-qt-progress-dialog-set-range - ffi-qt-progress-dialog-set-label-text ffi-qt-progress-dialog-was-canceled - ffi-qt-progress-dialog-set-minimum-duration - ffi-qt-progress-dialog-set-auto-close ffi-qt-progress-dialog-set-auto-reset - ffi-qt-progress-dialog-reset ffi-qt-progress-dialog-on-canceled - - ;; Input Dialog - ffi-qt-input-dialog-get-text ffi-qt-input-dialog-get-int - ffi-qt-input-dialog-get-double ffi-qt-input-dialog-get-item - ffi-qt-input-dialog-was-accepted - - ;; Form Layout - ffi-qt-form-layout-create ffi-qt-form-layout-add-row - ffi-qt-form-layout-add-row-widget ffi-qt-form-layout-add-spanning-widget - ffi-qt-form-layout-row-count - - ;; Shortcut - ffi-qt-shortcut-create ffi-qt-shortcut-set-key - ffi-qt-shortcut-set-enabled ffi-qt-shortcut-is-enabled - ffi-qt-shortcut-on-activated ffi-qt-shortcut-destroy - - ;; Text Browser - ffi-qt-text-browser-create ffi-qt-text-browser-set-html - ffi-qt-text-browser-set-plain-text ffi-qt-text-browser-plain-text - ffi-qt-text-browser-set-open-external-links - ffi-qt-text-browser-set-source ffi-qt-text-browser-source - ffi-qt-text-browser-scroll-to-bottom ffi-qt-text-browser-append - ffi-qt-text-browser-html ffi-qt-text-browser-on-anchor-clicked - - ;; Button Box - ffi-qt-button-box-create ffi-qt-button-box-button - ffi-qt-button-box-add-button - ffi-qt-button-box-on-accepted ffi-qt-button-box-on-rejected - ffi-qt-button-box-on-clicked - - ;; Calendar - ffi-qt-calendar-create ffi-qt-calendar-set-selected-date - ffi-qt-calendar-selected-year ffi-qt-calendar-selected-month - ffi-qt-calendar-selected-day ffi-qt-calendar-selected-date-string - ffi-qt-calendar-set-minimum-date ffi-qt-calendar-set-maximum-date - ffi-qt-calendar-set-first-day-of-week ffi-qt-calendar-set-grid-visible - ffi-qt-calendar-is-grid-visible ffi-qt-calendar-set-navigation-bar-visible - ffi-qt-calendar-on-selection-changed ffi-qt-calendar-on-clicked - - ;; QSettings - ffi-qt-settings-create ffi-qt-settings-create-file - ffi-qt-settings-set-string ffi-qt-settings-value-string - ffi-qt-settings-set-int ffi-qt-settings-value-int - ffi-qt-settings-set-double ffi-qt-settings-value-double - ffi-qt-settings-set-bool ffi-qt-settings-value-bool - ffi-qt-settings-contains ffi-qt-settings-remove - ffi-qt-settings-all-keys ffi-qt-settings-child-keys ffi-qt-settings-child-groups - ffi-qt-settings-begin-group ffi-qt-settings-end-group ffi-qt-settings-group - ffi-qt-settings-sync ffi-qt-settings-clear - ffi-qt-settings-file-name ffi-qt-settings-is-writable ffi-qt-settings-destroy - - ;; QCompleter - ffi-qt-completer-create ffi-qt-completer-set-model-strings - ffi-qt-completer-set-case-sensitivity ffi-qt-completer-set-completion-mode - ffi-qt-completer-set-filter-mode ffi-qt-completer-set-max-visible-items - ffi-qt-completer-completion-count ffi-qt-completer-current-completion - ffi-qt-completer-set-completion-prefix - ffi-qt-completer-on-activated - ffi-qt-line-edit-set-completer ffi-qt-completer-destroy - - ;; Tooltip / WhatsThis - ffi-qt-tooltip-show-text ffi-qt-tooltip-hide-text ffi-qt-tooltip-is-visible - ffi-qt-widget-tooltip ffi-qt-widget-set-whats-this ffi-qt-widget-whats-this - - ;; QStandardItemModel - ffi-qt-standard-model-create ffi-qt-standard-model-destroy - ffi-qt-standard-model-row-count ffi-qt-standard-model-column-count - ffi-qt-standard-model-set-row-count ffi-qt-standard-model-set-column-count - ffi-qt-standard-model-set-item ffi-qt-standard-model-item - ffi-qt-standard-model-insert-row ffi-qt-standard-model-insert-column - ffi-qt-standard-model-remove-row ffi-qt-standard-model-remove-column - ffi-qt-standard-model-clear - ffi-qt-standard-model-set-horizontal-header - ffi-qt-standard-model-set-vertical-header - - ;; QStandardItem - ffi-qt-standard-item-create ffi-qt-standard-item-text - ffi-qt-standard-item-set-text - ffi-qt-standard-item-tooltip ffi-qt-standard-item-set-tooltip - ffi-qt-standard-item-set-editable ffi-qt-standard-item-is-editable - ffi-qt-standard-item-set-enabled ffi-qt-standard-item-is-enabled - ffi-qt-standard-item-set-selectable ffi-qt-standard-item-is-selectable - ffi-qt-standard-item-set-checkable ffi-qt-standard-item-is-checkable - ffi-qt-standard-item-set-check-state ffi-qt-standard-item-check-state - ffi-qt-standard-item-set-icon - ffi-qt-standard-item-append-row ffi-qt-standard-item-row-count - ffi-qt-standard-item-column-count ffi-qt-standard-item-child - - ;; QStringListModel - ffi-qt-string-list-model-create ffi-qt-string-list-model-destroy - ffi-qt-string-list-model-set-strings ffi-qt-string-list-model-strings - ffi-qt-string-list-model-row-count - - ;; Views (common) - ffi-qt-view-set-model ffi-qt-view-set-selection-mode - ffi-qt-view-set-selection-behavior ffi-qt-view-set-alternating-row-colors - ffi-qt-view-set-sorting-enabled ffi-qt-view-set-edit-triggers - - ;; QListView - ffi-qt-list-view-create ffi-qt-list-view-set-flow - - ;; QTableView - ffi-qt-table-view-create ffi-qt-table-view-set-column-width - ffi-qt-table-view-set-row-height - ffi-qt-table-view-hide-column ffi-qt-table-view-show-column - ffi-qt-table-view-hide-row ffi-qt-table-view-show-row - ffi-qt-table-view-resize-columns-to-contents - ffi-qt-table-view-resize-rows-to-contents - - ;; QTreeView - ffi-qt-tree-view-create ffi-qt-tree-view-expand-all ffi-qt-tree-view-collapse-all - ffi-qt-tree-view-set-indentation ffi-qt-tree-view-indentation - ffi-qt-tree-view-set-root-is-decorated ffi-qt-tree-view-set-header-hidden - ffi-qt-tree-view-set-column-width - - ;; QHeaderView (via view) - ffi-qt-view-header-set-stretch-last-section - ffi-qt-view-header-set-section-resize-mode - ffi-qt-view-header-hide ffi-qt-view-header-show - ffi-qt-view-header-set-default-section-size - - ;; QSortFilterProxyModel - ffi-qt-sort-filter-proxy-create ffi-qt-sort-filter-proxy-destroy - ffi-qt-sort-filter-proxy-set-source-model - ffi-qt-sort-filter-proxy-set-filter-regex - ffi-qt-sort-filter-proxy-set-filter-column - ffi-qt-sort-filter-proxy-set-filter-case-sensitivity - ffi-qt-sort-filter-proxy-set-filter-role - ffi-qt-sort-filter-proxy-sort ffi-qt-sort-filter-proxy-set-sort-role - ffi-qt-sort-filter-proxy-set-dynamic-sort-filter - ffi-qt-sort-filter-proxy-invalidate-filter - ffi-qt-sort-filter-proxy-row-count - - ;; View signals + selection - ffi-qt-view-on-clicked ffi-qt-view-on-double-clicked - ffi-qt-view-on-activated ffi-qt-view-on-selection-changed - ffi-qt-view-last-clicked-row ffi-qt-view-last-clicked-col - ffi-qt-view-selected-rows ffi-qt-view-current-row - - ;; Validators - ffi-qt-int-validator-create ffi-qt-double-validator-create - ffi-qt-regex-validator-create ffi-qt-validator-destroy - ffi-qt-validator-validate ffi-qt-line-edit-set-validator - ffi-qt-line-edit-has-acceptable-input - - ;; QPlainTextEdit - ffi-qt-plain-text-edit-create ffi-qt-plain-text-edit-set-text - ffi-qt-plain-text-edit-text ffi-qt-plain-text-edit-append - ffi-qt-plain-text-edit-clear ffi-qt-plain-text-edit-set-read-only - ffi-qt-plain-text-edit-is-read-only ffi-qt-plain-text-edit-set-placeholder - ffi-qt-plain-text-edit-line-count ffi-qt-plain-text-edit-set-max-block-count - ffi-qt-plain-text-edit-cursor-line ffi-qt-plain-text-edit-cursor-column - ffi-qt-plain-text-edit-set-line-wrap - ffi-qt-plain-text-edit-on-text-changed - ;; Editor extensions - ffi-qt-plain-text-edit-cursor-position ffi-qt-plain-text-edit-set-cursor-position - ffi-qt-plain-text-edit-move-cursor - ffi-qt-plain-text-edit-select-all ffi-qt-plain-text-edit-selected-text - ffi-qt-plain-text-edit-selection-start ffi-qt-plain-text-edit-selection-end - ffi-qt-plain-text-edit-set-selection ffi-qt-plain-text-edit-has-selection - ffi-qt-plain-text-edit-insert-text ffi-qt-plain-text-edit-remove-selected-text - ffi-qt-plain-text-edit-undo ffi-qt-plain-text-edit-redo - ffi-qt-plain-text-edit-can-undo - ffi-qt-plain-text-edit-cut ffi-qt-plain-text-edit-copy ffi-qt-plain-text-edit-paste - ffi-qt-plain-text-edit-text-length ffi-qt-plain-text-edit-text-range - ffi-qt-plain-text-edit-line-from-position ffi-qt-plain-text-edit-line-end-position - ffi-qt-plain-text-edit-find-text - ffi-qt-plain-text-edit-ensure-cursor-visible ffi-qt-plain-text-edit-center-cursor - ffi-qt-text-document-create ffi-qt-plain-text-document-create - ffi-qt-text-document-destroy - ffi-qt-plain-text-edit-document ffi-qt-plain-text-edit-set-document - ffi-qt-text-document-is-modified ffi-qt-text-document-set-modified - - ;; QToolButton - ffi-qt-tool-button-create ffi-qt-tool-button-set-text ffi-qt-tool-button-text - ffi-qt-tool-button-set-icon ffi-qt-tool-button-set-menu - ffi-qt-tool-button-set-popup-mode ffi-qt-tool-button-set-auto-raise - ffi-qt-tool-button-set-arrow-type ffi-qt-tool-button-set-tool-button-style - ffi-qt-tool-button-on-clicked - - ;; Layout spacers / Size policy - ffi-qt-layout-add-spacing - ffi-qt-widget-set-size-policy ffi-qt-layout-set-stretch-factor - - ;; Graphics Scene - ffi-qt-graphics-scene-create ffi-qt-graphics-scene-add-rect - ffi-qt-graphics-scene-add-ellipse ffi-qt-graphics-scene-add-line - ffi-qt-graphics-scene-add-text ffi-qt-graphics-scene-add-pixmap - ffi-qt-graphics-scene-remove-item ffi-qt-graphics-scene-clear - ffi-qt-graphics-scene-items-count ffi-qt-graphics-scene-set-background - ffi-qt-graphics-scene-destroy - - ;; Graphics View - ffi-qt-graphics-view-create ffi-qt-graphics-view-set-render-hint - ffi-qt-graphics-view-set-drag-mode ffi-qt-graphics-view-fit-in-view - ffi-qt-graphics-view-scale ffi-qt-graphics-view-center-on - - ;; Graphics Item - ffi-qt-graphics-item-set-pos ffi-qt-graphics-item-x ffi-qt-graphics-item-y - ffi-qt-graphics-item-set-pen ffi-qt-graphics-item-set-brush - ffi-qt-graphics-item-set-flags ffi-qt-graphics-item-set-tooltip - ffi-qt-graphics-item-set-zvalue ffi-qt-graphics-item-zvalue - ffi-qt-graphics-item-set-rotation ffi-qt-graphics-item-set-scale - ffi-qt-graphics-item-set-visible - - ;; Paint Widget - ffi-qt-paint-widget-create ffi-qt-paint-widget-on-paint - ffi-qt-paint-widget-painter ffi-qt-paint-widget-update - ffi-qt-paint-widget-width ffi-qt-paint-widget-height - - ;; QProcess - ffi-qt-process-create ffi-qt-process-start ffi-qt-process-write - ffi-qt-process-close-write ffi-qt-process-read-stdout ffi-qt-process-read-stderr - ffi-qt-process-wait-for-finished ffi-qt-process-exit-code ffi-qt-process-state - ffi-qt-process-kill ffi-qt-process-terminate - ffi-qt-process-on-finished ffi-qt-process-on-ready-read ffi-qt-process-destroy - - ;; QWizard / QWizardPage - ffi-qt-wizard-create ffi-qt-wizard-add-page ffi-qt-wizard-set-start-id - ffi-qt-wizard-current-id ffi-qt-wizard-set-title ffi-qt-wizard-exec - ffi-qt-wizard-page-create ffi-qt-wizard-page-set-title - ffi-qt-wizard-page-set-subtitle ffi-qt-wizard-page-set-layout - ffi-qt-wizard-on-current-changed - - ;; QMdiArea / QMdiSubWindow - ffi-qt-mdi-area-create ffi-qt-mdi-area-add-sub-window - ffi-qt-mdi-area-remove-sub-window ffi-qt-mdi-area-active-sub-window - ffi-qt-mdi-area-sub-window-count ffi-qt-mdi-area-cascade ffi-qt-mdi-area-tile - ffi-qt-mdi-area-set-view-mode ffi-qt-mdi-sub-window-set-title - ffi-qt-mdi-area-on-sub-window-activated - - ;; QDial - ffi-qt-dial-create ffi-qt-dial-set-value ffi-qt-dial-value - ffi-qt-dial-set-range ffi-qt-dial-set-notches-visible ffi-qt-dial-set-wrapping - ffi-qt-dial-on-value-changed - - ;; QLCDNumber - ffi-qt-lcd-create ffi-qt-lcd-display-int ffi-qt-lcd-display-double - ffi-qt-lcd-display-string ffi-qt-lcd-set-mode ffi-qt-lcd-set-segment-style - - ;; QToolBox - ffi-qt-tool-box-create ffi-qt-tool-box-add-item - ffi-qt-tool-box-set-current-index ffi-qt-tool-box-current-index - ffi-qt-tool-box-count ffi-qt-tool-box-set-item-text - ffi-qt-tool-box-on-current-changed -