S60開発・設定リストで保存先メモリ選択用の標準UIを使う (2006-04-30)
はじめに
S60アプリケーションでは、設定リストでファイルの保存先などを「電話機メモリ」「メモリーカード」の二択で選択するようなUIをよく見かけます。
S60 2nd Editionプラットフォームでは、このような保存先メモリ選択用のUIを、システム側で標準で提供しています。せっかく用意されているものなので、ありがたく使わせてもらいましょう。開発の労力も減らせますし、システム全体でのUIの統一感にもつながります。
使用法
保存先メモリ選択用のUIは、「設定リスト」内に格納できる「設定アイテム」の一種類として用意されています。具体的にはCAknMemorySelectionSettingItemクラスとして定義されています。とりあえずここでは「メモリ選択設定アイテム」と呼ぶことにします。
「設定リスト(CAknSettingItemList)」の使用法については、書籍『Symbian OS/C++プログラマのためのNokia Series 60アプリケーション開発ガイド』あたりを参考にしてください。英語でよければ、"S60 Platform: Avkon UI Resources"というドキュメントもあります(アーカイブ内の"S60_Platform_Avkon_UI_Resources_Setting_Lists_v1_1_en.pdf"が、設定リストについての説明です)。
本題の「メモリ選択設定アイテム」の使用法ですが、実は上記ドキュメントにも説明が載っていなかったりします。とはいえ、使い方は非常に簡単なので、設定リストを実装した経験があればすぐに理解できるでしょう。以下に、拙作「GetPixels」のソースコードから、メモリ選択設定アイテムまわりの実装を抜粋します。
ソースファイル
CAknSettingItem* CGetPixelsSettingItemList::CreateSettingItemL(TInt aIdentifier) { CAknSettingItem* settingItem = NULL; switch (aIdentifier) { // (中略) case ESettingsSaveLocation: settingItem = new(ELeave) CAknMemorySelectionSettingItem(aIdentifier, iSettings.iSaveLocation); break; // (中略) } return settingItem; }
一般的な設定アイテムの生成方法と同じです。なお、"iSettings.iSaveLocation"は設定された内容が格納される変数で、CAknMemorySelectionDialog::TMemory型の列挙体です。以下の2つの値をとります。
- EPhoneMemory (電話機メモリ)
- EMemoryCard (メモリーカード)
リソースファイル
RESOURCE AVKON_SETTING_ITEM_LIST r_getpixels_settingitemlist_settings { // (中略) items = { // (中略) AVKON_SETTING_ITEM { identifier = ESettingsSaveLocation; name = TEXT_SAVE_LOCATION; }, // (中略) } }
メモリ選択設定アイテムには、"setting_page_resource"とか"associated_resource"といったリソースは必要ありません。なので、必要な作業は、設定リストのリソースに対してメモリ選択設定アイテム用の項目を追加するだけです。
注意点
「メモリーカード」が選択された際に画面に表示されるテキストは、メモリーカードのボリュームラベルとなります(未設定の場合は"Memory card"と表示される)。このボリュームラベルに非ASCII文字が含まれていた場合、表示がおかしくなってしまいます。ボリュームラベルの文字コードによるのかもしれませんが、よくわかっていません。
また、冒頭にも書きましたが、メモリ選択設定アイテムがサポートされているのはS60 2nd Edition以降となります。以前のS60端末に対応したアプリケーションを作成する場合には使用できませんのでご注意ください。