./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;
	}
}

//==============================================================================