Compare commits
9 Commits
Author | SHA1 | Date |
---|---|---|
Matthew Butterick | 9b4515a104 | 5 years ago |
Matthew Butterick | d0baaf3b66 | 5 years ago |
Matthew Butterick | c567373950 | 5 years ago |
Matthew Butterick | 7de0d30b84 | 5 years ago |
Matthew Butterick | 13e6524922 | 5 years ago |
Matthew Butterick | fb44ea118e | 5 years ago |
Matthew Butterick | 15cf8f4e6f | 5 years ago |
Matthew Butterick | fd3a3cd38b | 5 years ago |
Matthew Butterick | 5637261606 | 5 years ago |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 431 KiB |
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,180 @@
|
|||||||
|
#lang debug racket/gui
|
||||||
|
(require pollen/private/log
|
||||||
|
pollen/private/command
|
||||||
|
pollen/setup
|
||||||
|
pollen/private/project-server
|
||||||
|
net/sendurl)
|
||||||
|
|
||||||
|
(define app-mono-fam
|
||||||
|
(for*/first ([preferred
|
||||||
|
'("Triplicate T4" "Menlo" "Consolas" "Andale Mono" "Courier")]
|
||||||
|
[mono-fam (in-list (get-face-list 'mono))]
|
||||||
|
#:when (equal? preferred mono-fam))
|
||||||
|
preferred))
|
||||||
|
|
||||||
|
(define app-font-size 14)
|
||||||
|
(define app-font (make-font #:face (send normal-control-font get-face) #:size app-font-size))
|
||||||
|
|
||||||
|
(define window (new frame% [label "Pollen Helper"]
|
||||||
|
[width 700]
|
||||||
|
[height 500]
|
||||||
|
[x 40]
|
||||||
|
[y 40]
|
||||||
|
[alignment '(left top)]
|
||||||
|
[spacing 6]
|
||||||
|
[border 6]))
|
||||||
|
|
||||||
|
(define (make-hpanel) (new horizontal-panel%
|
||||||
|
[parent window]
|
||||||
|
[alignment '(left top)]
|
||||||
|
[stretchable-height #false]))
|
||||||
|
|
||||||
|
(define hpanel-select (make-hpanel))
|
||||||
|
(define current-manager-directory (make-parameter #f))
|
||||||
|
(define current-server-stopper (make-parameter #f))
|
||||||
|
|
||||||
|
(define (set-current-manager-directory val)
|
||||||
|
(current-manager-directory val)
|
||||||
|
(send directory-msg set-label (if val (path->string val) "")))
|
||||||
|
|
||||||
|
(module+ main
|
||||||
|
(set-current-manager-directory (expand-user-path "~/git/bpt/")))
|
||||||
|
|
||||||
|
(define button-directory
|
||||||
|
(let ([str "Select project directory"])
|
||||||
|
(new button%
|
||||||
|
[label str]
|
||||||
|
[parent hpanel-select]
|
||||||
|
[callback (λ (button evt)
|
||||||
|
(define dir (get-directory str))
|
||||||
|
(when dir
|
||||||
|
(set-current-manager-directory dir)
|
||||||
|
(set-server-port (setup:project-server-port dir))))])))
|
||||||
|
|
||||||
|
(define directory-msg
|
||||||
|
(new message%
|
||||||
|
[label ""]
|
||||||
|
[parent hpanel-select]
|
||||||
|
[auto-resize #true]))
|
||||||
|
|
||||||
|
(define hpanel-server-options (make-hpanel))
|
||||||
|
|
||||||
|
(define server-option-port
|
||||||
|
(new text-field%
|
||||||
|
[parent hpanel-server-options]
|
||||||
|
[label "server port"]
|
||||||
|
[min-width 150]
|
||||||
|
[stretchable-width #false]
|
||||||
|
[init-value (number->string (setup:project-server-port))]
|
||||||
|
[callback (λ (tf evt)
|
||||||
|
(set-server-port (string->number (send tf get-value))))]))
|
||||||
|
|
||||||
|
(define (set-server-port num)
|
||||||
|
(when (number? num)
|
||||||
|
(current-server-port num)
|
||||||
|
(send server-option-port set-value (number->string num))))
|
||||||
|
|
||||||
|
|
||||||
|
(define server-option-local
|
||||||
|
(new check-box%
|
||||||
|
[parent hpanel-server-options]
|
||||||
|
[label "local only"]
|
||||||
|
[callback (λ (cb evt)
|
||||||
|
(current-server-listen-ip (and (send cb get-value) "127.0.0.1")))]))
|
||||||
|
|
||||||
|
(define hpanel-server-controls (make-hpanel))
|
||||||
|
|
||||||
|
(define dialog-alert (new dialog%
|
||||||
|
[label "Error"]
|
||||||
|
[border 6]
|
||||||
|
[spacing 6]
|
||||||
|
[parent #f]))
|
||||||
|
|
||||||
|
(define dialog-message (new message%
|
||||||
|
[parent dialog-alert]
|
||||||
|
[auto-resize #t]
|
||||||
|
[label ""]))
|
||||||
|
|
||||||
|
(define dialog-alert-button-pane
|
||||||
|
(new horizontal-pane%
|
||||||
|
[parent dialog-alert]
|
||||||
|
[alignment '(right bottom)]))
|
||||||
|
|
||||||
|
(define dialog-alert-button-ok
|
||||||
|
(new button%
|
||||||
|
[parent dialog-alert-button-pane]
|
||||||
|
[label "OK"]
|
||||||
|
[style '(border)]
|
||||||
|
[callback (λ (button evt)
|
||||||
|
(send dialog-alert show #f))]))
|
||||||
|
|
||||||
|
(define (make-alert str)
|
||||||
|
(send dialog-message set-label str)
|
||||||
|
(send dialog-alert show #t))
|
||||||
|
|
||||||
|
(define button-start
|
||||||
|
(new button%
|
||||||
|
[label "Start project server"]
|
||||||
|
[parent hpanel-server-controls]
|
||||||
|
[callback (λ (button evt)
|
||||||
|
(if (current-server-stopper)
|
||||||
|
(make-alert "Project server already running.")
|
||||||
|
(match (current-manager-directory)
|
||||||
|
[#false (make-alert "No project directory selected.")]
|
||||||
|
[dir
|
||||||
|
(message "starting project server")
|
||||||
|
;; stopper is a function that sends a break signal
|
||||||
|
;; to the web server thread, wherever it is
|
||||||
|
(define stopper
|
||||||
|
(parameterize ([current-project-root dir])
|
||||||
|
(start-server (setup:main-pagetree dir) #:return #true)))
|
||||||
|
(current-server-stopper stopper)])))]))
|
||||||
|
|
||||||
|
(define button-stop
|
||||||
|
(new button%
|
||||||
|
[label "Stop project server"]
|
||||||
|
[parent hpanel-server-controls]
|
||||||
|
[callback (λ (button evt)
|
||||||
|
(match (current-server-stopper)
|
||||||
|
[#false (make-alert "Project server not running.")]
|
||||||
|
[stopper-proc
|
||||||
|
(stopper-proc)
|
||||||
|
(current-server-stopper #false)
|
||||||
|
(message "project server stopped")]))]))
|
||||||
|
|
||||||
|
(define button-launch
|
||||||
|
(new button%
|
||||||
|
[label "Launch browser"]
|
||||||
|
[parent hpanel-server-controls]
|
||||||
|
[callback (λ (button evt)
|
||||||
|
(cond
|
||||||
|
[(current-server-stopper)
|
||||||
|
(send-url
|
||||||
|
(format "http://localhost:~a/~a"
|
||||||
|
(current-server-port)
|
||||||
|
(setup:main-pagetree (current-manager-directory)))
|
||||||
|
#false)]
|
||||||
|
[else (make-alert "Project server not running.")]))]))
|
||||||
|
|
||||||
|
(define status-box
|
||||||
|
(let* ([wb (new text-field%
|
||||||
|
[label #f]
|
||||||
|
[style '(multiple)]
|
||||||
|
[parent window]
|
||||||
|
[font (make-font #:face app-mono-fam #:size app-font-size)])]
|
||||||
|
[ed (send wb get-editor)])
|
||||||
|
(send ed set-line-spacing (* app-font-size 0.4))
|
||||||
|
(send ed set-padding 6 3 6 3)
|
||||||
|
wb))
|
||||||
|
|
||||||
|
(define status-box-ed (send status-box get-editor))
|
||||||
|
|
||||||
|
(define log-receiver-thread
|
||||||
|
(thread (λ ()
|
||||||
|
(define rcvr (make-log-receiver pollen-logger 'info 'pollen))
|
||||||
|
(for ([vec (in-producer (λ () (sync rcvr)))])
|
||||||
|
(match-define (vector _ msg _ _) vec)
|
||||||
|
(send status-box-ed insert msg)
|
||||||
|
(send status-box-ed insert "\n")))))
|
||||||
|
|
||||||
|
(send window show #t)
|
@ -0,0 +1,13 @@
|
|||||||
|
#lang br
|
||||||
|
(require pict icns file/ico rsvg)
|
||||||
|
|
||||||
|
(define p (svg-file->pict "pollen-raw.svg"))
|
||||||
|
(send (pict->bitmap p) save-file "pollen.png" 'png)
|
||||||
|
|
||||||
|
(with-output-to-file "pollen.icns"
|
||||||
|
(λ () (void (write-bytes (pict->icns-bytes p))))
|
||||||
|
#:exists 'replace)
|
||||||
|
|
||||||
|
(write-icos (for/list ([size '(16 32 48 256)])
|
||||||
|
(argb->ico size size (pict->argb-pixels (scale p (/ size 720))))) "pollen.ico"
|
||||||
|
#:exists 'replace)
|
Loading…
Reference in New Issue