ユーザインターフェイスを Glade でデザインするのは、 非常に便利で簡単です。しかし、このコンボでは独自のクラスを使用することができません。 Gtk2 の MVC モデルのおかげで、この強力なコンボを使用しつつ 内部では Gtk2_IndexedComboBox と同じモデルである Gtk2_IndexedComboBox_Model を使用することができます。
使用する Glade ファイル
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="wndTest"> <property name="visible">True</property> <property name="title" translatable="yes">Gtk2_IndexedComboBox_Model test</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">False</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <property name="decorated">True</property> <property name="skip_taskbar_hint">False</property> <property name="skip_pager_hint">False</property> <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> <signal name="destroy" handler="Gtk::main_quit"/> <child> <widget class="GtkComboBox" id="cmbNormal"> <property name="visible">True</property> </widget> </child> </widget> </glade-interface>
PHP コード
注意すべき点は、自分でセルレンダラを設定し、 モデルのどのカラムを表示するのかを指定しなければならないということです。 それを除けば、あとは普通にモデルを作成し、それを set_model() で設定するだけです。
これまでの例で見てきたすべての Gtk2_IndexedComboBox
のメソッドは、Gtk2_IndexedComboBox_Model
でも使用できます。しかし
get_active_key() と
get_active_text() だけはこのモデルでは使用できません。
なぜなら、このモデルは選択状態を知らないからです。選択されている
GtkTreeIter を取得するには、
get_active() と get_iter()
を組み合わせて使用し、この iter
オブジェクトを
get_key() および get_text()
に渡します。