/* * @(#)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) { } } }