[ruby-gnome2-doc-cvs] [Hiki] create - tut-gtk-combobox

Back to archive index

ruby-****@sourc***** ruby-****@sourc*****
2003年 8月 18日 (月) 12:36:02 JST


-------------------------
REMOTE_ADDR = 163.135.10.36
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/ja/?tut-gtk-combobox
-------------------------
= コンボボックス 
コンボボックスはもう一つのお手軽ウィジェットで,本当に単にいくつかのウィジェットを組み合わせただけである.
ユーザの視点から見ると,コンボボックスはテキストエントリボックスと,ユーザが予め用意されたエントリのセットから1つを選択できるポップダウンメニューから構成される.
あるいはユーザはテキストエントリボックスに直接異なった選択肢を入力することができる.

すでにお分かりだと思うが,コンボボックスは注意すべき2つの主要なコンポーネント,entry及びlistを持つ.

まず,コンボボックスを生成しよう:

  Gtk::Combo.new

コンボボックスのテキストエントリに文字列を設定するには,直接entryウィジェットを操作する:

  c = Gtk::Combo.new
  c.entry.text = "My String"

ポップダウンメニューに値を設定するには次のメソッドを使う:

  Gtk::Combo#popdown_strings=(strings)
  Gtk::Combo#set_popdown_strings(strings)

strings引数はポップダウンメニューにリストアップされるエントリで,StringのArrayを渡す.

  c.popdown_strings = [
    "String 1",
    "String 2",
    "String 3",
    "String 4",
  ]

これでコンボボックスは動作するよう設定されたことになる.
次のメソッドを用いることでさらに幾つかの動作は変更することができる:

  Gtk::Combo#use_arrows=(val)
  Gtk::Combo#set_use_arrows(val)

  Gtk::Combo#use_arrows_always=(val)
  Gtk::Combo#set_use_arrows_always(val)

  Gtk::Combo#case_sensitive=(val)
  Gtk::Combo#set_case_sensitive(val)

Gtk::Combo#set_use_arrowsによって,上向き/下向きの矢印キーを使ってエントリの値を変えることができるようになる.
つまり,ポップダウンリストを表示せずに,テキストエントリの現在のテキストを次のリストエントリ(押したキーに従い上または下方向のエントリ)に置き換えることができるということである.
実際には,エントリ内の現在の値に一致するアイテムをリストの中から検索し,前または次のアイテムを選択するようになっている.
通常はエントリ内での矢印キーは(いずれにせよTABを用いて同様のことができるのだが)フォーカスを変更するのに用いられる.
現在のアイテムがリストの最後で下向きの矢印キーを押した場合はフォーカスが変更される点に注意すること(アイテムがリストの最初で上向きの矢印キーが押された場合も同様である).

エントリ内の現在の値がリスト内に存在しない場合は,Gtk::Combo#set_use_arrowsの機能は無効にされる.
((-実際に試してみると,テキストエントリ内に適当な文字列を挿入して下を押すとリストの先頭のエントリで,上を押すとリストの末尾のエントリでテキストエントリの文字列が置き換えられる.-))

Gtk::Combo#set_use_arrows_alwaysでも,同様に上向き/下向きの矢印キーでドロップダウンリストの選択肢を巡回することができるようになる.
ただし,こちらはリストを巡回する(wrap around)ため,上向きおよび下向きの矢印キーをフォーカスを変更に用いることはまったくできなくなる。 

Gtk::Combo#set_case_sensitiveはGTKが大文字小文字の違いを認識してエントリを検索するかどうかを切替える.
これはコンボボックスがテキストボックス内の現在のエントリを用いてリストから値を検索するときに用いられる.

コンボボックスのテキストエントリ内でMOD-1とTabキーを同時に押すことで現在のエントリを補完させることもできるのだが,Gtk::Combo#set_case_sensitiveの設定に応じて大文字小文字を区別するか,区別しないかのどちらかを選択することができる.
MOD-1はxmodmapユーティリティによって大抵Altキーにマップされている.
しかし,特定の((-ほとんどの,ではないか?-))ウィンドウマネージャではこのキーの組合せを使っているものもあり,その場合はGTKのバインディングは上書きされてしまい無効となるので注意すること.

これで望み通りの外見と動作をするコンボボックスが手に入った.
あとはコンボボックスからデータを取得するだけである.
これは比較的簡単で,多くの場合,テキストエントリからデータを取得するだけで充分である.
するべきことは2つあって,ユーザがリターンを押したことを示すactivateシグナルを接続し,テキストを読み取ることである.

  c.signal_connect("activate") do |w|
    string = w.entry.get_text
    # stringを使ってウガホゲ…
  end

以上がデータ取得に関する全てである.

次のメソッド

  Gtk::Combo#disable_activate

これはコンボボックスのテキストボックスのactivateシグナルを無効にする.
デフォルトの状態では,テキストボックスにフォーカスをあてた状態でリターンキーを押すと,ドロップダウンリストが現れるが,これを抑制することができる.






ruby-gnome2-cvs メーリングリストの案内
Back to archive index