/*
* (c) 2005-2009 Carlos G�mez Rodr�guez, todos los derechos reservados / all rights reserved.
* Licencia en license/bsd.txt / License in license/bsd.txt
*/
package org.f2o.absurdum.puck.util.swing;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.beans.PropertyChangeListener;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.text.DefaultEditorKit;
import org.jedit.syntax.DefaultInputHandler;
import org.jedit.syntax.InputHandler;
import org.jedit.syntax.JEditTextArea;
import org.jedit.syntax.TextAreaDefaults;
/*
Created 20/04/2008 20:03:25
*/
public class EnhancedJEditTextArea extends JEditTextArea
{
public EnhancedJEditTextArea ( )
{
super();
initEnhancements();
}
Action copyAction = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
InputHandler.getTextArea(e).copy();
}
};
Action pasteAction = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
InputHandler.getTextArea(e).paste();
}
};
Action cutAction = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
InputHandler.getTextArea(e).cut();
}
};
Action selectAllAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
InputHandler.getTextArea(e).selectAll();
}
};
class MouseWheelSupport implements MouseWheelListener {
public void mouseWheelMoved(MouseWheelEvent e) {
int wheelRotationCount = e.getWheelRotation();
int lineToShow = getFirstLine() + wheelRotationCount;
if (wheelRotationCount > 0) {
lineToShow += getVisibleLines();
}
if (lineToShow < 0) {
lineToShow = 0;
}
if (lineToShow >= getLineCount()) {
lineToShow = getLineCount() - 1;
}
scrollTo(lineToShow, getLineStartOffset(lineToShow));
}
}
public EnhancedJEditTextArea ( TextAreaDefaults tad )
{
super(tad);
initEnhancements();
}
public void addPopupMenu ( JMenu popup )
{
JPopupMenu pop = getRightClickPopup();
pop.add(popup);
System.out.println("Add: " + popup);
}
public void initEnhancements()
{
addMouseWheelListener(new MouseWheelSupport());
copyAction.putValue(Action.NAME,"copy");
cutAction.putValue(Action.NAME,"cut");
pasteAction.putValue(Action.NAME,"paste");
final JPopupMenu popupMenu = new JPopupMenu("Edit");
JMenuItem menuItem = new JMenuItem(cutAction);
menuItem.setText("Cut");
menuItem.setMnemonic(KeyEvent.VK_T);
popupMenu.add(menuItem);
menuItem = new JMenuItem(copyAction);
menuItem.setText("Copy");
menuItem.setMnemonic(KeyEvent.VK_C);
popupMenu.add(menuItem);
menuItem = new JMenuItem(pasteAction);
menuItem.setText("Paste");
menuItem.setMnemonic(KeyEvent.VK_P);
popupMenu.add(menuItem);
/*
this.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
processMouseEvent(e);
}
public void mouseReleased(MouseEvent e)
{
processMouseEvent(e);
}
private void processMouseEvent(MouseEvent e)
{
if (e.isPopupTrigger())
{
popupMenu.show(e.getComponent(), e.getX(), e.getY());
popupMenu.setInvoker(EnhancedJEditTextArea.this);
}
}
});
*/
setRightClickPopup(popupMenu);
/*
getInputMap().put(KeyStroke.getKeyStroke("ctrl X"), cutAction.getValue(Action.NAME));
getInputMap().put(KeyStroke.getKeyStroke("ctrl V"), pasteAction.getValue(Action.NAME));
getInputMap().put(KeyStroke.getKeyStroke("ctrl C"), copyAction.getValue(Action.NAME));
getActionMap().put(cutAction.getValue(Action.NAME),cutAction);
getActionMap().put(pasteAction.getValue(Action.NAME),pasteAction);
getActionMap().put(copyAction.getValue(Action.NAME),copyAction);
*/
getInputHandler().addKeyBinding("C+X", cutAction);
getInputHandler().addKeyBinding("C+V", pasteAction);
getInputHandler().addKeyBinding("C+C", copyAction);
getInputHandler().addKeyBinding("C+A", selectAllAction);
}
}