保科です。

On Sat, Jun 05, 1999 at 09:44:37PM +0900,
Hiroshi Igarashi <igarashi / ueda.info.waseda.ac.jp> wrote:

> いがらしです。

お世話になります〜。

> 「無謀な試み」なんて言わずにどんどん使って下さいね。

ruby-gtk が無謀なのではなくて、私が ruby でなにか書くのが無謀かと(汗)

> gtk_mail_iteration()ってどういう使い方するものなのか
> 知らないんです。Gtkの配布物の中にも使用例が見つからないし。
> どこかに(C言語レベルの)サンプルプログラムないでしょうか?

gimp はお持ちですか?お使いでなくてもかまいません。
gimpprogress.c あたりがいいかと。

> このプログラムで
>   while val == 2
>     Gtk::main_iteration()
>     STDERR.print("*")
>   end
> のようにすると結構このwhileループを回っているように見えるんですが、
> CPU timeをそんなに消費してはいないみたいですね。

iteration の意味そのものはサッパリですが、ループの中に置いて、ちょいと
Gtk に対するイベントキュー(ってあるの?)を見にいくのかな、くらいに
思っていました。なにも入力がなければ、数ミリでとっとと返ってくるのかな。

> どういう場面でgtk_main_iteration()を利用すべきか
> まだ私には分からないのですが、取り込んでおきます。

ありがとうございます。

私は今回は Modal Dialog を使いたかったので、それを例に引きましたが、
C では Progressbar を使うときに、gtk_main_iteration() を使ってました。
testgtk の例では Progressbar でタイマを刻んで棒を伸ばしてましたが、
あれって実際には全然役にたたない例でしょ?

n 件あるデータを読み込ませて、1件ごとに棒を伸ばそう、途中でキャンセルも
できるようにしたいぞ、などと考えて、

   progress_box = progress_new ("Getting List", "Acquiring image list...",
                                (GtkSignalFunc) acq_list_cancel, 0);

   for ( i = 1 ; i <= (int)status.numPictures ; i++)
     {
     なんかする。
        progress_update (progress_box,
                         i / (gfloat) status.numPictures);

        while (gtk_events_pending ())
          gtk_main_iteration ();

        if (progress_canceled == 1)
          break;
     }
   progress_free (progress_box);
 
などという風にしてました。

        while (gtk_events_pending ())
          gtk_main_iteration ();

のとこがミソかと。

> それともダイアログボックスでの選択に依存する処理はすべて
> ダイアログボックスのボタンのシグナルハンドラに書くべき
> なんでしょうか?

前回の例では単にボタンの番号だけを返していましたから、手を抜いて
ハンドラなしにしちゃいましたけど、凝ったダイアログを作って、Yes なり
No なりを押したときに、ダイアログに貼っついてる widget からデータを
読み込んでから返る、などとするなら、私もハンドラに書くと思います。

というか、C で書いたヤツならいくつかそういうのがあるのですが、
それを ruby で書けなかったのです。質問する以前の問題ですね。はは。

# だから無謀な試みなの(泣)

-- 
ちなんでどうする気だ?

保科 徹(hoshina / best.com)  http://www.best.com/~hoshina
PGP fingerprint : 95 73 1C 26 C6 9E 28 86  BA 32 34 CA FC 9B DC 6D