Added select support.

This commit is contained in:
2026-08-06 00:08:24 +02:00
parent 3d4deed94a
commit 963fec5df5
6 changed files with 100 additions and 5 deletions
+41 -1
View File
@@ -1,6 +1,7 @@
#lang racket/base
(require racket/class
xml
"wv-element.rkt"
"racket-webview.rkt"
)
@@ -14,7 +15,8 @@
wv-input/range%
wv-input/check%
wv-input/radio%
wv-input/color%)
wv-input/color%
wv-input/select%)
(define-syntax mk-cl
@@ -55,3 +57,41 @@
(mk-cl wv-input/check% webview-set-value! webview-value/boolean)
(mk-cl wv-input/radio% webview-set-value! webview-value/boolean)
(mk-cl wv-input/color% webview-set-value! webview-value/color)
(define wv-input/select%
(class wv-element%
(inherit-field window
element-id)
(super-new)
(define wv (hash-ref (send window info) 'wv))
(define/public (get)
(webview-value wv element-id))
(define/public (set! value)
(webview-set-value! wv element-id value))
(define/public (set-options! options [selected #f])
(send this
set-innerHTML!
(apply
string-append
(for/list ((option (in-list options)))
(let ((value (car option))
(label (cadr option)))
(xexpr->string
(list 'option
(list
(list 'value
(format "~a" value)))
(format "~a" label)))))))
(when selected
(send this set! selected)))
(define/public (on-change! callback-func)
(send window bind! element-id 'change
(λ (element event data)
(callback-func (send this get)))))
))