トップ 差分 一覧 ソース 検索 ヘルプ PDF ログイン

wxTreeCtrl概要

クラス: wxTreeCtrl, wxImageList

ツリーコントロールは、そのアイテムを木構造のように表示する。各アイテムはそれ自身の(オプションで)アイコンとラベルを持つ。1つのアイテムは、折りたたまれた状態(その子供が表示されていない)と、展開された状態(その子供が表示された状態)になり得る。ツリー内の各アイテムは、ぼかされたデータ型wxTreeItemId形のitemIdにより識別される。wxTreeItemId::IsOkを呼ぶことにより、アイテムが有効かどうか調べることができる。

アイテムのテキストと画像は、GetItemText/SetItemTextとGetItemImage/SetItemImageにより参照、変更することができる。事実、アイテムは2つの画像を持つことができる。SetItemSelectedImage/GetItemSelectedImage関数により設定、参照することができる状態により、標準の画像と、別の画像を持つことができる。しかし、この関数は幾つかのプラットフォームでは使用できない場合がある。

ツリーアイテムは幾つかの属性を持っている。アイテムが選択されているかどうか、可視かどうか、ボールド状態かどうか、展開されているか折りたたまれているか。これら全ての属性は、関連する関数により参照することができる。IsSelected, IsVisible, IsBold, そしてIsExpandedである。1度に1つのアイテムだけが選択できる状態では、(SelectItemにより)他の1つのアイテムを選択すると、既に選択されていたアイテムは自動的に選択が解除される。

アイコンとラベルに加えて、ユーザ固有のデータ構造を全てのツリー構造に関連付けることができる。そうしたい場合には、データに関連付けられているアイテムの識別子を返すGetId()というただ1つの関数を持つ単純なクラス、wxTreeItemDataクラスを派生させればよい。このデータは、関連付けられたアイテムが削除されるときにコントロール自身により開放される(コントロールが破棄される場合には、全てのアイテムが開放される)。このため、アプリケーション自身で削除する必要は無い(もしアプリケーションで削除する場合には、ツリーが2度ポインタを削除することを防ぐために、SetItemData(NULL)を呼ばなければならない)。関連付けられたデータは、GetItemData()関数により参照できる。

ツリーが作成された瞬間において、全てのアイテムがツリーに追加される場合、ツリー上の作業は、相対的に一方方向に行われる。しかし、大きなツリーでは非常に効率が悪い。性能を上げるため、アイテムを含む枝が展開されるまで、アイテムのツリーへの追加を遅らせたいと考えるかもしれない。そのために、まずは(AddRootを使用して)、ルートアイテムだけを作成する。他のアイテムは、EVT_TREE_ITEM_EXPANDINGイベントを受信したときに追加する。そのとき、展開されたアイテムに じか につながる全てのアイテムを追加する。しかし、もちろん、このイベントはこのアイテムに対して始めの1回だけ受信される。そうでなければ、ユーザが枝の展開/折りたたみ/展開を行うと、2回追加されることになる。

ツリーコントロールは、そのアイテムを列挙するための関数を準備している。列挙用の関数として3種類ある。与えられたアイテムの子供に対するもの、与えられたアイテムの兄弟に対するもの、可視化されたアイテム(現在ユーザが見られるものであり、枝が折りたたまれた場合や、ビューでスクロール外にある場合がある)に対するものである。子供の列挙用の関数は、呼び出し元に1つの引数coockeを要求する。それは、呼び出し元に対してぼかしている数字であるが、ツリーコントロール自身が複数の列挙子に同じように実行できるようになっている(これは明示的に認められている)。忘れてはならないのは、GetFirstChildとGetNextChildに渡されたcookieは同じ変数であるべきである(and that nothing should be done with it by the user code)。

ツリーコントロールには他の機能もある。ユーザ定義の比較関数OnCompareItems(デフォルトでは、ツリーラベルのアルファベット比較による比較)を使用したSortChildrenによるアイテムのソート、HitTestによる当たり判定(ポイントされたコントロールの位置を決定する)、ツリーアイテムラベルのインプレース編集(EditLabelを参照)である。

最後に、ツリーコントロールは、キーボードインタフェースを持っている。カーソル(方向)キーにより現在の選択を変更することができる。<HOME>と<END>は現在のアイテムの最初、または最後の兄弟に飛ぶことができる。'+'、'-'、'*'は、現在の枝の展開、折りたたみ、トグル(切り替え)に使用される。<DEL>と<INS>キーはデフォルトでは何もしないが、ツリーからのアイテムの削除や、新しいアイテムの挿入に関連付けることができる。

最終更新時間:2005年06月23日 20時52分42秒