1 package org
.jetbrains
.plugins
.ruby
.testing
.testunit
.runner
.ui
.statistics
;
3 import com
.intellij
.execution
.testframework
.TestsUIUtil
;
4 import com
.intellij
.ui
.table
.TableView
;
5 import org
.jetbrains
.annotations
.Nullable
;
6 import org
.jetbrains
.plugins
.ruby
.support
.UIUtil
;
7 import org
.jetbrains
.plugins
.ruby
.testing
.testunit
.runner
.RTestUnitEventsListener
;
8 import org
.jetbrains
.plugins
.ruby
.testing
.testunit
.runner
.RTestUnitTestProxy
;
9 import org
.jetbrains
.plugins
.ruby
.testing
.testunit
.runner
.ui
.RTestUnitResultsForm
;
10 import org
.jetbrains
.plugins
.ruby
.testing
.testunit
.runner
.ui
.RTestUnitTestProxySelectionChangedListener
;
13 import java
.awt
.event
.InputEvent
;
14 import java
.awt
.event
.KeyEvent
;
15 import java
.awt
.event
.MouseAdapter
;
16 import java
.awt
.event
.MouseEvent
;
17 import java
.util
.ArrayList
;
18 import java
.util
.Collection
;
19 import java
.util
.List
;
22 * @author Roman Chernyatchik
24 public class RTestUnitStatisticsPanel
extends JPanel
{
25 public static final Icon STATISTICS_TAB_ICON
= TestsUIUtil
.loadIcon("testStatistics");
27 private TableView
<RTestUnitTestProxy
> myStatisticsTableView
;
28 private JPanel myContentPane
;
30 private RTestUnitStatisticsTableModel myTableModel
;
31 private final List
<RTestUnitTestProxySelectionChangedListener
> myChangeSelectionListeners
= new ArrayList
<RTestUnitTestProxySelectionChangedListener
>();
33 public RTestUnitStatisticsPanel() {
34 myTableModel
= new RTestUnitStatisticsTableModel();
35 myStatisticsTableView
.setModel(myTableModel
);
36 myStatisticsTableView
.addMouseListener(new MouseAdapter(){
38 public void mouseClicked(final MouseEvent e
) {
39 if (e
.getClickCount() == 2) {
40 final Collection
<RTestUnitTestProxy
> proxies
= myStatisticsTableView
.getSelection();
41 if (proxies
.isEmpty()) {
45 fireOnSelectionChanged(proxies
.iterator().next());
50 // Fire selection changed and move focus on SHIFT+ENTER
51 final KeyStroke shiftEnterKey
= KeyStroke
.getKeyStroke(KeyEvent
.VK_ENTER
, InputEvent
.SHIFT_MASK
);
52 UIUtil
.registerAsAction(shiftEnterKey
, "change-selection-on-test-proxy",
53 createChangeSelectionAction(),
54 myStatisticsTableView
);
56 // Expand selected or go to parent on ENTER
57 final KeyStroke enterKey
= KeyStroke
.getKeyStroke(KeyEvent
.VK_ENTER
, 0);
58 UIUtil
.registerAsAction(enterKey
, "go-to-selected-suite-or-parent",
59 createGotoSuiteOrParentAction(),
60 myStatisticsTableView
);
63 public JPanel
getContentPane() {
68 * Show and selects suite in table by event
71 public RTestUnitResultsForm
.FormSelectionListener
createSelectionListener() {
72 return myTableModel
.createSelectionListener(myStatisticsTableView
);
75 public RTestUnitEventsListener
createTestEventsListener() {
76 return myTableModel
.createTestEventsListener();
79 public void addChangeSelectionListener(final RTestUnitTestProxySelectionChangedListener listener
) {
80 myChangeSelectionListeners
.add(listener
);
83 protected Runnable
createChangeSelectionAction() {
85 return new Runnable() {
87 final Collection
<RTestUnitTestProxy
> proxies
= myStatisticsTableView
.getSelection();
88 if (proxies
.isEmpty()) {
91 final RTestUnitTestProxy proxy
= proxies
.iterator().next();
92 myStatisticsTableView
.clearSelection();
93 fireOnSelectionChanged(proxy
);
98 protected Runnable
createGotoSuiteOrParentAction() {
99 final RTestUnitResultsForm
.FormSelectionListener selectionListener
= createSelectionListener();
101 // Expand selected or go to parent
102 return new Runnable() {
104 final RTestUnitTestProxy selectedProxy
= getSelectedItem();
105 if (selectedProxy
== null) {
109 final int i
= myStatisticsTableView
.getSelectedRow();
110 assert i
>= 0; //because something is selected
112 // If first line is selected we should go to parent suite
113 if (ColumnTest
.TestsCellRenderer
.isFirstLine(i
)) {
114 final RTestUnitTestProxy parentSuite
= selectedProxy
.getParent();
115 if (parentSuite
!= null) {
116 showInTableAndSelectFirstRow(parentSuite
, selectionListener
);
119 // if selected element is suite - we should expand it
120 if (selectedProxy
.isSuite()) {
121 showInTableAndSelectFirstRow(selectedProxy
, selectionListener
);
129 * Selects row in table
130 * @param rowIndex Row's index
132 protected void selectRow(final int rowIndex
) {
133 UIUtil
.addToInvokeLater(new Runnable() {
136 myStatisticsTableView
.setRowSelectionInterval(rowIndex
, rowIndex
);
142 protected RTestUnitTestProxy
getSelectedItem() {
143 return myStatisticsTableView
.getSelectedObject();
146 private void fireOnSelectionChanged(final RTestUnitTestProxy selectedTestProxy
) {
147 for (RTestUnitTestProxySelectionChangedListener listener
: myChangeSelectionListeners
) {
148 listener
.onChangeSelection(selectedTestProxy
, true);
152 private void createUIComponents() {
153 myStatisticsTableView
= new TableView
<RTestUnitTestProxy
>();
156 private void showInTableAndSelectFirstRow(final RTestUnitTestProxy suite
,
157 final RTestUnitResultsForm
.FormSelectionListener selectionListener
) {
158 selectionListener
.onSelectedRequest(suite
);
163 * On event change selection and probably requests focus. Is used when we want
164 * navigate from other component to this
167 public RTestUnitTestProxySelectionChangedListener
createOnChangeSelectionListener() {
168 final RTestUnitResultsForm
.FormSelectionListener selectionListener
= createSelectionListener();
170 return new RTestUnitTestProxySelectionChangedListener() {
171 public void onChangeSelection(@Nullable final RTestUnitTestProxy selectedTestProxy
, final boolean requestFocus
) {
173 selectionListener
.onSelectedRequest(selectedTestProxy
);
174 UIUtil
.addToInvokeLater(new Runnable() {
176 myStatisticsTableView
.requestFocusInWindow();