title: Apollo チュートリアル
Author: NISHIO Mizuho
mailto: mzh@portnet.ne.jp


1. リストビュー
  リストビューは Windows の explorer のように何かの一覧を表示するために使われます。表示形式を explorer のように変更することができます。

1.1. その1

  %href: ./rb/listview.rb listview.rb%

--ruby
001  require 'phi'
002  
003  form = Phi::Form.new(:form1, 'formです')
004  form.height = 300
005  
006  listview = Phi::ListView.new(form, :listview1, '')
007  listview.align = Phi::AL_CLIENT
008  listview.read_only = true
009  listview.view_style = Phi::VS_REPORT
010  
011  env_column = listview.columns.add 
012  env_column.caption = 'name'
013  env_column.width = 100
014  
015  value_column = listview.columns.add
016  value_column.caption = 'value' 
017  value_column.width = 150
018  
019  ENV.keys.sort.each do |k|
020    new_item = listview.items.add
021    new_item.caption = k
022    new_item.sub_items.add(ENV[k])
023  end
024  
025  form.show
026  Phi.mainloop
--

  このスクリプトを実行すると、%href: img/listview.png このような% ウィンドウがあらわれます。

1.1.1. 解説

  6行目で Phi::ListViewのオブジェクトを生成しています。 Phi::ListView.new の使い方は今までと同じです。

  7〜9行はリストビューの外見を設定しています。8行目は listview.read_only( Phi::ListView#read_only ) の属性に true を代入してリストビューのそれぞれの項目をユーザーが修正出来ないようにしています。9行目の listview.view_style( Phi::ListView#view_style )は表示形式を変更するための属性です。 Phi::ListView の表示形式は4つで、 Phi::ListView#view_style に下の4つの定数を代入することで表示形式を切りかえることが出来ます。

  * Phi::VS_ICON
  * Phi::VS_SMALL_ICON
  * Phi::VS_LIST
  * Phi::VS_REPORT


  Phi::VS_ICON では大きいアイコン、Phi::VS_SMALL_ICON では小さいアイコン、Phi::VS_LIST では一覧、 Phi::VS_REPORT では詳細という表示形式になります。ただし、上のスクリプトは Phi::VS_REPORT を使用するように書かれているので、9行目に他の3つの定数を代入してもあまり面白くはありません。
  
  11〜17行はリストビューの縦の列を追加しています。スクリーンショットの画像の「name」や「value」という列はここで追加されているわけです。11〜13行と15〜17行は同じ事をしているので、11〜13行だけ説明します。

  11行では listview.columns( Phi::ListView#columns )を使ってリストビューの縦の列にアクセスしています。 Phi::ListView#columns は Phi::Columns のオブジェクトを返すので、listview.columns.add( Phi::Columns#add )を使って縦の列を追加します。追加された縦の列は Phi::Column のオブジェクトで表され、 env_column に代入されます。12行目の env_column.caption( Phi::Column#caption )の属性に 'name' を代入して、縦の列に表示される文字列を設定しています。13行は env_column.width( Phi::Column#width )で縦の列の幅を設定します。

  19〜23行は横の行を追加しています。ここは Ruby の使い方に馴れていないと、少し難しいかもしれません。まず19行目の最初の ENV は環境変数を表すRubyの定数です。環境変数が何なのかという説明はここではしません。ENVは Ruby の Hash クラスのオブジェクトになっています。 Hash というのは

  * 'hoge' -> 'ほげ'
  * 'fooo' -> 'ふううう'
  * 'ad-hoc' -> 'バータリー的'


  のような構造になっていて、あるオブジェクトを鍵にして、別のオブジェクトを参照するためのものです。上記のデータが foo_hash という Hash のオブジェクトだとすると、foo_hash['hoge'] では 'ほげ' を、foo_hash['fooo'] では 'ふううう' を参照することができます。

  19行ではまず ENV.keys( Hash#keys )で鍵の一覧を取得します。 foo_hash を例に取ると、foo_hash.keys では [ 'hoge', 'fooo', 'ad-hoc' ] という Hash の鍵を要素としたArrayのオブジェクトを返します。

  次に ENV.keys.sort( Array#sort )は ENV.keys で取得した鍵の一覧をアルファベット順に並べた Array のオブジェクトを返します。上の foo_hash.keys.sort では [ 'ad-hoc', 'fooo', 'hoge' ] となります。 

  ENV.keys.sort.each は以前紹介したイテレーターになっています。foo_hash.keys.sort.each do |k| 〜 end  を例にとると、まず foo_hash.keys.sort の最初の要素である 'ad-hoc' という 値が k に入り、その状態で 〜 の部分が実行されます。次に 'fooo' という値が k に入り、再び 〜 が実行されます。最後に 'hoge' が k に入って もう一度 〜 が実行されます。(こんな説明で分かります?)

  では、20〜22行の説明を行います。

  20行は横の行を追加するために listview.items( Phi::ListView#items )のadd( Phi::ListItems#add )を使用しています。 Phi::ListItems#add は横の行を表す Phi::ListItem の新しいオブジェクトを作り、それが new_item に代入されます。21行は横の行が表示す文字列を設定していて、k というのは ENV の鍵になります。new_item はリストビューの横の行全体を表していますが、new_item.caption( Phi::ListItem#caption )の属性は「name」の列の文字列を表します。22行は 「value」の列の項目を設定しています。new_item.sub_items( Phi::ListItem#sub_items )は サブ項目を表す属性です。これは Phi::Strings のオブジェクトで、このオブジェクトに Phi::Strings#add を使って文字列を追加すると、サブ項目が増えます。22行では ENV[k] という文字列を表示する項目が追加され、それは「value」の列の項目になります。

1.1.1.1. クラスやメソッド
: Rubyの定数
* ENV

: Rubyの組み込みクラス
* Hash
* Array

: Phi::ListView#
* Phi::ListView.new
* Phi::ListView#read_only
* Phi::ListView#view_style

: Phi::Columns#
* Phi::Columns#add

: Phi::Column#
* Phi::Column#caption
* Phi::Column#width

: Phi::ListItems#
* Phi::ListItems#add

: Phi:ListItem#
* Phi::ListItem#caption
* Phi::ListItem#sub_items