/*FreeMind - A Program for creating and viewing Mindmaps *Copyright (C) 2000-2001 Joerg Mueller <joergmueller@bigfoot.com> *See COPYING for Details * *This program is free software; you can redistribute it and/or *modify it under the terms of the GNU General Public License *as published by the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program 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 General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package freemind.modes.common; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.logging.Logger; import javax.swing.KeyStroke; import freemind.main.Resources; import freemind.modes.ModeController; /** * The KeyListener which belongs to the node and cares for Events like C-D * (Delete Node). It forwards the requests to NodeController. */ public class CommonNodeKeyListener implements KeyListener { public interface EditHandler { void edit(KeyEvent e, boolean addNew, boolean editLong); } private ModeController c; private String up, down, left, right; private boolean disabledKeyType = true; private boolean keyTypeAddsNew = false; private KeyStroke keyStrokeUp; private KeyStroke keyStrokeDown; private KeyStroke keyStrokeLeft; private KeyStroke keyStrokeRight; private final EditHandler editHandler; private static Logger logger; public CommonNodeKeyListener(ModeController controller, EditHandler editHandler) { c = controller; this.editHandler = editHandler; if (logger == null) { logger = controller.getFrame().getLogger(this.getClass().getName()); } up = c.getFrame().getAdjustableProperty("keystroke_move_up"); down = c.getFrame().getAdjustableProperty("keystroke_move_down"); left = c.getFrame().getAdjustableProperty("keystroke_move_left"); right = c.getFrame().getAdjustableProperty("keystroke_move_right"); // like in excel - write a letter means edit (PN) // on the other hand it doesn't allow key navigation (sdfe) disabledKeyType = Resources.getInstance().getBoolProperty( "disable_key_type"); keyTypeAddsNew = Resources.getInstance().getBoolProperty( "key_type_adds_new"); keyStrokeUp = KeyStroke.getKeyStroke(up); keyStrokeDown = KeyStroke.getKeyStroke(down); keyStrokeLeft = KeyStroke.getKeyStroke(left); keyStrokeRight = KeyStroke.getKeyStroke(right); } // // Interface KeyListener // public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { logger.finest("Key pressend " + e.getKeyChar() + " alias " + e.getKeyCode()); // add to check meta keydown by koh 2004.04.16 if (e.isAltDown() || e.isControlDown() || e.isMetaDown()) { return; } switch (e.getKeyCode()) { case KeyEvent.VK_ENTER: case KeyEvent.VK_ESCAPE: case KeyEvent.VK_SHIFT: case KeyEvent.VK_DELETE: case KeyEvent.VK_SPACE: case KeyEvent.VK_INSERT: // fc, 20.6.2004: to enable tab for insert. case KeyEvent.VK_TAB: // end change. return; // processed by Adapters ActionListener // explicitly what is not caught in e.isActionKey() case KeyEvent.VK_UP: case KeyEvent.VK_DOWN: case KeyEvent.VK_LEFT: case KeyEvent.VK_RIGHT: case KeyEvent.VK_PAGE_UP: case KeyEvent.VK_PAGE_DOWN: c.getView().move(e); return; case KeyEvent.VK_HOME: case KeyEvent.VK_END: case KeyEvent.VK_BACK_SPACE: editHandler.edit(e, false, false); return; // case KeyEvent.VK_SPACE: // c.getMode().getModeController().toggleFolded(); // e.consume(); // return; } // printable key creates new node in edit mode (PN) if (!disabledKeyType) { if (!e.isActionKey() && e.getKeyChar() != KeyEvent.CHAR_UNDEFINED) { logger.finest("Starting edit mode with: " + e.getKeyChar()); editHandler.edit(e, keyTypeAddsNew, false); return; // do not process the (sdfe) navigation } } // printable key used for navigation boolean doMove = false; // unified call of the move method (PN) if (keyStrokeUp != null && e.getKeyCode() == keyStrokeUp.getKeyCode()) { e.setKeyCode(KeyEvent.VK_UP); doMove = true; } else if (keyStrokeDown != null && e.getKeyCode() == keyStrokeDown.getKeyCode()) { e.setKeyCode(KeyEvent.VK_DOWN); doMove = true; } else if (keyStrokeLeft != null && e.getKeyCode() == keyStrokeLeft.getKeyCode()) { e.setKeyCode(KeyEvent.VK_LEFT); doMove = true; } else if (keyStrokeRight != null && e.getKeyCode() == keyStrokeRight.getKeyCode()) { e.setKeyCode(KeyEvent.VK_RIGHT); doMove = true; } if (doMove) { c.getView().move(e); e.consume(); return; } } public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_SHIFT) { c.getView().resetShiftSelectionOrigin(); } } }