#!/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))