メニューおよびツールバー・パス

アクションのロケーション用のパスを指定する多くのアクション組み込みについて説明しました。 では、これらのパスがどのような意味を持つのか詳しく説明します。  ワークベンチの「ヘルプ」メニューを見ることによって、パスについて説明していきます。

名前付きグループ

新規メニュー、メニュー項目、またはツールバー項目を挿入するロケーションは、 名前付きグループを使用して定義されます。名前付きグループは、 メニューまたはツールバーの特定のポイントで、 メニューおよびツールバー組み込みを挿入することができるスロットまたはプレースホルダーとして考えることができます。

ワークベンチは、 IWorkbenchActionConstants クラス内の グループ・スロット名のすべてを定義します。名前付きグループは、ワークベンチ・メニューごとに、 プラグインが新規アクションを挿入すると予期されているロケーションのメニューに配置されます。

以下のヘルプ・メニューの説明は、 IWorkbenchActionConstants クラス定義を基に作り替えたものです。

   Standard Help menu actions
   Start group - HELP_START - "start"
   End group - HELP_END - "end"
   About action - ABOUT - "About"

標準ワークベンチ・ヘルプ・メニューは、"start" と呼ばれる名前付きグループで構成されています。 このグループには、"end" と呼ばれる名前付きグループが続き、 その後に "About" アクションが続きます。 2 つのグループを定義すると、組み込み項目が配置されるヘルプ・メニュー内をプラグインがさらに制御できるようになります。  メニューを定義すると、好みに応じた数のスロットを定義することができます。 さらにスロットを追加することにより、 他のプラグインに、それらの組み込みが既存の組み込みに関連して表示される場所について、より多くのコントロールを与えます。

ただし、待ってください。  ヘルプ・メニューに他のメニュー項目があることは知っています。  これらは、プラグインによって追加されます。 たとえば、ヘルプ・プラグインは、 "Help Contents" メニューを含むアクション・セットをワークベンチへ追加します。  以下は、org.eclipse.help.ui プラグインの plugin.xml からのマークアップです。

<extension point="org.eclipse.ui.actionSets">
	<actionSet
		id="org.eclipse.help.internal.ui.HelpActionSet"
		label="%help"
		visible="true">
			
	<action id="org.eclipse.help.internal.ui.HelpAction"
		menubarPath="help/helpEnd"
		label="%helpcontents"
		class="org.eclipse.help.ui.internal.HelpContentsAction"
		icon="icons/view.gif"
		helpContextId="org.eclipse.help.ui.helpContentsMenu"
		tooltip="%openhelpcontents"/>
	...

新規のヘルプ・アクションは、helpEnd グループ内のヘルプ・メニューに配置されます。 他のどのプラグインもヘルプ・メニューに組み込まれていない場合、"About" 項目の上のメニューの最初の項目として、 "Help Contents" メニュー項目が表示されることを意味します。 別のプラグインにより、"Help Contents" 項目の上に常に表示される項目を組み込む場合、 パス上に helpStart グループを指定することができます。   

ツールバー・パスも同様に機能します。パスが指定される場合は常に、ツールバー内のグループ名で終了する必要があります。

完全修飾メニューおよびツールバー・パス

完全なメニューまたはツールバー・パスは、単に "メニュー名/グループ名" です。  ワークベンチのメニュー名は、IWorkbenchActionConstants に定義されています。 このクラスは、ヘルプ・アクションの完全修飾パス名が "help/helpEnd であることを検索するために使用されます。 "

メニューの中には、ネストされたサブメニューを持つものもあります。 これが、長いパスが効果を表すところです。ヘルプ・メニューが、 "submenuStart" という名前付きグループを持つ" submenu" というサブメニューを定義した場合、 新規サブメニュー内のアクションの完全修飾メニュー・パスは、"help/submenu/submenuStart" になります。

UI ラベルの外部化

上記の例は、UI に表示されるストリングを外部化するための技法についても示しています。  外部化されたストリングは、プラグインの UI を他の言語へ簡単に変換するために使用されます。  ストリングをキー (たとえば %help,%helpcontents) で置換し、plugin.properties ファイル内に次の形式のエントリーを作成することにより、plugin.xml ファイル内のストリングを外部化することができます。

   help = "Help"
   helpContents = "Help Contents"

plugin.properties ファイルは、異なる言語用に変換することができ、plugin.xml を変更する必要はありません。

新規メニューおよびグループの追加

これまでに説明した多くの例で、サンプル・プラグインによって組み込まれたアクションは、 メニューおよびツールバー内の既存の名前付きグループへ追加されました。

actionSetsviewActionseditorActions、および popupMenus の各拡張ポイントを 使用しても、組み込み内で新規メニューおよびグループを定義することができます。 つまり、新規サブメニューまたは新規プルダウン・メニューを定義し、 アクションをこれらの新規メニューへ組み込むことができます。 この場合、新規アクションのパスには、新規に定義したメニューの名前が含まれます。

この技法は、README ツールがアクション・セット用に新規メニューを定義したときに説明しました。  より詳細にメニュー・パスを見てきたところで、そのマークアップをもう一度見てみましょう。

   <extension point = "org.eclipse.ui.actionSets">
   <actionSet id="org_eclipse_ui_examples_readmetool_actionSet"
	   label="%ActionSet.name"
	   visible="true">
	   <menu id="org_eclipse_ui_examples_readmetool"
		   label="%ActionSet.menu"
		   path="window/additions"> 
		   <separator name="slot1"/>
		   <separator name="slot2"/>
		   <separator name="slot3"/>
	   </menu>
	   <action id="org_eclipse_ui_examples_readmetool_readmeAction"
		   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
		   toolbarPath="readme"
		   label="%ReadmeAction.label"
		   tooltip="%ReadmeAction.tooltip"
		   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
		   icon="icons/ctool16/openbrwsr.gif"
		   class="org.eclipse.ui.examples.readmetool.WindowActionDelegate"
		   enablesFor="1">
		   <selection class="org.eclipse.core.resources.IFile"
				name="*.readme">
		   </selection>
	   </action>
	   ...

"org_eclipse_ui_examples_readmetool" と呼ばれる新しいメニュー名を追加します。  そのラベルは、プロパティー・ファイルのキー "%ActionSet.name" によって定義されています。 このメニューでは、"slot1"、"slot2"、および "slot3" の 3 つの名前付きグループを定義します。  この新規メニューをパス "window/additions" に追加します。  

IWorkbenchActionConstants へ戻ると、javadoc 内のウィンドウ・メニューのこの定義が見られます。

    * <h3>Standard Window menu actions</h3>
    * <ul>
    * <li>Extra Window-like action group (<code>WINDOW_EXT</code>)</li> 

クラス定義をさらに見ていくと、以下の関連定義が見えるでしょう。

   public static final String MENU_PREFIX = "";
   ...
   public static final String M_WINDOW = MENU_PREFIX+"window";
   ...
   public static final String MB_ADDITIONS = "additions";  // Group.
   ...
   public static final String WINDOW_EXT = MB_ADDITIONS;   // Group.

この情報から、ワークベンチ "Window" メニューへ何かを追加するために、パスをつなぎ合わせることができます。  メニュー自体は、"window" と呼ばれ、"additions "というスロットを 1 つ定義します。  新規メニューを追加するには、パス "window/additions" を使用します。

アクション・セット宣言で、 パス "window/org_eclipse_ui_examples_readmetool/slot1" を使用して、 アクションを新規に定義されたメニューへ追加します。

他のプラグインは、独自のメニューの 1 つを追加するために、 この同じパス (または他のスロットのうちの 1 つ) を使用することにより、メニューに追加することができます。  

通常、plugin.xml からパス名を引き出すことにより、 別のプラグインのメニューまたはツールバーを組み込むことは良い例ではありません。 プラグインの今後のバージョンでパス名が変更される可能性があるからです。  正確にどのメニュー、ツールバー・グループ、およびスロットが、 他のプラグインによる使用のために適切なものと考えられるかを指定するパブリック・インターフェース (IWorkbenchActionConstants と 同じようなもの) を定義することをお勧めします。

Copyright IBM Corp. and others 2000,2002.