2006年01月31日

Series 60 アプリケーションフレームワーク

オプションメニューの使用
4.1 オプションメニュー
Avkon オプションメニューは、 .rss ファイルに指定されているメニューバーとメニューペインから構築されます。メニューは、 EAknSoftkeyOptions ID によりバインドされている場合 WINS エミュレータの 'F1' キーまたは 'Options' ソフトキーの操作に応じて開きます。既存の 'Options' ソフトキーペインを使おうとするアプリケーションビューは、 R_AVKON_SOFTKEYS_OPTIONS_BACK CBA リソースを使用するべきです。
4.2 メニューセクションの定義
メニューペインセクションは MENU_PANE リソースストラクチャとして定義されます。メニューペインはそれぞれのメニューセクションに定義されるべきです。ひとつのセクションはそれぞれのメニューペイン領域:システム、アプリケーション、ビュー、コンテキストに使用されます。

メニューペインは次のように定義されます。

RESOURCE MENU_PANE r_system_menu
{
items =
{
MENU_ITEM { command = ECmdCut; txt = "Cut"; },
MENU_ITEM { command = ECmdCopy; txt = "Copy"; },
MENU_ITEM { command = ECmdPaste; txt = "Paste"; }
};
}

サブメニューペインは、サブメニューペインのリソース名を使って cascade パラメータにより指定できます。

例:

MENU_ITEM { command = ESystemOptions; txt =
"System Options"; cascade = r_system_options_menu; }

4.3 メニューセクションの組合せ
メニューセクションは MENU_BAR リソースにより結合されます。 これはメニューを構成するために結合されるすべてのセクションを表示します。メニューペインは、最後のセクションから先頭のセクションの順で定義されます。

メニューバーは次の様に定義されます。

RESOURCE MENU_BAR r_menuapp_menu
{
titles =
{
MENU_TITLE { txt = "System"; menu_pane =
r_system_menu; },
MENU_TITLE { txt = "App"; menu_pane =
r_app_menu; },
MENU_TITLE { txt = "View"; menu_pane =
r_view1_options_menu; },
MENU_TITLE { txt = "Context"; menu_pane =
r_context1_menu; }
};
}

オプションの txt パラメータは、明確にすることのみを目的としており、画面上ではまったく表示されません。但し、これらパラメータはリソースファイルには保存されます。

デフォルトメニューバーは EIK_APP_INFO リソースにより参照されます。これはアプリケーションの起動時に提供されるメニューバーです。

ビューアーキテクチャが使用される場合は、ビューのリソースストラクチャ内に各ビューのメニューリソースを設定するオプションがあります。
4.4 メニューセクションの変更
アプリケーションが使用するメニューバーリソースを変更することによりアプリケーション内でいつでもメニューセクションを変更することができます。

iEikonEnv->AppUiFactory()->MenuBar()->
SetMenuTitleResourceId(MENU_BAR_RESOURCE_ID);

これは、セクションの中のどれかひとつの内容を変更する必要があるたびに実行されるべきです。従って、考えられるメニューセクションの組合せの数だけ MENU_BAR リソースが定義されているべきです。つまり、ひとつのメニューバーは、ビューとコンテキストオプションの各組み合わせごとに定義されるべきだからです。

なお、ビューアーキテクチャが使用されていて、そのビュー自体のメニューシステムが現在使用されている場合、それは変更が必要なメニューバーの内容となります。

iMyView->MenuBar()->SetMenuTitleResourceId
(MENU_BAR_RESOURCE_ID);

4.5 メニューアイテムの変更
個々のメニューアイテムは、メニューが表示されるたびに変更される可能性があります。これにより、アプリケーションはアプリケーションの状態に応じてメニューアイテムを追加したり、削除したりできます。

アプリケーションUIは下記の仮想関数をオーバーライドするべきです。

void DynInitMenuPaneL
(TInt aResourceId, CEikMenuPane* aMenuPane);

これは、セクションのそれぞれがメニューに追加された後にコールされます。そして、追加されたセクションとビルドされているメニューペインのリソース ID でコールされます。

アプリケーションUIは下記の仮想関数もオーバーライドできます。

void DynInitMenuBarL
(TInt aResourceId, CEikMenuBar* aMenuBar);

これは、どんなセクションがメニューに追加される場合でもその前にコールされます。これはメニューに追加されるセクションを動的に変更するのに使用できます。つまり、コンテキストメニューセクションのリソース ID をあるアプリケーションの状態のために変更するために使用できます。
posted by シンビアン at 13:51| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/12555776

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。