Example usage for org.eclipse.jface.action IAction getAccelerator

List of usage examples for org.eclipse.jface.action IAction getAccelerator

Introduction

In this page you can find the example usage for org.eclipse.jface.action IAction getAccelerator.

Prototype

int getAccelerator();

Source Link

Document

Returns the accelerator keycode for this action.

Usage

From source file:com.diffplug.common.swt.jface.Actions.java

License:Apache License

private Actions(IAction action) {
    this.text = action.getText();
    this.style = Style.of(action);
    if (action instanceof ActionImp) {
        callback = ((ActionImp) action).callback;
    } else {/*  w  w  w  .j  ava 2  s  . c  o  m*/
        callback = (a, e) -> {
            if (e == null) {
                action.run();
            } else {
                action.runWithEvent(e);
            }
        };
    }
    this.img = action.getImageDescriptor();
    this.accelerator = action.getAccelerator();
    this.tooltip = action.getToolTipText();

    if (accelerator != SWT.NONE) {
        // the toolTip might have had an accelerator added,
        // which we'll want to strip so it doesn't get doubled
        String hint = getAcceleratorHint(accelerator);
        if (tooltip.endsWith(hint)) {
            tooltip = tooltip.substring(0, tooltip.length() - hint.length());
        }
    }
}

From source file:com.diffplug.common.swt.jface.Actions.java

License:Apache License

/** Sets the tooltip text for the given action while remaing aware of its accelerator. */
public static void setToolTipAccelAware(IAction action, String tooltip) {
    if (action.getAccelerator() == SWT.NONE) {
        action.setToolTipText(tooltip);/* w  ww.  j a  v a  2 s.  co  m*/
    } else {
        action.setToolTipText(tooltip + getAcceleratorHint(action.getAccelerator()));
    }
}

From source file:com.diffplug.common.swt.jface.ActionsTest.java

License:Apache License

@Test
public void testCopy() {
    // we'll set this variable to show that it's running as expected
    Box.Nullable<String> toSet = Box.Nullable.ofNull();

    // create an action
    IAction action = Actions.builder().setText("Name").setTooltip("Tooltip").setAccelerator(SWT.SHIFT | 'a')
            .setRunnable(() -> toSet.set("WasRun")).build();

    // make sure it's doing what we expect
    Assert.assertEquals("Name", action.getText());
    Assert.assertEquals("Tooltip [Shift A]", action.getToolTipText());
    Assert.assertEquals(SWT.SHIFT | 'a', action.getAccelerator());
    Assert.assertEquals(null, toSet.get());
    action.run();//from w  w  w.  j  a  va2  s. c o  m
    Assert.assertEquals("WasRun", toSet.get());

    // copy that action
    IAction copy = Actions.builderCopy(action).setAccelerator(SWT.NONE)
            .setRunnable(() -> toSet.set("CopyWasRun")).build();

    Assert.assertEquals(SWT.NONE, copy.getAccelerator());
    // test that the tooltip was stripped correctly in the copy
    Assert.assertEquals("Tooltip", copy.getToolTipText());
    // make sure that the runnable took
    copy.run();
    Assert.assertEquals("CopyWasRun", toSet.get());
    // but didn't screw up the other one
    action.run();
    Assert.assertEquals("WasRun", toSet.get());
}

From source file:com.mousefeed.eclipse.ActionActionDescGenerator.java

License:Open Source License

/**
 * Scans action for data to populate action description.
 * /*from ww  w.ja v  a  2s . c  o m*/
 * @param action
 *            the action to search accelerator for. Not <code>null</code>.
 */
public void extractActionData(final IAction action) {
    notNull(action);
    fromActionAccelerator(action.getAccelerator());
    fromActionDefinition(action.getActionDefinitionId());

    // retarget action?
    if (action instanceof RetargetAction) {
        final RetargetAction a = (RetargetAction) action;
        if (a.getActionHandler() != null) {
            extractActionData(a.getActionHandler());
        }
    }

    fromActionBinding(action);
}

From source file:org.seasar.s2jsfplugin.editor.HTMLSourceEditorContributer.java

License:Apache License

private void doSetActiveEditor(IEditorPart part) {
    ITextEditor textEditor = null;//from w  w w .  j a v  a 2  s  .c o  m
    if (part instanceof ITextEditor) {
        textEditor = (ITextEditor) part;
    }
    for (int i = 0; i < this.actions.size(); i++) {
        RetargetTextEditorAction action = (RetargetTextEditorAction) actions.get(i);
        IAction targetAction = getAction(textEditor, (String) actionIds.get(i));
        if (targetAction != null) {
            action.setAccelerator(targetAction.getAccelerator());
            action.setAction(targetAction);
        } else {
            action.setAccelerator(SWT.NULL);
            action.setAction(null);
        }
    }
}

From source file:org.springframework.ide.eclipse.boot.dash.util.ToolbarPulldownContributionItem.java

License:Open Source License

/**
 * Synchronizes the UI with the given property.
 *
 * @param propertyName/*from ww  w .j  av a 2s .  co m*/
 *            the name of the property, or <code>null</code> meaning all
 *            applicable properties
 */
@Override
public void update(String propertyName) {
    if (widget != null) {
        // determine what to do
        boolean textChanged = propertyName == null || propertyName.equals(IAction.TEXT);
        boolean imageChanged = propertyName == null || propertyName.equals(IAction.IMAGE);
        boolean tooltipTextChanged = propertyName == null || propertyName.equals(IAction.TOOL_TIP_TEXT);
        boolean enableStateChanged = propertyName == null || propertyName.equals(IAction.ENABLED)
                || propertyName.equals(IContributionManagerOverrides.P_ENABLED);
        boolean checkChanged = (action.getStyle() == IAction.AS_CHECK_BOX
                || action.getStyle() == IAction.AS_RADIO_BUTTON)
                && (propertyName == null || propertyName.equals(IAction.CHECKED));

        if (widget instanceof ToolItem) {
            ToolItem ti = (ToolItem) widget;
            String text = action.getText();
            // the set text is shown only if there is no image or if forced
            // by MODE_FORCE_TEXT
            boolean showText = text != null && ((getMode() & MODE_FORCE_TEXT) != 0 || !hasImages(action));

            // only do the trimming if the text will be used
            if (showText && text != null) {
                text = Action.removeAcceleratorText(text);
                text = Action.removeMnemonics(text);
            }

            if (textChanged) {
                String textToSet = showText ? text : ""; //$NON-NLS-1$
                boolean rightStyle = (ti.getParent().getStyle() & SWT.RIGHT) != 0;
                if (rightStyle || !ti.getText().equals(textToSet)) {
                    // In addition to being required to update the text if
                    // it
                    // gets nulled out in the action, this is also a
                    // workaround
                    // for bug 50151: Using SWT.RIGHT on a ToolBar leaves
                    // blank space
                    ti.setText(textToSet);
                }
            }

            if (imageChanged) {
                // only substitute a missing image if it has no text
                updateImages(!showText);
            }

            if (tooltipTextChanged || textChanged) {
                String toolTip = action.getToolTipText();
                if ((toolTip == null) || (toolTip.length() == 0)) {
                    toolTip = text;
                }

                ExternalActionManager.ICallback callback = ExternalActionManager.getInstance().getCallback();
                String commandId = action.getActionDefinitionId();
                if ((callback != null) && (commandId != null) && (toolTip != null)) {
                    String acceleratorText = callback.getAcceleratorText(commandId);
                    if (acceleratorText != null && acceleratorText.length() != 0) {
                        toolTip = JFaceResources.format("Toolbar_Tooltip_Accelerator", //$NON-NLS-1$
                                new Object[] { toolTip, acceleratorText });
                    }
                }

                // if the text is showing, then only set the tooltip if
                // different
                if (!showText || toolTip != null && !toolTip.equals(text)) {
                    ti.setToolTipText(toolTip);
                } else {
                    ti.setToolTipText(null);
                }
            }

            if (enableStateChanged) {
                boolean shouldBeEnabled = action.isEnabled() && isEnabledAllowed();

                if (ti.getEnabled() != shouldBeEnabled) {
                    ti.setEnabled(shouldBeEnabled);
                }
            }

            if (checkChanged) {
                boolean bv = action.isChecked();

                if (ti.getSelection() != bv) {
                    ti.setSelection(bv);
                }
            }
            return;
        }

        if (widget instanceof MenuItem) {
            MenuItem mi = (MenuItem) widget;

            if (textChanged) {
                int accelerator = 0;
                String acceleratorText = null;
                IAction updatedAction = getAction();
                String text = null;
                accelerator = updatedAction.getAccelerator();
                ExternalActionManager.ICallback callback = ExternalActionManager.getInstance().getCallback();

                // Block accelerators that are already in use.
                if ((accelerator != 0) && (callback != null) && (callback.isAcceleratorInUse(accelerator))) {
                    accelerator = 0;
                }

                /*
                 * Process accelerators on GTK in a special way to avoid Bug
                 * 42009. We will override the native input method by
                 * allowing these reserved accelerators to be placed on the
                 * menu. We will only do this for "Ctrl+Shift+[0-9A-FU]".
                 */
                final String commandId = updatedAction.getActionDefinitionId();
                if ((Util.isGtk()) && (callback instanceof IBindingManagerCallback) && (commandId != null)) {
                    final IBindingManagerCallback bindingManagerCallback = (IBindingManagerCallback) callback;
                    final IKeyLookup lookup = KeyLookupFactory.getDefault();
                    final TriggerSequence[] triggerSequences = bindingManagerCallback
                            .getActiveBindingsFor(commandId);
                    for (int i = 0; i < triggerSequences.length; i++) {
                        final TriggerSequence triggerSequence = triggerSequences[i];
                        final Trigger[] triggers = triggerSequence.getTriggers();
                        if (triggers.length == 1) {
                            final Trigger trigger = triggers[0];
                            if (trigger instanceof KeyStroke) {
                                final KeyStroke currentKeyStroke = (KeyStroke) trigger;
                                final int currentNaturalKey = currentKeyStroke.getNaturalKey();
                                if ((currentKeyStroke
                                        .getModifierKeys() == (lookup.getCtrl() | lookup.getShift()))
                                        && ((currentNaturalKey >= '0' && currentNaturalKey <= '9')
                                                || (currentNaturalKey >= 'A' && currentNaturalKey <= 'F')
                                                || (currentNaturalKey == 'U'))) {
                                    accelerator = currentKeyStroke.getModifierKeys() | currentNaturalKey;
                                    acceleratorText = triggerSequence.format();
                                    break;
                                }
                            }
                        }
                    }
                }

                if (accelerator == 0) {
                    if ((callback != null) && (commandId != null)) {
                        acceleratorText = callback.getAcceleratorText(commandId);
                    }
                }

                IContributionManagerOverrides overrides = null;

                if (getParent() != null) {
                    overrides = getParent().getOverrides();
                }

                if (overrides != null) {
                    text = getParent().getOverrides().getText(this);
                }

                mi.setAccelerator(accelerator);

                if (text == null) {
                    text = updatedAction.getText();
                }

                if (text != null && acceleratorText == null) {
                    // use extracted accelerator text in case accelerator
                    // cannot be fully represented in one int (e.g.
                    // multi-stroke keys)
                    acceleratorText = LegacyActionTools.extractAcceleratorText(text);
                    if (acceleratorText == null && accelerator != 0) {
                        acceleratorText = Action.convertAccelerator(accelerator);
                    }
                }

                if (text == null) {
                    text = ""; //$NON-NLS-1$
                } else {
                    text = Action.removeAcceleratorText(text);
                }

                if (acceleratorText == null) {
                    mi.setText(text);
                } else {
                    mi.setText(text + '\t' + acceleratorText);
                }
            }

            if (imageChanged) {
                updateImages(false);
            }

            if (enableStateChanged) {
                boolean shouldBeEnabled = action.isEnabled() && isEnabledAllowed();

                if (mi.getEnabled() != shouldBeEnabled) {
                    mi.setEnabled(shouldBeEnabled);
                }
            }

            if (checkChanged) {
                boolean bv = action.isChecked();

                if (mi.getSelection() != bv) {
                    mi.setSelection(bv);
                }
            }

            return;
        }

        if (widget instanceof Button) {
            Button button = (Button) widget;

            if (imageChanged) {
                updateImages(false);
            }

            if (textChanged) {
                String text = action.getText();
                boolean showText = text != null && ((getMode() & MODE_FORCE_TEXT) != 0 || !hasImages(action));
                // only do the trimming if the text will be used
                if (showText) {
                    text = Action.removeAcceleratorText(text);
                }
                String textToSet = showText ? text : ""; //$NON-NLS-1$
                button.setText(textToSet);
            }

            if (tooltipTextChanged) {
                button.setToolTipText(action.getToolTipText());
            }

            if (enableStateChanged) {
                boolean shouldBeEnabled = action.isEnabled() && isEnabledAllowed();

                if (button.getEnabled() != shouldBeEnabled) {
                    button.setEnabled(shouldBeEnabled);
                }
            }

            if (checkChanged) {
                boolean bv = action.isChecked();

                if (button.getSelection() != bv) {
                    button.setSelection(bv);
                }
            }
            return;
        }
    }
}

From source file:org.xmind.ui.actions.DelegatingAction.java

License:Open Source License

private void initProperties(IAction delegate) {
    if (properties.contains(TEXT)) {
        setText(delegate.getText());//from  w  w w . j  a v  a 2s  .  c  o  m
        setAccelerator(delegate.getAccelerator());
    }
    if (properties.contains(TOOL_TIP_TEXT)) {
        setToolTipText(delegate.getToolTipText());
    }
    if (properties.contains(IMAGE)) {
        setImageDescriptor(delegate.getImageDescriptor());
        setDisabledImageDescriptor(delegate.getDisabledImageDescriptor());
        setHoverImageDescriptor(delegate.getHoverImageDescriptor());
    }
    if (properties.contains(ENABLED)) {
        setEnabled(delegate.isEnabled());
    }
    if (properties.contains(CHECKED)) {
        if (delegate.getStyle() == AS_CHECK_BOX || delegate.getStyle() == AS_RADIO_BUTTON)
            setChecked(delegate.isChecked());
    }
    if (properties.contains(DESCRIPTION)) {
        setDescription(delegate.getDescription());
    }
}

From source file:org.xmind.ui.color.ColorPicker.java

License:Open Source License

/**
 * Synchronizes the UI with the given property. ATTN: Brian Sun 
 * // w  w  w .j  av a2 s  .  c o  m
 * @param propertyName
 *            the name of the property, or <code>null</code> meaning all
 *            applicable properties
 */
public void update(String propertyName) {
    if (widget != null) {
        // determine what to do         
        boolean textChanged = propertyName == null || propertyName.equals(IAction.TEXT);
        boolean imageChanged = propertyName == null || propertyName.equals(IAction.IMAGE);
        boolean tooltipTextChanged = propertyName == null || propertyName.equals(IAction.TOOL_TIP_TEXT);
        boolean enableStateChanged = propertyName == null || propertyName.equals(IAction.ENABLED)
                || propertyName.equals(IContributionManagerOverrides.P_ENABLED);
        boolean checkChanged = (action.getStyle() == IAction.AS_CHECK_BOX
                || action.getStyle() == IAction.AS_RADIO_BUTTON)
                && (propertyName == null || propertyName.equals(IAction.CHECKED));
        boolean colorChanged = propertyName == null || propertyName.equals(IColorAction.COLOR);

        if (widget instanceof ToolItem) {
            //int toolbarStyle = SWT.NONE;

            ToolItem ti = (ToolItem) widget;
            String text = action.getText();
            // the set text is shown only if there is no image or if forced by MODE_FORCE_TEXT
            boolean showText = text != null && ((getMode() & MODE_FORCE_TEXT) != 0 || !hasImages(action));
            //                        && ((toolbarStyle & BFaceConstants.TOOLBAR_TEXT)!=0 || 
            //                                ((toolbarStyle & BFaceConstants.TOOLBAR_TEXT_RIGHT)!=0 && hasRightText));

            // only do the trimming if the text will be used
            if (showText && text != null) {
                text = Action.removeAcceleratorText(text);
                text = Action.removeMnemonics(text);
            }

            if (textChanged) {
                String textToSet = showText ? text : ""; //$NON-NLS-1$
                boolean rightStyle = (ti.getParent().getStyle() & SWT.RIGHT) != 0;
                if (rightStyle || !ti.getText().equals(textToSet)) {
                    // In addition to being required to update the text if it
                    // gets nulled out in the action, this is also a workaround 
                    // for bug 50151: Using SWT.RIGHT on a ToolBar leaves blank space
                    ti.setText(textToSet);
                }
            }

            if (imageChanged) {
                // only substitute a missing image if it has no text
                updateImages(!showText);
            }

            if (tooltipTextChanged || textChanged) {
                String toolTip = action.getToolTipText();
                if ((toolTip == null) || (toolTip.length() == 0)) {
                    toolTip = text;
                }
                // if the text is showing, then only set the tooltip if
                // different
                if (!showText || toolTip != null) {
                    //                            && !toolTip.equals(text)) {
                    ti.setToolTipText(toolTip);
                } else {
                    ti.setToolTipText(null);
                }
            }

            if (enableStateChanged) {
                boolean shouldBeEnabled = action.isEnabled();
                //                            && isEnabledAllowed();

                if (ti.getEnabled() != shouldBeEnabled) {
                    ti.setEnabled(shouldBeEnabled);
                }
            }

            if (checkChanged) {
                boolean bv = action.isChecked();

                if (ti.getSelection() != bv) {
                    ti.setSelection(bv);
                }
            }

            if (colorChanged) {
                updateColors();
            }
            return;
        }

        if (widget instanceof MenuItem) {
            MenuItem mi = (MenuItem) widget;

            if (textChanged) {
                int accelerator = 0;
                String acceleratorText = null;
                IAction updatedAction = getAction();
                String text = null;
                accelerator = updatedAction.getAccelerator();
                ExternalActionManager.ICallback callback = ExternalActionManager.getInstance().getCallback();

                // Block accelerators that are already in use.
                if ((accelerator != 0) && (callback != null) && (callback.isAcceleratorInUse(accelerator))) {
                    accelerator = 0;
                }

                /*
                 * Process accelerators on GTK in a special way to avoid Bug
                 * 42009. We will override the native input method by
                 * allowing these reserved accelerators to be placed on the
                 * menu. We will only do this for "Ctrl+Shift+[0-9A-FU]".
                 */
                final String commandId = updatedAction.getActionDefinitionId();
                if (("gtk".equals(SWT.getPlatform())) && (callback instanceof IBindingManagerCallback) //$NON-NLS-1$
                        && (commandId != null)) {
                    final IBindingManagerCallback bindingManagerCallback = (IBindingManagerCallback) callback;
                    final IKeyLookup lookup = KeyLookupFactory.getDefault();
                    final TriggerSequence[] triggerSequences = bindingManagerCallback
                            .getActiveBindingsFor(commandId);
                    for (int i = 0; i < triggerSequences.length; i++) {
                        final TriggerSequence triggerSequence = triggerSequences[i];
                        final Trigger[] triggers = triggerSequence.getTriggers();
                        if (triggers.length == 1) {
                            final Trigger trigger = triggers[0];
                            if (trigger instanceof KeyStroke) {
                                final KeyStroke currentKeyStroke = (KeyStroke) trigger;
                                final int currentNaturalKey = currentKeyStroke.getNaturalKey();
                                if ((currentKeyStroke
                                        .getModifierKeys() == (lookup.getCtrl() | lookup.getShift()))
                                        && ((currentNaturalKey >= '0' && currentNaturalKey <= '9')
                                                || (currentNaturalKey >= 'A' && currentNaturalKey <= 'F')
                                                || (currentNaturalKey == 'U'))) {
                                    accelerator = currentKeyStroke.getModifierKeys() | currentNaturalKey;
                                    acceleratorText = triggerSequence.format();
                                    break;
                                }
                            }
                        }
                    }
                }

                if (accelerator == 0) {
                    if ((callback != null) && (commandId != null)) {
                        acceleratorText = callback.getAcceleratorText(commandId);
                    }
                } else {
                    acceleratorText = Action.convertAccelerator(accelerator);
                }

                IContributionManagerOverrides overrides = null;

                if (getParent() != null) {
                    overrides = getParent().getOverrides();
                }

                if (overrides != null) {
                    text = getParent().getOverrides().getText(this);
                }

                mi.setAccelerator(accelerator);

                if (text == null) {
                    text = updatedAction.getText();
                }

                if (text == null) {
                    text = ""; //$NON-NLS-1$
                } else {
                    text = Action.removeAcceleratorText(text);
                }

                if (acceleratorText == null) {
                    mi.setText(text);
                } else {
                    mi.setText(text + '\t' + acceleratorText);
                }
            }

            if (imageChanged) {
                updateImages(false);
            }

            if (enableStateChanged) {
                boolean shouldBeEnabled = action.isEnabled();
                //                            && isEnabledAllowed();

                if (mi.getEnabled() != shouldBeEnabled) {
                    mi.setEnabled(shouldBeEnabled);
                }
            }

            if (checkChanged) {
                boolean bv = action.isChecked();

                if (mi.getSelection() != bv) {
                    mi.setSelection(bv);
                }
            }

            if (colorChanged) {
                updateColors();
            }
            return;
        }

        if (widget instanceof Button) {
            Button button = (Button) widget;

            if (imageChanged && updateImages(false)) {
                textChanged = false; // don't update text if it has an image
            }

            if (textChanged) {
                String text = action.getText();
                if (text == null) {
                    text = ""; //$NON-NLS-1$
                } else {
                    text = Action.removeAcceleratorText(text);
                }
                button.setText(text);
            }

            if (tooltipTextChanged) {
                button.setToolTipText(action.getToolTipText());
            }

            if (enableStateChanged) {
                boolean shouldBeEnabled = action.isEnabled();
                //                            && isEnabledAllowed();

                if (button.getEnabled() != shouldBeEnabled) {
                    button.setEnabled(shouldBeEnabled);
                }
            }

            if (checkChanged) {
                boolean bv = action.isChecked();

                if (button.getSelection() != bv) {
                    button.setSelection(bv);
                }
            }

            if (colorChanged) {
                updateColors();
            }
            return;
        }
    }

}