One Note Jam

S60開発・設定リストで保存先メモリ選択用の標準UIを使う (2006-04-30)

はじめに

S60アプリケーションでは、設定リストでファイルの保存先などを「電話機メモリ」「メモリーカード」の二択で選択するようなUIをよく見かけます。

GetPixels 「電話機メモリ」を選択した状態の画面写真 GetPixels 「メモリーカード」を選択した状態の画面写真

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端末に対応したアプリケーションを作成する場合には使用できませんのでご注意ください。

posted at 2006-04-30 | Permalink

© 2004-2008 ENDO