自分で使っている OS でちょいアプリをつくれると何かと便利です。 この手のは多くはコマンドラインですむことが多いので、シェルとかスクリプト系の言語でぱらっとかいて終われますが(このへんの環境がそろっているのが UNIX のいいところ)、たまに GUI も使いたいときがあります。 たまのことなので、あんまり学習コストをかけたくないので、知ってるものをくみあわせて、、ってことで mono + C# + GTK でためしにやってみました。
mono というのは、Microsoft の .NET Freamwork のオープンソース実装です。
Monoは、ノベルの主導で開発されている、Ecma標準に準じた.NET Framework互換の環境を実現するためのオープンソースソフトウェア群、 またそのプロジェクト名である。共通言語基盤 (CLI) の実装やC#のコンパイラなどが含まれる。Monoはマルチプラットフォームであり、Linux、FreeBSD、UNIX、Mac OS X、Solaris、Windowsで動作する。
これをつかうと Linux 上で C# でアプリがかけます。 おまけに、Linux で標準的に使われている画面描画ライブラリの GTK とバインディングできるためきれいに、違和感なくウインドウが出せます。
Java でもいいんですけどね、、ちょっと Linux で JRE 設定するのフォントとか面倒なのでさけぎみです。
mono は JIT も持っているので、ネイティブコードでうごいてくれるみたいで、なかなかさくさく動きますね。 Linux で有名な、F-Spot という画像管理ソフトも mono でできているみたいです。
mono には Mono Develop という統合開発環境があります。 ためしにこれをいれてみました。
まるで Visual Studio ですが(VS のプロジェクトも読めます)、ベースは Sharp Develop のようです。 カーソルの動きが違ったり、キーアサインが違ったりしますが違和感はあまりなく操作できます。 (1.0 ではまだデバッグはできないようです。現在 2.0 アルファ中)
よーわからんかったですが、ソリューション作成しようとしたら面白いものを発見。
おー、Glide ともバインディングできるらしい。 Glide で XML で画面とイベント定義してそれを C# とバインディングして GTK アプリがつくれるようです。
[tegaki]やってやるぜ[/tegaki]
Mono Develop 自体にも UI デザイナーついているのですが、Glide の場合は Glide インターフェースデザイナを使います。 まうすでぺたぺたコントロールはりつけて、XML を作成。
ここで、コントロールの名前とか、イベント名とかを定義します。
で、できたら C# でコーディング。 VB.NET とかもいけそうです。 🙂
GTK 系を using して、たとえばメンバに さっき Glide でつくったコントロールを定義します。
using System;
using System.Xml;
using Gtk;
using Glade;
using Yedda;
public class GladeApp
{
[Widget] Gtk.TextView textview1;
こんな感じ。 でもって、コンストラクタとかで Glide の XML を読み込みます。 GTK のお約束は、IDE がかいてくれます。
public GladeApp (string[] args)
{
Application.Init ();
Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
gxml.Autoconnect (this);
Application.Run ();
}
Autoconnect(this) が妙で、これで Glide のコントロール・イベントと C# をバンディングしてくれます。 ここで名前食い違うと間違うとぬるりするので注意のこと。 🙂
イベントハンドラは以下のように。
private void OnButton1Click(object sender, EventArgs e)
{
TextBuffer buffer = textview1.Buffer;
buffer.Text = "TEST!!";
}
各 GTK コントロールの操作の仕方は「のり」もしくはマニュアルで。。(笑) ちなみに、ためしていませんが System.Windows.Forms も動くようです。
で、実行。
お~うごいた~。
みえないとおもいますが、twitter にログインして XML もってきて表示しています。 よくみるとスクロールペインとかもちゃんど動いていますね。 また、C# の twitter ライブラリがそのまま動きました。
.NET のクラスライブラリの使い勝手がそのまま Linux でもつかえるので、.NET 知っている人には便利ですね~。 GTK も簡単に呼べるので、画面も GNOME 的なアプリが簡単につくれます。
あまり時間が無くておおくはさわっていませんが、何か不具合あっても知恵と勇気でのりきれるレベルの完成度と感じました。 UNIX でちょい GUI アプリつくりたいときには良いかもしれません。 🙂
MONOを使ってVB.netのwindowsフォームアプリをwindows以外のOSでも使いたいんだけど、ソースコードでWndProcやCreateParamsのオーバーライドを使っても他のOSできちんと動いてくれそうかもし知っていたら教えて欲しい。
windows以外のOSで上記のオーバーライドを使った時にwindowsメッセージの値がwindowsで使っているときと同じように返ってくるのがわからない