diff --git a/platform/lang-api/src/com/intellij/execution/util/ListTableWithButtons.java b/platform/lang-api/src/com/intellij/execution/util/ListTableWithButtons.java index 78f833591ebc..22cbf612d5fd 100644 --- a/platform/lang-api/src/com/intellij/execution/util/ListTableWithButtons.java +++ b/platform/lang-api/src/com/intellij/execution/util/ListTableWithButtons.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; +import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Collections; @@ -40,6 +41,7 @@ public abstract class ListTableWithButtons extends Observable { private final List myElements = ContainerUtil.newArrayList(); private final JPanel myPanel; private final TableView myTableView; + private final CommonActionsPanel myActionsPanel; private boolean myIsEnabled = true; protected ListTableWithButtons() { @@ -55,6 +57,7 @@ public abstract class ListTableWithButtons extends Observable { final int column = myTableView.getEditingColumn(); final int row = myTableView.getEditingRow(); if (e.getModifiers() == 0 && (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_TAB)) { + e.consume(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -69,6 +72,7 @@ public abstract class ListTableWithButtons extends Observable { nextRow = 0; } } + myTableView.scrollRectToVisible(myTableView.getCellRect(nextRow, nextColumn, true)); myTableView.editCellAt(nextRow, nextColumn); } }); @@ -79,19 +83,24 @@ public abstract class ListTableWithButtons extends Observable { } }; myTableView.setRowHeight(new JTextField().getPreferredSize().height); + myTableView.setIntercellSpacing(new Dimension(0, 0)); + myTableView.setStriped(true); + myTableView.getTableViewModel().setSortable(false); - myPanel = ToolbarDecorator.createDecorator(myTableView) + ToolbarDecorator decorator = ToolbarDecorator.createDecorator(myTableView); + myPanel = decorator .setAddAction(new AnActionButtonRunnable() { @Override public void run(AnActionButton button) { - if (!myElements.isEmpty() && isEmpty(myElements.get(myElements.size() - 1))) return; myTableView.stopEditing(); setModified(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - myElements.add(createElement()); - myTableView.getTableViewModel().setItems(myElements); + if (myElements.isEmpty() || !isEmpty(myElements.get(myElements.size() - 1))) { + myElements.add(createElement()); + myTableView.getTableViewModel().setItems(myElements); + } myTableView.scrollRectToVisible(myTableView.getCellRect(myElements.size() - 1, 0, true)); myTableView.getComponent().editCellAt(myElements.size() - 1, 0); } @@ -105,6 +114,7 @@ public abstract class ListTableWithButtons extends Observable { T selected = getSelection(); if (selected != null) { int selectedIndex = myElements.indexOf(selected); + myTableView.scrollRectToVisible(myTableView.getCellRect(selectedIndex, 0, true)); myElements.remove(selected); myTableView.getTableViewModel().setItems(myElements); @@ -133,6 +143,7 @@ public abstract class ListTableWithButtons extends Observable { } }); + myActionsPanel = decorator.getActionsPanel(); myTableView.getComponent().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } @@ -157,6 +168,10 @@ public abstract class ListTableWithButtons extends Observable { return myPanel; } + public CommonActionsPanel getActionsPanel() { + return myActionsPanel; + } + public void setEnabled() { myTableView.getComponent().setEnabled(true); myIsEnabled = true; diff --git a/platform/util/src/com/intellij/util/ui/ListTableModel.java b/platform/util/src/com/intellij/util/ui/ListTableModel.java index 8e01d89374cc..bdd04ec399ac 100644 --- a/platform/util/src/com/intellij/util/ui/ListTableModel.java +++ b/platform/util/src/com/intellij/util/ui/ListTableModel.java @@ -116,6 +116,7 @@ public class ListTableModel extends TableViewModel implements Editab if (rowIndex < myItems.size()) { myColumnInfos[columnIndex].setValue(getItem(rowIndex), aValue); } + fireTableCellUpdated(rowIndex, columnIndex); } /**