/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.aionemu.packetsamurai.gui.protocoleditor;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import javax.swing.DefaultCellEditor;
import javax.swing.Icon;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellRenderer;
import org.jdesktop.swingx.JXTreeTable;
import org.jdesktop.swingx.JXTree.DelegatingRenderer;
@SuppressWarnings("serial")
public class TreeTableComboBoxCellEditor extends DefaultCellEditor
{
/**
*
*/
private final JXTreeTable table;
public TreeTableComboBoxCellEditor(JXTreeTable table)
{
super(new PartTypeComboBox());
this.table = table;
}
public JComboBox getComboBox()
{
return (JComboBox) getComponent();
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int r, int c)
{
Component component = super.getTableCellEditorComponent(table, value, isSelected, r, c);
//boolean rv = t.isRootVisible();
//int offsetRow = rv ? r : r - 1;
int offsetRow = r;
Rectangle bounds = this.table.getCellRect(offsetRow, 0, false);
int offset = bounds.x;
TreeCellRenderer tcr = this.table.getTreeCellRenderer();
System.out.println("Renderer is a : "+tcr);
if(tcr instanceof DelegatingRenderer)
tcr = ((DelegatingRenderer)tcr).getDelegateRenderer();
System.out.println("After un-delegataion, renderer is a : "+tcr);
if (tcr instanceof DefaultTreeCellRenderer)
{
System.out.println("Renderer is a DefaultTreeCellRenderer");
Object node = this.table.getPathForRow(offsetRow).getLastPathComponent();
int depth = this.table.getPathForRow(offsetRow).getPathCount();
System.out.println("Node's depth is "+depth);
offset += (depth - 1) * 20;
Icon icon;
if (this.table.getTreeTableModel().isLeaf(node))
icon = ((DefaultTreeCellRenderer) tcr).getLeafIcon();
else if (this.table.isExpanded(offsetRow))
icon = ((DefaultTreeCellRenderer) tcr).getOpenIcon();
else
icon = ((DefaultTreeCellRenderer) tcr).getClosedIcon();
if (icon != null)
{
offset += ((DefaultTreeCellRenderer) tcr).getIconTextGap()
+ icon.getIconWidth();
}
}
((PartTypeComboBox) getComponent()).offset = offset;
((PartTypeComboBox) getComponent()).setSelectedItem(value);
return component;
}
public boolean isCellEditable(EventObject e)
{
if (e instanceof MouseEvent)
{
MouseEvent me = (MouseEvent)e;
if (me.getClickCount() >= 2)
{
return true;
}
return false;
}
if (e == null)
{
return true;
}
return false;
}
}