[service-view] support actions on multi selection from one contributor

GitOrigin-RevId: 68223c920311ed9b17a192a2fa1e5a9e8f78cb91
This commit is contained in:
Konstantin Aleev
2019-05-13 18:05:48 +03:00
committed by intellij-monorepo-bot
parent c913553267
commit 00905ee6a9
2 changed files with 37 additions and 8 deletions
@@ -43,7 +43,17 @@ import static com.intellij.openapi.actionSystem.ActionPlaces.RUN_DASHBOARD_POPUP
public class RunConfigurationsServiceViewContributor
implements ServiceViewGroupingContributor<RunConfigurationsServiceViewContributor.RunConfigurationContributor, RunDashboardGroup> {
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
@@ -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<ServiceViewItem> 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<ServiceViewItem> 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