/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.support.swing;
import com.eviware.soapui.support.UISupport;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JPopupMenu;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.event.ActionEvent;
public final class RSyntaxAreaPopupMenu extends JPopupMenu implements PopupMenuListener {
private final RSyntaxTextArea textComponent;
private CutAction cutAction;
private CopyAction copyAction;
private PasteAction pasteAction;
private ClearAction clearAction;
private SelectAllAction selectAllAction;
private UndoAction undoAction;
private RedoAction redoAction;
public static RSyntaxAreaPopupMenu add(RSyntaxTextArea textComponent) {
// double-check
if (textComponent.getComponentPopupMenu() instanceof RSyntaxAreaPopupMenu) {
return (RSyntaxAreaPopupMenu) textComponent.getComponentPopupMenu();
}
RSyntaxAreaPopupMenu popupMenu = new RSyntaxAreaPopupMenu(textComponent);
textComponent.setComponentPopupMenu(popupMenu);
return popupMenu;
}
private RSyntaxAreaPopupMenu(RSyntaxTextArea textComponent) {
super("Edit");
this.textComponent = textComponent;
undoAction = new UndoAction();
add(undoAction);
redoAction = new RedoAction();
add(redoAction);
addSeparator();
cutAction = new CutAction();
add(cutAction);
copyAction = new CopyAction();
add(copyAction);
pasteAction = new PasteAction();
add(pasteAction);
clearAction = new ClearAction();
add(clearAction);
addSeparator();
selectAllAction = new SelectAllAction();
add(selectAllAction);
addPopupMenuListener(this);
}
private final class CutAction extends AbstractAction {
public CutAction() {
super("Cut");
putValue(Action.ACCELERATOR_KEY, UISupport.getKeyStroke("menu X"));
}
public void actionPerformed(ActionEvent e) {
textComponent.cut();
}
}
private final class CopyAction extends AbstractAction {
public CopyAction() {
super("Copy");
putValue(Action.ACCELERATOR_KEY, UISupport.getKeyStroke("menu C"));
}
public void actionPerformed(ActionEvent e) {
textComponent.copy();
}
}
private final class PasteAction extends AbstractAction {
public PasteAction() {
super("Paste");
putValue(Action.ACCELERATOR_KEY, UISupport.getKeyStroke("menu V"));
}
public void actionPerformed(ActionEvent e) {
if (!textComponent.hasFocus()) {
textComponent.requestFocusInWindow();
}
textComponent.paste();
}
}
private final class ClearAction extends AbstractAction {
public ClearAction() {
super("Clear");
}
public void actionPerformed(ActionEvent e) {
textComponent.setText("");
}
}
private final class SelectAllAction extends AbstractAction {
public SelectAllAction() {
super("Select All");
putValue(Action.ACCELERATOR_KEY, UISupport.getKeyStroke("menu A"));
}
public void actionPerformed(ActionEvent e) {
if (!textComponent.hasFocus()) {
textComponent.requestFocusInWindow();
}
textComponent.selectAll();
}
}
private final class UndoAction extends AbstractAction {
public UndoAction() {
super("Undo");
putValue(Action.ACCELERATOR_KEY, UISupport.getKeyStroke("menu Z"));
}
public void actionPerformed(ActionEvent e) {
textComponent.undoLastAction();
}
}
private final class RedoAction extends AbstractAction {
public RedoAction() {
super("Redo");
putValue(Action.ACCELERATOR_KEY, UISupport.getKeyStroke("menu Y"));
}
public void actionPerformed(ActionEvent e) {
textComponent.redoLastAction();
}
}
public void popupMenuCanceled(PopupMenuEvent e) {
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
// undoAction.setEnabled( textComponent.canUndo() );
// redoAction.setEnabled( textComponent.canRedo() );
cutAction.setEnabled(textComponent.getSelectionEnd() != textComponent.getSelectionStart());
copyAction.setEnabled(cutAction.isEnabled());
clearAction.setEnabled(cutAction.isEnabled());
selectAllAction.setEnabled(textComponent.getText().length() > 0);
}
}