// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 #contents Eclipseのメニューバーやポップアップメニューは org.eclipse.ui.menus 拡張ポイントで制御することができますが、ある条件下でのみポップアップメニューを表示するとかの表示制御は下記のように、visibleWhen タグで行うことができます。 <extension point="org.eclipse.ui.menus"> <menuContribution locationURI="popup:org.eclipse.ui.popup.any"> <menu id="nu.mine.kino.plugin.newaction.menus.sampleMenu" label="トップのメニュー"> <command commandId="nu.mine.kino.plugin.samples.rcp.command" style="push"> </command> <command commandId="nu.mine.kino.plugin.newaction.commands.sampleCommand" style="push"> </command> <visibleWhen> <with variable="activeMenuSelection"> <iterate ifEmpty="false"> <-ifEmptyは、Selectionがなかった時の判定。 <adapt type="org.eclipse.jdt.core.IJavaElement"> </adapt> </iterate> </with> </visibleWhen> </menu> </menuContribution> </extension> このようにmenuやcommandに対して <visibleWhen> <with variable="activeMenuSelection"> <iterate ifEmpty="false"> <adapt type="org.eclipse.jdt.core.IJavaElement"> </adapt> </iterate> </with> </visibleWhen> という条件を設定できるって事ですね。 -[[メニューバーを構築する(Eclipse3.3版)>Eclipse/プラグイン開発のTIPS集/メニューバーを構築する(Eclipse3.3版)#na3953cc]] -[[ポップアップメニューの機能を追加する(Eclipse3.3版)>Eclipse/プラグイン開発のTIPS集/ポップアップメニューの機能を追加する(Eclipse3.3版)#g05720c8]] **色々な条件指定 [#x349af6f] ***選択しているオブジェクトの種類で制御 [#tf397535] <visibleWhen> <with variable="activeMenuSelection"> <iterate ifEmpty="false"> <-ifEmptyは、Selectionがなかった時の判定。 <adapt type="org.eclipse.jdt.core.IJavaElement"> </adapt> </iterate> </with> </visibleWhen> ***複雑な条件。 [#lab7ada4] #ref(capture01.png) <visibleWhen checkEnabled="false"> <with variable="activeMenuSelection"> <!-- 選択したオブジェクトが --> <!-- (1),(2),(3)どれかを満たせばOK --> <or> <iterate ifEmpty="false" > <adapt type="org.eclipse.jface.text.ITextSelection" /> (1) </iterate> //エディタなどで、テキストを選んだら <and> <count value="1" /> 選択したオブジェクトが一つ且つ、 <iterate ifEmpty="false" > <adapt type="org.eclipse.jdt.core.ICompilationUnit" /> (2) </iterate> 選択されたモノの、Collection の中身がICompilationUnit ならば </and> <and> <count value="1" /> 選択したオブジェクトが一つ且つ、 <iterate ifEmpty="false" > <adapt type="org.eclipse.core.resources.IResource" /> (3) </iterate> 選択されたモノの、Collection の中身がIResourceならば </and> </or> </with> </visibleWhen> ***あるビューがアクティブになった場合に表示 [#q6276135] <extension point="org.eclipse.core.expressions.definitions"> <definition id="nu.mine.kino.plugin.samples.rcp.view3.isActive"> <with variable="activePartId"> <equals value="nu.mine.kino.plugin.samples.rcp.view3"></equals> </with> </definition> </extension> <visibleWhen> <reference definitionId="nu.mine.kino.plugin.samples.rcp.view3.isActive"> </reference> </visibleWhen> **variableで指定できるパラメタ [#tc4f1bbf] <with variable="activeMenuSelection"> この変数に設定できる項目は org.eclipse.ui.ISources に定義されているようです。 package org.eclipse.ui; import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.ui.part.IShowInSource; public interface ISources { public static final String ACTIVE_CONTEXT_NAME = "activeContexts"; public static final String ACTIVE_ACTION_SETS_NAME = "activeActionSets"; public static final String ACTIVE_SHELL_NAME = "activeShell"; public static final String ACTIVE_WORKBENCH_WINDOW_SHELL_NAME = "activeWorkbenchWindowShell"; public static final String ACTIVE_WORKBENCH_WINDOW_NAME = "activeWorkbenchWindow"; public static final String ACTIVE_WORKBENCH_WINDOW_IS_COOLBAR_VISIBLE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME + ".isCoolbarVisible"; public static final String ACTIVE_WORKBENCH_WINDOW_IS_PERSPECTIVEBAR_VISIBLE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME + ".isPerspectiveBarVisible"; public static final String ACTIVE_WORKBENCH_WINDOW_ACTIVE_PERSPECTIVE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME + ".activePerspective"; public static final String ACTIVE_EDITOR_NAME = "activeEditor"; public static final String ACTIVE_EDITOR_ID_NAME = "activeEditorId"; public static final String ACTIVE_MENU_EDITOR_INPUT_NAME = "activeMenuEditorInput"; public static final String ACTIVE_FOCUS_CONTROL_NAME = "activeFocusControl"; public static final String ACTIVE_FOCUS_CONTROL_ID_NAME = "activeFocusControlId"; } ちなみに全体はこんな感じ。関係ないところは省いてます。 package org.eclipse.ui; import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.ui.part.IShowInSource; public interface ISources { /** * The variable name for the active contexts. This is for use with the * <code>ISourceProvider</code> and <code>IEvaluationContext</code>. * @since 3.2 */ public static final String ACTIVE_CONTEXT_NAME = "activeContexts"; //$NON-NLS-1$ /** * The variable name for the active action sets. This is for use with the * {@link ISourceProvider} and {@link IEvaluationContext}. * @since 3.2 */ public static final String ACTIVE_ACTION_SETS_NAME = "activeActionSets"; //$NON-NLS-1$ /** * The variable name for the active shell. This is for use with the * <code>ISourceProvider</code> and <code>IEvaluationContext</code>. */ public static final String ACTIVE_SHELL_NAME = "activeShell"; //$NON-NLS-1$ /** * The variable name for the active workbench window shell. This is for use * with the <code>ISourceProvider</code> and * <code>IEvaluationContext</code>. * @since 3.2 */ public static final String ACTIVE_WORKBENCH_WINDOW_SHELL_NAME = "activeWorkbenchWindowShell"; //$NON-NLS-1$ /** * The variable name for the active workbench window. This is for use with * the <code>ISourceProvider</code> and <code>IEvaluationContext</code>. */ public static final String ACTIVE_WORKBENCH_WINDOW_NAME = "activeWorkbenchWindow"; //$NON-NLS-1$ /** * The variable name for the coolbar visibility state of the active * workbench window. This is for use with the <code>ISourceProvider</code> * and <code>IEvaluationContext</code>. * * @since 3.3 */ public static final String ACTIVE_WORKBENCH_WINDOW_IS_COOLBAR_VISIBLE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME + ".isCoolbarVisible"; //$NON-NLS-1$ /** * The variable name for the perspective bar visibility state of the active * workbench window. This is for use with the <code>ISourceProvider</code> * and <code>IEvaluationContext</code>. * * @since 3.3 */ public static final String ACTIVE_WORKBENCH_WINDOW_IS_PERSPECTIVEBAR_VISIBLE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME + ".isPerspectiveBarVisible"; //$NON-NLS-1$ /** * The variable name for the current perspective of the active workbench * window. This is for use with the <code>ISourceProvider</code> and * <code>IEvaluationContext</code>. * * @since 3.4 */ public static final String ACTIVE_WORKBENCH_WINDOW_ACTIVE_PERSPECTIVE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME + ".activePerspective"; //$NON-NLS-1$ /** * The variable name for the active editor part. This is for use with the * <code>ISourceProvider</code> and <code>IEvaluationContext</code>. * @since 3.2 */ public static final String ACTIVE_EDITOR_NAME = "activeEditor"; //$NON-NLS-1$ /** * The variable name for the active editor identifier. This is for use with * the <code>ISourceProvider</code> and <code>IEvaluationContext</code>. * * @since 3.2 */ public static final String ACTIVE_EDITOR_ID_NAME = "activeEditorId"; //$NON-NLS-1$ /** * The variable name for the <b>local</b> editor input which is sometimes * available while a context menu is visible. * * @since 3.3 */ public static final String ACTIVE_MENU_EDITOR_INPUT_NAME = "activeMenuEditorInput"; //$NON-NLS-1$ /** * The variable name for the active focus Control, when provided by the * IFocusService. * * @since 3.3 */ public static final String ACTIVE_FOCUS_CONTROL_NAME = "activeFocusControl"; //$NON-NLS-1$ /** * The variable name for the active focus Control id, when provided by the * IFocusService. * * @since 3.3 */ public static final String ACTIVE_FOCUS_CONTROL_ID_NAME = "activeFocusControlId"; //$NON-NLS-1$ } これらが全て、この箇所の変数として有効なのかはまだよく分かりませんが。。 ---- この記事は #vote(おもしろかった[2],そうでもない[0]) #comment #topicpath SIZE(10){現在のアクセス:&counter;}