#lang racket/gui (require "../main.rkt" racket/runtime-path racket/gui simple-ini/class ) (provide (all-from-out racket/gui) example-1-window% ) (define ww-debug displayln) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Example 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-runtime-path html-start "example-1.html") (define-runtime-path dialog-html "example-1-dialog.html") (define-runtime-path cur-dir ".") #| (define test-menu (menu 'main-menu (menu-item 'm-file "File" #:submenu (menu (menu-item 'm-open "Open File") (menu-item 'm-close "Close File") (menu-item 'm-select-dir "Select Folder" #:separator #t) (menu-item 'm-quit "Quit" #:separator #t))) (menu-item 'm-edit "Edit" #:submenu (menu (menu-item 'm-copy "Copy") (menu-item 'm-cut "Cut") (menu-item 'm-paste "Paste") (menu-item 'm-prefs "Preferences" #:separator #t) )) (menu-item 'm-auto "Processes" #:submenu (menu (menu-item 'm-start "Start counter") (menu-item 'm-sub "Submenu" #:submenu (menu (menu-item 'm-sub1 "Submenu 1") (menu-item 'm-sub2 "Submenu 2") (menu-item 'm-sub3 "Submenu 3") ) ) (menu-item 'm-stop "Stop counter") ) ) )) |# (define example-1-dialog% (class wv-dialog% (inherit-field settings) (super-new [window-context 'example-1-dialog] [file-not-found-handler (root-file-not-found-handler "example-1-dialog.html")] ) (define/override (page-loaded oke) (super page-loaded oke) ;(ww-debug "html-loaded for example-1-dialog%") (send this bind! 'ok-btn 'click (λ (el evt data) (send this close))) (let* ((inp1 (send this element 'inp1 'text)) (inp2 (send this element 'inp2 'text)) (inp3 (send this element 'inp3 'text))) (send inp1 set! (send settings get 'inp1 "")) (send inp2 set! (send settings get 'inp2 "")) (send inp3 set! (send settings get 'inp3 "")) (send this bind! 'inp1 'change (λ (el evt data) (displayln (format "~a ~a ~a" el evt data)) (displayln (format "get = ~a" (send el get))) (send settings set! 'inp1 (send el get)))) (send this bind! 'inp2 'change (λ (el evt data) (send settings set! 'inp2 (send el get)))) (send this bind! 'inp3 'change (λ (el evt data) (send settings set! 'inp3 (send el get)))) ) ) ) ) (define-syntax inc (syntax-rules () ((_ var) (λ () (set! var (+ var 1)) var)))) (define example-1-window% (class wv-window% (inherit-field settings app-context) (super-new [file-not-found-handler (root-file-not-found-handler "example-1.html")] [window-context 'example-1-main] ) (define go-on-counter #f) (define c-counter 0) (define counter-inc 1) (define counter-thread #f) (define div-counter #f) (define my-dir (send settings get/global 'folder ".")) (define/override (can-close?) (eq? counter-thread #f)) (define start-stop-btn #f) (define/public (stop-counter) (send start-stop-btn set-innerHTML! "Start Counter") (set! go-on-counter #f) ) (define/public (reset-counter) (stop-counter) (set! counter-thread #f) ) (define/public (inc-counter) (set! c-counter (+ c-counter counter-inc)) (when (>= c-counter 1000) (set! counter-inc -1)) (when (<= c-counter 0) (set! counter-inc 1)) (send this update-counter)) (define/public (update-counter) (send div-counter set-innerHTML! (format "Count = ~a" c-counter)) (when (and (> c-counter 0) (<= c-counter 100)) (send div-counter set-style! '((background white)))) (when (and (> c-counter 100) (<= c-counter 200)) (send div-counter set-style! '((background green) (color white)))) (when (and (> c-counter 200) (<= c-counter 300)) (send div-counter set-style! '((background yellow) (color black) (font-size: 120%)))) (when (and (> c-counter 300) (<= c-counter 400)) (send div-counter set-style! '((color white) (background orange) (font-size 110%)))) (when (and (> c-counter 400)) (send div-counter set-style! '((color white) (background red) (font-size 120%) (font-weight bold)))) ) (define/public (start-counter) (send start-stop-btn set-innerHTML! "Stop Counter") (set! counter-thread (thread (λ () (letrec ((f (λ () (when go-on-counter (send this inc-counter) (sleep 0.01) (f))))) (set! go-on-counter #t) (f))))) ) (define/public (set-folder new-dir) (set! my-dir new-dir) (send settings set/global! 'folder new-dir) (let ((el (send this element 'folder))) (send el set-innerHTML! (format "Selected folder: ~a" my-dir)) ) ) (define/override (choose-dir) (let ((result (super choose-dir "Select a folder" my-dir))) (displayln (format "choosen dir handle: ~a" result)) (unless (eq? result 'canceled) (send this set-folder result)) ) ) (define/public (prefs) (stop-counter) (set! go-on-counter #f) (new example-1-dialog% [parent this] ) ) ; (send this clone-settings 'example-1-dialog)])) ;(define/override (handle-navigate url type kind) ; (send this reset-counter) ; (super handle-navigate url type kind)) (define/override (page-loaded oke) (ww-debug "HTML LOADED") (super page-loaded oke) (set! div-counter (send this element 'div-counter)) (send this update-counter) (send this set-folder my-dir) (ww-debug "CONNECTING BUTTONS") (send this bind! 'dialog-button 'click (λ (el evt data) (send this prefs))) (set! start-stop-btn (send this element 'start-stop-button)) (send this bind! 'start-stop-button 'click (λ (el evt data) (if (eq? counter-thread #f) (begin (send this start-counter) ) (begin (send this reset-counter) ) ) ) ) (send this bind! 'devtools 'click (λ (el evt data) (send this devtools))) (send this bind! 'select-dir-button 'click (λ (el evt data) (send this choose-dir))) ;(ww-debug "SETTING MENU") #|(let* ((div-open (send this element 'div-open)) (c-open 0) (div-close (send this element 'div-close)) (c-close 0) (div-copy (send this element 'div-copy)) (c-copy 0) (div-cut (send this element 'div-cut)) (c-cut 0) (div-paste (send this element 'div-paste)) (c-paste 0) ) (send this set-menu! test-menu) (send this connect-menu! 'm-quit (λ () (send this reset-counter) (send this close)) ) (let ((make-menu-executor (λ (item elem string count) (send this connect-menu! item (λ () (send elem set-inner-html! (format "~a ~a" string (count))))))) ) (make-menu-executor 'm-open div-open "Open file" (inc c-open)) (make-menu-executor 'm-close div-close "Close file" (inc c-close)) (make-menu-executor 'm-copy div-copy "Edit Copy" (inc c-copy)) (make-menu-executor 'm-cut div-cut "Edit Cut" (inc c-cut)) (make-menu-executor 'm-paste div-paste "Edit Paste" (inc c-paste)) (send this connect-menu! 'm-start (λ () (send this start-counter))) (send this connect-menu! 'm-stop (λ () (send this reset-counter))) (send this connect-menu! 'm-prefs (λ () (send this prefs))) (send this connect-menu! 'm-select-dir (λ () (send this choose-dir))) ) )|# ) (begin (displayln "Yes this works!") ) ) ) (define (run-example) (let* ((ini (new ini% [file 'web-racket-example1])) (window (new example-1-window% [app-context 'example-1] [ini ini] [base-dir cur-dir])) ) window))