package org.insightech.er.common.widgets.table;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.DefaultCellEditor;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
import javax.swing.text.JTextComponent;
import javax.swing.text.TextAction;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Display;
import org.insightech.er.ResourceString;
public class CustomCellEditor extends DefaultCellEditor implements
TableCellEditor {
private static final long serialVersionUID = 1715411332743091739L;
public CustomCellEditor(final JTable table) {
super(new JTextField());
final JTextField component = (JTextField) getComponent();
component.setName("Table.editor");
component.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0) {
if (e.getKeyCode() == ';') {
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss.SSS");
component.setText(format.format(new Date()));
} else if (e.getKeyCode() == 'v' || e.getKeyCode() == 'V') {
component.paste();
} else if (e.getKeyCode() == 'c' || e.getKeyCode() == 'C') {
component.copy();
} else if (e.getKeyCode() == 'x' || e.getKeyCode() == 'X') {
component.cut();
}
}
super.keyPressed(e);
}
});
component.setComponentPopupMenu(new TextFieldPopupMenu());
}
// public Component getTableCellEditorComponent(JTable table, Object value,
// boolean isSelected, int rowIndex, int vColIndex) {
// if (value == null) {
// value = "";
// }
//
// this.component.setText(String.valueOf(value));
//
// return this.component;
// }
//
// public Object getCellEditorValue() {
// return this.component.getText();
// }
private static class TextFieldPopupMenu extends JPopupMenu {
private static final long serialVersionUID = 5180658114688605208L;
private TextFieldPopupMenu() {
FontData fontData = Display.getCurrent().getSystemFont()
.getFontData()[0];
Font font = new Font(fontData.getName(), Font.PLAIN, 12);
JMenuItem cutMenuItem = this.add(new CutAction());
cutMenuItem.setFont(font);
JMenuItem copyMenuItem = this.add(new CopyAction());
copyMenuItem.setFont(font);
JMenuItem pasteMenuItem = this.add(new PasteAction());
pasteMenuItem.setFont(font);
}
}
private static class CutAction extends TextAction {
private static final long serialVersionUID = 9018455792592465382L;
public CutAction() {
super(ResourceString.getResourceString("action.title.cut"));
}
public void actionPerformed(ActionEvent e) {
JTextComponent target = getTextComponent(e);
if (target != null) {
target.cut();
}
}
}
private static class CopyAction extends TextAction {
private static final long serialVersionUID = 9018455792592465382L;
public CopyAction() {
super(ResourceString.getResourceString("action.title.copy"));
}
public void actionPerformed(ActionEvent e) {
JTextComponent target = getTextComponent(e);
if (target != null) {
target.copy();
}
}
}
private static class PasteAction extends TextAction {
private static final long serialVersionUID = 9018455792592465382L;
public PasteAction() {
super(ResourceString.getResourceString("action.title.paste"));
}
public void actionPerformed(ActionEvent e) {
JTextComponent target = getTextComponent(e);
if (target != null) {
target.paste();
}
}
}
}