Today アクセスカウンター Yesterday アクセスカウンター

lablgtk はじめるにき

lablgtk の API は,もはや Gtk とは別物なような… Ruby とかの素朴なバインディングとは異なり,名前も,呼び出しかたも独自.

OCaml:lablGTK

まぁ,そのぶん,異常にソースが簡潔になるわけなんですが.C であんなにタラタラ書いてたのが馬鹿馬鹿しくなりますな.とりあえずインラインでコールバックを書ける (クロージャ渡せる) のが素晴らしすぎる.あと型推論万歳.OCaml のコンパイルの時のエラーメッセージはけっこうわかりやすい気がする.

以下,ソース.型推論初心者にありがちな,型が合わないからとりあえず () 返しとけ !! OCaml 小学生にありがちな,とりあえず let 〜 in しとけ !! lablgtk の API がわかんなかったらとりあえず変数をグローバルにしとけ !! 的ななげやり感が随所に見えてほほえましいですね.


(* vim: set encoding=utf8:
コンパイル方法 :
$ ocamlopt -w s -I +lablgtk2 lablgtk.cmxa gtkInit.cmx edit.ml -o edit
$ ./edit
*)
open GMain
let window = GWindow.window ()
let vbox = GPack.vbox ~packing:window#add ()
let toolbar = GButton.toolbar ~packing:vbox#pack ()
let notebook = GPack.notebook ~packing:vbox#pack ()
let create_new_buffer () =
let scrollwin = GBin.scrolled_window ~width:300 ~height:300 ~packing:notebook#append_page () in
GText.view ~packing:scrollwin#add ()

let init_editor_window () =
window#connect#destroy ~callback:Main.quit;
let tooltips = GData.tooltips () in
let b = GButton.tool_button ~stock:`ADD ~packing:toolbar#insert () in
b#set_tooltip tooltips "新しいバッファを作ります" "" ;
b#connect#clicked ~callback: (fun () -> create_new_buffer (); ());
window#show ()
let _ =
init_editor_window ();
create_new_buffer (); (* たぶん,この間の一瞬のもたつきが見えちゃってる *)
GMain.main ()


vim のいい加減な OCaml モードでダンプしたもの (要 UTF8 保存.というか,OCaml で UTF8 が素直に通るとは思わなんだ.素晴らしい ← 英語圏で作られた処理系を信用しなさすぎ).

# 追記 : ブログ上でコメントを書き足した時に,全角スペースが入ってた… orz (uim を設定してなかった… というか,全角スペースぐらいちゃんとパースして欲しいのう (ムチャ))

なんか,起動した時に,一瞬もたつくのが気になる.OCaml に特有の現象なのか,俺のコードが葛すぎるのかは今後の調査が待たれるところです (他人事) たぶん,(show_all 相当の API が見付からなかったんだけど),ウィジットが作られるたびに show されてるから,一瞬残像が残るのだろうと思う (普通は,全部オブジェクト作ってから show するんだけど… lablgtk の API がよーわからんのじゃ).

ocaml_edit0.png


今回はガワだけしか作ってません.ボタンを押すと,新しいバッファが開くだけ.まだ何も実用的な機能は実装されていません.まぁ,サンプルコードが Web 上に少な過ぎるので,こういうのをちょこちょこ公開してみるだけでも,微妙に誰かの役に立つかもしれないし,誰も興味を持たないかもしれない (OCaml,Gtk,なおかつ資料が少ない独自 API というマイナー三重苦 !厳しすぎる !!)

参考文献

GTK+ 2.0 Tutorial using Ocaml (Gtk のチュートリアルを,まんま OCaml + lablgtk に翻訳したもの.よくやるわ…)
lablgtk リファレンス (2.4.0 なのでちょっと古い)
あと,ソースの中のサンプル (lablgtk-2.6.0/examples) (これが一番素晴らしい)

コメント

Secret

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

そもそも Mac だと Gtk は使えないと思います.
あと,私は Mac を一台も持ってないので,ソフトウェアのインストール方法などはわからないです.すいません

Gtk

Xがあるので、MacでGtkが使えないってことは無いですよ。
lablgtkが使えたかは、ちょっとわかりませんが。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

> soutaro さん

あ,ネイティブ GUI ツールキット対応の Gtk が無い,って意味でした.

確かに,何とかなりそうな気もしますが,私は Mac 持ってないのでナントモ

# やっぱり,Mac 一台ぐらい買うべきかなぁ.デスクトップならば比較的安そうだし

> 某さん

ところで,質問などは,なるべく非公開コメントは止めて欲しいです.非公開コメントは,返事を期待しないオフトピのつぶやきや,見られたらマズいタレコミ用途ということで (いちいち質問コメントにメールで答えるのは大変ですし,そういうサポートブログじゃありませんし)

Gtk

ま,そうですよね… > ネイティブが
ちなみにmacportにlablgtkはあるようですので,Xでよければインストールは簡単みたいですね.
# port install lablgtk2

~packing:notebook#append_page は

今だと、

~packing:(fun w -> ignore (notebook#append_page w))

ですかね。
プロフィール
  • Author:あろは (alohakun)
  • 京都のデバッガベンダーに勤めるアラサー会社員。

    本ブログの内容は,あくまでも個人的な感想や意見であり,会社の意見を代表するものでは一切ありません.

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map
FC2カウンター
ブロとも申請フォーム

この人とブロともになる

最近のコメント
リンク
最近のトラックバック
人生の残り日数
日本人男性の平均寿命は 28700日.
RSSフィード
カテゴリー
  1. RSSリーダー