package org.rr.jeborker.gui.cell;
import java.awt.Component;
import java.awt.event.MouseListener;
import java.io.Serializable;
import java.util.EventObject;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.table.TableCellEditor;
import org.rr.jeborker.db.item.EbookPropertyItem;
import org.rr.jeborker.gui.MainController;
import org.rr.jeborker.gui.cell.EbookTableCellRenderer.RendererComponent;
public class EbookTableCellEditor implements TableCellEditor, Serializable {
private static final long serialVersionUID = -6770247928468695828L;
private final EbookTableCellRenderer renderer;
private EditListener editListener;
private EbookPropertyItem value;
private RendererComponent tableCellComponent;
public EbookTableCellEditor(final EditListener editListener, final MouseListener popupMouseListener) {
super();
this.editListener = editListener;
renderer = new EbookTableCellRenderer(popupMouseListener, true);
}
@Override
public Object getCellEditorValue() {
return value;
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return true;
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
@Override
public boolean stopCellEditing() {
if(editListener != null) {
editListener.editingStoped();
}
if(tableCellComponent.getStarRaterSelection() > 0) {
MainController.getController().setRatingToSelectedEntry(tableCellComponent.getStarRaterSelection() * 2);
}
tableCellComponent.setStarRaterSelection(0);
return true;
}
@Override
public void cancelCellEditing() {
if(editListener != null) {
editListener.editingCanceled();
}
}
@Override
public void addCellEditorListener(CellEditorListener l) {
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
this.value = (EbookPropertyItem) value;
tableCellComponent = renderer.getTableCellComponent(table, value, true, true, row, column);
if(editListener != null) {
editListener.editingStarted();
}
return tableCellComponent;
}
public interface EditListener {
void editingStarted();
void editingStoped();
void editingCanceled();
}
}