ErlangでGUI(2)

30分プログラム、その527。ErlangGUIライブラリを使ってみよう、その2。(前回のやつ: id:mzp20090209:gs)
ボタンを押すと押した回数を表示するプログラムを書いてみた。イベントに反応して、画面を更新する、というのをやりたかったので。



『ボタンがクリックされた』とかのイベントがErlangのメッセージとして飛んでくるのが、わりとおもしろい。イベントハンドラの登録とかがいらなくて、Erlangの文法がそのまま使えるのがステキだと思う。

使い方

1> gui_react:init().

ソースコード

-module(gui_react).
-compile([export_all]).

init() ->
    Top = gs:start(),
    Win = gs:create(window,Top,[{width,200},{height,200},{map,true},{title,"count up"}]),
    Button = gs:create(button,Win,[{label,{text,"click,me!!"}}]),
    loop(Button,1).

loop(Button,N) ->
    receive
	{gs,Button,click,_,_} ->
	    gs:config(Button,[{label,{text,io_lib:format("~p",[N])}}]),
	    loop(Button,N+1);
	{gs,_,destroy,_,_} ->
	    ok
    end.