From: Masao M. <mu...@hi...> - 2003-07-18 18:17:53
|
むとうです。 連絡遅れてすみません。ちと仕事で徹夜してました(^^;)。 On Thu, 17 Jul 2003 15:29:50 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > さかいです。 > > From: Masahiro Sakai (酒井政裕) <sa...@to...> > Subject: [ruby-gnome2-devel-ja] enum/flags のクラス化 > Date: Sun, 06 Apr 2003 20:57:47 +0900 (JST) > > > GEnum/GFlagsの派生タイプを現在は整数として扱っていますが、 > > これをそれぞれのクラスのオブジェクトとして扱うように > > 変更しようかと考えています。 > > すっかり忘れていたのですが、これどうしましょっか? > > 自分では結構気に入っているのですが、少々やりすぎという気もしています。 なるほど。 > 現状をまとめると、 > > * 互換性にはそれなりに気を配ったので、 > これまで動作した大抵のコードは動作しなくなったりはしないはず 互換性を残してというのは、今までのものはそのまま残して 新たに定義したこちらと併用するというイメージでしょうか。 2つあると、ドキュメントが大変になりそうな気が....(T_T)。 > * 下のサンプルのように、各クラスに定数を自動定義する事は出来てます。 > ですが、これは定数の定義場所と名前が現在のルールと違うので、 > 現在のルールを維持するには結局個別の対応が必要。 > > といったところです。 > > > とりあえず、手元では以下のような事が出来るようになっています。 > > > > require 'gtk2' > > Gtk::Window::Type = GLib::Type['GtkWindowType'].to_class > > > > p Gtk::Window::Type.values > > #=> [#<Gtk::Window::Type value=0 name="GTK_WINDOW_TOPLEVEL" nick="toplevel">, > > # #<Gtk::Window::Type value=1 name="GTK_WINDOW_POPUP" nick="popup">] > > > > p Gtk::Window::Type::TOPLEVEL > > #=> #<Gtk::Window::Type value=0 name="GTK_WINDOW_TOPLEVEL" nick="toplevel"> これ、どういう風に使うのでしょうか。 Gtk::Window.new(Gtk::Window::Type::TOPLEVEL) と書くイメージでよろしいですか? この認識で良いとして、 技術的にはコーディングの作業を少なくしたりできそうですし、ユーザ的にも 定数値の分類を、irb等から簡単に見つけることができるのが便利そうですね。 ただ、ちと定数値が長くなりすぎてるような気もしないでもないです。 やはり、上記の場合は、 Gtk::Window.new(Gtk::Window::TOPLEVEL) がいっぱいいっぱいの長さじゃないでしょうか(あくまでも私の感覚ですが)。 定数値は今までと変更無しの Gtk::Window::TOPLEVEL Gtk::Window::POPUP のような感じでアクセスできて、その実、以下のように変わってるってのは どうでしょうか? p Gtk::Window::TOPLEVEL #=> #<GtkWindowType value=0 name="GTK_WINDOW_TOPLEVEL" nick="toplevel"> この1番目のGtkWindowTypeの部分でソートできれば、見た目上もイイでしょうし。 例えば、Type別に情報を取得したい場合なんかは p Gtk::Window.enums #=> ["GtkWindowType", ..., ...] とかを用意しておいて Gtk::Window.enums.each do |enum| p GLib::Type[enum] end とかすると情報が出てくるとか。 --- コーディング上は、Cレベルでrb_define_constしてたところ辺りを ざっくり削除して、 G_DEF_CONST("GtkWindowType"); とか書けたりしたら、それだけでもかなり便利になるような気がします。 #ここでは自動化はしない方がRuby/GTKの好きなクラスにEnumsを配置できるので #良いような気がします。 あ、そうそう、一つ気になったのですが、上記例のTOPLEVELって、 どのように抽出してるのでしょうか。その前のGtkWindowTypeから同じ部分を 削除してます? (イメージ) GtkWindowType -> GTK_WINDOW_TYPE -> GTK_WINDOW_まで同じ だから削除 相当検討違いなこと言ってたら、すみません。 徹夜続きで頭ぼーっとしてますんで(T_T)。 -- .:% Masao Mutoh<mu...@hi...> |