blob: 19e12595de772a81eb8e42b49f8be40243b37d7e [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ui.treeStructure.treetable;
import com.intellij.util.ui.ClientPropertyHolder;
import com.intellij.util.ui.UIUtil;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;
import javax.swing.tree.TreeCellRenderer;
import java.awt.*;
/**
* A TreeCellRenderer that displays a JTree.
*/
public class TreeTableCellRenderer implements TableCellRenderer, ClientPropertyHolder {
private final TreeTable myTreeTable;
private final TreeTableTree myTree;
private TreeCellRenderer myTreeCellRenderer;
private Border myDefaultBorder = UIUtil.getTableFocusCellHighlightBorder();
public TreeTableCellRenderer(TreeTable treeTable, TreeTableTree tree) {
myTreeTable = treeTable;
myTree = tree;
}
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){
myTree.setBackground(table.getSelectionBackground());
myTree.setForeground(table.getSelectionForeground());
}
else{
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(modelRow);
final Object treeObject = myTree.getPathForRow(modelRow).getLastPathComponent();
boolean leaf = myTree.getModel().isLeaf(treeObject);
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());
}
//myTree.setCellFocused(false);
return myTree;
}
public void setCellRenderer(TreeCellRenderer treeCellRenderer) {
myTreeCellRenderer = treeCellRenderer;
}
public void setDefaultBorder(Border border) {
myDefaultBorder = border;
}
public void putClientProperty(String key, Object value) {
myTree.putClientProperty(key, value);
}
public void putClientProperty(String s, String s1) {
putClientProperty(s, (Object)s1);
}
public void setRootVisible(boolean b) {
myTree.setRootVisible(b);
}
public void setShowsRootHandles(boolean b) {
myTree.setShowsRootHandles(b);
}
}