From: "とみたまさひろ" Date: 2000-07-24T00:40:31+09:00 Subject: [ruby-list:23990] Re: Ruby/GTK の FileSelection について ( ディレクトリのみ表示したい) とみたです。 On Sun, 23 Jul 2000 15:49:06 +0900 MUTOH Masao wrote: > 本メーリングリストにメールを出すのは初めてです。 > 内容に不備があればご指摘ください。 ruby-ext の方がいいかも。ということで ruby-ext に送ります。 > FileSelectionでディレクトリを選択し、結果をテキストボックス > 等に表示したい > > と思ったのですが、FileSelectionでは(少なくともデフォルトでは) > ファイル選択欄も表示されてしまいます。 > > 機能的には、その状態でディレクトリのみ選択すればget_filename > でディレクトリを取得できるので良いと言えば良いのですが、 > ユーザの混乱を避けるために、できればディレクトリ選択欄のみを > 表示(あるいは選択)させたいと思います。 Gtk::FileSelectoin が file_list を返すことができれば、それを hide すればいいんですけど、今の Ruby/Gtk ではできないですね。 ということで rbgtkwindow.c を変更してみました。これを使えば、次の ようにしてできます。 ------------------------------------------------------------------ require 'gtk' fs = Gtk::FileSelection.new("select directory") fs.signal_connect(Gtk::Widget::SIGNAL_DESTROY_EVENT) do destroy end fs.ok_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do printf("filename = %s\n", fs.get_filename) end fs.show_all fs.file_list.parent.hide Gtk.main ------------------------------------------------------------------ --- rbgtkwindow.c.orig Thu Jun 15 23:39:00 2000 +++ rbgtkwindow.c Mon Jul 24 00:23:56 2000 @@ -329,6 +329,36 @@ } static VALUE +fsel_dir_list(self) + VALUE self; +{ + VALUE dir_list = rb_iv_get(self, "dir_list"); + + if (NIL_P(dir_list)) { + GtkWidget *w = GTK_FILE_SELECTION(get_widget(self))->dir_list; + dir_list = make_widget(gCList, w); + rb_iv_set(self, "dir_list", dir_list); + } + + return dir_list; +} + +static VALUE +fsel_file_list(self) + VALUE self; +{ + VALUE file_list = rb_iv_get(self, "file_list"); + + if (NIL_P(file_list)) { + GtkWidget *w = GTK_FILE_SELECTION(get_widget(self))->file_list; + file_list = make_widget(gCList, w); + rb_iv_set(self, "file_list", file_list); + } + + return file_list; +} + +static VALUE fsel_show_fileop_buttons(self) VALUE self; { @@ -355,6 +385,8 @@ rb_define_method(gFileSel, "cancel_button", fsel_cancel_button, 0); rb_define_method(gFileSel, "help_button", fsel_help_button, 0); rb_define_method(gFileSel, "action_area", fsel_action_area, 0); + rb_define_method(gFileSel, "dir_list", fsel_dir_list, 0); + rb_define_method(gFileSel, "file_list", fsel_file_list, 0); rb_define_method(gFileSel, "show_fileop_buttons", fsel_show_fileop_buttons, 0); rb_define_method(gFileSel, "hide_fileop_buttons", fsel_hide_fileop_buttons, 0); } --- とみたまさひろ http://www.tmtm.org 日本MySQLユーザ会 http://www.mysql.gr.jp