package open.dolphin.client;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.JTextComponent;
/**
*
* @author Kazushi Minagawa. Digital Globe, Inc.
*/
public class CutCopyPasteAdapter extends MouseAdapter {
private final String CUT;
private final String COPY;
private final String PASTE;
private static final CutCopyPasteAdapter instance = new CutCopyPasteAdapter();
private CutCopyPasteAdapter() {
java.util.ResourceBundle bundle = ClientContext.getMyBundle(CutCopyPasteAdapter.class);
CUT = bundle.getString("cut");
COPY = bundle.getString("copy");
PASTE = bundle.getString("paste");
}
public static CutCopyPasteAdapter getInstance() {
return instance;
}
private void mabeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
JTextComponent tc = (JTextComponent)e.getSource();
JPopupMenu pop = new JPopupMenu();
JMenuItem cutItem = new JMenuItem(new DefaultEditorKit.CutAction());
cutItem.setText(CUT);
cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
pop.add(cutItem);
JMenuItem copyItem = new JMenuItem(new DefaultEditorKit.CopyAction());
copyItem.setText(COPY);
copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
pop.add(copyItem);
JMenuItem pasteItem = new JMenuItem(new DefaultEditorKit.PasteAction());
pasteItem.setText(PASTE);
pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
pop.add(pasteItem);
boolean hasSelection = tc.getSelectionStart()!=tc.getSelectionEnd();
cutItem.setEnabled(tc.isEditable() && hasSelection);
copyItem.setEnabled(hasSelection);
Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
boolean canPaste = true;
canPaste = canPaste && (t!=null);
canPaste = canPaste && (t!=null && (t.isDataFlavorSupported(DataFlavor.stringFlavor) ||
t.isDataFlavorSupported(OrderListTransferable.orderListFlavor)));
pasteItem.setEnabled(canPaste);
pop.show(e.getComponent(), e.getX(), e.getY());
}
}
@Override
public void mousePressed(MouseEvent e) {
mabeShowPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
mabeShowPopup(e);
}
}