package net.sf.jabref.help;
import java.awt.Point;
import java.awt.event.ActionEvent;
import javax.swing.Action;
import javax.swing.JViewport;
import javax.swing.SwingConstants;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.JTextComponent;
import javax.swing.text.TextAction;
@SuppressWarnings("serial")
public class MyEditorKit extends LargeHTMLEditorKit {
public class MyNextVisualPositionAction extends TextAction {
private Action textActn;
private int direction;
private MyNextVisualPositionAction(Action textActn, int direction) {
super((String) textActn.getValue(Action.NAME));
this.textActn = textActn;
this.direction = direction;
}
public void actionPerformed(ActionEvent e) {
JTextComponent c = getTextComponent(e);
if (c.getParent() instanceof JViewport) {
JViewport viewport = (JViewport) c.getParent();
Point p = viewport.getViewPosition();
if (this.direction == SwingConstants.NORTH) {
c.setCaretPosition(c.viewToModel(p));
} else {
p.y += viewport.getExtentSize().height;
c.setCaretPosition(c.viewToModel(p));
}
}
textActn.actionPerformed(e);
}
}
private Action[] myActions;
public Action[] getActions() {
if (myActions == null) {
Action[] actions = super.getActions();
Action[] newActions = new Action[2];
for (int i = 0; i < actions.length; i++) {
Action actn = actions[i];
String name = (String) actn.getValue(Action.NAME);
if (name.equals(DefaultEditorKit.upAction)) {
newActions[0] = new MyNextVisualPositionAction(actions[i],
SwingConstants.NORTH);
} else if (name.equals(DefaultEditorKit.downAction)) {
newActions[1] = new MyNextVisualPositionAction(actions[i],
SwingConstants.SOUTH);
}
}
myActions = TextAction.augmentList(actions, newActions);
}
return myActions;
}
}