From 0b4d653899a2593ddfd1669da18fe3ef8ef1a39f Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Mon, 6 Sep 2010 16:50:40 +0400 Subject: [PATCH] sortablecolumnmodel -> jtable row sorter --- .../logging/LogConfigurationPanel.form | 2 +- .../util/ui/tree/AbstractFileTreeTable.java | 4 + .../com/intellij/ui/dualView/DualView.java | 15 +- .../intellij/ui/dualView/TreeTableView.java | 12 +- .../src/com/intellij/ui/table/JBTable.java | 160 ++++++++++++++---- .../ui/table/TableHeaderRenderer.java | 23 ++- .../src/com/intellij/ui/table/TableView.java | 48 ------ .../treetable/ListTreeTableModel.java | 4 + .../ListTreeTableModelOnColumns.java | 37 ++-- .../treetable/TreeTableCellRenderer.java | 11 +- .../treetable/TreeTableModel.java | 3 + .../treetable/TreeTableModelAdapter.java | 1 + .../plugins/AvailablePluginsTableModel.java | 19 ++- .../plugins/InstalledPluginsTableModel.java | 20 +-- .../ide/plugins/PluginManagerColumnInfo.java | 25 +-- .../plugins/PluginManagerConfigurable.java | 103 ++++++----- .../ide/plugins/PluginManagerMain.java | 6 +- .../ide/plugins/PluginManagerUISettings.java | 13 +- .../com/intellij/ide/plugins/PluginTable.java | 34 +--- .../ide/plugins/PluginTableModel.java | 46 ++--- .../openapi/keymap/impl/ui/ActionsTree.java | 4 + .../com/intellij/ui/popup/AbstractPopup.java | 11 +- .../sm/runner/ui/statistics/BaseColumn.java | 20 --- .../ui/statistics/StatisticsTableModel.java | 33 +--- .../SMTRunnerStatisticsTableModelTest.java | 13 +- .../src/com/intellij/util/ui/ColumnInfo.java | 10 -- .../com/intellij/util/ui/ListTableModel.java | 100 ++++------- .../intellij/util/ui/SortableColumnModel.java | 18 +- .../committed/ChangesBrowserDialog.java | 2 - .../committed/CommittedChangesBrowser.java | 19 +-- .../committed/CommittedChangesTableModel.java | 25 +-- .../vcs/history/FileHistoryPanelImpl.java | 32 +--- .../impl/configuration/UIPropertyBinding.java | 13 -- .../execution/junit2/ui/StatisticsTable.java | 21 +-- .../junit2/ui/TestTableRenderer.java | 6 - 35 files changed, 391 insertions(+), 522 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.form b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.form index 82354b896f4a..3f470ac876c0 100644 --- a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.form +++ b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.form @@ -3,7 +3,7 @@ - + diff --git a/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java b/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java index f96744be970c..36336297be69 100644 --- a/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java +++ b/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java @@ -238,6 +238,10 @@ public abstract class AbstractFileTreeTable extends TreeTable { return new HashMap(myCurrentMapping); } + @Override + public void setTree(JTree tree) { + } + public int getColumnCount() { return 2; } diff --git a/platform/platform-api/src/com/intellij/ui/dualView/DualView.java b/platform/platform-api/src/com/intellij/ui/dualView/DualView.java index 3f8624c9f408..ed6da66918a9 100644 --- a/platform/platform-api/src/com/intellij/ui/dualView/DualView.java +++ b/platform/platform-api/src/com/intellij/ui/dualView/DualView.java @@ -399,19 +399,12 @@ public class DualView extends JPanel { } public void setRoot(final TreeNode node, final List selection) { - ListTableModel model = myFlatView.getListTableModel(); - final int column = model.getSortedColumnIndex(); - final int sortingType = model.getSortingType(); - final List currentlySelected = myFlatView.getSelectedObjects(); final List targetSelection = (currentlySelected != null && (! currentlySelected.isEmpty())) ? currentlySelected : selection; //final Object obj = myFlatView.getSelectedObject() != null ? myFlatView.getSelectedObject() : selection; myTreeView.getTreeViewModel().setRoot(node); - if (column != -1) { - model.sortByColumn(column, sortingType); - } if ((targetSelection != null) && (! targetSelection.isEmpty())) { final List items = myFlatView.getItems(); for (Object selElement : targetSelection) { @@ -447,19 +440,21 @@ public class DualView extends JPanel { int column) { Component result = myRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); Object treeNode = null; + + final int modelRow = table.convertRowIndexToModel(row); + if (myCurrentView == myTreeView) { - TreePath path = myTreeView.getTree().getPathForRow(row); + TreePath path = myTreeView.getTree().getPathForRow(modelRow); if (path != null) { treeNode = path.getLastPathComponent(); } } else if (myCurrentView == myFlatView) { - treeNode = myFlatView.getItems().get(row); + treeNode = myFlatView.getItems().get(modelRow); } myCellWrapper.wrap(result, table, value, isSelected, hasFocus, row, column, treeNode); return result; - } } } diff --git a/platform/platform-api/src/com/intellij/ui/dualView/TreeTableView.java b/platform/platform-api/src/com/intellij/ui/dualView/TreeTableView.java index b2dd914f312f..03abd83b3cb1 100644 --- a/platform/platform-api/src/com/intellij/ui/dualView/TreeTableView.java +++ b/platform/platform-api/src/com/intellij/ui/dualView/TreeTableView.java @@ -20,15 +20,14 @@ import com.intellij.openapi.util.Condition; import com.intellij.ui.HighlightableCellRenderer; import com.intellij.ui.table.ItemsProvider; import com.intellij.ui.table.SelectionProvider; -import com.intellij.ui.table.TableHeaderRenderer; -import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.ui.ColumnInfo; -import com.intellij.util.ui.SortableColumnModel; import com.intellij.ui.treeStructure.treetable.ListTreeTableModelOnColumns; import com.intellij.ui.treeStructure.treetable.TreeTable; import com.intellij.ui.treeStructure.treetable.TreeTableCellRenderer; import com.intellij.ui.treeStructure.treetable.TreeTableModel; +import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.ui.ColumnInfo; +import com.intellij.util.ui.SortableColumnModel; import javax.swing.*; import javax.swing.table.TableCellEditor; @@ -48,8 +47,6 @@ public class TreeTableView extends TreeTable implements ItemsProvider, Selection super(treeTableModel); setRootVisible(false); - getTableHeader().setDefaultRenderer(new TableHeaderRenderer(treeTableModel)); - setTreeCellRenderer(new TreeCellRenderer() { private final TreeCellRenderer myBaseRenderer = new HighlightableCellRenderer(); public Component getTreeCellRendererComponent(JTree tree1, @@ -71,7 +68,6 @@ public class TreeTableView extends TreeTable implements ItemsProvider, Selection public void setTableModel(TreeTableModel treeTableModel) { super.setTableModel(treeTableModel); LOG.assertTrue(treeTableModel instanceof SortableColumnModel); - getTableHeader().setDefaultRenderer(new TableHeaderRenderer((SortableColumnModel)treeTableModel)); } private void setSizes() { diff --git a/platform/platform-api/src/com/intellij/ui/table/JBTable.java b/platform/platform-api/src/com/intellij/ui/table/JBTable.java index a028b0f87f78..fe0ced028f32 100644 --- a/platform/platform-api/src/com/intellij/ui/table/JBTable.java +++ b/platform/platform-api/src/com/intellij/ui/table/JBTable.java @@ -18,9 +18,10 @@ package com.intellij.ui.table; import com.intellij.Patches; import com.intellij.ide.ui.UISettings; import com.intellij.ui.*; +import com.intellij.util.ui.ColumnInfo; import com.intellij.util.ui.ComponentWithEmptyText; +import com.intellij.util.ui.SortableColumnModel; import com.intellij.util.ui.StatusText; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -36,6 +37,7 @@ import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Arrays; +import java.util.Comparator; import java.util.EventObject; public class JBTable extends JTable implements ComponentWithEmptyText, ComponentWithExpandableItems { @@ -82,7 +84,7 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component public void columnRemoved(TableColumnModelEvent e) { } }); - getTableHeader().setDefaultRenderer(new MyTableHeaderRenderer()); + //noinspection UnusedDeclaration boolean marker = Patches.SUN_BUG_ID_4503845; // Don't remove. It's a marker for find usages } @@ -91,6 +93,30 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component return getRowCount() == 0; } + @Override + public void setModel(final TableModel model) { + super.setModel(model); + + if (model instanceof SortableColumnModel) { + final SortableColumnModel sortableModel = (SortableColumnModel)model; + if (sortableModel.isSortable()) { + final TableRowSorter rowSorter = createRowSorter(model); + setRowSorter(rowSorter); + final RowSorter.SortKey sortKey = sortableModel.getDefaultSortKey(); + if (sortKey != null && sortKey.getColumn() >= 0 && sortKey.getColumn() < model.getColumnCount()) { + if (sortableModel.getColumnInfos()[sortKey.getColumn()].isSortable()) { + rowSorter.setSortKeys(Arrays.asList(sortKey)); + } + } + } else { + final RowSorter rowSorter = getRowSorter(); + if (rowSorter instanceof DefaultColumnInfoBasedRowSorter) { + setRowSorter(null); + } + } + } + } + @Override protected void paintComponent(Graphics g) { if (myEnableAntialiasing) { @@ -171,27 +197,6 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component return myExpandableItemsHandler; } - private static class MyTableHeaderRenderer extends DefaultTableCellRenderer { - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - if (table != null) { - JTableHeader header = table.getTableHeader(); - if (header != null) { - setForeground(header.getForeground()); - setBackground(header.getBackground()); - setFont(header.getFont()); - } - if (!table.isEnabled()) { - setForeground(UIUtil.getTextInactiveTextColor()); - } - } - setText(value == null ? "" : value.toString()); - setBorder(UIUtil.getTableHeaderCellBorder()); - setHorizontalAlignment(JLabel.CENTER); - - return this; - } - } - public void removeNotify() { final KeyboardFocusManager keyboardFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); //noinspection HardCodedStringLiteral @@ -275,13 +280,6 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component } } - public void fixColumnWidthToHeader(final int columnIdx) { - final TableColumn column = getColumnModel().getColumn(columnIdx); - final int width = getTableHeader().getFontMetrics(getTableHeader().getFont()).stringWidth(getColumnName(columnIdx)) + 2; - column.setMinWidth(width); - column.setMaxWidth(width); - } - private final class MyMouseListener extends MouseAdapter { public void mousePressed(final MouseEvent e) { if (SwingUtilities.isRightMouseButton(e)) { @@ -295,4 +293,106 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component } } } + + @SuppressWarnings({"MethodMayBeStatic", "unchecked"}) + protected TableRowSorter createRowSorter(final TableModel model) { + return new DefaultColumnInfoBasedRowSorter(model); + } + + protected static class DefaultColumnInfoBasedRowSorter extends TableRowSorter { + public DefaultColumnInfoBasedRowSorter(final TableModel model) { + super(model); + setModelWrapper(new TableRowSorterModelWrapper(model)); + setMaxSortKeys(1); + setSortsOnUpdates(true); + } + + @Override + public Comparator getComparator(final int column) { + final TableModel model = getModel(); + if (model instanceof SortableColumnModel) { + final ColumnInfo[] columnInfos = ((SortableColumnModel)model).getColumnInfos(); + if (column >= 0 && column < columnInfos.length) { + final Comparator comparator = columnInfos[column].getComparator(); + if (comparator != null) return comparator; + } + } + + return super.getComparator(column); + } + + protected boolean useToString(int column) { + return false; + } + + @Override + public boolean isSortable(final int column) { + final TableModel model = getModel(); + if (model instanceof SortableColumnModel) { + final ColumnInfo[] columnInfos = ((SortableColumnModel)model).getColumnInfos(); + if (column >= 0 && column < columnInfos.length) { + return columnInfos[column].isSortable() && columnInfos[column].getComparator() != null; + } + } + + return false; + } + + private class TableRowSorterModelWrapper extends ModelWrapper { + private TableModel myModel; + + private TableRowSorterModelWrapper(@NotNull final TableModel model) { + myModel = model; + } + + public TableModel getModel() { + return myModel; + } + + public int getColumnCount() { + return (myModel == null) ? 0 : myModel.getColumnCount(); + } + + public int getRowCount() { + return (myModel == null) ? 0 : myModel.getRowCount(); + } + + public Object getValueAt(int row, int column) { + if (myModel instanceof SortableColumnModel) { + return ((SortableColumnModel)myModel).getRowValue(row); + } + + return myModel.getValueAt(row, column); + } + + public String getStringValueAt(int row, int column) { + TableStringConverter converter = getStringConverter(); + if (converter != null) { + // Use the converter + String value = converter.toString( + myModel, row, column); + if (value != null) { + return value; + } + return ""; + } + + // No converter, use getValueAt followed by toString + Object o = getValueAt(row, column); + if (o == null) { + return ""; + } + String string = o.toString(); + if (string == null) { + return ""; + } + return string; + } + + public Integer getIdentifier(int index) { + return index; + } + } + } + } \ No newline at end of file diff --git a/platform/platform-api/src/com/intellij/ui/table/TableHeaderRenderer.java b/platform/platform-api/src/com/intellij/ui/table/TableHeaderRenderer.java index c55057995798..7cc7d6b2f798 100644 --- a/platform/platform-api/src/com/intellij/ui/table/TableHeaderRenderer.java +++ b/platform/platform-api/src/com/intellij/ui/table/TableHeaderRenderer.java @@ -15,14 +15,12 @@ */ package com.intellij.ui.table; -import com.intellij.openapi.util.IconLoader; import com.intellij.util.ui.ColumnInfo; import com.intellij.util.ui.SortableColumnModel; import com.intellij.util.ui.UIUtil; import javax.swing.*; import javax.swing.border.Border; -import javax.swing.border.EmptyBorder; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import java.awt.*; @@ -30,6 +28,7 @@ import java.awt.*; /** * author: lesya */ +@Deprecated public class TableHeaderRenderer extends JPanel implements TableCellRenderer{ private final SortableColumnModel myModel; protected final JLabel myLabel = new JLabel("", JLabel.CENTER); @@ -72,16 +71,16 @@ public class TableHeaderRenderer extends JPanel implements TableCellRenderer{ } final ColumnInfo columnInfo = myModel.getColumnInfos()[logicalIndex]; String labelString = columnInfo.getName(); - if (myModel.isSortable() && columnInfo.isSortable() && myModel.getSortedColumnIndex() == logicalIndex) { - //noinspection HardCodedStringLiteral - labelString = "" + labelString + ""; - if (myModel.getSortingType() == SortableColumnModel.SORT_ASCENDING) { - icon = IconLoader.getIcon("/actions/sortAsc.png"); - } - if (myModel.getSortingType() == SortableColumnModel.SORT_DESCENDING) { - icon = IconLoader.getIcon("/actions/sortDesc.png"); - } - } + //if (myModel.isSortable() && columnInfo.isSortable() && myModel.getSortedColumnIndex() == logicalIndex) { + // //noinspection HardCodedStringLiteral + // labelString = "" + labelString + ""; + // if (myModel.getSortingType() == SortableColumnModel.SORT_ASCENDING) { + // icon = IconLoader.getIcon("/actions/sortAsc.png"); + // } + // if (myModel.getSortingType() == SortableColumnModel.SORT_DESCENDING) { + // icon = IconLoader.getIcon("/actions/sortDesc.png"); + // } + //} final Icon columnIcon = columnInfo.getIcon(); myLabel.setIcon(columnIcon); myLabel.setIconTextGap(10); diff --git a/platform/platform-api/src/com/intellij/ui/table/TableView.java b/platform/platform-api/src/com/intellij/ui/table/TableView.java index fffea7b77571..46e75ea2ecd1 100644 --- a/platform/platform-api/src/com/intellij/ui/table/TableView.java +++ b/platform/platform-api/src/com/intellij/ui/table/TableView.java @@ -27,8 +27,6 @@ import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.*; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -41,29 +39,6 @@ public class TableView extends BaseTableView implements ItemsProvider, Sel public TableView(final ListTableModel model) { super(model); - final JTableHeader tableHeader = getTableHeader(); - if (tableHeader != null) { - tableHeader.addMouseListener(new MouseAdapter() { - public void mouseClicked(final MouseEvent e) { - processEvent(e); - } - - public void mousePressed(final MouseEvent e) { - processEvent(e); - } - - public void mouseReleased(final MouseEvent e) { - processEvent(e); - } - - private void processEvent(MouseEvent e) { - final int column = convertColumnIndexToModel(tableHeader.columnAtPoint(e.getPoint())); - if (column > -1) { - onHeaderClicked(column, e); - } - } - }); - } setModel(model); } @@ -82,10 +57,6 @@ public class TableView extends BaseTableView implements ItemsProvider, Sel public void setModel(final ListTableModel model) { super.setModel(model); - final JTableHeader header = getTableHeader(); - if (header != null) { - header.setDefaultRenderer(new TableHeaderRenderer(model)); - } updateColumnSizes(); } @@ -201,25 +172,6 @@ public class TableView extends BaseTableView implements ItemsProvider, Sel return getListTableModel().getItems(); } - public void resortKeepSelection() { - final int column = getSelectedColumn(); - if (column != -1) { - SortableColumnModel model = getListTableModel(); - Collection selection = getSelection(); - model.sortByColumn(column); - setSelection(selection); - } - } - - protected void onHeaderClicked(int column, MouseEvent e) { - if (e.getButton() == MouseEvent.BUTTON1 && e.getID() == MouseEvent.MOUSE_CLICKED && e.getClickCount() == 1) { - SortableColumnModel model = getListTableModel(); - Collection selection = getSelection(); - model.sortByColumn(column); - setSelection(selection); - } - } - public void setMinRowHeight(int i) { setRowHeight(Math.max(i, getRowHeight())); } diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/ListTreeTableModel.java b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/ListTreeTableModel.java index 7740b1772dcd..10ea0f27fff6 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/ListTreeTableModel.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/ListTreeTableModel.java @@ -17,6 +17,7 @@ package com.intellij.ui.treeStructure.treetable; import com.intellij.util.ui.ColumnInfo; +import javax.swing.*; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; @@ -64,4 +65,7 @@ public class ListTreeTableModel extends DefaultTreeModel implements TreeTableMod myColumns[column].setValue(node, aValue); } + @Override + public void setTree(JTree tree) { + } } diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/ListTreeTableModelOnColumns.java b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/ListTreeTableModelOnColumns.java index ecf3dabefa40..2c2c4223e2c3 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/ListTreeTableModelOnColumns.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/ListTreeTableModelOnColumns.java @@ -18,20 +18,28 @@ package com.intellij.ui.treeStructure.treetable; import com.intellij.util.ui.ColumnInfo; import com.intellij.util.ui.SortableColumnModel; +import javax.swing.*; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; +import javax.swing.tree.TreePath; import java.util.*; public class ListTreeTableModelOnColumns extends DefaultTreeModel implements TreeTableModel, SortableColumnModel{ private ColumnInfo[] myColumns; + private JTree myTree; public ListTreeTableModelOnColumns(TreeNode root, ColumnInfo[] columns) { super(root); myColumns = columns; } + @Override + public void setTree(JTree tree) { + myTree = tree; + } + public int getColumnCount() { return myColumns.length; } @@ -48,6 +56,21 @@ public class ListTreeTableModelOnColumns extends DefaultTreeModel return ((TreeNode) parent).getChildAt(index); } + @Override + public Object getRowValue(final int row) { + final TreePath path = myTree.getPathForRow(row); + if (path != null) { + return path.getLastPathComponent(); + } + + return null; + } + + @Override + public RowSorter.SortKey getDefaultSortKey() { + return null; + } + public int getChildCount(Object parent) { return ((TreeNode) parent).getChildCount(); } @@ -103,20 +126,6 @@ public class ListTreeTableModelOnColumns extends DefaultTreeModel } } - public void sortByColumn(int columnIndex) { - } - - public void sortByColumn(int columnIndex, int sortingType) { - } - - public int getSortedColumnIndex() { - return -1; - } - - public int getSortingType() { - return -1; - } - public void setSortable(boolean aBoolean) { } diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableCellRenderer.java b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableCellRenderer.java index c5aa1242a29a..65fcda1a15ee 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableCellRenderer.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableCellRenderer.java @@ -41,6 +41,8 @@ public class TreeTableCellRenderer implements TableCellRenderer, ClientPropertyH } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + int modelRow = table.convertRowIndexToModel(row); + if (myTreeCellRenderer != null) myTree.setCellRenderer(myTreeCellRenderer); if (isSelected){ @@ -51,14 +53,15 @@ public class TreeTableCellRenderer implements TableCellRenderer, ClientPropertyH myTree.setBackground(table.getBackground()); myTree.setForeground(table.getForeground()); } + TableModel model = myTreeTable.getModel(); myTree.setTreeTableTreeBorder(hasFocus && model.getColumnClass(column).equals(TreeTableModel.class) ? myDefaultBorder : null); - myTree.setVisibleRow(row); + myTree.setVisibleRow(modelRow); - final Object treeObject = myTree.getPathForRow(row).getLastPathComponent(); + final Object treeObject = myTree.getPathForRow(modelRow).getLastPathComponent(); boolean leaf = myTree.getModel().isLeaf(treeObject); - final boolean expanded = myTree.isExpanded(row); - Component component = myTree.getCellRenderer().getTreeCellRendererComponent(myTree, treeObject, isSelected, expanded, leaf, row, hasFocus); + final boolean expanded = myTree.isExpanded(modelRow); + Component component = myTree.getCellRenderer().getTreeCellRendererComponent(myTree, treeObject, isSelected, expanded, leaf, modelRow, hasFocus); if (component instanceof JComponent) { table.setToolTipText(((JComponent)component).getToolTipText()); } diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableModel.java b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableModel.java index d75c6e485914..de5b29052ca4 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableModel.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableModel.java @@ -15,6 +15,7 @@ */ package com.intellij.ui.treeStructure.treetable; +import javax.swing.*; import javax.swing.tree.TreeModel; /** @@ -61,4 +62,6 @@ public interface TreeTableModel extends TreeModel { * at column number column. */ void setValueAt(Object aValue, Object node, int column); + + void setTree(JTree tree); } diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableModelAdapter.java b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableModelAdapter.java index d7d35a965833..ad841a36a558 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableModelAdapter.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/treetable/TreeTableModelAdapter.java @@ -45,6 +45,7 @@ public class TreeTableModelAdapter extends AbstractTableModel { this.tree = tree; this.treeTableModel = treeTableModel; this.table = table; + this.treeTableModel.setTree(tree); tree.addTreeExpansionListener(new TreeExpansionListener() { // Don't use fireTableRowsInserted() here; the selection model diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/AvailablePluginsTableModel.java b/platform/platform-impl/src/com/intellij/ide/plugins/AvailablePluginsTableModel.java index 52fa116b1fc7..d72c539487e5 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/AvailablePluginsTableModel.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/AvailablePluginsTableModel.java @@ -41,20 +41,19 @@ import java.util.Map; public class AvailablePluginsTableModel extends PluginTableModel { private final Map myUpdateVersions = new HashMap(); - public AvailablePluginsTableModel(SortableProvider sortableProvider) { - super(sortableProvider, - new PluginManagerColumnInfo(PluginManagerColumnInfo.COLUMN_NAME, sortableProvider), - new PluginManagerColumnInfo(PluginManagerColumnInfo.COLUMN_DOWNLOADS, sortableProvider), - new PluginManagerColumnInfo(PluginManagerColumnInfo.COLUMN_DATE, sortableProvider) { + public AvailablePluginsTableModel() { + super(new PluginManagerColumnInfo(PluginManagerColumnInfo.COLUMN_NAME), + new PluginManagerColumnInfo(PluginManagerColumnInfo.COLUMN_DOWNLOADS), + new PluginManagerColumnInfo(PluginManagerColumnInfo.COLUMN_DATE) { @Override protected int getHorizontalAlignment() { return SwingConstants.TRAILING; } }, - new PluginManagerColumnInfo(PluginManagerColumnInfo.COLUMN_CATEGORY, sortableProvider)); + new PluginManagerColumnInfo(PluginManagerColumnInfo.COLUMN_CATEGORY)); + setSortKey(new RowSorter.SortKey(getNameColumn(), SortOrder.ASCENDING)); view = new ArrayList(); - sortByColumn(getNameColumn()); } public void addData(List list) { @@ -67,7 +66,8 @@ public class AvailablePluginsTableModel extends PluginTableModel { view.add(descr); myUpdateVersions.put(descr.getPluginId(), descr.getVersion()); } - safeSort(); + + fireTableDataChanged(); } private static void updateStatus(final IdeaPluginDescriptor descr) { @@ -103,7 +103,8 @@ public class AvailablePluginsTableModel extends PluginTableModel { myUpdateVersions.put(descr.getPluginId(), descr.getVersion()); } } - safeSort(); + + fireTableDataChanged(); } @Override diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java b/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java index 66e1c3ec8045..d7301900765b 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java @@ -16,18 +16,17 @@ package com.intellij.ide.plugins; import com.intellij.ide.IdeBundle; +import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.ui.BooleanTableCellEditor; import com.intellij.ui.BooleanTableCellRenderer; import com.intellij.util.Function; import com.intellij.util.ui.ColumnInfo; -import com.intellij.util.ui.SortableColumnModel; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -52,8 +51,7 @@ public class InstalledPluginsTableModel extends PluginTableModel { public static Set updatedPlugins = new HashSet(); private final Map myEnabled = new HashMap(); - public InstalledPluginsTableModel(SortableProvider sortableProvider) { - super.sortableProvider = sortableProvider; + public InstalledPluginsTableModel() { super.columns = new ColumnInfo[]{new EnabledPluginInfo(), new NameColumnInfo(), new BundledColumnInfo()}; view = new ArrayList(Arrays.asList(PluginManager.getPlugins())); reset(view); @@ -62,7 +60,8 @@ public class InstalledPluginsTableModel extends PluginTableModel { @NonNls final String s = iterator.next().getPluginId().getIdString(); if ("com.intellij".equals(s)) iterator.remove(); } - sortByColumn(getNameColumn()); + + setSortKey(new RowSorter.SortKey(getNameColumn(), SortOrder.ASCENDING)); } public static int getCheckboxColumn() { @@ -102,7 +101,8 @@ public class InstalledPluginsTableModel extends PluginTableModel { } } } - safeSort(); + + fireTableDataChanged(); } @Override @@ -113,6 +113,7 @@ public class InstalledPluginsTableModel extends PluginTableModel { view.add(descriptor); } } + super.filter(filtered); } @@ -216,20 +217,19 @@ public class InstalledPluginsTableModel extends PluginTableModel { } public Comparator getComparator() { - final boolean sortDirection = (sortableProvider.getSortOrder() == SortableColumnModel.SORT_ASCENDING); return new Comparator() { public int compare(final IdeaPluginDescriptorImpl o1, final IdeaPluginDescriptorImpl o2) { if (myEnabled.get(o1.getPluginId())) { if (myEnabled.get(o2.getPluginId())) { return 0; } - return sortDirection ? -1 : 1; + return -1; } else { if (!myEnabled.get(o2.getPluginId())) { return 0; } - return sortDirection ? 1 : -1; + return 1; } } }; @@ -282,7 +282,7 @@ public class InstalledPluginsTableModel extends PluginTableModel { private class NameColumnInfo extends PluginManagerColumnInfo { public NameColumnInfo() { - super(PluginManagerColumnInfo.COLUMN_NAME, sortableProvider); + super(COLUMN_NAME); } public TableCellRenderer getRenderer(final IdeaPluginDescriptor ideaPluginDescriptor) { diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerColumnInfo.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerColumnInfo.java index 84382fa57fb2..cd0d1c8f82f4 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerColumnInfo.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerColumnInfo.java @@ -19,7 +19,6 @@ import com.intellij.ide.IdeBundle; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.vcs.FileStatus; import com.intellij.util.ui.ColumnInfo; -import com.intellij.util.ui.SortableColumnModel; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; @@ -57,12 +56,10 @@ class PluginManagerColumnInfo extends ColumnInfo { }; private final int columnIdx; - private final SortableProvider mySortableProvider; - public PluginManagerColumnInfo(int columnIdx, SortableProvider sortableProvider) { + public PluginManagerColumnInfo(int columnIdx) { super(COLUMNS[columnIdx]); this.columnIdx = columnIdx; - mySortableProvider = sortableProvider; } public String valueOf(IdeaPluginDescriptor base) { @@ -94,14 +91,12 @@ class PluginManagerColumnInfo extends ColumnInfo { } public Comparator getComparator() { - final boolean sortDirection = (mySortableProvider.getSortOrder() == SortableColumnModel.SORT_ASCENDING); - switch (columnIdx) { case COLUMN_NAME: return new Comparator() { public int compare(IdeaPluginDescriptor o1, IdeaPluginDescriptor o2) { - String name1 = (sortDirection ? o1 : o2).getName(); - String name2 = (sortDirection ? o2 : o1).getName(); + String name1 = o1.getName(); + String name2 = o2.getName(); return compareStrings(name1, name2); } }; @@ -109,11 +104,6 @@ class PluginManagerColumnInfo extends ColumnInfo { case COLUMN_DOWNLOADS: return new Comparator() { public int compare(IdeaPluginDescriptor o1, IdeaPluginDescriptor o2) { - if (!sortDirection) { - IdeaPluginDescriptor swap = o2; - o2 = o1; - o1 = swap; - } String count1 = (o1 instanceof PluginNode) ? ((PluginNode)o1).getDownloads() : ((IdeaPluginDescriptorImpl)o1).getDownloads(); String count2 = (o2 instanceof PluginNode) ? ((PluginNode)o2).getDownloads() : ((IdeaPluginDescriptorImpl)o2).getDownloads(); if (count1 != null && count2 != null) { @@ -131,8 +121,8 @@ class PluginManagerColumnInfo extends ColumnInfo { case COLUMN_CATEGORY: return new Comparator() { public int compare(IdeaPluginDescriptor o1, IdeaPluginDescriptor o2) { - String cat1 = (sortDirection ? o1 : o2).getCategory(); - String cat2 = (sortDirection ? o2 : o1).getCategory(); + String cat1 = o1.getCategory(); + String cat2 = o2.getCategory(); return compareStrings(cat1, cat2); } }; @@ -140,11 +130,6 @@ class PluginManagerColumnInfo extends ColumnInfo { case COLUMN_DATE: return new Comparator() { public int compare(IdeaPluginDescriptor o1, IdeaPluginDescriptor o2) { - if (!sortDirection) { - IdeaPluginDescriptor swap = o2; - o2 = o1; - o1 = swap; - } long date1 = (o1 instanceof PluginNode) ? ((PluginNode)o1).getDate() : ((IdeaPluginDescriptorImpl)o1).getDate(); long date2 = (o2 instanceof PluginNode) ? ((PluginNode)o2).getDate() : ((IdeaPluginDescriptorImpl)o2).getDate(); if (date1 > date2) { diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java index 936c4d256c1b..be824d6c6854 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java @@ -22,13 +22,15 @@ import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.options.BaseConfigurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; -import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import javax.swing.table.TableModel; +import java.util.Arrays; +import java.util.List; /** * Created by IntelliJ IDEA. @@ -57,8 +59,31 @@ public class PluginManagerConfigurable extends BaseConfigurable implements Searc public void reset() { myPluginManagerMain.reset(); myUISettings.getSplitterProportionsData().restoreSplitterProportions(myPluginManagerMain.getMainPanel()); - myUISettings.getAvailableTableProportions().restoreProportion(myPluginManagerMain.getAvailablePluginsTable()); - myUISettings.getInstalledTableProportions().restoreProportion(myPluginManagerMain.getInstalledPluginTable()); + + final PluginTable availablePluginsTable = myPluginManagerMain.getAvailablePluginsTable(); + final PluginTable installedPluginTable = myPluginManagerMain.getInstalledPluginTable(); + + myUISettings.getAvailableTableProportions().restoreProportion(availablePluginsTable); + myUISettings.getInstalledTableProportions().restoreProportion(installedPluginTable); + + restoreSorting(availablePluginsTable, true); + restoreSorting(installedPluginTable, false); + } + + private void restoreSorting(final PluginTable table, final boolean available) { + final RowSorter rowSorter = table.getRowSorter(); + if (rowSorter != null) { + final int column = available ? myUISettings.AVAILABLE_SORT_COLUMN : myUISettings.INSTALLED_SORT_COLUMN; + if (column >= 0) { + final int orderOrdinal = available ? myUISettings.AVAILABLE_SORT_COLUMN_ORDER : myUISettings.INSTALLED_SORT_COLUMN_ORDER; + for (final SortOrder sortOrder : SortOrder.values()) { + if (sortOrder.ordinal() == orderOrdinal) { + rowSorter.setSortKeys(Arrays.asList(new RowSorter.SortKey(column, sortOrder))); + } + + } + } + } } public String getHelpTopic() { @@ -68,16 +93,46 @@ public class PluginManagerConfigurable extends BaseConfigurable implements Searc public void disposeUIResources() { if (myPluginManagerMain != null) { myUISettings.getSplitterProportionsData().saveSplitterProportions(myPluginManagerMain.getMainPanel()); - myUISettings.getAvailableTableProportions().saveProportion(myPluginManagerMain.getAvailablePluginsTable()); - myUISettings.getInstalledTableProportions().saveProportion(myPluginManagerMain.getInstalledPluginTable()); + final PluginTable availablePluginsTable = myPluginManagerMain.getAvailablePluginsTable(); + final PluginTable installedPluginTable = myPluginManagerMain.getInstalledPluginTable(); + myUISettings.getAvailableTableProportions().saveProportion(availablePluginsTable); + myUISettings.getInstalledTableProportions().saveProportion(installedPluginTable); + + saveSorting(availablePluginsTable, true); + saveSorting(installedPluginTable, false); + Disposer.dispose(myPluginManagerMain); myPluginManagerMain = null; } } + private void saveSorting(final PluginTable availablePluginsTable, final boolean available) { + final RowSorter rowSorter = availablePluginsTable.getRowSorter(); + if (rowSorter != null) { + final List sortKeys = rowSorter.getSortKeys(); + if (sortKeys.size() > 0) { + final RowSorter.SortKey sortKey = sortKeys.get(0); + if (available) { + myUISettings.AVAILABLE_SORT_COLUMN = sortKey.getColumn(); + myUISettings.AVAILABLE_SORT_COLUMN_ORDER = sortKey.getSortOrder().ordinal(); + } + else { + myUISettings.INSTALLED_SORT_COLUMN = sortKey.getColumn(); + myUISettings.INSTALLED_SORT_COLUMN_ORDER = sortKey.getSortOrder().ordinal(); + + } + } + } + } + public JComponent createComponent() { if (myPluginManagerMain == null) { - myPluginManagerMain = new PluginManagerMain( new MyInstalledProvider() , new MyAvailableProvider()); + myPluginManagerMain = new PluginManagerMain( ); + + final PluginTable availablePluginsTable = myPluginManagerMain.getAvailablePluginsTable(); + final PluginTable installedPluginTable = myPluginManagerMain.getInstalledPluginTable(); + restoreSorting(availablePluginsTable, true); + restoreSorting(installedPluginTable, false); } return myPluginManagerMain.getMainPanel(); @@ -116,42 +171,6 @@ public class PluginManagerConfigurable extends BaseConfigurable implements Searc return IconLoader.getIcon("/general/pluginManager.png"); } - private class MyInstalledProvider implements SortableProvider { - public int getSortOrder() { - return myUISettings.INSTALLED_SORT_COLUMN_ORDER; - } - - public int getSortColumn() { - return myUISettings.INSTALLED_SORT_COLUMN; - } - - public void setSortOrder(int sortOrder) { - myUISettings.INSTALLED_SORT_COLUMN_ORDER = sortOrder; - } - - public void setSortColumn(int sortColumn) { - myUISettings.INSTALLED_SORT_COLUMN = sortColumn; - } - } - - private class MyAvailableProvider implements SortableProvider { - public int getSortOrder() { - return myUISettings.AVAILABLE_SORT_COLUMN_ORDER; - } - - public int getSortColumn() { - return myUISettings.AVAILABLE_SORT_COLUMN; - } - - public void setSortOrder(int sortOrder) { - myUISettings.AVAILABLE_SORT_COLUMN_ORDER = sortOrder; - } - - public void setSortColumn(int sortColumn) { - myUISettings.AVAILABLE_SORT_COLUMN = sortColumn; - } - } - public String getId() { return getHelpTopic(); } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java index b043800ecfc9..6aa65a384e70 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java @@ -104,11 +104,11 @@ public class PluginManagerMain implements Disposable { private final MyPluginsFilter myFilter = new MyPluginsFilter(); - public PluginManagerMain(final SortableProvider installedProvider, final SortableProvider availableProvider) { + public PluginManagerMain() { myDescriptionTextArea.addHyperlinkListener(new MyHyperlinkListener()); myChangeNotesTextArea.addHyperlinkListener(new MyHyperlinkListener()); - installedPluginsModel = new InstalledPluginsTableModel(installedProvider); + installedPluginsModel = new InstalledPluginsTableModel(); installedPluginTable = new PluginTable(installedPluginsModel); installedPluginTable.setColumnWidth(2, 45); @@ -132,7 +132,7 @@ public class PluginManagerMain implements Disposable { }, KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), JComponent.WHEN_FOCUSED); - availablePluginsModel = new AvailablePluginsTableModel(availableProvider); + availablePluginsModel = new AvailablePluginsTableModel(); availablePluginsTable = new PluginTable(availablePluginsModel); // Downloads availablePluginsTable.setColumnWidth(1, 70); diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerUISettings.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerUISettings.java index e269ad987c97..81e88bbcbf8d 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerUISettings.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerUISettings.java @@ -15,20 +15,21 @@ */ package com.intellij.ide.plugins; +import com.intellij.ide.ui.SplitterProportionsDataImpl; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.ui.SplitterProportionsData; import com.intellij.openapi.util.DefaultJDOMExternalizer; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.util.ui.SortableColumnModel; -import com.intellij.ide.ui.SplitterProportionsDataImpl; import org.jdom.Element; import org.jetbrains.annotations.NonNls; +import javax.swing.*; + /** * @author yole */ @@ -46,9 +47,9 @@ public class PluginManagerUISettings implements PersistentStateComponent view; + private RowSorter.SortKey myDefaultSortKey; protected PluginTableModel() { } - public PluginTableModel(SortableProvider sortableProvider, ColumnInfo... columns) { + public PluginTableModel(ColumnInfo... columns) { this.columns = columns; - this.sortableProvider = sortableProvider; + } + + public void setSortKey(final RowSorter.SortKey sortKey) { + myDefaultSortKey = sortKey; } public int getColumnCount() { @@ -64,18 +67,20 @@ abstract public class PluginTableModel extends AbstractTableModel implements Sor return columns[column].getName(); } - public int getSortedColumnIndex() { - return sortableProvider.getSortColumn(); - } - - public int getSortingType() { - return sortableProvider.getSortOrder(); - } - public IdeaPluginDescriptor getObjectAt (int row) { return view.get(row); } + @Override + public Object getRowValue(int row) { + return getObjectAt(row); + } + + @Override + public RowSorter.SortKey getDefaultSortKey() { + return myDefaultSortKey; + } + public int getRowCount() { return view.size(); } @@ -92,16 +97,6 @@ abstract public class PluginTableModel extends AbstractTableModel implements Sor columns[columnIndex].setValue(getObjectAt(rowIndex), aValue); } - public void sortByColumn(int columnIndex) { - Collections.sort(view, columns[columnIndex].getComparator()); - fireTableDataChanged(); - } - - public void sortByColumn(int columnIndex, int sortingType) { - sortByColumn(columnIndex); - } - - public ArrayList dependent(IdeaPluginDescriptorImpl plugin) { ArrayList list = new ArrayList(); for (IdeaPluginDescriptor any : view) { @@ -123,12 +118,7 @@ abstract public class PluginTableModel extends AbstractTableModel implements Sor public abstract void modifyData(List list); public void filter(ArrayList filtered){ - safeSort(); - } - - protected void safeSort() { - final int sortColumn = sortableProvider.getSortColumn(); - sortByColumn(-1 < sortColumn && sortColumn < getColumnCount() ? sortColumn : 0); + fireTableDataChanged(); } public abstract int getNameColumn(); diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTree.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTree.java index b7d40bd8da7e..f5fa442b159c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTree.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTree.java @@ -225,6 +225,10 @@ public class ActionsTree { super(root); } + @Override + public void setTree(JTree tree) { + } + public int getColumnCount() { return 2; } diff --git a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java index 5029ee7f6163..ecf974cf5932 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java @@ -681,13 +681,6 @@ public class AbstractPopup implements JBPopup { listener.beforeShown(new LightweightWindowEvent(this)); } - Window w = myPopup.getWindow(); - if (w != null) { - WindowManagerEx.WindowShadowMode mode = - myShadowed ? WindowManagerEx.WindowShadowMode.NORMAL : WindowManagerEx.WindowShadowMode.DISABLED; - WindowManagerEx.getInstanceEx().setWindowShadow(myWindow, mode); - } - myPopup.setRequestFocus(myRequestFocus); myPopup.show(); @@ -838,6 +831,10 @@ public class AbstractPopup implements JBPopup { wndManager.setWindowMask(window, mask); } + WindowManagerEx.WindowShadowMode mode = + myShadowed ? WindowManagerEx.WindowShadowMode.NORMAL : WindowManagerEx.WindowShadowMode.DISABLED; + WindowManagerEx.getInstanceEx().setWindowShadow(window, mode); + return window; } diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/statistics/BaseColumn.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/statistics/BaseColumn.java index 652c959e23ba..da53cce64468 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/statistics/BaseColumn.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/statistics/BaseColumn.java @@ -16,34 +16,14 @@ package com.intellij.execution.testframework.sm.runner.ui.statistics; import com.intellij.execution.testframework.sm.runner.SMTestProxy; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import com.intellij.util.ui.ColumnInfo; -import com.intellij.util.NullableFunction; - -import java.util.List; /** * @author Roman Chernyatchik */ public abstract class BaseColumn extends ColumnInfo { - private final NullableFunction, Object> oldSortFun = - new NullableFunction, Object>() { - @Nullable - public Object fun(final List proxies) { - BaseColumn.super.sort(proxies); - - return null; - } - }; - public BaseColumn(String name) { super(name); } - @Override - public void sort(@NotNull final List testProxies) { - //Invariant: comparator should left Total(initially at row = 0) row as uppermost element! - StatisticsTableModel.applySortOperation(testProxies, oldSortFun); - } } diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/statistics/StatisticsTableModel.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/statistics/StatisticsTableModel.java index dfd0ba5b6685..34413801840e 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/statistics/StatisticsTableModel.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/statistics/StatisticsTableModel.java @@ -18,7 +18,6 @@ package com.intellij.execution.testframework.sm.runner.ui.statistics; import com.intellij.execution.testframework.sm.SMRunnerUtil; import com.intellij.execution.testframework.sm.runner.SMTestProxy; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.util.NullableFunction; import com.intellij.util.ui.ListTableModel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,18 +35,9 @@ public class StatisticsTableModel extends ListTableModel { private SMTestProxy myCurrentSuite; - private final NullableFunction, Object> oldReverseModelItemsFun = - new NullableFunction, Object>() { - @Nullable - public Object fun(final List proxies) { - StatisticsTableModel.super.reverseModelItems(proxies); - - return null; - } - }; - public StatisticsTableModel() { super(new ColumnTest(), new ColumnDuration(), new ColumnResults()); + setSortable(false); // TODO: fix me } public void updateModelOnProxySelected(final SMTestProxy proxy) { @@ -113,27 +103,6 @@ public class StatisticsTableModel extends ListTableModel { return list; } - @Override - protected void reverseModelItems(final List testProxies) { - //Invariant: comparator should left Total(initally at row = 0) row as uppermost element! - applySortOperation(testProxies, oldReverseModelItemsFun); - } - - /** - * This function allow sort operation to all except first element(e.g. Total row) - * @param proxies Tests or suites - * @param sortOperation Closure - */ - protected static void applySortOperation(final List proxies, - final NullableFunction, Object> sortOperation) { - - //Invariant: comparator should left Total(initally at row = 0) row as uppermost element! - final int size = proxies.size(); - if (size > 1) { - sortOperation.fun(proxies.subList(1, size)); - } - } - public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) { // Setting value is prevented! LOG.error("value: " + aValue + " row: " + rowIndex + " column: " + columnIndex); diff --git a/platform/smRunner/testSrc/com/intellij/execution/testframework/sm/runner/ui/statistics/SMTRunnerStatisticsTableModelTest.java b/platform/smRunner/testSrc/com/intellij/execution/testframework/sm/runner/ui/statistics/SMTRunnerStatisticsTableModelTest.java index 9497bb02562e..2457a68363ad 100644 --- a/platform/smRunner/testSrc/com/intellij/execution/testframework/sm/runner/ui/statistics/SMTRunnerStatisticsTableModelTest.java +++ b/platform/smRunner/testSrc/com/intellij/execution/testframework/sm/runner/ui/statistics/SMTRunnerStatisticsTableModelTest.java @@ -17,7 +17,6 @@ package com.intellij.execution.testframework.sm.runner.ui.statistics; import com.intellij.execution.testframework.sm.runner.BaseSMTRunnerTestCase; import com.intellij.execution.testframework.sm.runner.SMTestProxy; -import com.intellij.util.ui.SortableColumnModel; import java.util.List; @@ -67,7 +66,7 @@ public class SMTRunnerStatisticsTableModelTest extends BaseSMTRunnerTestCase { myStatisticsTableModel.updateModelOnProxySelected(myRootSuite); assertSameElements(getItems(), myRootSuite, suite1, suite2); } - +/* public void testSort_ColumnTest() { final SMTestProxy firstSuite = createSuiteProxy("K_suite1", myRootSuite); final SMTestProxy lastSuite = createSuiteProxy("L_suite1", myRootSuite); @@ -119,7 +118,7 @@ public class SMTRunnerStatisticsTableModelTest extends BaseSMTRunnerTestCase { myStatisticsTableModel.sortByColumn(1, SortableColumnModel.SORT_ASCENDING); assertOrderedEquals(getItems(), myRootSuite, firstTest, firstSuite, lastSuite, lastTest); } - +*/ public void testGotoParentSuite_ResultsRoot() { // create test sturcure final SMTestProxy rootSuite = createSuiteProxy("rootSuite"); @@ -160,17 +159,17 @@ public class SMTRunnerStatisticsTableModelTest extends BaseSMTRunnerTestCase { myStatisticsTableModel.updateModelOnProxySelected(rootSuite); //sort with another sort type - myStatisticsTableModel.sortByColumn(0, SortableColumnModel.SORT_ASCENDING); + //myStatisticsTableModel.sortByColumn(0, SortableColumnModel.SORT_ASCENDING); //resort - myStatisticsTableModel.sortByColumn(2, SortableColumnModel.SORT_DESCENDING); + //myStatisticsTableModel.sortByColumn(2, SortableColumnModel.SORT_DESCENDING); assertOrderedEquals(getItems(), rootSuite, suite4, suite3, suite2, suite1, errorTest1, failedTest1, passedTest1); //reverse - myStatisticsTableModel.sortByColumn(2, SortableColumnModel.SORT_ASCENDING); + //myStatisticsTableModel.sortByColumn(2, SortableColumnModel.SORT_ASCENDING); assertOrderedEquals(getItems(), rootSuite, passedTest1, failedTest1, errorTest1, suite1, suite2, suite3, suite4); //direct - myStatisticsTableModel.sortByColumn(2, SortableColumnModel.SORT_DESCENDING); + //myStatisticsTableModel.sortByColumn(2, SortableColumnModel.SORT_DESCENDING); assertOrderedEquals(getItems(), rootSuite, suite4, suite3, suite2, suite1, errorTest1, failedTest1, passedTest1); } diff --git a/platform/util/src/com/intellij/util/ui/ColumnInfo.java b/platform/util/src/com/intellij/util/ui/ColumnInfo.java index 3945f6d076c5..e52f16f5642b 100644 --- a/platform/util/src/com/intellij/util/ui/ColumnInfo.java +++ b/platform/util/src/com/intellij/util/ui/ColumnInfo.java @@ -15,15 +15,12 @@ */ package com.intellij.util.ui; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; -import java.util.Collections; import java.util.Comparator; -import java.util.List; public abstract class ColumnInfo { @@ -69,13 +66,6 @@ public abstract class ColumnInfo { return myName; } - public void sort(@NotNull List list) { - Comparator comparator = getComparator(); - if (comparator != null) { - Collections.sort(list, comparator); - } - } - public Class getColumnClass() { return String.class; } diff --git a/platform/util/src/com/intellij/util/ui/ListTableModel.java b/platform/util/src/com/intellij/util/ui/ListTableModel.java index c8dba1bc9701..3a298fe9d71e 100644 --- a/platform/util/src/com/intellij/util/ui/ListTableModel.java +++ b/platform/util/src/com/intellij/util/ui/ListTableModel.java @@ -15,26 +15,40 @@ */ package com.intellij.util.ui; +import com.intellij.openapi.util.Condition; +import com.intellij.util.containers.ContainerUtil; + +import javax.swing.*; import java.util.*; public class ListTableModel extends TableViewModel implements ItemRemovable { private ColumnInfo[] myColumnInfos; private List myItems; private int mySortByColumn; - private int mySortingType = SortableColumnModel.SORT_ASCENDING; - private boolean myIsSortable = true; + private boolean myIsSortable = false; + private SortOrder mySortOrder = SortOrder.ASCENDING; public ListTableModel(ColumnInfo... columnInfos) { - this(columnInfos, new ArrayList(), 0); + this(columnInfos, new ArrayList(), 0, SortOrder.ASCENDING); } public ListTableModel(ColumnInfo[] columnNames, List items, int selectedColumn) { + this(columnNames, items, selectedColumn, SortOrder.ASCENDING); + } + + public ListTableModel(ColumnInfo[] columnNames, List items, int selectedColumn, final SortOrder order) { myColumnInfos = columnNames; myItems = items; mySortByColumn = selectedColumn; - setSortable(true); - resort(); + mySortOrder = order; + + setSortable(ContainerUtil.find(columnNames, new Condition() { + @Override + public boolean value(ColumnInfo columnInfo) { + return columnInfo.isSortable(); + } + }) != null); } public boolean isCellEditable(int rowIndex, int columnIndex) { @@ -57,6 +71,20 @@ public class ListTableModel extends TableViewModel implements ItemRe return myItems.size(); } + @Override + public RowSorter.SortKey getDefaultSortKey() { + if (mySortByColumn != -1) { + return new RowSorter.SortKey(mySortByColumn, mySortOrder); + } + + return null; + } + + @Override + public Object getRowValue(int row) { + return myItems.get(row); + } + public int getColumnCount() { return myColumnInfos.length; } @@ -64,7 +92,6 @@ public class ListTableModel extends TableViewModel implements ItemRe public void setItems(List items) { myItems = items; fireTableDataChanged(); - resort(); } public Object getValueAt(int rowIndex, int columnIndex) { @@ -98,70 +125,10 @@ public class ListTableModel extends TableViewModel implements ItemRe return Collections.unmodifiableList(myItems); } - public void sortByColumn(int columnIndex) { - if (mySortByColumn == columnIndex) { - reverseOrder(columnIndex); - } - else { - mySortByColumn = columnIndex; - mySortingType = SortableColumnModel.SORT_ASCENDING; - resort(); - } - } - - public void sortByColumn(int columnIndex, int sortingType) { - if (mySortByColumn != columnIndex) { - mySortByColumn = columnIndex; - mySortingType = sortingType; - resort(); - } - else if (mySortingType != sortingType) { - reverseOrder(columnIndex); - } - } - - private void reverseOrder(final int columnIndex) { - if (mySortingType == SortableColumnModel.SORT_ASCENDING) { - mySortingType = SortableColumnModel.SORT_DESCENDING; - } - else { - mySortingType = SortableColumnModel.SORT_ASCENDING; - } - if (myIsSortable && myColumnInfos[columnIndex].isSortable()) { - reverseModelItems(myItems); - fireTableDataChanged(); - } - } - - protected void reverseModelItems(final List items) { - Collections.reverse(items); - } - protected Object getAspectOf(int aspectIndex, Object item) { return myColumnInfos[aspectIndex].valueOf(item); } - private void resort() { - if (myIsSortable && mySortByColumn >= 0 && mySortByColumn < myColumnInfos.length) { - final ColumnInfo columnInfo = myColumnInfos[mySortByColumn]; - if (columnInfo.isSortable()) { - columnInfo.sort(myItems); - if (mySortingType == SortableColumnModel.SORT_DESCENDING) { - reverseModelItems(myItems); - } - fireTableDataChanged(); - } - } - } - - public int getSortedColumnIndex() { - return mySortByColumn; - } - - public int getSortingType() { - return mySortingType; - } - public void setSortable(boolean aBoolean) { myIsSortable = aBoolean; } @@ -187,7 +154,6 @@ public class ListTableModel extends TableViewModel implements ItemRe public void addRows(final Collection items) { myItems.addAll(items); fireTableRowsInserted(myItems.size() - items.size(), myItems.size() - 1); -// resort(); } public Object getItem(final int rowIndex) { diff --git a/platform/util/src/com/intellij/util/ui/SortableColumnModel.java b/platform/util/src/com/intellij/util/ui/SortableColumnModel.java index 3d63ba0ae6b3..37e36fbe0b16 100644 --- a/platform/util/src/com/intellij/util/ui/SortableColumnModel.java +++ b/platform/util/src/com/intellij/util/ui/SortableColumnModel.java @@ -15,23 +15,19 @@ */ package com.intellij.util.ui; +import org.jetbrains.annotations.Nullable; - +import javax.swing.*; public interface SortableColumnModel { - int SORT_ASCENDING = 1; - int SORT_DESCENDING = 2; - ColumnInfo[] getColumnInfos(); - void sortByColumn(int columnIndex); - void sortByColumn(int columnIndex, int sortingType); - - int getSortedColumnIndex(); - - int getSortingType(); - void setSortable(boolean aBoolean); boolean isSortable(); + + Object getRowValue(int row); + + @Nullable + RowSorter.SortKey getDefaultSortKey(); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/ChangesBrowserDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/ChangesBrowserDialog.java index 547dc50d9049..906e5adcd732 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/ChangesBrowserDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/ChangesBrowserDialog.java @@ -77,8 +77,6 @@ public class ChangesBrowserDialog extends DialogWrapper { myChanges.addRows(committedChangeLists); if (selectFirst) { myCommittedChangesBrowser.selectFirstIfAny(); - } else { - myCommittedChangesBrowser.resortKeepSelection(); } } }.callMe(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesBrowser.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesBrowser.java index 3ca8ba8ce82b..ab5ce5086635 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesBrowser.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesBrowser.java @@ -31,7 +31,6 @@ import com.intellij.openapi.vcs.changes.ui.ChangesBrowser; import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; import com.intellij.ui.*; import com.intellij.ui.table.TableView; -import com.intellij.util.ui.SortableColumnModel; import com.intellij.util.ui.UIUtil; import javax.swing.*; @@ -64,7 +63,14 @@ public class CommittedChangesBrowser extends JPanel { myProject = project; myTableModel = tableModel; - myTableModel.sortByChangesColumn(ChangeListColumn.DATE, SortableColumnModel.SORT_DESCENDING); + + for (int i = 0; i < myTableModel.getColumnCount(); i++) { + if (ChangeListColumn.DATE.getTitle().equals(myTableModel.getColumnName(i))) { + myTableModel.setSortKey(new RowSorter.SortKey(i, SortOrder.DESCENDING)); + break; + } + } + myChangeListsView = new TableView(myTableModel); myChangeListsView.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); @@ -177,12 +183,6 @@ public class CommittedChangesBrowser extends JPanel { } } - public void resortKeepSelection() { - if (myTableModel.getRowCount() > 0) { - myChangeListsView.resortKeepSelection(); - } - } - public void addToolBar(JComponent toolBar) { myLeftPanel.add(toolBar, BorderLayout.NORTH); } @@ -192,10 +192,7 @@ public class CommittedChangesBrowser extends JPanel { } public void setModel(CommittedChangesTableModel tableModel) { - ChangeListColumn sortColumn = myTableModel.getSortColumn(); - int sortingType = myTableModel.getSortingType(); myTableModel = tableModel; - myTableModel.sortByChangesColumn(sortColumn, sortingType); myChangeListsView.setModel(tableModel); tableModel.fireTableStructureChanged(); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesTableModel.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesTableModel.java index d9647fcb9b91..727be4e2ff11 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesTableModel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesTableModel.java @@ -27,14 +27,15 @@ import com.intellij.openapi.vcs.changes.ChangeList; import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; import com.intellij.util.ui.ColumnInfo; import com.intellij.util.ui.ListTableModel; -import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.util.Comparator; import java.util.List; public class CommittedChangesTableModel extends ListTableModel { private final boolean myAsynchLoad; private static final ChangeListColumn[] ourDefaultColumns = new ChangeListColumn[] { ChangeListColumn.DATE, ChangeListColumn.NAME }; + private RowSorter.SortKey mySortKey; public CommittedChangesTableModel(final List changeLists, boolean asynchLoad) { super(buildColumnInfos(ourDefaultColumns), changeLists, 0); @@ -46,25 +47,13 @@ public class CommittedChangesTableModel extends ListTableModel vcsFileRevisions) { - Collections.sort(vcsFileRevisions, myRevisionsInOrderComparator); - } - @Override public String getPreferredStringValue() { return "123.4567"; @@ -503,28 +499,14 @@ public class FileHistoryPanelImpl rowSorter = flatView.getRowSorter(); + if (rowSorter != null) { + rowSorter.setSortKeys(Arrays.asList(new RowSorter.SortKey(0, SortOrder.DESCENDING))); } - else { - sortableModel.sortByColumn(getColumnIndex(null), SortableColumnModel.SORT_DESCENDING); - } - - } - - private int getColumnIndex(final ColumnInfo defaultColumnToSortBy) { - for (int i = 0; i < COLUMNS.length; i++) { - DualViewColumnInfo dualViewColumnInfo = COLUMNS[i]; - if (dualViewColumnInfo instanceof MyColumnWrapper) { - if (((MyColumnWrapper)dualViewColumnInfo).getOriginalColumn() == defaultColumnToSortBy) { - return i; - } - } - } - return 0; } private static void makeBold(Component component) { diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/configuration/UIPropertyBinding.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/configuration/UIPropertyBinding.java index 94d29bd829d9..17200c663033 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/configuration/UIPropertyBinding.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/configuration/UIPropertyBinding.java @@ -22,7 +22,6 @@ import com.intellij.ui.ListScrollingUtil; import com.intellij.ui.SortedListModel; import com.intellij.ui.TableUtil; import com.intellij.ui.table.BaseTableView; -import com.intellij.ui.table.TableHeaderRenderer; import com.intellij.util.config.AbstractProperty; import com.intellij.util.config.ListProperty; import com.intellij.util.config.StorageProperty; @@ -372,15 +371,6 @@ public abstract class UIPropertyBinding { } table.setSurrendersFocusOnKeystroke(true); // support for sorting - header.setDefaultRenderer(new TableHeaderRenderer(myModel)); - header.addMouseListener(new MouseAdapter() { - public void mouseClicked(final MouseEvent e) { - if (myModel.isSortable()) { - final int column = table.convertColumnIndexToModel(header.columnAtPoint(e.getPoint())); - myModel.sortByColumn(column); - } - } - }); myModel.addTableModelListener(new TableModelListener() { public void tableChanged(final TableModelEvent e) { final JTableHeader header = getComponent().getTableHeader(); @@ -406,9 +396,6 @@ public abstract class UIPropertyBinding { break; } } - if (sortByColumn != -1) { - myModel.sortByColumn(sortByColumn, myModel.getSortingType()); - } } TableUtil.ensureSelectionExists(getComponent()); } diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsTable.java b/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsTable.java index bb8eca3b22e2..2eeb14d328c6 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsTable.java +++ b/plugins/junit/src/com/intellij/execution/junit2/ui/StatisticsTable.java @@ -32,8 +32,8 @@ public class StatisticsTable extends ListTableModel { private TestProxy myTest; private JUnitRunningModel myModel; - public StatisticsTable(final ColumnInfo[] collumnNames) { - super(collumnNames); + public StatisticsTable(final ColumnInfo[] columnNames) { + super(columnNames); } public void setModel(final JUnitRunningModel model) { @@ -62,16 +62,6 @@ public class StatisticsTable extends ListTableModel { setItems(new ArrayList()); } - public int getRowCount() { - return super.getRowCount() + 1; - } - - public Object getValueAt(final int rowIndex, final int columnIndex) { - if (rowIndex == 0) - return testProperty(columnIndex); - return super.getValueAt(rowIndex - 1, columnIndex); - } - public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) { LOG.error("value: " + aValue + " row: " + rowIndex + " column: " + columnIndex); } @@ -80,6 +70,7 @@ public class StatisticsTable extends ListTableModel { return false; } + // TODO: move out of the table private Object testProperty(final int columnIndex) { if (columnIndex == 0) return ExecutionBundle.message("junit.runing.info.total.label"); @@ -89,15 +80,13 @@ public class StatisticsTable extends ListTableModel { public TestProxy getTestAt(final int rowIndex) { if (rowIndex < 0 || rowIndex > getItems().size()) return null; - return (rowIndex == 0) ? myTest : (TestProxy)getItems().get(rowIndex - 1); + return (TestProxy)getItems().get(rowIndex); } public int getIndexOf(final Object test) { - if (test == myTest) - return 0; for (int i = 0; i < getItems().size(); i++) { final Object child = getItems().get(i); - if (child == test) return i + 1; + if (child == test) return i; } return -1; } diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/TestTableRenderer.java b/plugins/junit/src/com/intellij/execution/junit2/ui/TestTableRenderer.java index 2eea2f839d73..e8a90d701ad4 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/ui/TestTableRenderer.java +++ b/plugins/junit/src/com/intellij/execution/junit2/ui/TestTableRenderer.java @@ -40,12 +40,6 @@ class TestTableRenderer implements TableCellRenderer { final int row, final int column) { final int modelColumn = table.convertColumnIndexToModel(column); final TableCellRenderer renderer = myRenderers[modelColumn]; - if (row == 0) { - final Component component = ((modelColumn == 0) ? myLeftTopRenderer : renderer). - getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - component.setFont(component.getFont().deriveFont(Font.BOLD)); - return component; - } return renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); }