ruby-****@lists*****
ruby-****@lists*****
2003年 6月 16日 (月) 10:01:14 JST
------------------------- REMOTE_ADDR = 163.135.10.36 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?%A5%EC%A5%F3%A5%B8%A5%A6%A5%A3%A5%B8%A5%A7%A5%C3%A5%C8%B6%A6%C4%CC%A4%CE%A5%E1%A5%BD%A5%C3%A5%C9 ------------------------- = レンジウィジェット共通のメソッド レンジウィジェットクラスの内部はかなり複雑である. しかし,ハックしたいと思っているならば,全ての「ベースクラス」ウィジェット同様,その複雑さ自体が興味深いものになるだろう. さらに,レンジウィジェットが定義するメソッドとシグナルのほとんどは,実際には派生ウィジェットを書くときにだけ試用される. しかしながら,レンジウィジェットが定義するメソッドの中にはいくつかは有用なメソッドが存在し,これらのメソッドは全てのレンジウィジェットで動作する. == アップデートポリシの設定 レンジウィジェットの「アップデートポリシ」は,ユーザによる操作のどの部分でアジャストメントのvalueを変更し,"value_changed"シグナルを発行するか,を決定する. アップデートポリシは以下の定数のうちのいずれかで指定する: :Gtk::UPDATE_CONTINUOUS これはデフォルトのポリシである."value_changed"シグナルは連続的に発行される.つまり,スライダがほんのわずかでも動かされるたびに発行される. :Gtk::UPDATE_DISCONTINUOUS スライダを動かすのを止め,マウスボタンをリリースした時に"value_changed"シグナルが発行される. :Gtk::UPDATE_DELAYED ユーザーがマウスボタンをリリースしたとき,またはほんの少しの間スライダの動きを止めたときに"value_changed"シグナルが発行される. レンジウィジェットのアップデートポリシはGtk::Range#update_policy=またはGtk::Range#set_update_policyで設定する: Gtk::Range#update_policy=(policy) Gtk::Range#set_update_policy(policy) == アジャストメントの取得と設定 「その場で」レンジウィジェットの((<アジャストメント>))を取得したり設定したりするには,ご想像通り,以下のメソッドを使用する: Gtk::Range#adjustment # 取得 Gtk::Range#adjustment=(adjustment) # 設定 Gtk::Range#set_adjustment(adjustment) Gtk::Range#adjustmentは,レンジウィジェットが接続しているアジャストメントオブジェクトを返す. アジャストメントのフィールドを変更したかどうかに関係なく,既にレンジウィジェットが使用しているアジャストメントをGtk::Range#adjustment=に渡しても何も起こらない. 新しいアジャストメントを渡した場合,古いアジャストメントへの参照を外し(可能ならそれを破壊する),適切なシグナルを新しいアジャストメントに接続し,さらにスライダのサイズや位置を再計算し必要なら再描画を実行する(少なくとも,実行すると期待されている)Gtk::Range#adjustment_changedを呼び出す. ((<アジャストメント>))のセクションで述べたように,同じアジャストメントを再使用したいのなら,値を直接修正した後"changed"シグナルを発行すること: Glib::Instantiatable#signal_emit("changed") ------------------------- = レンジウィジェット共通のメソッド レンジウィジェットクラスの内部はかなり複雑である. しかし,ハックしたいと思っているならば,全ての「ベースクラス」ウィジェット同様,その複雑さ自体が興味深いものになるだろう. さらに,レンジウィジェットが定義するメソッドとシグナルのほとんどは,実際には派生ウィジェットを書くときにだけ試用される. しかしながら,レンジウィジェットが定義するメソッドの中にはいくつかは有用なメソッドが存在し,これらのメソッドは全てのレンジウィジェットで動作する. == アップデートポリシの設定 レンジウィジェットの「アップデートポリシ」は,ユーザによる操作のどの部分でアジャストメントのvalueを変更し,"value_changed"シグナルを発行するか,を決定する. アップデートポリシは以下の定数のうちのいずれかで指定する: :Gtk::UPDATE_CONTINUOUS これはデフォルトのポリシである."value_changed"シグナルは連続的に発行される.つまり,スライダがほんのわずかでも動かされるたびに発行される. :Gtk::UPDATE_DISCONTINUOUS スライダを動かすのを止め,マウスボタンをリリースした時に"value_changed"シグナルが発行される. :Gtk::UPDATE_DELAYED ユーザーがマウスボタンをリリースしたとき,またはほんの少しの間スライダの動きを止めたときに"value_changed"シグナルが発行される. レンジウィジェットのアップデートポリシはGtk::Range#update_policy=またはGtk::Range#set_update_policyで設定する: Gtk::Range#update_policy=(policy) Gtk::Range#set_update_policy(policy) == アジャストメントの取得と設定 「その場で」レンジウィジェットの((<アジャストメント>))を取得したり設定したりするには,ご想像通り,以下のメソッドを使用する: Gtk::Range#adjustment # 取得 Gtk::Range#adjustment=(adjustment) # 設定 Gtk::Range#set_adjustment(adjustment) Gtk::Range#adjustmentは,レンジウィジェットが接続しているアジャストメントオブジェクトを返す. アジャストメントのフィールドを変更したかどうかに関係なく,既にレンジウィジェットが使用しているアジャストメントをGtk::Range#adjustment=に渡しても何も起こらない. 新しいアジャストメントを渡した場合,古いアジャストメントへの参照を外し(可能ならそれを破壊する),適切なシグナルを新しいアジャストメントに接続し,さらにスライダのサイズや位置を再計算し必要なら再描画を実行する(少なくとも,実行すると期待されている)Gtk::Range#adjustment_changedを呼び出す. ((<アジャストメント>))のセクションで述べたように,同じアジャストメントを再使用したいのなら,値を直接修正した後"changed"シグナルを発行すること: Glib::Instantiatable#signal_emit("changed")