#!/usr/bin/guile -s
!#
;; Common setup for Guile Maemo applications.
(load "hildon.scm")
(define beat-min 10)
(define beat-scale 2)
(let* ((beats-bar #f)
(beats-label #f)
(start-button #f)
(stop-button #f)
(beat-label #f)
(beat-period 0)
(beat-changed? #f)
(beat-message "Beat!")
(attrs (let ((a (pango-attr-list-new)))
(pango-attr-list-insert a (pango-attr-size-new 24000))
a))
(main-window
(create-widgets
(add
#:spacing 10
(pack-start #:expand #t
#:fill #t
#:spacing 10
(pack-start
#:label "Beats per minute:")
(pack-start #:expand #t
#:fill #t
#:min 0
#:max 80
;#:value 92
;#:digits 3
;#:value-pos 'bottom
;#:update-policy 'delayed
;#:draw-value #t
(name beats-bar))
(pack-end
(name beats-label)))
(pack-start #:expand #t
#:fill #t
#:label beat-message
#:use-markup #t
#:attributes attrs
;(pango-attr-list-new (pango-attr-size-new 24))
(name beat-label))))))
(define (beats-bar-changed . _)
(let ((beats-per-minute (+ beat-min (* beat-scale (get-value beats-bar)))))
(set-label beats-label (number->string beats-per-minute))
(set! beat-period (/ 60000 beats-per-minute))
(set! beat-changed? #t)))
(define (beat-timer)
(set-label beat-label beat-message)
(g-timeout-add 100 beat-reset)
(if beat-changed?
(g-timeout-add (inexact->exact (floor beat-period)) beat-timer))
(not beat-changed?))
(define (beat-reset)
(set-label beat-label "")
#f)
(connect beats-bar 'value-changed beats-bar-changed)
(beats-bar-changed)
(beat-timer)
(set-up-main-windows "Guile-Maemo Metronome" main-window)
(show-all main-window)
(gtk-main))