ウィジェットの生成・操作・破棄
pico.create / set / get / destroy の基本と、WidgetIdの考え方
ウィジェットを作る
local button = pico.create("Button")
pico.set(button, "x", 10)
pico.set(button, "y", 10)
pico.set(button, "w", 80)
pico.set(button, "h", 30)
pico.set(button, "text", "OK")
pico.create(種別名) はウィジェットを1つ作り、それを指す整数の WidgetId を返します。以降の操作(pico.set / pico.get / pico.on / pico.destroy など)はすべてこのIDで指定します。
- 種別名は
"Button""Label""Textbox""Canvas"などの文字列で、大文字小文字を区別します。作れる種別の一覧は ウィジェット種別一覧 にあります。 - 知らない種別名を渡したときと、メモリが足りなくて作れなかったときはエラーになります。
- 作った直後の位置と大きさは仮の値です。 必ず
x/y/w/hを設定してください。
ウィジェットを作る・プロパティを並べる・イベントを付ける、をまとめて1つの表で書ける pico.ui もあります。
Button の大きさ
Button の w / h は、枠と立体表示を含めた全体の大きさです。文字やアイコンはその内側(縦横とも9px小さい範囲)に収まります。text を差し替えても箱は縮まず、それまでで一番大きかった文字に合わせた大きさのままです。
プロパティの読み書き
pico.set(id, name, value)
local value = pico.get(id, name)
nameはプロパティ名の文字列(snake_case)です。例:"x""text""font_size""checked"。- どのウィジェットにもある名前(
xywhvisibleenabledbackground_colorなど)と、種別ごとの名前(textcheckedvalueなど)があります。全部の対応は プロパティ対応表 にあります。 pico.set()に、そのウィジェットが持たない名前や型の合わない値を渡すとエラーになります。pico.get()は、そのウィジェットが持たない名前ならnilを返します。ただし綴りの間違いのようにどのウィジェットにも無い名前は、setもgetもエラーになります。- 数値は
1と書いても1.0と書いてもかまいません(プロパティの型に合わせて変換されます)。 - 色・文字の大きさ・アイコンなどは、数値の代わりに 定数(
pico.COLOR_REDpico.FONT_BIGpico.ICON_Home…)で書けます。
破棄する
pico.destroy(id)
破棄はそのフレームの終わりにまとめて行われます。同時に、そのIDに登録した pico.on() のコールバックも全部外れます。
- 破棄したウィジェットのIDを
pico.set/pico.get/pico.onなどに渡すとエラーになります(破棄済みのものを触る間違いに気づけます)。 pico.destroy()だけは、破棄済みのIDを渡しても何もしません(2回呼んでも安全です)。- アプリを閉じると、作ったウィジェットは全部片付きます。閉じる前に自分で消す必要はありません。
コンテナへの出し入れ
LayoutContainer / GridContainer / ScrollContainer は子のウィジェットを持てます。
pico.add_child(container_id, child_id)
pico.remove_child(container_id, child_id)
add_childした子は、コンテナが位置を決めます(並べる向き・列数などはコンテナのプロパティ)。コンテナを消すと子も消えます。remove_childは子を破棄せずに取り外します。取り外した子のx/yはコンテナの中での値のままなので、必要なら置き直してください。- コンテナ以外を渡したとき、子でないものを
remove_childしたときはエラーになります。
詳しくは レイアウトコンテナ を見てください。
リスト・ドロップダウン・タブの項目
ScrollList / DropdownMenu / TabBar は作った時点では空です。項目は専用の関数で足します。
pico.list_add(list, "りんご") -- ScrollList / DropdownMenu
pico.list_add(list, "みかん", { color = pico.COLOR_RED, icon = pico.ICON_Star }) -- 色とアイコン(ScrollListのみ)
pico.list_clear(list)
pico.tab_add(tabs, "設定") -- TabBar(8個まで。超えると false)
件数は pico.get(id, "item_count")(TabBar は "tab_count")で読めます。挿入・削除・選択などの関数は ウィジェット操作API にあります。
名前で探す
IDを全部変数で持ち回る代わりに、名前を付けて後から引けます。
pico.set_name(score_label, "score")
-- 別の場所で
pico.set(pico.find("score"), "text", "100")