mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[debugger] new UI: move run toolbar into test toolbar (IJ-CR-11703)
GitOrigin-RevId: 5038cecb69e0b876de17d0756e1a15b315510a63
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a0715140d2
commit
437527c509
@@ -12,6 +12,7 @@ import com.intellij.execution.ui.layout.PlaceInGrid;
|
||||
import com.intellij.execution.ui.layout.impl.RunnerLayoutUiImpl;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl;
|
||||
import com.intellij.openapi.actionSystem.impl.MoreActionGroup;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -23,9 +24,11 @@ import com.intellij.terminal.TerminalExecutionConsole;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
@@ -92,6 +95,10 @@ public final class RunContentBuilder extends RunTab {
|
||||
ActionGroup toolbar = createActionToolbar(contentDescriptor, consoleActionsToMerge);
|
||||
if (Registry.is("debugger.new.tool.window.layout")) {
|
||||
mySupplier = new RunTabSupplier(toolbar) {
|
||||
{
|
||||
setMoveToolbar(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull List<AnAction> getContentActions() {
|
||||
return Collections.singletonList(myUi.getOptions().getLayoutActions());
|
||||
@@ -100,8 +107,19 @@ public final class RunContentBuilder extends RunTab {
|
||||
if (myUi instanceof RunnerLayoutUiImpl) {
|
||||
((RunnerLayoutUiImpl)myUi).setLeftToolbarVisible(false);
|
||||
}
|
||||
myUi.getOptions().setTopLeftToolbar(toolbar, ActionPlaces.RUNNER_TOOLBAR);
|
||||
|
||||
boolean isToolbarVisibleAnywhere = false;
|
||||
for (Component component : UIUtil.uiTraverser(contentDescriptor.getComponent())) {
|
||||
if (component instanceof ActionToolbarImpl) {
|
||||
ActionGroup group = ((ActionToolbarImpl)component).getActionGroup();
|
||||
if (group instanceof RunTab.ToolbarActionGroup) {
|
||||
isToolbarVisibleAnywhere = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!isToolbarVisibleAnywhere) {
|
||||
myUi.getOptions().setTopLeftToolbar(toolbar, ActionPlaces.RUNNER_TOOLBAR);
|
||||
}
|
||||
} else {
|
||||
myUi.getOptions().setLeftToolbar(toolbar, ActionPlaces.RUNNER_TOOLBAR);
|
||||
}
|
||||
|
||||
@@ -17,20 +17,26 @@ import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.impl.ActionButton;
|
||||
import com.intellij.openapi.actionSystem.impl.MoreActionGroup;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.impl.content.SingleContentSupplier;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.GlobalSearchScopes;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.ContentManager;
|
||||
import com.intellij.ui.tabs.JBTabs;
|
||||
import com.intellij.ui.tabs.JBTabsEx;
|
||||
import com.intellij.ui.tabs.TabInfo;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -155,6 +161,7 @@ public abstract class RunTab implements DataProvider, Disposable {
|
||||
|
||||
@Nullable
|
||||
private final ActionGroup myActionGroup;
|
||||
private boolean myMoveToolbar = false;
|
||||
|
||||
public RunTabSupplier(@Nullable ActionGroup group) {
|
||||
myActionGroup = group;
|
||||
@@ -220,5 +227,76 @@ public abstract class RunTab implements DataProvider, Disposable {
|
||||
List<Content> gridContents = ((GridImpl)tab.getComponent()).getContents();
|
||||
return gridContents.size() > 0 && gridContents.get(0).isCloseable();
|
||||
}
|
||||
|
||||
public boolean isMoveToolbar() {
|
||||
return myMoveToolbar;
|
||||
}
|
||||
|
||||
public void setMoveToolbar(boolean moveToolbar) {
|
||||
myMoveToolbar = moveToolbar;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>A special action group that can hold Run actions.</p>
|
||||
* <p>
|
||||
* If {@link RunTabSupplier#isMoveToolbar()} returns <code>true</code>
|
||||
* then this group prepends {@link RunTabSupplier#getToolbarActions()}.
|
||||
* </p><p>
|
||||
* Also, merges last {@link MoreActionGroup} groups into one.
|
||||
* </p>
|
||||
*/
|
||||
public static final class ToolbarActionGroup extends DefaultActionGroup {
|
||||
|
||||
private final MoreActionGroup myMoreActionGroup = new MoreActionGroup();
|
||||
|
||||
public ToolbarActionGroup(ActionGroup group) {
|
||||
addAll(group);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnAction @NotNull [] getChildren(@Nullable AnActionEvent e) {
|
||||
AnAction[] children = super.getChildren(e);
|
||||
if (e != null) {
|
||||
ToolWindow window = e.getData(PlatformDataKeys.TOOL_WINDOW);
|
||||
SingleContentSupplier data = e.getData(SingleContentSupplier.KEY);
|
||||
if (data instanceof RunTabSupplier && window != null) {
|
||||
boolean isMoveToolbar = ((RunTabSupplier)data).isMoveToolbar();
|
||||
if (!isMoveToolbar) return children;
|
||||
ContentManager manager = window.getContentManager();
|
||||
if (manager.getContentCount() > 1) {
|
||||
ActionGroup actions = data.getToolbarActions();
|
||||
if (actions != null) return merge(actions.getChildren(e), children);
|
||||
}
|
||||
}
|
||||
}
|
||||
return children;
|
||||
}
|
||||
|
||||
private AnAction @NotNull [] merge(AnAction @NotNull [] head, AnAction @NotNull [] tail) {
|
||||
var result = new ArrayList<AnAction>(head.length + tail.length);
|
||||
result.addAll(Arrays.asList(head));
|
||||
myMoreActionGroup.removeAll();
|
||||
if (ArrayUtil.getLastElement(head) instanceof MoreActionGroup) {
|
||||
result.remove(result.size() - 1);
|
||||
}
|
||||
result.add(Separator.create());
|
||||
result.addAll(Arrays.asList(tail));
|
||||
if (ArrayUtil.getLastElement(tail) instanceof MoreActionGroup) {
|
||||
myMoreActionGroup.addAll((ActionGroup) ArrayUtil.getLastElement(tail));
|
||||
result.remove(result.size() - 1);
|
||||
}
|
||||
if (ArrayUtil.getLastElement(head) instanceof MoreActionGroup) {
|
||||
myMoreActionGroup.add(Separator.create());
|
||||
myMoreActionGroup.addAll((ActionGroup) ArrayUtil.getLastElement(head));
|
||||
}
|
||||
result.add(myMoreActionGroup);
|
||||
return result.toArray(EMPTY_ARRAY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDumbAware() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ public class ToolbarPanel extends JPanel implements OccurenceNavigator, Disposab
|
||||
public ToolbarPanel(final TestConsoleProperties properties,
|
||||
final JComponent parent) {
|
||||
super(new BorderLayout());
|
||||
final DefaultActionGroup actionGroup = new DefaultActionGroup();
|
||||
DefaultActionGroup actionGroup = new DefaultActionGroup();
|
||||
actionGroup.addAction(new DumbAwareToggleInvertedBooleanProperty(ExecutionBundle.message("junit.run.hide.passed.action.name"), ExecutionBundle.message("junit.run.hide.passed.action.description"),
|
||||
AllIcons.RunConfigurations.ShowPassed,
|
||||
properties, TestConsoleProperties.HIDE_PASSED_TESTS));
|
||||
@@ -141,6 +141,7 @@ public class ToolbarPanel extends JPanel implements OccurenceNavigator, Disposab
|
||||
|
||||
if (isNewLayout) {
|
||||
actionGroup.add(moreGroup);
|
||||
actionGroup = new RunTab.ToolbarActionGroup(actionGroup);
|
||||
}
|
||||
|
||||
ActionToolbar actionToolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.TESTTREE_VIEW_TOOLBAR, actionGroup, true);
|
||||
|
||||
Reference in New Issue
Block a user