package com.jetbrains.actionscript.profiler.base; import com.intellij.ui.JBColor; import com.intellij.ui.treeStructure.treetable.TreeTable; import com.intellij.util.ui.ColumnInfo; import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.border.MatteBorder; import javax.swing.table.TableCellRenderer; import javax.swing.tree.DefaultMutableTreeNode; import java.awt.*; import java.awt.event.MouseEvent; import java.util.Comparator; /** * @author: Fedor.Korotkov */ public class BaseSortableTreeTable extends TreeTable { private static final int DEFAULT_ROW_HEIGHT = 20; public BaseSortableTreeTable(ColumnInfo[] columns) { super(new BoundedSortableListTreeTableModel(new DefaultMutableTreeNode(), columns)); setAutoCreateRowSorter(false); TreeTableRowSorter rowSorter = new TreeTableRowSorter(this); for (int i = 0; i < getSortableTreeTableModel().getColumnCount(); ++i) { TableCellRenderer tableCellRenderer = getSortableTreeTableModel().getRenderer(i); if (tableCellRenderer != null) { getColumnModel().getColumn(i).setCellRenderer(tableCellRenderer); } Comparator comparator = getSortableTreeTableModel().getComparator(i); if (comparator != null) { rowSorter.setComparator(i, comparator); } } setRowSorter(rowSorter); setRowHeight(DEFAULT_ROW_HEIGHT); } @NotNull @Override public Component prepareRenderer(@NotNull TableCellRenderer renderer, int row, int column) { JComponent jComponent = (JComponent)super.prepareRenderer(renderer, row, column); jComponent.setBorder(new MatteBorder(0, 0, 1, 0, JBColor.LIGHT_GRAY)); return jComponent; } @Override public String getToolTipText(MouseEvent event) { final Point p = event.getPoint(); final int hitColumnIndex = columnAtPoint(p); final int hitRowIndex = rowAtPoint(p); if ((hitColumnIndex != -1) && (hitRowIndex != -1)) { return getValueAt(hitRowIndex, hitColumnIndex).toString(); } return getToolTipText(); } public void reload() { getSortableTreeTableModel().reload(); } public SortableListTreeTableModel getSortableTreeTableModel() { return (SortableListTreeTableModel)getTableModel(); } }