From 54aaa014d357cb9a8cfe1b92eaed397f7db60e2d Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Thu, 16 Jul 2009 18:18:20 +0400 Subject: [PATCH] Run... Debug... actions instead of Execute configuration... --- .../src/com/intellij/execution/ExecutionUtil.java | 4 +- .../actions/ChooseDebugConfigurationAction.java | 20 + .../actions/ChooseRunConfigurationAction.java | 414 +++++++++++++++++++++ .../actions/ExecuteRunConfigurationAction.java | 277 -------------- .../src/com/intellij/execution/impl/RunDialog.java | 12 +- .../src/com/intellij/ui/popup/WizardPopup.java | 30 +- platform-resources/src/idea/DefaultKeymap.xml | 5 +- platform-resources/src/idea/LangActions.xml | 6 +- 8 files changed, 477 insertions(+), 291 deletions(-) create mode 100644 lang-impl/src/com/intellij/execution/actions/ChooseDebugConfigurationAction.java create mode 100644 lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationAction.java delete mode 100644 lang-impl/src/com/intellij/execution/actions/ExecuteRunConfigurationAction.java diff --git a/lang-impl/src/com/intellij/execution/ExecutionUtil.java b/lang-impl/src/com/intellij/execution/ExecutionUtil.java index 5074a5ceba..ba8f4bdb6f 100644 --- a/lang-impl/src/com/intellij/execution/ExecutionUtil.java +++ b/lang-impl/src/com/intellij/execution/ExecutionUtil.java @@ -45,14 +45,14 @@ public class ExecutionUtil { final Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext); LOG.assertTrue(component != null, "component MUST not be null!"); if (!RunManagerImpl.canRunConfiguration(configuration, executor)) { - final boolean result = RunDialog.editConfiguration(project, configuration, "Edit configuration"); + final boolean result = RunDialog.editConfiguration(project, configuration, "Edit configuration", executor.getActionName(), executor.getIcon()); if (!result) { return; } while (!RunManagerImpl.canRunConfiguration(configuration, executor)) { if (0 == Messages.showOkCancelDialog(project, "Configuration is still wrong. Do you want to edit it again?", "Change configuration settings", Messages.getErrorIcon())) { - final boolean result2 = RunDialog.editConfiguration(project, configuration, "Edit configuration"); + final boolean result2 = RunDialog.editConfiguration(project, configuration, "Edit configuration", executor.getActionName(), executor.getIcon()); if (!result2) { return; } diff --git a/lang-impl/src/com/intellij/execution/actions/ChooseDebugConfigurationAction.java b/lang-impl/src/com/intellij/execution/actions/ChooseDebugConfigurationAction.java new file mode 100644 index 0000000000..6bef6f5250 --- /dev/null +++ b/lang-impl/src/com/intellij/execution/actions/ChooseDebugConfigurationAction.java @@ -0,0 +1,20 @@ +package com.intellij.execution.actions; + +import com.intellij.execution.Executor; + +/** + * @author spleaner + */ +public class ChooseDebugConfigurationAction extends ChooseRunConfigurationAction { + + @Override + protected Executor getDefaultExecutor() { + return super.getAlternateExecutor(); + } + + @Override + protected Executor getAlternateExecutor() { + return super.getDefaultExecutor(); + } + +} diff --git a/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationAction.java b/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationAction.java new file mode 100644 index 0000000000..ed1cdb8570 --- /dev/null +++ b/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationAction.java @@ -0,0 +1,414 @@ +package com.intellij.execution.actions; + +import com.intellij.execution.*; +import com.intellij.execution.configurations.ConfigurationType; +import com.intellij.execution.executors.DefaultRunExecutor; +import com.intellij.execution.impl.EditConfigurationsDialog; +import com.intellij.execution.impl.RunDialog; +import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; +import com.intellij.execution.runners.ProgramRunner; +import com.intellij.ide.DataManager; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.popup.ListSeparator; +import com.intellij.openapi.ui.popup.PopupStep; +import com.intellij.openapi.ui.popup.util.BaseListPopupStep; +import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.wm.ToolWindowId; +import com.intellij.ui.popup.list.ListPopupImpl; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.List; + +/** + * @author spleaner + * + * TODO: advertise alternate executor (hold SHIFT) + */ +public class ChooseRunConfigurationAction extends AnAction { + private static final Icon EDIT_ICON = IconLoader.getIcon("/actions/editSource.png"); + private static final Icon SAVE_ICON = IconLoader.getIcon("/runConfigurations/saveTempConfig.png"); + + private Executor myCurrentExecutor; + + @Override + public void actionPerformed(AnActionEvent e) { + final Project project = e.getData(PlatformDataKeys.PROJECT); + assert project != null; + + final Executor executor = getDefaultExecutor(); + assert executor != null; + + final ListPopupImpl popup = + new ListPopupImpl(new ConfigurationListPopupStep(this, project, String.format("%s", executor.getActionName()))) { + { + registerActions(this, getInputMap(), getActionMap()); + }}; + + popup.showCenteredInCurrentWindow(project); + } + + private void registerActions(final ListPopupImpl listPopup, @NotNull final InputMap inputMap, @NotNull final ActionMap actionMap) { + inputMap.put(KeyStroke.getKeyStroke("shift pressed SHIFT"), "alternateExecutor"); + inputMap.put(KeyStroke.getKeyStroke("released SHIFT"), "restoreDefaultExecutor"); + inputMap.put(KeyStroke.getKeyStroke("shift ENTER"), "invokeAction"); + + actionMap.put("invokeAction", new AbstractAction() { + public void actionPerformed(ActionEvent e) { + listPopup.handleSelect(true); + } + }); + + actionMap.put("alternateExecutor", new AbstractAction() { + public void actionPerformed(ActionEvent e) { + myCurrentExecutor = getAlternateExecutor(); + updatePresentation(listPopup); + } + }); + + actionMap.put("restoreDefaultExecutor", new AbstractAction() { + public void actionPerformed(ActionEvent e) { + myCurrentExecutor = getDefaultExecutor(); + updatePresentation(listPopup); + } + }); + } + + private void updatePresentation(ListPopupImpl listPopup) { + final Executor executor = getCurrentExecutor(); + if (executor != null) { + listPopup.setCaption(executor.getActionName()); + } + } + + @Nullable + protected Executor getDefaultExecutor() { + return DefaultRunExecutor.getRunExecutorInstance(); + } + + @Nullable + protected Executor getAlternateExecutor() { + return ExecutorRegistry.getInstance().getExecutorById(ToolWindowId.DEBUG); + } + + @Nullable + protected Executor getCurrentExecutor() { + return myCurrentExecutor == null ? getDefaultExecutor() : myCurrentExecutor; + } + + @Override + public void update(AnActionEvent e) { + final Presentation presentation = e.getPresentation(); + final Project project = e.getData(PlatformDataKeys.PROJECT); + + presentation.setEnabled(true); + if (project == null || project.isDisposed()) { + presentation.setEnabled(false); + presentation.setVisible(false); + return; + } + + if (null == getDefaultExecutor()) { + presentation.setEnabled(false); + presentation.setVisible(false); + return; + } + + presentation.setEnabled(true); + presentation.setVisible(true); + } + + private abstract static class ItemWrapper { + private T myValue; + + protected ItemWrapper(@Nullable final T value) { + myValue = value; + } + + public T getValue() { + return myValue; + } + + public abstract Icon getIcon(); + + public abstract String getText(); + + public abstract void perform(@NotNull final Project project, @NotNull final Executor executor, @NotNull final DataContext context); + + @Nullable + public ConfigurationType getType() { + return null; + } + + public boolean available(Executor executor) { + return true; + } + + public boolean hasActions() { + return false; + } + + public PopupStep getNextStep(Project project, ChooseRunConfigurationAction action) { + return PopupStep.FINAL_CHOICE; + } + + public static ItemWrapper wrap(@NotNull final Project project, @NotNull final RunnerAndConfigurationSettingsImpl settings) { + return new ItemWrapper(settings) { + @Override + public void perform(@NotNull Project project, @NotNull Executor executor, @NotNull DataContext context) { + RunManagerEx.getInstanceEx(project).setSelectedConfiguration(getValue()); + ExecutionUtil.executeConfiguration(project, getValue(), executor, DataManager.getInstance().getDataContext()); + } + + @Override + public ConfigurationType getType() { + return getValue().getType(); + } + + @Override + public Icon getIcon() { + return ExecutionUtil.getConfigurationIcon(project, getValue()); + } + + @Override + public String getText() { + return getValue().getName(); + } + + @Override + public boolean hasActions() { + return true; + } + + @Override + public boolean available(Executor executor) { + return null != ExecutionUtil.getRunner(executor.getId(), getValue()); + } + + @Override + public PopupStep getNextStep(@NotNull final Project project, @NotNull final ChooseRunConfigurationAction action) { + return new ConfigurationActionsStep(project, action, getValue()); + } + }; + } + + } + + private static final class ConfigurationListPopupStep extends BaseListPopupStep { + private Project myProject; + private ChooseRunConfigurationAction myAction; + + private ConfigurationListPopupStep(@NotNull final ChooseRunConfigurationAction action, + @NotNull final Project project, + @NotNull final String title) { + super(title, createSettingsList(project)); + myProject = project; + myAction = action; + } + + private static ItemWrapper[] createSettingsList(@NotNull final Project project) { + final RunManagerEx manager = RunManagerEx.getInstanceEx(project); + + final List result = new ArrayList(); + + //noinspection unchecked + result.add(new ItemWrapper(null) { + @Override + public Icon getIcon() { + return EDIT_ICON; + } + + @Override + public String getText() { + return "Edit configurations..."; + } + + @Override + public void perform(@NotNull Project project, @NotNull Executor executor, @NotNull DataContext context) { + new EditConfigurationsDialog(project).show(); + } + }); + + final ConfigurationType[] factories = manager.getConfigurationFactories(); + for (final ConfigurationType factory : factories) { + final RunnerAndConfigurationSettingsImpl[] configurations = manager.getConfigurationSettings(factory); + for (final RunnerAndConfigurationSettingsImpl configuration : configurations) { + result.add(ItemWrapper.wrap(project, configuration)); + } + } + + + return result.toArray(new ItemWrapper[result.size()]); + } + + @Override + public ListSeparator getSeparatorAbove(ItemWrapper value) { + final List configurations = getValues(); + final int index = configurations.indexOf(value); + if (index > 0 && index <= configurations.size() - 1) { + final ItemWrapper aboveConfiguration = index == 0 ? null : configurations.get(index - 1); + final ConfigurationType currentType = value.getType(); + final ConfigurationType aboveType = aboveConfiguration == null ? null : aboveConfiguration.getType(); + if (aboveType != currentType && currentType != null) { + return new ListSeparator(); // new ListSeparator(currentType.getDisplayName()); + } + } + + return null; + } + + @Override + public boolean isSpeedSearchEnabled() { + return true; + } + + @Override + public int getDefaultOptionIndex() { + final RunnerAndConfigurationSettings currentConfiguration = RunManager.getInstance(myProject).getSelectedConfiguration(); + + final List list = getValues(); + int i = 0; + for (final ItemWrapper wrapper : list) { + if (wrapper.getValue() == currentConfiguration) { + return i; + } + i++; + } + + return super.getDefaultOptionIndex(); + } + + @Override + public PopupStep onChosen(final ItemWrapper wrapper, boolean finalChoice) { + final Executor executor = myAction.getCurrentExecutor(); + assert executor != null; + + if (finalChoice && wrapper.available(executor)) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + wrapper.perform(myProject, executor, DataManager.getInstance().getDataContext()); + } + }); + + return FINAL_CHOICE; + } + else { + return wrapper.getNextStep(myProject, myAction); + } + } + + @Override + public boolean hasSubstep(ItemWrapper selectedValue) { + return selectedValue.hasActions(); + } + + @NotNull + @Override + public String getTextFor(ItemWrapper value) { + return value.getText(); + } + + @Override + public Icon getIconFor(ItemWrapper value) { + return value.getIcon(); + } + } + + private static final class ConfigurationActionsStep extends BaseListPopupStep { + private ConfigurationActionsStep(@NotNull final Project project, + ChooseRunConfigurationAction action, + @NotNull final RunnerAndConfigurationSettingsImpl settings) { + super("Actions", buildActions(project, action, settings)); + } + + private static ActionWrapper[] buildActions(@NotNull final Project project, + final ChooseRunConfigurationAction action, + @NotNull final RunnerAndConfigurationSettingsImpl settings) { + final List result = new ArrayList(); + final Executor[] executors = ExecutorRegistry.getInstance().getRegisteredExecutors(); + for (final Executor executor : executors) { + final ProgramRunner runner = RunnerRegistry.getInstance().getRunner(executor.getId(), settings.getConfiguration()); + if (runner != null) { + result.add(new ActionWrapper(executor.getActionName(), executor.getIcon()) { + @Override + public void perform() { + RunManagerEx.getInstanceEx(project).setSelectedConfiguration(settings); + ExecutionUtil.executeConfiguration(project, settings, executor, DataManager.getInstance().getDataContext()); + } + }); + } + } + + result.add(new ActionWrapper("Edit...", EDIT_ICON) { + @Override + public void perform() { + final Executor executor = action.getCurrentExecutor(); + assert executor != null; + + if (RunDialog.editConfiguration(project, settings, "Edit configuration settings", executor.getActionName(), + executor.getIcon())) { + RunManagerEx.getInstanceEx(project).setSelectedConfiguration(settings); + ExecutionUtil.executeConfiguration(project, settings, executor, DataManager.getInstance().getDataContext()); + } + } + }); + + if (RunManager.getInstance(project).isTemporary(settings.getConfiguration())) { + result.add(new ActionWrapper("Save temp configuration", SAVE_ICON) { + @Override + public void perform() { + RunManager.getInstance(project).makeStable(settings.getConfiguration()); + } + }); + } + + return result.toArray(new ActionWrapper[result.size()]); + } + + @Override + public PopupStep onChosen(final ActionWrapper selectedValue, boolean finalChoice) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + selectedValue.perform(); + } + }); + + return FINAL_CHOICE; + } + + @Override + public Icon getIconFor(ActionWrapper aValue) { + return aValue.getIcon(); + } + + @NotNull + @Override + public String getTextFor(ActionWrapper value) { + return value.getName(); + } + } + + private abstract static class ActionWrapper { + private String myName; + private Icon myIcon; + + private ActionWrapper(String name, Icon icon) { + myName = name; + myIcon = icon; + } + + public abstract void perform(); + + public String getName() { + return myName; + } + + public Icon getIcon() { + return myIcon; + } + } +} diff --git a/lang-impl/src/com/intellij/execution/actions/ExecuteRunConfigurationAction.java b/lang-impl/src/com/intellij/execution/actions/ExecuteRunConfigurationAction.java deleted file mode 100644 index 24b52e843e..0000000000 --- a/lang-impl/src/com/intellij/execution/actions/ExecuteRunConfigurationAction.java +++ /dev/null @@ -1,277 +0,0 @@ -package com.intellij.execution.actions; - -import com.intellij.execution.*; -import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.executors.DefaultRunExecutor; -import com.intellij.execution.impl.RunDialog; -import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; -import com.intellij.execution.runners.ProgramRunner; -import com.intellij.ide.DataManager; -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.openapi.ui.popup.ListSeparator; -import com.intellij.openapi.ui.popup.PopupStep; -import com.intellij.openapi.ui.popup.util.BaseListPopupStep; -import com.intellij.openapi.util.IconLoader; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * @author spleaner - */ -public class ExecuteRunConfigurationAction extends AnAction implements DumbAware { - private static final Icon EDIT_ICON = IconLoader.getIcon("/actions/editSource.png"); - private static final Icon SAVE_ICON = IconLoader.getIcon("/runConfigurations/saveTempConfig.png"); - - private Executor myExecutor; - private static final String EXECUTOR_KEY = "com.intellij.execution.actions.ExecuteRunConfigurationAction.DefauktExecutor"; - - public static ExecuteRunConfigurationAction getActionInstance() { - return (ExecuteRunConfigurationAction)ActionManager.getInstance().getAction("ExecuteRunConfiguration"); - } - - public void setExecutor(@NotNull final Executor executor, @NotNull final Project project) { - myExecutor = executor; - final Presentation presentation = getTemplatePresentation(); - presentation.setText(String.format("%s configuration...", executor.getActionName())); - presentation.setIcon(executor.getIcon()); - - final PropertiesComponent properties = PropertiesComponent.getInstance(project); - properties.setValue(EXECUTOR_KEY, executor.getId()); - } - - public Executor getExecutor() { - return myExecutor; - } - - private void initializeDefaultExecutor(@NotNull final Project project) { - if (myExecutor != null) { - return; - } - - final PropertiesComponent properties = PropertiesComponent.getInstance(project); - final ExecutorRegistry registry = ExecutorRegistry.getInstance(); - String id = properties.getValue(EXECUTOR_KEY); - if (id != null) { - final Executor executor = registry.getExecutorById(id); - if (executor != null) { - setExecutor(executor, project); - return; - } - } - - final Executor runExecutor = DefaultRunExecutor.getRunExecutorInstance(); - if (runExecutor != null) { - setExecutor(runExecutor, project); - return; - } - - final Executor[] registeredExecutors = registry.getRegisteredExecutors(); - if (registeredExecutors.length > 0) { - setExecutor(registeredExecutors[0], project); - } - } - - @Override - public void actionPerformed(AnActionEvent e) { - final Project project = e.getData(PlatformDataKeys.PROJECT); - assert project != null; - - initializeDefaultExecutor(project); - - final ConfigurationListPopupStep popupStep = - new ConfigurationListPopupStep(project, String.format("%s configuration", getExecutor().getActionName())); - JBPopupFactory.getInstance().createListPopup(popupStep).showInFocusCenter(); - } - - @Override - public void update(AnActionEvent e) { - final Presentation presentation = e.getPresentation(); - final Project project = e.getData(PlatformDataKeys.PROJECT); - - presentation.setEnabled(true); - if (project == null || project.isDisposed()) { - presentation.setEnabled(false); - return; - } - - initializeDefaultExecutor(project); - } - - private static final class ConfigurationListPopupStep extends BaseListPopupStep { - private Project myProject; - - private ConfigurationListPopupStep(@NotNull final Project project, @NotNull final String title) { - super(title, createSettingsList(project)); - myProject = project; - } - - private static RunnerAndConfigurationSettingsImpl[] createSettingsList(@NotNull final Project project) { - final RunManagerEx manager = RunManagerEx.getInstanceEx(project); - - final List result = new ArrayList(); - final ConfigurationType[] factories = manager.getConfigurationFactories(); - for (final ConfigurationType factory : factories) { - final RunnerAndConfigurationSettingsImpl[] configurations = manager.getConfigurationSettings(factory); - result.addAll(Arrays.asList(configurations)); - } - - return result.toArray(new RunnerAndConfigurationSettingsImpl[result.size()]); - } - - @Override - public ListSeparator getSeparatorAbove(RunnerAndConfigurationSettingsImpl value) { - final List configurations = getValues(); - final int index = configurations.indexOf(value); - if (index > 0 && index <= configurations.size() - 1) { - final RunnerAndConfigurationSettingsImpl aboveConfiguration = index == 0 ? null : configurations.get(index - 1); - final ConfigurationType currentType = value.getType(); - final ConfigurationType aboveType = aboveConfiguration == null ? null : aboveConfiguration.getType(); - if (aboveType != currentType && currentType != null) { - return new ListSeparator(); // new ListSeparator(currentType.getDisplayName()); - } - } - - return null; - } - - @Override - public boolean isSpeedSearchEnabled() { - return true; - } - - @Override - public int getDefaultOptionIndex() { - return getValues().indexOf(RunManager.getInstance(myProject).getSelectedConfiguration()); - } - - @Override - public PopupStep onChosen(final RunnerAndConfigurationSettingsImpl settings, boolean finalChoice) { - final Executor executor = ExecuteRunConfigurationAction.getActionInstance().getExecutor(); - if (finalChoice && ExecutionUtil.getRunner(executor.getId(), settings) != null) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - RunManagerEx.getInstanceEx(myProject).setSelectedConfiguration(settings); - ExecutionUtil.executeConfiguration(myProject, settings, executor, - DataManager.getInstance().getDataContext()); - } - }); - - return FINAL_CHOICE; - } - else { - return new ConfigurationActionsStep(myProject, settings); - } - } - - @Override - public boolean hasSubstep(RunnerAndConfigurationSettingsImpl selectedValue) { - return true; - } - - @NotNull - @Override - public String getTextFor(RunnerAndConfigurationSettingsImpl value) { - return value.getConfiguration().getName(); - } - - @Override - public Icon getIconFor(RunnerAndConfigurationSettingsImpl value) { - return ExecutionUtil.getConfigurationIcon(myProject, value); - } - } - - private static final class ConfigurationActionsStep extends BaseListPopupStep { - private ConfigurationActionsStep(@NotNull final Project project, - @NotNull final RunnerAndConfigurationSettingsImpl settings) { - super("Actions", buildActions(project, settings)); - } - - private static ActionWrapper[] buildActions(@NotNull final Project project, - @NotNull final RunnerAndConfigurationSettingsImpl settings) { - final List result = new ArrayList(); - final Executor[] executors = ExecutorRegistry.getInstance().getRegisteredExecutors(); - for (final Executor executor : executors) { - final ProgramRunner runner = RunnerRegistry.getInstance().getRunner(executor.getId(), settings.getConfiguration()); - if (runner != null) { - result.add(new ActionWrapper(executor.getActionName(), executor.getIcon()) { - @Override - public void perform() { - RunManagerEx.getInstanceEx(project).setSelectedConfiguration(settings); - - ExecuteRunConfigurationAction.getActionInstance().setExecutor(executor, project); - ExecutionUtil.executeConfiguration(project, settings, executor, DataManager.getInstance().getDataContext()); - } - }); - } - } - - result.add(new ActionWrapper("Edit...", EDIT_ICON) { - @Override - public void perform() { - RunDialog.editConfiguration(project, settings, "Edit configuration settings"); - } - }); - - if (RunManager.getInstance(project).isTemporary(settings.getConfiguration())) { - result.add(new ActionWrapper("Save temp configuration", SAVE_ICON) { - @Override - public void perform() { - RunManager.getInstance(project).makeStable(settings.getConfiguration()); - } - }); - } - - return result.toArray(new ActionWrapper[result.size()]); - } - - @Override - public PopupStep onChosen(final ActionWrapper selectedValue, boolean finalChoice) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - selectedValue.perform(); - } - }); - - return FINAL_CHOICE; - } - - @Override - public Icon getIconFor(ActionWrapper aValue) { - return aValue.getIcon(); - } - - @NotNull - @Override - public String getTextFor(ActionWrapper value) { - return value.getName(); - } - } - - private abstract static class ActionWrapper { - private String myName; - private Icon myIcon; - - private ActionWrapper(String name, Icon icon) { - myName = name; - myIcon = icon; - } - - public abstract void perform(); - - public String getName() { - return myName; - } - - public Icon getIcon() { - return myIcon; - } - } -} diff --git a/lang-impl/src/com/intellij/execution/impl/RunDialog.java b/lang-impl/src/com/intellij/execution/impl/RunDialog.java index eb6d5c6d14..b24baf10e1 100644 --- a/lang-impl/src/com/intellij/execution/impl/RunDialog.java +++ b/lang-impl/src/com/intellij/execution/impl/RunDialog.java @@ -80,8 +80,18 @@ public class RunDialog extends DialogWrapper { } public static boolean editConfiguration(final Project project, final RunnerAndConfigurationSettingsImpl configuration, final String title) { + return editConfiguration(project, configuration, title, null, null); + } + + public static boolean editConfiguration(final Project project, final RunnerAndConfigurationSettingsImpl configuration, final String title, final String okText, final Icon okIcon) { final SingleConfigurationConfigurable configurable = SingleConfigurationConfigurable.editSettings(configuration); - final SingleConfigurableEditor dialog = new SingleConfigurableEditor(project, configurable); + final SingleConfigurableEditor dialog = new SingleConfigurableEditor(project, configurable) { + { + if (okIcon != null) setOKButtonIcon(okIcon); + if (okText != null) setOKButtonText(okText); + } + }; + dialog.setTitle(title); dialog.show(); return dialog.isOK(); diff --git a/platform-impl/src/com/intellij/ui/popup/WizardPopup.java b/platform-impl/src/com/intellij/ui/popup/WizardPopup.java index 46e92b813a..851655d20f 100644 --- a/platform-impl/src/com/intellij/ui/popup/WizardPopup.java +++ b/platform-impl/src/com/intellij/ui/popup/WizardPopup.java @@ -280,16 +280,19 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene } public final void dispatch(KeyEvent event) { - if (event.getID() != KeyEvent.KEY_PRESSED) { + if (event.getID() != KeyEvent.KEY_PRESSED && event.getID() != KeyEvent.KEY_RELEASED) { return; } - final KeyStroke stroke = KeyStroke.getKeyStroke(event.getKeyChar(), event.getModifiers(), false); - if (getInputMap().get(stroke) != null) { - final Action action = getActionMap().get(getInputMap().get(stroke)); - if (action != null && action.isEnabled()) { - action.actionPerformed(new ActionEvent(getContent(), event.getID(), "", event.getWhen(), event.getModifiers())); - return; - } + + if (event.getID() == KeyEvent.KEY_PRESSED) { + final KeyStroke stroke = KeyStroke.getKeyStroke(event.getKeyChar(), event.getModifiers(), false); + if (proceedKeyEvent(event, stroke)) return; + } + + if (event.getID() == KeyEvent.KEY_RELEASED) { + final KeyStroke stroke = KeyStroke.getKeyStroke(event.getKeyCode(), event.getModifiers(), true); + proceedKeyEvent(event, stroke); + return; } myMnemonicsSearch.process(event); @@ -299,6 +302,17 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene process(event); } + private boolean proceedKeyEvent(KeyEvent event, KeyStroke stroke) { + if (getInputMap().get(stroke) != null) { + final Action action = getActionMap().get(getInputMap().get(stroke)); + if (action != null && action.isEnabled()) { + action.actionPerformed(new ActionEvent(getContent(), event.getID(), "", event.getWhen(), event.getModifiers())); + return true; + } + } + return false; + } + protected void process(KeyEvent aEvent) { } diff --git a/platform-resources/src/idea/DefaultKeymap.xml b/platform-resources/src/idea/DefaultKeymap.xml index 4fba272a50..e4f782b08b 100644 --- a/platform-resources/src/idea/DefaultKeymap.xml +++ b/platform-resources/src/idea/DefaultKeymap.xml @@ -839,9 +839,12 @@ - + + + + diff --git a/platform-resources/src/idea/LangActions.xml b/platform-resources/src/idea/LangActions.xml index 1f4bbd1ed9..f7603923b8 100644 --- a/platform-resources/src/idea/LangActions.xml +++ b/platform-resources/src/idea/LangActions.xml @@ -9,7 +9,8 @@ - + + @@ -294,7 +295,8 @@ - + + -- 2.11.4.GIT