Flash Bulder 4.5とIconItemRenderer

Flash Builderでモバイル用プロジェクトを作成すると、ウィザードが提供されるアイテムレンダラーのクラスはIconItemRendererという、「項目の左側にアイコン」「1行の項目名」「複数行の説明」「右側にデコレーション」を置ける物になる。*1


意外と問題なのは「1行の項目名」という部分だ。個人的には「折り返し」も設定できるようにしておいてもらいたいのだが。「複数行の説明」という部分があるのだから、項目の表示サイズは元々可変になるようになっているはず。

試しに長い文字列を与えてみると、単に切り捨てるのではなく末尾に「…」を追加して省略するという細かい芸当をしてくれた(笑)



どこで「1行」と決まっているのかを調べてみると、IconItemRendererの上位クラス、LabelItemRendererで

protected function createLabelDisplay():void
{
    labelDisplay = StyleableTextField(createInFontContext(StyleableTextField));
    labelDisplay.styleName = this;
    labelDisplay.editable = false;
    labelDisplay.selectable = false;
    labelDisplay.multiline = false;
    labelDisplay.wordWrap = false;
    
    addChild(labelDisplay);
}

と書かれている場所がある。ここでmultilineとwordWrapをtrueに設定できれば良いのであろう。(LabelItemRendererの上位クラスはUICompornentなので、アイテムレンダラーとしての機能を知るにはこれ以上さかのぼる必要がないはず。)


IconItemRendererを継承したクラスをつくってcreateLabelDisplay()を書きかえるのは比較的簡単にできそうだが、それを使えるようにする方法は別問題か?

ActionScriptより記述が楽そうなのでMXMLを優先的に使っているのだが、拡張したレンダラークラスを呼び出す部分はActionScriptでないとかけないようにも思える。(逆に言うと、ActionScriptならかけそうに思えるのでマシだが。)


まぁ、気の利いたことをするには結局常にActionScriptが必要であるらしい。

*1:右側に置く「アイコン」は項目ごとに別の物を指定する。「デコレータ」は単なる飾り、「アイコン」は意味のある物らしい。なので、左側に意味のない飾りを置くのは難しい。とりあえず、ActionScriptで「無意味な関数」を書いたりごちゃごちゃする。あと、アイコンはサイズ指定可能だけどデコレーターはサイズ指定できない。これはかなり問題。