いがらしです。

今dellinさんのサイトにアクセスできません……こちらの問題?

At Thu, 19 Jul 2001 01:39:11 +0900,
in [ruby-ext:01864] Re: ItemFactory-patch,
MUTOH Masao <mutoh / highway.ne.jp> wrote:
> 
> > 先日旧バージョン凍結との話がでていましたが、とりあえず手元でいくつか実装
> > してみました。
> 
> 五十嵐さんにお願いなのですが....。
> 新しいバージョンが出るまでは旧バージョンの凍結を延期しませんか?
> 0.25リリース以降もいくつかパッチがでているようですし...。

はい、前言を覆してすみませんが、
他にもbugfixのパッチをもらっているので、
少なくとも0.26はリリースします。

> > 変更点は…
> > * バグ修正 - item_exec_callback_wrap周り
> > * Gtk::ItemFactory::Constantsモジュールに定数を移し、Gtk::ItemFactoryで
> >   インクルード(Fileクラスを真似て)
> > * ItemFactory#path_from_widget,#delete_item,#get_itemの追加
> > です。
> > 
> > Constantsにすると利便性が増すとおもったのですが…どうでしょう?
> 
> えっと、具体的にはどのように利便性が増すのでしょうか。
> 純粋にGtk::ItemFactory内で使うだけなら以前のままで十分だと思うのですが....。

定数だけincludeしたい場面はあると思います。

> また、そうした方が利便性が増すということであれば、現状実装されている
> 他の定数群も上記のような形に変更した方が良いと言うことになるんでしょうか。
> 
> ...というのも、Ruby/GTKってイマイチ定数の配置に統一感がないような気がするん
> ですよね。これはGTK+の影響でしょうがないのかな...。

少しずつ手で定義してきた弊害ですね。

> あ、それと、本質的ではないのですが....
> 五十嵐さんの自動生成スクリプトでこの辺にばらつきがあると対応するのが
> 大変になりませんか?

enum型(ほとんどの定数)の定義なら、自動生成するCコードでは、

    rb_mGtkWindowType = rb_define_module_under(rb_mGtk, "WindowType");
    rb_define_const(rb_mGtkWindowType, "TOPLEVEL", INT2FIX(GTK_WINDOW_TOPLEVEL));
    rb_define_const(rb_mGtkWindowType, "DIALOG", INT2FIX(GTK_WINDOW_DIALOG));
    rb_define_const(rb_mGtkWindowType, "POPUP", INT2FIX(GTK_WINDOW_POPUP));

とし、gtk/const.rb(gtk.rbからrequireされる)で

module Gtk
  class Window
    include WindowType
  end
end

としています。今のところ。

各ウィジェットとenum型の関連は自明ではないので、
後者は手で書く必要がありますが、個々の定数を定義するのに
比べれば数もぜんぜん少ないし問題ないと思ってます。

ところがItemFactoryで定義しようとしている定数の場合、
enum型ではなく"<CheckItem>"などの文字列ですよね。
Cのヘッダファイルでは定義されておらず、そのため
*.defsファイルでも同様です。ですから自動的には生成できません。
こういう例外的なものは gtk/const.rb あたりで、手で定義して
やるしかないかなと思ってますが、そんなにないですよね。
# ひょっとしてあるかなぁ?

--
五十嵐  宏  (Hiroshi IGARASHI)