/* 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.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JTable; import fr.orsay.lri.varna.VARNAPanel; import fr.orsay.lri.varna.models.annotations.ChemProbAnnotation; import fr.orsay.lri.varna.models.annotations.HighlightRegionAnnotation; import fr.orsay.lri.varna.models.annotations.TextAnnotation; import fr.orsay.lri.varna.views.VueAnnotation; import fr.orsay.lri.varna.views.VueChemProbAnnotation; import fr.orsay.lri.varna.views.VueHighlightRegionEdit; /** * Mouse action and motion listener for AnnotationTableModel * * @author Darty@lri.fr * */ public class ControleurTableAnnotations implements MouseListener, MouseMotionListener { public static final int REMOVE = 0, EDIT = 1; private JTable _table; private VARNAPanel _vp; private int _type; /** * * @param table * @param vp * @param type * : REMOVE = 0, EDIT = 1 */ public ControleurTableAnnotations(JTable table, VARNAPanel vp, int type) { _table = table; _vp = vp; _type = type; } public void mouseClicked(MouseEvent arg0) { switch (_type) { case EDIT: edit(); break; case REMOVE: remove(); break; default: break; } } /** * if remove case */ private void remove() { _vp.set_selectedAnnotation(null); Object o = _table.getValueAt(_table.getSelectedRow(), 0); if (o instanceof TextAnnotation) { if (!_vp.removeAnnotation((TextAnnotation) o)) _vp.errorDialog(new Exception("Impossible de supprimer")); _table.setValueAt("Deleted!", _table.getSelectedRow(), 0); } else if (o instanceof ChemProbAnnotation) { _vp.getRNA().removeChemProbAnnotation((ChemProbAnnotation) o); _table.setValueAt("Deleted!", _table.getSelectedRow(), 0); } else if (o instanceof HighlightRegionAnnotation) { _vp.getRNA().removeHighlightRegion((HighlightRegionAnnotation) o); _table.setValueAt("Deleted!", _table.getSelectedRow(), 0); } _vp.repaint(); } /** * if edit case */ private void edit() { Object o = _table.getValueAt(_table .getSelectedRow(), 0); if (o instanceof TextAnnotation) { TextAnnotation textAnnot = (TextAnnotation) o; VueAnnotation vueAnnotation; vueAnnotation = new VueAnnotation(_vp, textAnnot, false); vueAnnotation.show(); }else if (o instanceof HighlightRegionAnnotation) { HighlightRegionAnnotation annot = (HighlightRegionAnnotation) o; HighlightRegionAnnotation an = annot.clone(); VueHighlightRegionEdit vueAnnotation = new VueHighlightRegionEdit(_vp,annot); if (!vueAnnotation.show()) { annot.setBases(an.getBases()); annot.setFillColor(an.getFillColor()); annot.setOutlineColor(an.getOutlineColor()); annot.setRadius(an.getRadius()); } }else if (o instanceof ChemProbAnnotation) { ChemProbAnnotation annot = (ChemProbAnnotation) o; ChemProbAnnotation an = annot.clone(); VueChemProbAnnotation vueAnnotation = new VueChemProbAnnotation(_vp,annot); if (!vueAnnotation.show()) { annot.setColor(an.getColor()); annot.setIntensity(an.getIntensity()); annot.setType(an.getType()); annot.setOut(an.isOut()); } } } public void mouseEntered(MouseEvent arg0) { } public void mouseExited(MouseEvent arg0) { _vp.set_selectedAnnotation(null); _vp.repaint(); } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } public void mouseDragged(MouseEvent arg0) { } /** * update selected annotation */ public void mouseMoved(MouseEvent arg0) { if (_table.rowAtPoint(arg0.getPoint()) < 0) return; Object o = _table.getValueAt(_table.rowAtPoint(arg0.getPoint()), 0); if (o.getClass().equals(TextAnnotation.class) && o != _vp.get_selectedAnnotation()) { _vp.set_selectedAnnotation((TextAnnotation) o); _vp.repaint(); } } }