/* VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases. Copyright (C) 2008 Kevin Darty, Alain Denise and Yann Ponty. electronic mail : Yann.Ponty@lri.fr paper mail : LRI, bat 490 University Paris-Sud 91405 Orsay Cedex France This file is part of VARNA version 3.1. VARNA version 3.1 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 3 of the License, or (at your option) any later version. VARNA version 3.1 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 VARNA version 3.1. If not, see http://www.gnu.org/licenses. */ package fr.orsay.lri.varna.controlers; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.Point2D; import fr.orsay.lri.varna.VARNAPanel; import fr.orsay.lri.varna.views.VueUI; /** * VARNAPanel Shortcuts Controller * * @author darty * */ public class ControleurVARNAPanelKeys implements KeyListener, FocusListener { private VARNAPanel _vp; public ControleurVARNAPanelKeys(VARNAPanel vp) { _vp = vp; } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { // prise du focus //_vp.requestFocus(); } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void keyPressed(KeyEvent e) { boolean controlDown = (e.getModifiersEx() & (KeyEvent.CTRL_DOWN_MASK)) == KeyEvent.CTRL_DOWN_MASK; boolean shiftDown = (e.getModifiersEx() & (KeyEvent.SHIFT_DOWN_MASK)) == KeyEvent.SHIFT_DOWN_MASK; boolean altDown = (e.getModifiersEx() & (KeyEvent.ALT_DOWN_MASK)) == KeyEvent.ALT_DOWN_MASK; VueUI ui = _vp.getVARNAUI(); try { switch (e.getKeyCode()) { case (KeyEvent.VK_A): if (controlDown) { ui.UIAbout(); } break; case (KeyEvent.VK_B): if (controlDown) { ui.UISetBorder(); } break; case (KeyEvent.VK_C): if (shiftDown && controlDown) { ui.UISetColorMapCaption(); } break; case (KeyEvent.VK_D): if (controlDown) { if (shiftDown) { ui.UIPickGapsBasesColor(); } else { ui.UIToggleColorGapsBases(); } } break; case (KeyEvent.VK_E): if (controlDown) { ui.UIToggleShowNonPlanar(); } break; case (KeyEvent.VK_F): if (controlDown) { ui.UIToggleFlatExteriorLoop(); } break; case (KeyEvent.VK_G): if (controlDown) { ui.UISetBackground(); } else if (!shiftDown && altDown) { ui.UIToggleGaspinMode(); } break; case (KeyEvent.VK_H): if (controlDown && !shiftDown) { ui.UISetBPHeightIncrement(); } else if (controlDown && shiftDown) { Point2D.Double p = _vp.getLastSelectedPosition(); ui.UIAnnotationsAddPosition((int)p.x,(int)p.y); } break; case (KeyEvent.VK_J): if (controlDown) { if (shiftDown) { ui.UIPickSpecialBasesColor(); } else { ui.UIToggleColorSpecialBases(); } } break; case (KeyEvent.VK_K): if (controlDown && shiftDown) { ui.UILoadColorMapValues(); } else if (controlDown) { ui.UISetBackboneColor(); } break; case (KeyEvent.VK_L): if (shiftDown && controlDown) { ui.UIToggleColorMap(); } else if (controlDown) { ui.UISetColorMapStyle(); } else if (shiftDown) { ui.UISetColorMapValues(); } break; case (KeyEvent.VK_M): if (controlDown) { ui.UISetNumPeriod(); } else if (shiftDown && altDown) { ui.UIToggleModifiable(); } break; case (KeyEvent.VK_N): if (controlDown) { ui.UIManualInput(); } break; case (KeyEvent.VK_O): if (controlDown) { ui.UIFile(); } break; case (KeyEvent.VK_P): if (controlDown && shiftDown) { ui.UISetBPStyle(); } else if (controlDown && !shiftDown) { ui.UIPrint(); } break; case (KeyEvent.VK_Q): if (controlDown && !shiftDown && !altDown) { _vp.getVARNAUI().UIAutoAnnotateHelices(); } else if (controlDown && shiftDown && !altDown) { _vp.getVARNAUI().UIAutoAnnotateTerminalLoops(); } else if (!controlDown && shiftDown && altDown) { _vp.getVARNAUI().UIAutoAnnotateInteriorLoops(); } else if (controlDown && !shiftDown && altDown) { _vp.getVARNAUI().UIAutoAnnotateStrandEnds(); } break; case (KeyEvent.VK_R): if (controlDown) { if (shiftDown) { ui.UIReset(); } else { ui.UIGlobalRotation(); } } break; case (KeyEvent.VK_S): if (controlDown) { if (shiftDown) { ui.UISetSpaceBetweenBases(); } else { ui.UISaveAs(); } } break; case (KeyEvent.VK_T): if (controlDown) { if (shiftDown) { ui.UISetTitleFont(); } else if (altDown) { ui.UISetTitleColor(); } else { ui.UISetTitle(); } } break; case (KeyEvent.VK_U): if (controlDown && !shiftDown && !altDown) { _vp.getVARNAUI().UIBaseTypeColor(); } else if (!controlDown && shiftDown && !altDown) { _vp.getVARNAUI().UIBasePairTypeColor(); } else if (!controlDown && !shiftDown && altDown) { _vp.getVARNAUI().UIBaseAllColor(); } break; case (KeyEvent.VK_W): if (controlDown) { ui.UIToggleShowNCBP(); } break; case (KeyEvent.VK_X): if (controlDown) { ui.UIExport(); } break; case (KeyEvent.VK_Y): if (controlDown) { ui.UIRedo(); } break; case (KeyEvent.VK_Z): if (controlDown && !shiftDown) { ui.UIUndo(); } else if (controlDown && shiftDown) { ui.UIRedo(); } else if (!controlDown && !shiftDown) { ui.UICustomZoom(); } break; case (KeyEvent.VK_1): if (controlDown) { ui.UILine(); } break; case (KeyEvent.VK_2): if (controlDown) { ui.UICircular(); } break; case (KeyEvent.VK_3): if (controlDown) { ui.UIRadiate(); } break; case (KeyEvent.VK_4): if (controlDown) { ui.UINAView(); } break; case (KeyEvent.VK_5): if (controlDown) { ui.UIVARNAView(); } break; case (KeyEvent.VK_6): if (controlDown) { ui.UIMOTIFView(); } break; // Navigation control keys (Zoom in/out, arrow keys ...) case (KeyEvent.VK_DOWN): if (_vp.getZoom() > 1) { _vp.getTranslation().y -= 5; _vp.checkTranslation(); } break; case (KeyEvent.VK_UP): if (_vp.getZoom() > 1) { _vp.getTranslation().y += 5; _vp.checkTranslation(); } break; case (KeyEvent.VK_LEFT): if (_vp.getZoom() > 1) { _vp.getTranslation().x += 5; _vp.checkTranslation(); } break; case (KeyEvent.VK_RIGHT): if (_vp.getZoom() > 1) { _vp.getTranslation().x -= 5; _vp.checkTranslation(); } break; case (KeyEvent.VK_EQUALS): case (KeyEvent.VK_PLUS): ui.UIZoomIn(); break; case (KeyEvent.VK_MINUS): ui.UIZoomOut(); break; } } catch (Exception e1) { _vp.errorDialog(e1); } _vp.repaint(); } /** * if ((e.getKeyCode() == KeyEvent.VK_PLUS)||(e.getKeyChar() == '+')) { * _vp.getVARNAUI().UIZoomIn(); } else if (e.getKeyCode() == * KeyEvent.VK_MINUS) { _vp.getVARNAUI().UIZoomOut(); } // 1 pour Redraw * Radiate else if (e.getKeyChar() == KeyEvent.VK_1) { * _vp.getVARNAUI().UIRadiate(); } // 2 pour Redraw Circular else if * (e.getKeyChar() == KeyEvent.VK_2) { _vp.getVARNAUI().UICircular(); } // 3 * pour Redraw NAView else if (e.getKeyChar() == KeyEvent.VK_3) { * _vp.getVARNAUI().UINAView(); } * * // 4 for RNA on a line else if (e.getKeyChar() == KeyEvent.VK_4) { * _vp.getVARNAUI().UILine(); } // 5 fun arn random coord else if * (e.isControlDown() && e.getKeyChar() == KeyEvent.VK_9) { for (int i = 0; * i < _vp.getRNA().get_listeBases().size(); i++) { * _vp.getRNA().get_listeBases().get(i).set_coords( new * Point2D.Double(_vp.getWidth() * Math.random(), _vp.getHeight() * * Math.random())); _vp.getRNA().get_listeBases().get(i).set_center( new * Point2D.Double(_vp.getWidth() / 2 Math.random(), _vp.getHeight() / 2 * Math.random())); } } // 6 fun random arn structure else if * (e.isControlDown() & e.getKeyChar() == KeyEvent.VK_8) { try { * _vp.drawRNA(_vp.getRNA().getListeBasesToString(), getRandomRNA(), _vp * .getRNA().get_drawMode()); } catch (ExceptionNonEqualLength e1) { * _vp.errorDialog(e1); } } _vp.repaint(); } **/ public String getRandomRNA() { int pile = 0, j, i = 0; double l; String fun = ""; while (i < 2000) { if (Math.random() > 0.5) { j = 0; l = Math.random() * 10; while (j < l) { fun += '.'; i++; j++; } } else { if (Math.random() > 0.5 && pile > 0) { j = 0; l = Math.random() * 5; while (j < l && pile > 0) { fun += ')'; pile--; j++; i++; } } else { j = 0; l = Math.random() * 5; while (j < l) { fun += '('; pile++; j++; i++; } } } } while (pile > 0) { fun += ')'; pile--; } return fun; } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } public void focusGained(FocusEvent arg0) { _vp.repaint(); } public void focusLost(FocusEvent arg0) { _vp.repaint(); } }