From dd6b2b0860bba3c0fac44092cf388c607b908df1 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Mon, 27 Apr 2015 13:22:40 +0300 Subject: [PATCH] IDEA-139609 Gradle: New Module Wizard: "Select Gradle Projec"t dialog: selection is not confirmed by double-clicking or pressing Enter --- .../view/ExternalProjectsView.java | 9 +++++++++ .../view/ExternalProjectsViewAdapter.java | 11 +++++++++++ .../view/ExternalProjectsViewImpl.java | 19 +++++++++++++++++++ .../view/ExternalSystemNode.java | 4 +--- .../wizard/SelectExternalProjectDialog.java | 10 ++++++++++ .../SelectExternalSystemNodeDialog.java | 15 ++++++++++++++- 6 files changed, 64 insertions(+), 4 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsView.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsView.java index 56e1c622d2d0..b10f41f615d6 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsView.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsView.java @@ -24,6 +24,7 @@ import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.awt.event.InputEvent; import java.util.List; /** @@ -51,4 +52,12 @@ public interface ExternalProjectsView { boolean getGroupTasks(); ProjectSystemId getSystemId(); + + void handleDoubleClickOrEnter(@NotNull ExternalSystemNode node, @Nullable String actionId, InputEvent inputEvent); + + void addListener(@NotNull ExternalProjectsView.Listener listener); + + interface Listener { + void onDoubleClickOrEnter(@NotNull ExternalSystemNode node, InputEvent inputEvent); + } } diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewAdapter.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewAdapter.java index 207ec6bbf6e6..9d8d0c409dde 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewAdapter.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewAdapter.java @@ -24,6 +24,7 @@ import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.awt.event.InputEvent; import java.util.List; /** @@ -90,4 +91,14 @@ public class ExternalProjectsViewAdapter implements ExternalProjectsView { public ProjectSystemId getSystemId() { return delegate.getSystemId(); } + + @Override + public void handleDoubleClickOrEnter(@NotNull ExternalSystemNode node, @Nullable String actionId, InputEvent inputEvent) { + delegate.handleDoubleClickOrEnter(node, actionId, inputEvent); + } + + @Override + public void addListener(@NotNull Listener listener) { + delegate.addListener(listener); + } } diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewImpl.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewImpl.java index b1ad9adf29d1..716116a0229a 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewImpl.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewImpl.java @@ -24,6 +24,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.ExternalSystemUiAware; +import com.intellij.openapi.externalSystem.action.ExternalSystemActionUtil; import com.intellij.openapi.externalSystem.action.ExternalSystemViewGearAction; import com.intellij.openapi.externalSystem.model.*; import com.intellij.openapi.externalSystem.model.execution.ExternalTaskExecutionInfo; @@ -69,6 +70,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.tree.TreeSelectionModel; import java.awt.*; +import java.awt.event.InputEvent; import java.util.*; import java.util.List; @@ -89,6 +91,8 @@ public class ExternalProjectsViewImpl extends SimpleToolWindowPanel implements D private final ProjectSystemId myExternalSystemId; @NotNull private final ExternalSystemUiAware myUiAware; + @NotNull + private final Set listeners = ContainerUtil.newHashSet(); @Nullable private ExternalProjectsStructure myStructure; @@ -277,6 +281,21 @@ public class ExternalProjectsViewImpl extends SimpleToolWindowPanel implements D scheduleStructureUpdate(); } + @Override + public void handleDoubleClickOrEnter(@NotNull ExternalSystemNode node, @Nullable String actionId, InputEvent inputEvent) { + if (actionId != null) { + ExternalSystemActionUtil.executeAction(actionId, inputEvent); + } + for (Listener listener : listeners) { + listener.onDoubleClickOrEnter(node, inputEvent); + } + } + + @Override + public void addListener(@NotNull Listener listener) { + listeners.add(listener); + } + private ActionGroup createAdditionalGearActionsGroup() { ActionManager actionManager = ActionManager.getInstance(); DefaultActionGroup group = new DefaultActionGroup(); diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemNode.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemNode.java index 33da6647dda0..43b9b4c67d4d 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemNode.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemNode.java @@ -373,9 +373,7 @@ public abstract class ExternalSystemNode extends SimpleNode implements Compar @Override public void handleDoubleClickOrEnter(SimpleTree tree, InputEvent inputEvent) { String actionId = getActionId(); - if (actionId != null) { - ExternalSystemActionUtil.executeAction(actionId, inputEvent); - } + getExternalProjectsView().handleDoubleClickOrEnter(this, actionId, inputEvent); } @Override diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/SelectExternalProjectDialog.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/SelectExternalProjectDialog.java index 53349141be80..3d04e11ff9db 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/SelectExternalProjectDialog.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/SelectExternalProjectDialog.java @@ -16,15 +16,18 @@ package org.jetbrains.plugins.gradle.service.project.wizard; import com.intellij.openapi.externalSystem.model.project.ProjectData; +import com.intellij.openapi.externalSystem.view.ExternalSystemNode; import com.intellij.openapi.externalSystem.view.ProjectNode; import com.intellij.openapi.project.Project; import com.intellij.ui.treeStructure.NullNode; import com.intellij.ui.treeStructure.SimpleNode; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.util.GradleConstants; import javax.swing.*; import java.awt.event.ActionEvent; +import java.awt.event.InputEvent; /** * @author Vladislav.Soroka @@ -69,6 +72,13 @@ public class SelectExternalProjectDialog extends SelectExternalSystemNodeDialog super.doOKAction(); } + @Override + protected void handleDoubleClickOrEnter(@NotNull ExternalSystemNode node, @Nullable String actionId, InputEvent inputEvent) { + if(node instanceof ProjectNode ) { + doOKAction(); + } + } + public ProjectData getResult() { return myResult; } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/SelectExternalSystemNodeDialog.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/SelectExternalSystemNodeDialog.java index e54483a1f7d9..5cb6a0558ec5 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/SelectExternalSystemNodeDialog.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/SelectExternalSystemNodeDialog.java @@ -20,7 +20,10 @@ import com.intellij.openapi.externalSystem.model.ExternalProjectInfo; import com.intellij.openapi.externalSystem.model.project.ProjectData; import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManager; import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManager; -import com.intellij.openapi.externalSystem.view.*; +import com.intellij.openapi.externalSystem.view.ExternalProjectsStructure; +import com.intellij.openapi.externalSystem.view.ExternalProjectsView; +import com.intellij.openapi.externalSystem.view.ExternalProjectsViewAdapter; +import com.intellij.openapi.externalSystem.view.ExternalSystemNode; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.ui.ScrollPaneFactory; @@ -30,11 +33,13 @@ import com.intellij.ui.treeStructure.SimpleTree; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.JBUI; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.util.GradleConstants; import javax.swing.*; import javax.swing.tree.TreeSelectionModel; +import java.awt.event.InputEvent; import java.util.Collection; import java.util.List; @@ -77,6 +82,11 @@ public class SelectExternalSystemNodeDialog extends DialogWrapper { public void updateUpTo(ExternalSystemNode node) { treeStructure.updateUpTo(node); } + + @Override + public void handleDoubleClickOrEnter(@NotNull ExternalSystemNode node, @Nullable String actionId, InputEvent inputEvent) { + SelectExternalSystemNodeDialog.this.handleDoubleClickOrEnter(node, actionId, inputEvent); + } }); final Collection projectsData = @@ -107,6 +117,9 @@ public class SelectExternalSystemNodeDialog extends DialogWrapper { init(); } + protected void handleDoubleClickOrEnter(@NotNull ExternalSystemNode node, @Nullable String actionId, InputEvent inputEvent) { + } + protected SimpleNode getSelectedNode() { return myTree.getNodeFor(myTree.getSelectionPath()); }