content: /*
   * @(#)NodeCellEditor.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  
  package com.egantt.swing.cell.editor.basic;
  
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseListener;
  
  import javax.swing.JComponent;
  
  import com.egantt.swing.cell.CellState;
  import com.egantt.swing.cell.editor.AbstractCellEditor;
  import com.egantt.swing.cell.renderer.basic.NodeCellRenderer;
  import com.egantt.swing.component.repaint.RepaintManager;
  import com.egantt.swing.table.model.row.RowExpander;
  
  public class NodeCellEditor extends AbstractCellEditor
  {
  	protected final NodeCellRenderer renderer = new NodeCellRenderer();
  	protected final RepaintManager manager;
  	protected final RowExpander expander;
  
  	protected transient LocalMouseListener listener;
  
  	protected transient CellState state;
  
  	public NodeCellEditor(RowExpander expander, RepaintManager manager)
  	{
  		this.expander = expander;
  		this.manager = manager;
  	}
  
  	public Object getValue() {
  		return null;
  	}
  	
  	// __________________________________________________________________________
  
  	public JComponent getComponent(CellState state,JComponent parent)
  	{
  		this.state = state;
  
  		if (listener == null)
  		{
  			listener = new LocalMouseListener();
  			renderer.addMouseListener(listener);
  		}
  
  		return renderer.getComponent(state, parent);
  	}
  
  	/// _________________________________________________________________________
  	
  	public void cancelCellEditing()
  	{
  		if (listener != null)
  		{
  			renderer.removeMouseListener(listener);
  			this.listener = null;
  		}
  	}
  
  	// __________________________________________________________________________
  
  	protected class LocalMouseListener implements MouseListener
  	{
  		// _______________________________________________________________________
  
  		public void mousePressed(MouseEvent e)
  		{
  		}
  
  		public void mouseReleased(MouseEvent e)
  		{
  		}
  
  		// _______________________________________________________________________
  
  		public void mouseClicked(MouseEvent e)
  		{
  			if (!(e.getClickCount() == 2))
  				return;
  
  			expander.toggle(state.getRow(), state.getColumn(), state.getValue());
  			manager.repaint();
  		}
  
  		public void mouseEntered(MouseEvent e)
  		{
  		}
  
  		public void mouseExited(MouseEvent e)
  		{
  		}
  	}
  }