From 00905ee6a9ad66d9e8bcbd2aeda0622a62059ae3 Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Mon, 13 May 2019 15:53:15 +0300 Subject: [PATCH] [service-view] support actions on multi selection from one contributor GitOrigin-RevId: 68223c920311ed9b17a192a2fa1e5a9e8f78cb91 --- ...nConfigurationsServiceViewContributor.java | 18 +++++++++---- .../services/ServiceViewActionProvider.java | 27 ++++++++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/dashboard/RunConfigurationsServiceViewContributor.java b/platform/lang-impl/src/com/intellij/execution/dashboard/RunConfigurationsServiceViewContributor.java index 1a3ecdfae830..7750060128cd 100644 --- a/platform/lang-impl/src/com/intellij/execution/dashboard/RunConfigurationsServiceViewContributor.java +++ b/platform/lang-impl/src/com/intellij/execution/dashboard/RunConfigurationsServiceViewContributor.java @@ -43,7 +43,17 @@ import static com.intellij.openapi.actionSystem.ActionPlaces.RUN_DASHBOARD_POPUP public class RunConfigurationsServiceViewContributor implements ServiceViewGroupingContributor { private static final ServiceViewDescriptor CONTRIBUTOR_DESCRIPTOR = - new SimpleServiceViewDescriptor("Run Configurations", AllIcons.RunConfigurations.Application); + new SimpleServiceViewDescriptor("Run Configurations", AllIcons.RunConfigurations.Application) { + @Override + public ActionGroup getToolbarActions() { + return RunConfigurationsServiceViewContributor.getToolbarActions(null); + } + + @Override + public ActionGroup getPopupActions() { + return RunConfigurationsServiceViewContributor.getPopupActions(); + } + }; private static final RunDashboardGroupingRule TYPE_GROUPING_RULE = new ConfigurationTypeDashboardGroupingRule(); @NotNull @@ -145,7 +155,7 @@ public class RunConfigurationsServiceViewContributor private final RunConfigurationNode node; - private RunConfigurationServiceViewDescriptor(RunConfigurationNode node) { + RunConfigurationServiceViewDescriptor(RunConfigurationNode node) { this.node = node; } @@ -295,9 +305,7 @@ public class RunConfigurationsServiceViewContributor @Override public ActionGroup getToolbarActions() { - DefaultActionGroup actionGroup = new DefaultActionGroup(); - actionGroup.add(ActionManager.getInstance().getAction(RUN_DASHBOARD_CONTENT_TOOLBAR)); - return actionGroup; + return RunConfigurationsServiceViewContributor.getToolbarActions(null); } @Override diff --git a/platform/lang-impl/src/com/intellij/execution/services/ServiceViewActionProvider.java b/platform/lang-impl/src/com/intellij/execution/services/ServiceViewActionProvider.java index 4b368aca718f..1151fbb8d4aa 100644 --- a/platform/lang-impl/src/com/intellij/execution/services/ServiceViewActionProvider.java +++ b/platform/lang-impl/src/com/intellij/execution/services/ServiceViewActionProvider.java @@ -9,7 +9,6 @@ import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import com.intellij.ui.PopupHandler; -import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.tree.TreeModelAdapter; import org.jetbrains.annotations.NonNls; @@ -125,14 +124,36 @@ class ServiceViewActionProvider { if (contextComponent == null) return AnAction.EMPTY_ARRAY; List selectedItems = ((ServiceView)contextComponent).getSelectedItems(); - ServiceViewItem selectedItem = ContainerUtil.getOnlyItem(selectedItems); - ServiceViewDescriptor descriptor = selectedItem == null ? null : selectedItem.getViewDescriptor(); + if (selectedItems.isEmpty()) return AnAction.EMPTY_ARRAY; + + ServiceViewDescriptor descriptor = null; + if (selectedItems.size() == 1) { + descriptor = selectedItems.get(0).getViewDescriptor(); + } + else { + ServiceViewContributor contributor = getTheOnlyRootContributor(selectedItems); + descriptor = contributor == null ? null : contributor.getViewDescriptor(); + } if (descriptor == null) return AnAction.EMPTY_ARRAY; ActionGroup group = toolbar ? descriptor.getToolbarActions() : descriptor.getPopupActions(); return group == null ? AnAction.EMPTY_ARRAY : group.getChildren(e); } + @Nullable + private static ServiceViewContributor getTheOnlyRootContributor(@NotNull List items) { + ServiceViewContributor contributor = null; + for (ServiceViewItem item : items) { + if (contributor == null) { + contributor = item.getRootContributor(); + } + else if (!contributor.equals(item.getRootContributor())) { + return null; + } + } + return contributor; + } + public static class ItemToolbarActionGroup extends ActionGroup { private final static AnAction[] FAKE_GROUP = new AnAction[]{new DumbAwareAction(null, null, EmptyIcon.ICON_16) { @Override