/* * $Id$ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package org.jdesktop.swingx.plaf; import java.util.Map; import javax.swing.ActionMap; import javax.swing.JComponent; import javax.swing.JPasswordField; import javax.swing.text.DefaultEditorKit; import javax.swing.text.JTextComponent; /** * @author Jeanette Winzenburg */ public class TextContextMenuSource extends ContextMenuSource{ String UNDO = "Undo"; String CUT = "Cut"; String COPY = "Copy"; String PASTE = "Paste"; String DELETE = "Delete"; String SELECT_ALL = "Select All"; String[] keys = { DefaultEditorKit.cutAction, DefaultEditorKit.copyAction, DefaultEditorKit.pasteAction, DefaultEditorKit.deleteNextCharAction, null, // separator DefaultEditorKit.selectAllAction }; String[] defaultValues = { CUT, COPY, PASTE, DELETE, null, SELECT_ALL, }; public String[] getKeys() { return keys; } public void updateActionEnabled(JComponent component, ActionMap map) { if (!(component instanceof JTextComponent)) return; JTextComponent textComponent = (JTextComponent) component; boolean selectedText = textComponent.getSelectionEnd() - textComponent.getSelectionStart() > 0; boolean containsText = textComponent.getDocument().getLength() > 0; boolean editable = textComponent.isEditable(); boolean copyProtected = (textComponent instanceof JPasswordField); boolean dataOnClipboard = textComponent.getToolkit() .getSystemClipboard().getContents(null) != null; map.get(DefaultEditorKit.cutAction).setEnabled( !copyProtected && editable && selectedText); map.get(DefaultEditorKit.copyAction).setEnabled( !copyProtected && selectedText); map.get(DefaultEditorKit.pasteAction).setEnabled( editable && dataOnClipboard); map.get(DefaultEditorKit.deleteNextCharAction).setEnabled( editable && selectedText); map.get(DefaultEditorKit.selectAllAction).setEnabled(containsText); } protected void initNames(Map<String, String> names) { for (int i = 0; i < keys.length; i++) { if (keys[i] != null) { names.put(keys[i], getValue(keys[i], defaultValues[i])); } } } /** * @return resource prefix */ protected String getResourcePrefix() { return "DefaultEditorKit."; } }