package jreepad.editor;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.text.JTextComponent;
import javax.swing.text.TextAction;
/**
*
* @author not attributable
* @version 1.1
*/
public class EditPopupHandler
extends MouseAdapter {
private JPopupMenu popupMenu = new JPopupMenu();
public static final String ITEM_CUT = "cut";
public static final String ITEM_COPY = "copy";
public static final String ITEM_PASTE = "paste";
public static final String ITEM_SELECTALL = "selectall";
private final Map itemMap = new HashMap();
public EditPopupHandler() {
super();
itemMap.put(ITEM_COPY, null);
itemMap.put(ITEM_CUT, null);
itemMap.put(ITEM_PASTE, null);
itemMap.put(ITEM_SELECTALL, null);
}
public void addActionItem(TextAction action,
String menuLabel,
String type) {
JMenuItem item = new JMenuItem(action);
item.setText(menuLabel);
popupMenu.add(item);
if (itemMap.containsKey(type)) {
itemMap.put(type, item);
}
}
private void enableMenuItems(MouseEvent e) {
JTextComponent textComp = (JTextComponent) e.getComponent();
String selectedText = textComp.getSelectedText();
boolean textSelected = selectedText != null &&
selectedText.length() > 0;
boolean isEditable = textComp.isEditable();
JMenuItem item = (JMenuItem) itemMap.get(ITEM_COPY);
if (item != null) {
item.setEnabled(textSelected);
}
item = (JMenuItem) itemMap.get(ITEM_CUT);
if (item != null) {
item.setEnabled(textSelected && isEditable);
}
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable contents = clipboard.getContents(null);
boolean hasTransferableText =
(contents != null) &&
contents.isDataFlavorSupported(DataFlavor.stringFlavor);
item = (JMenuItem) itemMap.get(ITEM_PASTE);
if (item != null) {
item.setEnabled(hasTransferableText && isEditable);
}
item = (JMenuItem) itemMap.get(ITEM_SELECTALL);
if (item != null) {
item.setEnabled(true && isEditable);
}
}
/* -------------- from MouseListener -------------- */
public void mouseClicked(MouseEvent e) {
if (e.isPopupTrigger() || e.getButton() == MouseEvent.BUTTON3) {
enableMenuItems(e);
popupMenu.show(e.getComponent(),
e.getX(),
e.getY());
}
}
}