./druid/src/org/dlib/gui/treetable/TreeTableCellRenderer.java
//==============================================================================
//===
//=== TreeTableCellRenderer
//===
//=== Copyright (C) by Andrea Carboni.
//=== This file may be distributed under the terms of the LGPL license.
//==============================================================================
package org.dlib.gui.treetable;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;
import org.dlib.gui.event.ToolTipHandler;
import org.dlib.gui.treeview.TreeView;
import org.dlib.gui.treeview.TreeViewNode;
//==============================================================================
class TreeTableCellRenderer extends TreeView implements TableCellRenderer
{
private int currentRow;
private boolean currentFocus;
private JTable table;
private static Border focusedBorder = UIManager.getBorder("Table.focusCellHighlightBorder");
//---------------------------------------------------------------------------
//---
//--- Constructor
//---
//---------------------------------------------------------------------------
public TreeTableCellRenderer(JTable table)
{
this.table = table;
}
//---------------------------------------------------------------------------
//---
//--- Overridden methods
//---
//---------------------------------------------------------------------------
public void setBounds(int x, int y, int w, int h)
{
super.setBounds(x, 0, w, table.getHeight());
}
//---------------------------------------------------------------------------
public void paint(Graphics g)
{
g.translate(0, -currentRow * getRowHeight());
super.paint(g);
if (currentFocus)
focusedBorder.paintBorder(this, g, 0, currentRow*getRowHeight(),
getWidth(), getRowHeight() -1);
}
//---------------------------------------------------------------------------
public String getToolTipText(MouseEvent e)
{
//--- when editing, tooltips create graphic arifacts
if (isEditing())
return null;
//--- this line is needed to setup the currentRow variable
super.getToolTipText(e);
Object object = getPathForRow(currentRow).getLastPathComponent();
if (object instanceof TreeViewNode)
{
TreeViewNode node = (TreeViewNode) object;
return node.getToolTip();
}
else if (object != null)
{
ToolTipHandler handler = getToolTipHandler();
if (handler != null)
return handler.getToolTip(object);
}
return null;
}
//---------------------------------------------------------------------------
//---
//--- TableCellRenderer
//---
//---------------------------------------------------------------------------
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column)
{
if(isSelected) setBackground(table.getSelectionBackground());
else setBackground(table.getBackground());
currentRow = row;
currentFocus = hasFocus;
return this;
}
}
//==============================================================================