Glade コンボボックスの攻略法

Glade コンボボックスの攻略法 – glade コンボをこのクラスで使用する方法

Glade コンボボックスの攻略法

ユーザインターフェイスを 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 コード


<?php
require_once 'Gtk2/IndexedComboBox/Model.php';

$glade = new GladeXML(dirname(__FILE__) . '/glade.glade');
$glade->signal_autoconnect();

$combo = $glade->get_widget('cmbNormal');
$combo->connect('changed', 'comboChanged');
//show the second column only
$renderer = new GtkCellRendererText();
$combo->pack_start($renderer);
$combo->set_attributes($renderer, 'text', 1);

$mod = new Gtk2_IndexedComboBox_Model();
$combo->set_model($mod);

$mod->append(1, 'One');
$mod->append_array(array(2 => 'Two', 3 => 'Three'));
$mod->prepend(4, 'Four');

function comboChanged($combo)
{
    $nActive = $combo->get_active();
    $iter    = $combo->get_model()->get_iter($nActive);

    $key     = $combo->get_model()->get_key($iter);
    $text    = $combo->get_model()->get_text($iter);

    echo 'Selected: ' . $key . ' => ' . $text . "\r\n";
}

Gtk::main();
?>

注意すべき点は、自分でセルレンダラを設定し、 モデルのどのカラムを表示するのかを指定しなければならないということです。 それを除けば、あとは普通にモデルを作成し、それを set_model() で設定するだけです。

これまでの例で見てきたすべての Gtk2_IndexedComboBox のメソッドは、Gtk2_IndexedComboBox_Model でも使用できます。しかし get_active_key()get_active_text() だけはこのモデルでは使用できません。 なぜなら、このモデルは選択状態を知らないからです。選択されている GtkTreeIter を取得するには、 get_active()get_iter() を組み合わせて使用し、この iter オブジェクトを get_key() および get_text() に渡します。

はじめの一歩 (Previous) 本体クラス (Next)
Last updated: Sat, 25 Oct 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.