(module internat-editor mzscheme
(require (lib "mzgtk2.scm" "mzgtk2"))
(require "internat.scm")
(require "internat-mzgtk2.scm")
(require (planet "sprefs.scm" ("oesterholt" "ho-utils.plt" 1 0)))
(require (planet "scfg.scm" ("oesterholt" "ho-utils.plt" 1 0)))
(define (quit main-window)
(gtk-main-quit))
(define (run file)
(let* ((menu (gtk-menu-menubar 'expand #f
'entries
(list
(gtk-menu-submenu 'label (_ "_Main")
'entries
(list (gtk-menu-label 'label (_ "_Quit")
'closure quit))))))
(window (gtk-window 'title (_ "mzgtk2 - Internationalization Editor - ~a" file)))
(internat-widget (gtk-internat-edit-widget 'parent window))
(vbox (gtk-vbox 'widgets (list menu internat-widget))))
(-> window add vbox)
(let ((x (sprefs-get 'window-x 200))
(y (sprefs-get 'window-y 200))
(w (sprefs-get 'window-w 600))
(h (sprefs-get 'window-h 500)))
(-> window size w h)
(-> window move x y)
(-> window show-all)
(gtk-main)
(let ((wh (-> window size))
(xy (-> window position)))
(sprefs-set! 'window-w (car wh))
(sprefs-set! 'window-h (cadr wh))
(sprefs-set! 'window-x (car xy))
(sprefs-set! 'window-y (cadr xy)))
(-> window destroy)
#t)))
(begin
(sprefs-new "internat-editor")
(let* ((argv (current-command-line-arguments))
(file (vector-ref argv 0)))
(let ((handle (scfg-new file)))
(internat-init (lambda (lang sentence default)
(let ((r (scfg-get handle (list lang sentence) default)))
(if (eq? r 'undef)
#f
r)))
(lambda (lang sentence translation)
(display (format "~a ~a ~a ~%" lang sentence translation))
(scfg-set! handle (list lang sentence) translation))
(lambda ()
(scfg-map (lambda (key value) key) handle))
(sprefs-get 'last-language "en")
(lambda (lang sentence)
(scfg-rm! handle (list lang sentence))))
(mzgtk2-set-language-provider _)
(run file)
(scfg-save handle)
(sprefs-set! 'last-language (internat-language))
(exit))))
)