diff --git a/platform/platform-impl/src/com/intellij/ui/ScrollPaneActions.java b/platform/platform-impl/src/com/intellij/ui/ScrollPaneActions.java index 37f01d7adbbf..2879acbeb80d 100644 --- a/platform/platform-impl/src/com/intellij/ui/ScrollPaneActions.java +++ b/platform/platform-impl/src/com/intellij/ui/ScrollPaneActions.java @@ -15,52 +15,24 @@ */ package com.intellij.ui; -import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.util.ui.UIUtil; -import javax.swing.Action; -import javax.swing.ActionMap; +import javax.swing.JComponent; import javax.swing.JScrollPane; -import java.awt.Component; -import java.awt.KeyboardFocusManager; -import java.awt.event.ActionEvent; -import static com.intellij.openapi.actionSystem.PlatformDataKeys.CONTEXT_COMPONENT; +import static com.intellij.util.ui.UIUtil.getParentOfType; /** * @author Sergey.Malenkov */ -public abstract class ScrollPaneActions extends AnAction { - private final String mySwingActionId; - +public abstract class ScrollPaneActions extends SwingActionDelegate { private ScrollPaneActions(String actionId) { - mySwingActionId = actionId; + super(actionId); } @Override - public void update(AnActionEvent event) { - JScrollPane pane = getScrollPane(event); - event.getPresentation().setEnabled(pane != null && null != getSwingAction(pane)); - } - - @Override - public void actionPerformed(AnActionEvent event) { - JScrollPane pane = getScrollPane(event); - if (pane == null) return; - Action action = getSwingAction(pane); - if (action == null) return; - action.actionPerformed(new ActionEvent(pane, ActionEvent.ACTION_PERFORMED, mySwingActionId)); - } - - private JScrollPane getScrollPane(AnActionEvent event) { - Component component = event.getData(CONTEXT_COMPONENT); - return UIUtil.getParentOfType(JScrollPane.class, component); - } - - private Action getSwingAction(JScrollPane pane) { - ActionMap map = pane.getActionMap(); - return map == null ? null : map.get(mySwingActionId); + protected JComponent getComponent(AnActionEvent event) { + return getParentOfType(JScrollPane.class, super.getComponent(event)); } public static final class Home extends ScrollPaneActions { diff --git a/platform/platform-impl/src/com/intellij/ui/SwingActionDelegate.java b/platform/platform-impl/src/com/intellij/ui/SwingActionDelegate.java new file mode 100644 index 000000000000..51fc87933ce2 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ui/SwingActionDelegate.java @@ -0,0 +1,46 @@ +package com.intellij.ui; + +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; + +import javax.swing.Action; +import javax.swing.ActionMap; +import javax.swing.JComponent; +import java.awt.event.ActionEvent; + +import static com.intellij.openapi.actionSystem.PlatformDataKeys.CONTEXT_COMPONENT; +import static com.intellij.util.ui.UIUtil.getParentOfType; + +/** + * @author Sergey.Malenkov + */ +public class SwingActionDelegate extends AnAction { + private final String mySwingActionId; + + protected SwingActionDelegate(String actionId) { + setEnabledInModalContext(true); + mySwingActionId = actionId; + } + + protected JComponent getComponent(AnActionEvent event) { + return getParentOfType(JComponent.class, event.getData(CONTEXT_COMPONENT)); + } + + @Override + public final void update(AnActionEvent event) { + event.getPresentation().setEnabled(null != getSwingAction(getComponent(event))); + } + + @Override + public final void actionPerformed(AnActionEvent event) { + JComponent component = getComponent(event); + Action action = getSwingAction(component); + if (action != null) action.actionPerformed(new ActionEvent(component, ActionEvent.ACTION_PERFORMED, mySwingActionId)); + } + + private Action getSwingAction(JComponent component) { + if (component == null) return null; + ActionMap map = component.getActionMap(); + return map == null ? null : map.get(mySwingActionId); + } +} diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml index 4d17cdf880c3..839fe3ddc7af 100644 --- a/platform/platform-resources/src/idea/PlatformActions.xml +++ b/platform/platform-resources/src/idea/PlatformActions.xml @@ -22,16 +22,36 @@ - - - - - - - - - - + + + + + + + + + +