diff options
Diffstat (limited to 'bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionDescriptor.java')
-rw-r--r-- | bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionDescriptor.java | 608 |
1 files changed, 296 insertions, 312 deletions
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionDescriptor.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionDescriptor.java index 429d0c0a282..5e9cb6c3241 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionDescriptor.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionDescriptor.java @@ -27,359 +27,343 @@ import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants; import org.eclipse.ui.plugin.AbstractUIPlugin; /** - * When 'action' tag is found in the registry, an object of this - * class is created. It creates the appropriate action object - * and captures information that is later used to add this action - * object into menu/tool bar. This class is reused for - * global (workbench) menu/tool bar, popup menu actions, - * as well as view's pulldown and local tool bar. + * When 'action' tag is found in the registry, an object of this class is + * created. It creates the appropriate action object and captures information + * that is later used to add this action object into menu/tool bar. This class + * is reused for global (workbench) menu/tool bar, popup menu actions, as well + * as view's pulldown and local tool bar. */ public class ActionDescriptor implements IPluginContribution { - private PluginAction action; + private PluginAction action; - private String toolbarId; + private String toolbarId; - private String menuPath; + private String menuPath; - private String id; + private String id; - private String pluginId; + private String pluginId; - private String menuGroup; + private String menuGroup; - private String toolbarGroupId; + private String toolbarGroupId; private int mode = 0; - /** - * Popup constant. Value <code>0x1</code>. - */ - public static final int T_POPUP = 0x1; - - /** - * View constant. Value <code>0x2</code>. - */ - public static final int T_VIEW = 0x2; - - /** - * Workbench constant. Value <code>0x3</code>. - */ - public static final int T_WORKBENCH = 0x3; - - /** - * Editor constant. Value <code>0x4</code>. - */ - public static final int T_EDITOR = 0x4; - - /** - * Workbench pulldown constant. Value <code>0x5</code>. - */ - public static final int T_WORKBENCH_PULLDOWN = 0x5; - - /** - * Push style constant. Value <code>push</code>. - */ - public static final String STYLE_PUSH = "push"; //$NON-NLS-1$ - - /** - * Radio style constant. Value <code>radio</code>. - */ - public static final String STYLE_RADIO = "radio"; //$NON-NLS-1$ - - /*** - * Toggle style constant. Value <code>toggle</code>. - */ - public static final String STYLE_TOGGLE = "toggle"; //$NON-NLS-1$ - - /** - * Pulldown style constant. Value <code>pulldown</code>. - */ - public static final String STYLE_PULLDOWN = "pulldown"; //$NON-NLS-1$ - - /** - * Creates a new descriptor with the specified target. - * - * @param actionElement the configuration element - * @param targetType the type of action - */ - public ActionDescriptor(IConfigurationElement actionElement, int targetType) { - this(actionElement, targetType, null); - } - - /** - * Creates a new descriptor with the target and destination workbench part - * it will go into. - * - * @param actionElement the configuration element - * @param targetType the type of action - * @param target the target object - */ - public ActionDescriptor(IConfigurationElement actionElement, - int targetType, Object target) { - // Load attributes. - id = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_ID); + /** + * Popup constant. Value <code>0x1</code>. + */ + public static final int T_POPUP = 0x1; + + /** + * View constant. Value <code>0x2</code>. + */ + public static final int T_VIEW = 0x2; + + /** + * Workbench constant. Value <code>0x3</code>. + */ + public static final int T_WORKBENCH = 0x3; + + /** + * Editor constant. Value <code>0x4</code>. + */ + public static final int T_EDITOR = 0x4; + + /** + * Workbench pulldown constant. Value <code>0x5</code>. + */ + public static final int T_WORKBENCH_PULLDOWN = 0x5; + + /** + * Push style constant. Value <code>push</code>. + */ + public static final String STYLE_PUSH = "push"; //$NON-NLS-1$ + + /** + * Radio style constant. Value <code>radio</code>. + */ + public static final String STYLE_RADIO = "radio"; //$NON-NLS-1$ + + /*** + * Toggle style constant. Value <code>toggle</code>. + */ + public static final String STYLE_TOGGLE = "toggle"; //$NON-NLS-1$ + + /** + * Pulldown style constant. Value <code>pulldown</code>. + */ + public static final String STYLE_PULLDOWN = "pulldown"; //$NON-NLS-1$ + + /** + * Creates a new descriptor with the specified target. + * + * @param actionElement the configuration element + * @param targetType the type of action + */ + public ActionDescriptor(IConfigurationElement actionElement, int targetType) { + this(actionElement, targetType, null); + } + + /** + * Creates a new descriptor with the target and destination workbench part it + * will go into. + * + * @param actionElement the configuration element + * @param targetType the type of action + * @param target the target object + */ + public ActionDescriptor(IConfigurationElement actionElement, int targetType, Object target) { + // Load attributes. + id = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_ID); pluginId = actionElement.getContributor().getName(); - String label = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_LABEL); - String tooltip = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_TOOLTIP); - String helpContextId = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_HELP_CONTEXT_ID); - String mpath = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_MENUBAR_PATH); - String tpath = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_TOOLBAR_PATH); - String style = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_STYLE); - String icon = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_ICON); - String hoverIcon = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_HOVERICON); - String disabledIcon = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_DISABLEDICON); - String description = actionElement.getAttribute(IWorkbenchRegistryConstants.TAG_DESCRIPTION); - String accelerator = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_ACCELERATOR); - if ("FORCE_TEXT".equals(actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_MODE))) { //$NON-NLS-1$ - mode = ActionContributionItem.MODE_FORCE_TEXT; - } - - // Verify input. - if (label == null) { - WorkbenchPlugin - .log("Invalid action declaration (label == null): " + id); //$NON-NLS-1$ - label = WorkbenchMessages.ActionDescriptor_invalidLabel; - } - - // Calculate menu and toolbar paths. - String mgroup = null; - String tgroup = null; - if (mpath != null) { - int loc = mpath.lastIndexOf('/'); - if (loc != -1) { - mgroup = mpath.substring(loc + 1); - mpath = mpath.substring(0, loc); - } else { - mgroup = mpath; - mpath = null; - } - } - if (targetType == T_POPUP && mgroup == null) { + String label = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_LABEL); + String tooltip = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_TOOLTIP); + String helpContextId = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_HELP_CONTEXT_ID); + String mpath = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_MENUBAR_PATH); + String tpath = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_TOOLBAR_PATH); + String style = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_STYLE); + String icon = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_ICON); + String hoverIcon = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_HOVERICON); + String disabledIcon = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_DISABLEDICON); + String description = actionElement.getAttribute(IWorkbenchRegistryConstants.TAG_DESCRIPTION); + String accelerator = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_ACCELERATOR); + if ("FORCE_TEXT".equals(actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_MODE))) { //$NON-NLS-1$ + mode = ActionContributionItem.MODE_FORCE_TEXT; + } + + // Verify input. + if (label == null) { + WorkbenchPlugin.log("Invalid action declaration (label == null): " + id); //$NON-NLS-1$ + label = WorkbenchMessages.ActionDescriptor_invalidLabel; + } + + // Calculate menu and toolbar paths. + String mgroup = null; + String tgroup = null; + if (mpath != null) { + int loc = mpath.lastIndexOf('/'); + if (loc != -1) { + mgroup = mpath.substring(loc + 1); + mpath = mpath.substring(0, loc); + } else { + mgroup = mpath; + mpath = null; + } + } + if (targetType == T_POPUP && mgroup == null) { mgroup = IWorkbenchActionConstants.MB_ADDITIONS; } - if (tpath != null) { - int loc = tpath.lastIndexOf('/'); - if (loc != -1) { - tgroup = tpath.substring(loc + 1); - tpath = tpath.substring(0, loc); - } else { - tgroup = tpath; - tpath = null; - } - } - menuPath = mpath; - menuGroup = mgroup; - if ((tpath != null) && tpath.equals("Normal")) { //$NON-NLS-1$ + if (tpath != null) { + int loc = tpath.lastIndexOf('/'); + if (loc != -1) { + tgroup = tpath.substring(loc + 1); + tpath = tpath.substring(0, loc); + } else { + tgroup = tpath; + tpath = null; + } + } + menuPath = mpath; + menuGroup = mgroup; + if ((tpath != null) && tpath.equals("Normal")) { //$NON-NLS-1$ tpath = ""; //$NON-NLS-1$ } - toolbarId = tpath; - toolbarGroupId = tgroup; + toolbarId = tpath; + toolbarGroupId = tgroup; - // Create action. - action = createAction(targetType, actionElement, target, style); - if (action.getText() == null) { + // Create action. + action = createAction(targetType, actionElement, target, style); + if (action.getText() == null) { action.setText(label); } - if (action.getToolTipText() == null && tooltip != null) { + if (action.getToolTipText() == null && tooltip != null) { action.setToolTipText(tooltip); } - if (helpContextId != null) { - String fullID = helpContextId; - if (helpContextId.indexOf('.') == -1) { + if (helpContextId != null) { + String fullID = helpContextId; + if (helpContextId.indexOf('.') == -1) { // For backward compatibility we auto qualify the id if it is not - // qualified) - fullID = actionElement.getContributor().getName() - + "." + helpContextId;//$NON-NLS-1$ + // qualified) + fullID = actionElement.getContributor().getName() + "." + helpContextId;//$NON-NLS-1$ } - PlatformUI.getWorkbench().getHelpSystem().setHelp(action, fullID); - } - if (description != null) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(action, fullID); + } + if (description != null) { action.setDescription(description); } - if (style != null) { - // Since 2.1, the "state" and "pulldown" attributes means something different - // when the new "style" attribute has been set. See doc for more info. - String state = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_STATE); - if (state != null) { - if (style.equals(STYLE_RADIO) || style.equals(STYLE_TOGGLE)) { + if (style != null) { + // Since 2.1, the "state" and "pulldown" attributes means something different + // when the new "style" attribute has been set. See doc for more info. + String state = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_STATE); + if (state != null) { + if (style.equals(STYLE_RADIO) || style.equals(STYLE_TOGGLE)) { action.setChecked(state.equals("true"));//$NON-NLS-1$ } - } - } else { - // Keep for backward compatibility for actions not using the - // new style attribute. - String state = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_STATE); - if (state != null) { - action.setChecked(state.equals("true"));//$NON-NLS-1$ - } - } - - String extendingPluginId = actionElement.getDeclaringExtension() - .getContributor().getName(); - - if (icon != null) { - action.setImageDescriptor(AbstractUIPlugin - .imageDescriptorFromPlugin(extendingPluginId, icon)); - } - if (hoverIcon != null) { - action.setHoverImageDescriptor(AbstractUIPlugin - .imageDescriptorFromPlugin(extendingPluginId, hoverIcon)); - } - if (disabledIcon != null) { - action - .setDisabledImageDescriptor(AbstractUIPlugin - .imageDescriptorFromPlugin(extendingPluginId, - disabledIcon)); - } - - if (accelerator != null) { + } + } else { + // Keep for backward compatibility for actions not using the + // new style attribute. + String state = actionElement.getAttribute(IWorkbenchRegistryConstants.ATT_STATE); + if (state != null) { + action.setChecked(state.equals("true"));//$NON-NLS-1$ + } + } + + String extendingPluginId = actionElement.getDeclaringExtension().getContributor().getName(); + + if (icon != null) { + action.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(extendingPluginId, icon)); + } + if (hoverIcon != null) { + action.setHoverImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(extendingPluginId, hoverIcon)); + } + if (disabledIcon != null) { + action.setDisabledImageDescriptor( + AbstractUIPlugin.imageDescriptorFromPlugin(extendingPluginId, disabledIcon)); + } + + if (accelerator != null) { processAccelerator(action, accelerator); } - } - - /** - * Creates an instance of PluginAction. Depending on the target part, - * subclasses of this class may be created. - */ - private PluginAction createAction(int targetType, - IConfigurationElement actionElement, Object target, String style) { - int actionStyle = IAction.AS_UNSPECIFIED; - if (style != null) { - if (style.equals(STYLE_RADIO)) { - actionStyle = IAction.AS_RADIO_BUTTON; - } else if (style.equals(STYLE_TOGGLE)) { - actionStyle = IAction.AS_CHECK_BOX; - } else if (style.equals(STYLE_PULLDOWN)) { - actionStyle = IAction.AS_DROP_DOWN_MENU; - } else if (style.equals(STYLE_PUSH)) { - actionStyle = IAction.AS_PUSH_BUTTON; - } - } - - switch (targetType) { - case T_VIEW: - return new ViewPluginAction(actionElement, (IViewPart) target, id, - actionStyle); - case T_EDITOR: - return new EditorPluginAction(actionElement, (IEditorPart) target, - id, actionStyle); - case T_WORKBENCH: - return new WWinPluginAction(actionElement, - (IWorkbenchWindow) target, id, actionStyle); - case T_WORKBENCH_PULLDOWN: - actionStyle = IAction.AS_DROP_DOWN_MENU; - return new WWinPluginPulldown(actionElement, - (IWorkbenchWindow) target, id, actionStyle); - case T_POPUP: - return new ObjectPluginAction(actionElement, id, actionStyle); - default: - WorkbenchPlugin.log("Unknown Action Type: " + targetType);//$NON-NLS-1$ - return null; - } - } - - /** - * Returns the action object held in this descriptor. - * - * @return the action - */ - public PluginAction getAction() { - return action; - } - - /** - * Returns action's id as defined in the registry. - * - * @return the id - */ - public String getId() { - return id; - } - - /** - * Returns named slot (group) in the menu where this action - * should be added. - * - * @return the menu group - */ - public String getMenuGroup() { - return menuGroup; - } - - /** - * Returns menu path where this action should be added. If null, - * the action will not be added into the menu. - * - * @return the menubar path - */ - public String getMenuPath() { - return menuPath; - } - - /** - * Returns the named slot (group) in the tool bar where this - * action should be added. - * - * @return the toolbar group id - */ - public String getToolbarGroupId() { - return toolbarGroupId; - } - - /** - * Returns id of the tool bar where this action should be added. - * If null, action will not be added to the tool bar. - * - * @return the toolbar id - */ - public String getToolbarId() { - return toolbarId; - } - - /** - * For debugging only. - */ - @Override + } + + /** + * Creates an instance of PluginAction. Depending on the target part, subclasses + * of this class may be created. + */ + private PluginAction createAction(int targetType, IConfigurationElement actionElement, Object target, + String style) { + int actionStyle = IAction.AS_UNSPECIFIED; + if (style != null) { + if (style.equals(STYLE_RADIO)) { + actionStyle = IAction.AS_RADIO_BUTTON; + } else if (style.equals(STYLE_TOGGLE)) { + actionStyle = IAction.AS_CHECK_BOX; + } else if (style.equals(STYLE_PULLDOWN)) { + actionStyle = IAction.AS_DROP_DOWN_MENU; + } else if (style.equals(STYLE_PUSH)) { + actionStyle = IAction.AS_PUSH_BUTTON; + } + } + + switch (targetType) { + case T_VIEW: + return new ViewPluginAction(actionElement, (IViewPart) target, id, actionStyle); + case T_EDITOR: + return new EditorPluginAction(actionElement, (IEditorPart) target, id, actionStyle); + case T_WORKBENCH: + return new WWinPluginAction(actionElement, (IWorkbenchWindow) target, id, actionStyle); + case T_WORKBENCH_PULLDOWN: + actionStyle = IAction.AS_DROP_DOWN_MENU; + return new WWinPluginPulldown(actionElement, (IWorkbenchWindow) target, id, actionStyle); + case T_POPUP: + return new ObjectPluginAction(actionElement, id, actionStyle); + default: + WorkbenchPlugin.log("Unknown Action Type: " + targetType);//$NON-NLS-1$ + return null; + } + } + + /** + * Returns the action object held in this descriptor. + * + * @return the action + */ + public PluginAction getAction() { + return action; + } + + /** + * Returns action's id as defined in the registry. + * + * @return the id + */ + public String getId() { + return id; + } + + /** + * Returns named slot (group) in the menu where this action should be added. + * + * @return the menu group + */ + public String getMenuGroup() { + return menuGroup; + } + + /** + * Returns menu path where this action should be added. If null, the action will + * not be added into the menu. + * + * @return the menubar path + */ + public String getMenuPath() { + return menuPath; + } + + /** + * Returns the named slot (group) in the tool bar where this action should be + * added. + * + * @return the toolbar group id + */ + public String getToolbarGroupId() { + return toolbarGroupId; + } + + /** + * Returns id of the tool bar where this action should be added. If null, action + * will not be added to the tool bar. + * + * @return the toolbar id + */ + public String getToolbarId() { + return toolbarId; + } + + /** + * For debugging only. + */ + @Override public String toString() { - return "ActionDescriptor(" + id + ")";//$NON-NLS-2$//$NON-NLS-1$ - } + return "ActionDescriptor(" + id + ")";//$NON-NLS-2$//$NON-NLS-1$ + } - /** - * Process the accelerator definition. If it is a number - * then process the code directly - if not then parse it - * and create the code - */ - private void processAccelerator(IAction action, String acceleratorText) { + /** + * Process the accelerator definition. If it is a number then process the code + * directly - if not then parse it and create the code + */ + private void processAccelerator(IAction action, String acceleratorText) { - if (acceleratorText.length() == 0) { + if (acceleratorText.length() == 0) { return; } - //Is it a numeric definition? - if (Character.isDigit(acceleratorText.charAt(0))) { - try { - action.setAccelerator(Integer.valueOf(acceleratorText) - .intValue()); - } catch (NumberFormatException e) { - WorkbenchPlugin.log("Invalid accelerator declaration for action: " + id, e); //$NON-NLS-1$ - } - } else { + // Is it a numeric definition? + if (Character.isDigit(acceleratorText.charAt(0))) { + try { + action.setAccelerator(Integer.valueOf(acceleratorText).intValue()); + } catch (NumberFormatException e) { + WorkbenchPlugin.log("Invalid accelerator declaration for action: " + id, e); //$NON-NLS-1$ + } + } else { action.setAccelerator(Action.convertAccelerator(acceleratorText)); } - } + } - @Override + @Override public String getLocalId() { - return getId(); - } + return getId(); + } - @Override + @Override public String getPluginId() { - return pluginId; - } + return pluginId; + } - public int getMode() { - return mode; - } + public int getMode() { + return mode; + } } |