Subscribed unsubscribe Subscribe Subscribe

[http://maoe.maoe.googlepages.com/gauche-yahoo:title=SchemeでYahoo!検索Webサービス] 3

プログラミング

また続き.今日は以下の実装をした.

  • 非常に簡単なエラー処理の追加
  • Gauche-gtkのクライアントを実装(中)

Gauche-gtk

test-client.scmとして実装中.まだ使い物にならない.

Gauche-gtkのアーカイブについてくるサンプルを見てみると,コードがGladeファイルとそっくりであることに気がつく.たとえばexamples/gtk-tutorial/helloworld.scmは以下のようになっている.

(define (main args)
  (gtk-init args)
  (let1 window (gtk-window-new GTK_WINDOW_TOPLEVEL)
    (g-signal-connect window "destroy" destroy)
    (gtk-container-set-border-width window 10)
    (let1 button (gtk-button-new-with-label "Hello world")
      (g-signal-connect button "clicked" hello)
      (g-signal-connect button "clicked" (lambda _ (destroy window)))
      (gtk-container-add window button)
      (gtk-widget-show button)
      (gtk-widget-show window)
      ))
  (gtk-main)
  0)

Gladeで同じようなものを作ると次のようになる.

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://gazpacho.sicem.biz/gazpacho-0.1.dtd">
<glade-interface>
 <widget class="GtkWindow" id="window">
  <property name="border_width">10</property>
  <signal handler="destroy" name="destroy" after="False"/>
  <child>
   <widget class="GtkButton" id="button">
    <property name="label" context="yes" translatable="yes">Hello world</property>
    <signal handler="hello" name="clicked" after="False"/>
   </widget>
  </child>
 </widget>
</glade-interface>

ほとんど一緒.ということは,以前書いた例のようなGladeバインディングを作れば次のように書けるようになるかもしれない.

(define (main args)
  (gtk-init args)
  (let1 widgets ((glade->widgets "glade-file.glade"))
    (let-widgets widgets
      (g-signal-connect button "clicked" (lambda _ (destroy window)))
      (gtk-widget-show-all window)))
  (gtk-main)
  0)

こんなのほしい.暗黙のシンボル生成(let-widgets)はマクロを使うのかな?