glade で GUI なプログラムを書こう


GTK+ 1.0.4をほげって、日本語を使えるようにしたのは書いたよね。ゴミなプログラムなんぞも書いてみた。が、やってることといえば、結局Widgetを配置して、拾いたいイベントのハンドラを書くだけだったりする。

で、このWidgetの配置ってのが結構厄介で、全部プログラムでベタに書かざるを得ない状況だと、動かしてみるまで思い通りの配置になっているかどうかわからない。まぁ、わからないってことはないんだが、おおむね思った通りにはなるものの、微妙に変えたいことってのは常にある。

そうすると、プログラムを直し、makeしなおし、起動して見て…繰り返し。かなりアホくさい。その上時間もかかる。ってんで拾ってきましたよ。glade 0.3.3を。まぁ、まずはスクリーン・ショットを見てくれ。

見ての通り、GUIによるインタフェース・ビルダなのだ。WindowやDialog Boxを開き、そこに望みのWidgetを置きたいように置く。もう好きにレイアウトしまくり。で、それらの配置したWidgetごとに、処理したいイベントを指定することができるのだ。

例えば、ボタンを配置したとする。で、このボタンが押されたときに何か処理をしたいと思ったとしよう。もちろん処理の中身はこれから考えるワケだが、とにかく「ボタンを押されたら…云々」という「イベントを拾っとく」のがまずは大事だよね。ボタンのみならず、Widgetを配置するってのは結局、まずはこの骨組みを作ることにほかならないワケでさ。

と、gladeでは、ボタンを置くでしょ、でもってプロパティページ(が用意されてるだけで嬉しい)のSignalタブを選んで、Signal一覧の中から「clicked」を選んでaddしてやる。これだけで「ボタンを押されたら…云々」の処理の「骨組み」だけはできあがりなのだ。

Windowsなプログラマの人だと、MicrosoftのDevStudioとか、SymantecのVisualCafeとか使ったことあるんじゃないかと思うが、あの類と一緒よ一緒。

で、ひととおり画面まわりが切った貼ったできたなら、一旦保存しておくか、てなことになるのだが、なんとちゃんと「プロジェクト」として保存することができるのだ! これってすげぇよね。次回、gladeを起動したら、ちゃんと前回までの作業の成果を保持していてくれて、あ、やっぱりもうひとつボタン増やそっと、なんてのがサクッとできちゃうんだから。しかも、まだ実際には一行もプログラムを書いていない。まさにインタフェースをアレコレ考えることに集中するのみ。高度ぢゃの〜。

さらに恐るべきは、こうして保存した「プロジェクト」ってのが実はただのテキスト・ファイルで、なんと!中身はXMLなのだ!!イカス〜!

で、最後のフェーズとして「Write Source Code」のメニューを選ぶと、それまでに散々コネクリ回したWidgetだのSignalだのをCのソースとして自動生成してファイルに出力してくれるのだ。しかも、Configureまで付けてくれるから、もうあとはサクッとmakeするだけ。もちろん、まだイベントハンドラの中身は空っぽだから、なにもできないけどね。いわゆるスケルトンというヤツを作ってくれるのだ。

もう「このボタンを押されたらこの関数」ってとこまでできちゃってるので、あとは実際にファイルを開くなりネットワークにアクセスするなり好きにして状態。うむぅ、こげなすごかモンが、無料でソースも公開されているなんて驚き!

Windows 3.0なんつ〜時代に、電話帳みてぇなリファレンスガイドを膝に、SDKでポツポツとスケルトンを手書きしていた若き日々を相馬灯のように思い出したぜ(笑)

が、このgladeだが、例によって例のごとく、もとのままでは日本語を扱えない(泣)。だもんで、GTK MLなどで流れたパッチをいくつかもらってきて、なんとかなるかな?という程度まで日本語を扱えるようにしたものをパッケージ置場に置いた。

これにはGTK MLで流れた水引@豊橋技科大さんのGtkFontSelectionパッチと、渡辺さんのパッチ(自動生成されたソースにgtk_rc_parse()を含める)もののサブセットが含まれている。サブセットってのはどうしてかというと、もともと水引さんのパッチはglade 0.3.2という一つ前のバージョン向けでそのままでは使えなかったのと、渡辺さんのパッチにはglade 0.3.3をマトモにgettext化して日本語メニューをまっとうなpoファイルで出させるためのパッチが含まれていたのだが、gettext対応の部分はあてなかったからだ。

渡辺さんには非常に申し訳ないのだが、どうも苦労して日本語メニューを出そうという気が起こらないので、今回は見送りすることにした。まぁ、gladeもGTK+も、まだまだバージョンは若いし、真に実用的になるまではまだ「濃い遊び」の範疇と思うので、オレは日本語メニューがどうしても欲しいぜ!という人は自分でやってくれ(笑)

てなワケで、このパッケージにあてたパッチの主眼は、水引さんによる日本語フォントを使えるようにするパッチにある。Widgetのプロパティで、使するフォントを選択する機能ってのはもともとgladeにも備わっていたのだが、それが日本語フォントをサポートしていない&GTK+側で日本語フォントを有効にしちゃったりするとcore吐いてお亡くなりになる、というのを修正したものなのだ。で、実際にパッチをあててパッケージにしたgladeで日本語を扱っているスクリーン・ショットも置いておいた。WindowMaker 0.17.5 の雰囲気を見てもらうのも兼ねて、1280x1024でほとんど圧縮してない生JPEGで置いてあるのでデカイぞ。240Kくらいある(笑) 注意。

emiclockの時刻を見てこんな夜中になにやってんだこの人わなどと思わないように(笑) 大きなお世話だ。好きでやってんだから(笑)

スクリーン・ショットでは、X-TTのデモも兼ねて、得体の知れない丸文字とか使っちゃってるけど、実際にはこういう使い方は×ね。こんなフォントがどのマシンにも入ってるワケないから、通常はXFree86などに標準で入っているフォントを指定するか、または本来のXLFDの意味にしたがって、Encoding程度の指定にとどめよう。

あ、それと「パッケージ置場」に置いてあるGTK+のパッケージだけど、やっぱりgtkconvのパッチは外すことにした。gtkconvパッチをあててないパッケージに差し替えちゃったので注意ね。思うに、gettext化されて各国語のメニューが使えるというのが本筋だろうし、どうも、gladeなどのGTK+ベースなアプリと相性が悪い、というか表面上は悪くないんだけど、デバッグオプション付きでmakeして追いかけようとすると、ちょっと内部的にいちいちうっとうしい振る舞いをするのでとっぱらってしまった(笑)

まぁオレ個人は英語メニューの方が好きだし。バイナリのパッケージはgtkconvなしでmakeしてはあるものの、ソースのパッケージにはgtkconvのパッチそのものは含めてあるので、必要な人は自分でmakeすること。

それと、gladeに限らず、GTK+で何かアプリなりを書くと、GTK+の振る舞いに影響を与えるgtkrcという設定ファイルをどこかに置き、それを起動時に読ませるのが筋なんだが、どういうワケか生のgtkrcなんだよね。.gtkrcぢゃないのだ。普通に見えちゃうの。で、ホームにそういうファイルが見えちゃうのはちょっとカッコ悪〜って感じなので、gladeのパッケージでは、まず/usr/lib/glade/gtkrcを読み(まぁシステムで共通ってこった)、その後に~/.gtkrcがあるなら読む、という風に変えてしまった。

gladeは今のところ、自ら定義しているとおり、インタフェース・ビルダであって統合開発環境ではない。gladeから直にmakeをキックしたり、定義したsignalを選んでデバッガで追いかけるようなことは残念ながらできない。だけど、バージョンは実に0.3.3だよ0.3.3。これが正式に1.0になる日が楽しみでならないぜ。DDDなんてのもあるしね。こっちはMotifなんで、ちょっと敷居が高いが、似たようなのがGTK+で作られたものが出てくる可能性は大きい。GTK+にも、C++のラッパとなるGTK--なんてのもあるし、さらにそれ用のc++のソースを吐いてくれるglade--なんてのもすでにある(笑)

ライブラリからなにから、本当にオープンな統合開発環境が、もう手の届くところに来そうだ。楽しみだねぇ。

何万円も払ってMicrosoftの開発環境を買い、得体の知れない振る舞いに散々苦労してアプリを書いたあげく、当のMicrosoftの製品をインストールしたおかげでshell32.dllなんぞが差し替えられてハイそれまでよ、なんてことを延々やってるより、ずっとずっといいぜ、人として(笑)


メール 戻る