PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

Glade コンボボックスの攻略法 | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

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() に渡します。

忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「Glade コンボボックスの攻略法」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | Glade コンボボックスの攻略法」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: