From 5b2519635a36baaa0290fac6f0205a39249abfaf Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Wed, 14 Jan 2015 14:49:44 +0100 Subject: [PATCH] Platform: ListTable/ListTableModel fixes: 1) first cell was always selected when TAB was pressed during editing. Fix: event.consume() 2) editing, adding and removing elements should scroll to the effected element 3) pressing 'add' when last element is empty should focus it and edit, otherwise isn't not clear, why 'add' doesn't work. 4) a bit more compact view (interlaced spacing removed, stripes added) 5) ListTableModel should send notifications, when value in a cell has been changed --- .../execution/util/ListTableWithButtons.java | 23 +++++++++++++++---- .../com/intellij/util/ui/ListTableModel.java | 1 + 2 files changed, 20 insertions(+), 4 deletions(-) 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); } /**