package org.appwork.utils.swing.table.columns;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import javax.swing.JComponent;
import org.appwork.utils.swing.table.ExtColumn;
import org.appwork.utils.swing.table.ExtTable;
public abstract class ExtComponentColumn<T> extends ExtColumn<T> {
/**
*
*/
private static final long serialVersionUID = 1L;
private MouseAdapter listener;
/**
* @param name
* @param table
*/
public ExtComponentColumn(final String name) {
super(name, null);
this.listener = new MouseAdapter() {
private int col = -1;
private int row = -1;
@Override
public void mouseMoved(final MouseEvent e) {
final ExtTable<T> table = ExtComponentColumn.this.getModel().getTable();
final int col = table.columnAtPoint(e.getPoint());
final int row = table.getRowIndexByPoint(e.getPoint());
final int modelIndex = table.getColumnModel().getColumn(col).getModelIndex();
if (col != this.col || row != this.row) {
if (ExtComponentColumn.this.getModel().getExtColumn(modelIndex) == ExtComponentColumn.this) {
ExtComponentColumn.this.onCellUpdate(col, row);
} else {
ExtComponentColumn.this.stopCellEditing();
}
this.col = col;
this.row = row;
}
}
};
}
/*
* (non-Javadoc)
*
* @see org.appwork.utils.swing.table.ExtColumn#getCellEditorValue()
*/
@Override
public Object getCellEditorValue() {
// TODO Auto-generated method stub
return null;
}
@Override
public final JComponent getEditorComponent(final ExtTable<T> table, final T value, final boolean isSelected, final int row, final int column) {
if (this.listener != null) {
this.getModel().getTable().addMouseMotionListener(this.listener);
this.listener = null;
}
return this.getEditorComponent(value, isSelected, row, column);
}
/**
* @param value
* @param isSelected
* @param row
* @param column
* @return
*/
protected abstract JComponent getEditorComponent(T value, boolean isSelected, int row, int column);
@Override
public final JComponent getRendererComponent(final ExtTable<T> table, final T value, final boolean isSelected, final boolean hasFocus, final int row, final int column) {
if (this.listener != null) {
this.getModel().getTable().addMouseMotionListener(this.listener);
this.listener = null;
}
return this.getRendererComponent(value, isSelected, row, column);
}
/**
* @param value
* @param isSelected
* @param row
* @param column
* @return
*/
abstract protected JComponent getRendererComponent(T value, boolean isSelected, int row, int column);
@Override
public boolean isCellEditable(final EventObject evt) {
if (evt instanceof MouseEvent) { return false; }
return true;
}
/*
* (non-Javadoc)
*
* @see org.appwork.utils.swing.table.ExtColumn#isEditable(java.lang.Object)
*/
@Override
public boolean isEditable(final T obj) {
// TODO Auto-generated method stub
return true;
}
/*
* (non-Javadoc)
*
* @see org.appwork.utils.swing.table.ExtColumn#isEnabled(java.lang.Object)
*/
@Override
public boolean isEnabled(final T obj) {
// TODO Auto-generated method stub
return true;
}
/*
* (non-Javadoc)
*
* @see org.appwork.utils.swing.table.ExtColumn#isSortable(java.lang.Object)
*/
@Override
public boolean isSortable(final T obj) {
// TODO Auto-generated method stub
return false;
}
/**
* @param col
* @param row
*/
protected void onCellUpdate(final int col, final int row) {
this.stopCellEditing();
this.getModel().getTable().editCellAt(row, col);
}
/*
* (non-Javadoc)
*
* @see org.appwork.utils.swing.table.ExtColumn#setValue(java.lang.Object,
* java.lang.Object)
*/
@Override
public void setValue(final Object value, final T object) {
// TODO Auto-generated method stub
}
}