package me.drton.flightplot;
import javax.swing.*;
import javax.swing.table.TableCellEditor;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.EventObject;
/**
* Created by ton on 13.03.15.
*/
class ParamValueTableCellEditor extends AbstractCellEditor implements TableCellEditor {
private FlightPlot app;
private TableCellEditor editor;
public ParamValueTableCellEditor(FlightPlot app) {
this.app = app;
}
public boolean isCellEditable(EventObject anEvent) {
if (anEvent instanceof MouseEvent) {
return ((MouseEvent)anEvent).getClickCount() >= 2;
}
return true;
}
@Override
public Object getCellEditorValue() {
return editor != null ? editor.getCellEditorValue() : null;
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
app.setEditingProcessor();
if (value instanceof Color) {
editor = new ColorParamTableCellEditor(app.getColorSupplier());
((ColorParamTableCellEditor) editor).getComponent().addActionListener(new ActionDelegate());
} else if (value instanceof String) {
JTextField textField = new JTextField();
textField.setFont(table.getFont());
textField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
editor = new DefaultCellEditor(textField);
((JTextField) ((DefaultCellEditor) editor).getComponent()).addActionListener(new ActionDelegate());
}
return editor.getTableCellEditorComponent(table, value, isSelected, row, column);
}
private class ActionDelegate implements ActionListener {
@Override
public void actionPerformed(ActionEvent actionEvent) {
ParamValueTableCellEditor.this.stopCellEditing();
}
}
}