diff --git a/platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java b/platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java index 64b05fce2ec6..eee5e0004175 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java @@ -62,6 +62,7 @@ public abstract class TestConsoleProperties extends StoringPropertyContainer imp public static final BooleanProperty SHOW_STATISTICS = new BooleanProperty("showStatistics", false); public static final BooleanProperty SHOW_INLINE_STATISTICS = new BooleanProperty("showInlineStatistics", true); public static final BooleanProperty INCLUDE_NON_STARTED_IN_RERUN_FAILED = new BooleanProperty("includeNonStarted", true); + public static final BooleanProperty SPLIT_VERTICALLY = new BooleanProperty("splitVertically", false); private final Project myProject; private final Executor myExecutor; diff --git a/platform/testRunner/src/com/intellij/execution/testframework/ui/TestResultsPanel.java b/platform/testRunner/src/com/intellij/execution/testframework/ui/TestResultsPanel.java index 3fb86c235ba2..d1cdb7d65f48 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/ui/TestResultsPanel.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/ui/TestResultsPanel.java @@ -20,10 +20,10 @@ import com.intellij.execution.testframework.TestConsoleProperties; import com.intellij.execution.testframework.TestFrameworkPropertyListener; import com.intellij.execution.testframework.TestTreeView; import com.intellij.execution.testframework.ToolbarPanel; +import com.intellij.icons.AllIcons; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.editor.EditorSettings; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.util.Disposer; @@ -32,7 +32,7 @@ import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.OnePixelSplitter; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SideBorder; -import com.intellij.util.ui.AwtVisitor; +import com.intellij.util.config.ToggleBooleanProperty; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -60,6 +60,7 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat protected final AnAction[] myConsoleActions; protected final TestConsoleProperties myProperties; protected TestStatusLine myStatusLine; + private Splitter mySplitter; protected TestResultsPanel(@NotNull JComponent console, AnAction[] consoleActions, TestConsoleProperties properties, ExecutionEnvironment environment, @@ -82,24 +83,26 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat JComponent testTreeView = createTestTreeView(); myToolbarPanel = createToolbarPanel(); Disposer.register(this, myToolbarPanel); - final Splitter splitter = createSplitter(mySplitterProportionProperty, mySplitterDefaultProportion); + mySplitter = createSplitter(mySplitterProportionProperty, + mySplitterDefaultProportion, + TestConsoleProperties.SPLIT_VERTICALLY.value(myProperties)); Disposer.register(this, new Disposable(){ @Override public void dispose() { - remove(splitter); - splitter.dispose(); + remove(mySplitter); + mySplitter.dispose(); } }); - add(splitter, BorderLayout.CENTER); + add(mySplitter, BorderLayout.CENTER); final JPanel leftPanel = new JPanel(new BorderLayout()); leftPanel.add(myLeftPane, BorderLayout.CENTER); leftPanel.add(myToolbarPanel, BorderLayout.NORTH); - splitter.setFirstComponent(leftPanel); + mySplitter.setFirstComponent(leftPanel); myStatusLine.setMinimumSize(new Dimension(0, myStatusLine.getMinimumSize().height)); myStatusLine.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); final JPanel rightPanel = new JPanel(new BorderLayout()); rightPanel.add(SameHeightPanel.wrap(myStatusLine, myToolbarPanel), BorderLayout.NORTH); - myStatisticsSplitter = createSplitter(myStatisticsSplitterProportionProperty, 0.5f); + myStatisticsSplitter = createSplitter(myStatisticsSplitterProportionProperty, 0.5f, false); myStatisticsSplitter.setFirstComponent(createOutputTab(myConsole, myConsoleActions)); if (Registry.is("tests.view.old.statistics.panel")) { if (TestConsoleProperties.SHOW_STATISTICS.value(myProperties)) { @@ -118,7 +121,7 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat }); } rightPanel.add(myStatisticsSplitter, BorderLayout.CENTER); - splitter.setSecondComponent(rightPanel); + mySplitter.setSecondComponent(rightPanel); testTreeView.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 0)); setLeftComponent(testTreeView); } @@ -134,7 +137,7 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat } protected TestStatusLine createStatusLine() { - return new TestStatusLine(); + return new TestStatusLine(myProperties); } protected abstract JComponent createTestTreeView(); @@ -154,7 +157,8 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat return null; } - private static JComponent createOutputTab(JComponent console, AnAction[] consoleActions) { + private JComponent createOutputTab(JComponent console, + AnAction[] consoleActions) { JPanel outputTab = new JPanel(new BorderLayout()); console.setFocusable(true); final Color editorBackground = EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground(); @@ -162,6 +166,21 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat new SideBorder(editorBackground, SideBorder.LEFT))); outputTab.add(console, BorderLayout.CENTER); final DefaultActionGroup actionGroup = new DefaultActionGroup(consoleActions); + final ToggleBooleanProperty property = new ToggleBooleanProperty("Layout Vertically", + "Layout console under the tests tree", + null, myProperties, + TestConsoleProperties.SPLIT_VERTICALLY) { + @Override + public void setSelected(AnActionEvent e, boolean state) { + super.setSelected(e, state); + myStatusLine.setPreferredSize(myProperties); + mySplitter.setOrientation(state); + } + }; + final DefaultActionGroup settingsGroup = new DefaultActionGroup(property); + settingsGroup.setPopup(true); + settingsGroup.getTemplatePresentation().setIcon(AllIcons.General.SecondaryGroup); + actionGroup.add(settingsGroup); final ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, actionGroup, false); outputTab.add(toolbar.getComponent(), BorderLayout.EAST); return outputTab; @@ -171,8 +190,8 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat public void dispose() { } - protected static Splitter createSplitter(final String proportionProperty, final float defaultProportion) { - final Splitter splitter = new OnePixelSplitter(false); + protected static Splitter createSplitter(final String proportionProperty, final float defaultProportion, boolean splitVertically) { + final Splitter splitter = new OnePixelSplitter(splitVertically); splitter.setHonorComponentsMinimumSize(true); final PropertiesComponent propertiesComponent = PropertiesComponent.getInstance(); float proportion; diff --git a/platform/testRunner/src/com/intellij/execution/testframework/ui/TestStatusLine.java b/platform/testRunner/src/com/intellij/execution/testframework/ui/TestStatusLine.java index f524cb19343f..c65f0a36b7b9 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/ui/TestStatusLine.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/ui/TestStatusLine.java @@ -16,6 +16,7 @@ package com.intellij.execution.testframework.ui; import com.intellij.execution.ExecutionBundle; +import com.intellij.execution.testframework.TestConsoleProperties; import com.intellij.openapi.progress.util.ColorProgressBar; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.JBProgressBar; @@ -36,18 +37,16 @@ public class TestStatusLine extends JPanel { protected final JProgressBar myProgressBar = new JBProgressBar(); protected final SimpleColoredComponent myState = new SimpleColoredComponent(); + private final JPanel myProgressPanel; - public TestStatusLine() { + public TestStatusLine(TestConsoleProperties properties) { super(new BorderLayout()); - JPanel progressPanel = new JPanel(new GridBagLayout()); - add(progressPanel, BorderLayout.WEST); + myProgressPanel = new JPanel(new GridBagLayout()); + add(myProgressPanel, BorderLayout.WEST); myProgressBar.setMaximum(100); - final Dimension size = new JBDimension(450, -1); - progressPanel.setMaximumSize(size); - progressPanel.setMinimumSize(size); - progressPanel.setPreferredSize(size); - progressPanel.add(myProgressBar, new GridBagConstraints(0, 0, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, - new Insets(2, 8, 0, 8), 0, 0)); + setPreferredSize(properties); + myProgressPanel.add(myProgressBar, new GridBagConstraints(0, 0, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(2, 8, 0, 8), 0, 0)); setStatusColor(ColorProgressBar.GREEN); add(myState, BorderLayout.CENTER); myState.append(ExecutionBundle.message("junit.runing.info.starting.label")); @@ -123,6 +122,13 @@ public class TestStatusLine extends JPanel { myProgressBar.setValue(fraction); } + public void setPreferredSize(TestConsoleProperties properties) { + final Dimension size = new JBDimension(TestConsoleProperties.SPLIT_VERTICALLY.value(properties) ? 150 : 450 , -1); + myProgressPanel.setMaximumSize(size); + myProgressPanel.setMinimumSize(size); + myProgressPanel.setPreferredSize(size); + } + public void setText(String progressStatus_text) { myState.clear(); myState.append(progressStatus_text); diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/ConsolePanel.java b/plugins/junit/src/com/intellij/execution/junit2/ui/ConsolePanel.java index f4acd6cf9c3e..c47b0b2e783a 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/ui/ConsolePanel.java +++ b/plugins/junit/src/com/intellij/execution/junit2/ui/ConsolePanel.java @@ -91,7 +91,7 @@ public class ConsolePanel extends TestResultsPanel { @Override protected TestStatusLine createStatusLine() { - myStatusLine = new JUnitStatusLine(); + myStatusLine = new JUnitStatusLine(myProperties); return myStatusLine; } diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/JUnitStatusLine.java b/plugins/junit/src/com/intellij/execution/junit2/ui/JUnitStatusLine.java index 63e84c29ef5b..c348bafc89de 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/ui/JUnitStatusLine.java +++ b/plugins/junit/src/com/intellij/execution/junit2/ui/JUnitStatusLine.java @@ -28,6 +28,7 @@ import com.intellij.execution.junit2.ui.model.StateEvent; import com.intellij.execution.process.ProcessAdapter; import com.intellij.execution.process.ProcessEvent; import com.intellij.execution.process.ProcessHandler; +import com.intellij.execution.testframework.TestConsoleProperties; import com.intellij.execution.testframework.ui.TestStatusLine; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.util.ColorProgressBar; @@ -37,6 +38,10 @@ class JUnitStatusLine extends TestStatusLine { private final StateInfo myStateInfo = new StateInfo(); private boolean myTestsBuilt = false; + JUnitStatusLine(TestConsoleProperties properties) { + super(properties); + } + public void setModel(final JUnitRunningModel model) { myTestsBuilt = true; myProgressBar.setForeground(ColorProgressBar.GREEN);