internat-editor.scm
(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))))

) ;;; module