titleとtitleLayout
textじゃないよ、titleだよ。間違えないで。
DropDownList、IconButton、Image、TabbedPanel、FlashPlayerでは、titleプロパティが存在する。textとは違う。
例えば、右図のようなもの。一見、DropDownListとStaticTextの組み合わせのようにも見える。もちろんそれで作ることも可能だが、titleプロパティを使っている。
titleプロパティを使えば、2つのオブジェクトをグループ化する必要がないので、階層構造がスッキリする。それと引き換えに、ピクセル単位での細かい位置調整などは出来なくなるが、そんなことが必要なクレイジーなUIを作る機会はそうそうないので基本的にはデメリットは感じないはず。
指定は自動レイアウトの時とほとんど同じ。先に自動レイアウトのページを読んでおくとスムーズに理解できる。
ただ、CCのいつからか挙動がおかしくなったみたい。(こんなんばっかよ、本当に...)
titleプロパティ
これは難しいことはない。表示するテキストを与えるだけ。
var w = new Window('dialog{\
dl : DropDownList{ title :"選択してください:" }\
}');
w.show();
titleLayoutプロパティ
titleを使って表示した文字の配置をtitleLayoutで決める。titleLayout自体はオブジェクトで、直接何かの値を持たないので、その中のプロパティを設定していく。自動レイアウトで使うものばかりなので、自動レイアウトのページも参照されたし。
alignment:配置位置
characters:確保する領域の幅指定。
justify:揃え。
margins:文字の周りに取る余白。
spacing:UIパーツ本体とtitleの文字との間隔。
truncate:文字の切り捨て方法。文字数が多くて予約スペースに収まらない場合、文字の省略方法を指定する。
最初にも書いたが、StaticTextとの」組み合わせでも実現は可能である。その場合、StaticTextともう一つ(ドロップダウンリストやアイコンボタン)をグループ化すると扱いやすいのでそうすることが多いと思う。titleLayoutを扱う今回もそのようなイメージを持っていると思い通りに指定しやすくなる。
アイコンボタン以外(ドロップダウンリストなど)を使用する時は、仮想的なGroupが存在すると考えればいいし、アイコンボタンのときは、ボタンがGroupの代わりのコンテナになっていると考えればよい。すると、marginsやspacingのイメージが掴みやすい。
では1つずつ見ていく。
alignment
テキストの配置場所を決める。left,right,top,bottom,centerから選ぶ。自動レイアウトの時と違ってfillは使えない。自動レイアウトの時は配列じゃなくても単独の文字列で指定出来たが、titleLayoutでは必ず配列で指定する。
まずは配列の1つ目の要素、left、center、rightを決めると良い。基本的には右図の色を塗った部分に配置できるものだと考える。次に、決めた領域内での位置をtop、center、bottomで決める。
var w = new Window('dialog{ \
dl : DropDownList{ alignment : ["center","center"], title : "自由な文字列を", titleLayout : { alignment : ["left","top"] } }\
}');
w.show();
ドロップダウンリストなどは["center","center"]を除いて、UIパーツと重ならない配置になるが、アイコンボタンの時はボタンの内側での話になる。
○ドロップダウンリストの場合
○アイコンボタンの場合(一例)
【おまけ】データブラウザなどで中身を見ると数値になっているが、気にせず文字列で指定すればいい。一応、対応は次のようになっているが、覚えなくていい。
"top" : 1
"bottom" : 2
"left" : 3
"right" : 4
"center" : 6
characters
titleが使用するスペースを文字数で指定する。厳密に合うわけではないので、足りなかったら適当に増やす。指定しなかったら必要分が勝手に計算される。
var w = new Window('dialog{ \
dl : DropDownList{ alignment : ["center","center"] , title : "characters:30" , titleLayout : { characters : 30, alignment : ["left","center"] } }\
}');
w.show();
justify
titleがcharactersなどで確保した領域内で、文字の揃えをどうするか決める。
"left":左揃え。
"center":中央揃え
”right”:右揃え
var w = new Window('dialog{ \
dl : DropDownList{ alignment : ["center","center"] , title : "justify : \\"left\\"" , titleLayout : { alignment : ["left","center"] , characters : 30, justify : "left" } }\
}');
w.show();
margins
周りの余白幅を指定する。これも自動レイアウトと同じで、本当は配列で[左、上、右、下]の値を与えるのだが、数値をダイレクトに与えると、全ての辺を同じ数値に設定できる。
○ドロップダウンリストなど
var w = new Window('dialog{\
dl : DropDownList{ alignment : ["center","center"] , title : "選択してください" , titleLayout : { alignment : ["left","center"] , margins : 50} }\
}');
w.show();
○アイコンボタン
var w = new Window('dialog{\
dl : IconButton{ title :"画像つきボタン" , titleLayout : { alignment : ["right","center"], margins : 50 } }\
}');
//w.dl.image = ""; //適当な画像パスを指定
w.show();
spacing
UIパーツと文字との間隔を指定する。他に言うことはない。
○ドロップダウンリストなど
var w = new Window('dialog{\
dl : DropDownList{ alignment : ["center","center"] , title : "選択してください" , titleLayout : { alignment : ["left","center"] , spacing : 50 } }\
}');
w.show();
○アイコンボタン
var w = new Window('dialog{\
dl : IconButton{ title :"画像つきボタン" , titleLayout : { alignment : ["right","center"], spacing : 10 } }\
}');
//w.dl.image = ””; //適当な画像パスを指定
w.show();
truncate
先述の通りcharactersを使うなどしてtitle用の幅を指定できるが、文字数が長くてそこに収まらなかった場合、文字の一部を「...」で置き換え出来る。条件は3パターン。文字列で指定する。CC2019では指定してもしなくても全てendの挙動になってた。もう使うなってことですかね。つまり、ちゃんと見えるようにレイアウトしようぜ!ってことですね。
"middle":文字列の中間を「...」で置き換えて、最初と最後は見えるようにする。
"end":文字列の後方を「...」で置き換えて、先頭側だけ見えるようにする。
"none":何もしない。領域に入る部分だけ表示する。
var w = new Window('dialog{\
dl : DropDownList{ alignment : ["center","center"] , title : "none : 選択してください" , titleLayout : { alignment : ["left","center"], characters : 17, truncate : "none" } }\
dl : DropDownList{ alignment : ["center","center"] , title : "middle : 選択してください" , titleLayout : { alignment : ["left","center"], characters : 17, truncate : "middle" } }\
dl : DropDownList{ alignment : ["center","center"] , title : "end : 選択してください" , titleLayout : { alignment : ["left","center"], characters : 17, truncate : "end" } }\
}');
w.show();