/**
*
*/
package org.korsakow.ide.ui.components.cell;
import javax.swing.DefaultCellEditor;
import javax.swing.JTextField;
import javax.swing.event.CellEditorListener;
import org.korsakow.ide.ui.components.event.VetoableChangeEvent;
public class DefaultAdvancedCellEditor extends DefaultCellEditor
{
public DefaultAdvancedCellEditor()
{
super(new JTextField());
}
protected boolean tryStopCellEditing()
{
return fireEditingWillStop();
}
protected boolean doStopCellEditing()
{
return super.stopCellEditing();
}
@Override
public boolean stopCellEditing()
{
if (!fireEditingWillStop())
return false;
return doStopCellEditing();
}
public void setEditorValue(Object value)
{
delegate.setValue(value);
}
protected boolean fireEditingWillStop()
{
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
VetoableChangeEvent changeEvent = null;
for (int i = listeners.length-2; i>=0; i-=2) {
if ((listeners[i]==CellEditorListener.class &&
listeners[i+1] instanceof AdvancedCellEditorListener)) {
// Lazily create the event:
if (changeEvent == null)
changeEvent = new VetoableChangeEvent(this);
((AdvancedCellEditorListener)listeners[i+1]).editingWillStop(changeEvent);
}
}
return changeEvent==null || !changeEvent.isVetoted();
}
}