/* 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.views; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.util.ArrayList; import java.util.Hashtable; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import fr.orsay.lri.varna.VARNAPanel; import fr.orsay.lri.varna.components.BaseSpecialColorEditor; import fr.orsay.lri.varna.components.BaseTableModel; import fr.orsay.lri.varna.components.ColorRenderer; import fr.orsay.lri.varna.models.BaseList; import fr.orsay.lri.varna.models.rna.ModeleBase; import fr.orsay.lri.varna.models.rna.ModeleBaseNucleotide; public class VueBases extends JPanel { /** * */ private static final long serialVersionUID = 1L; /** * for bases by kind */ public final static int KIND_MODE = 1; /** * for all bases */ public final static int ALL_MODE = 2; /** * for base pairs by king */ public final static int COUPLE_MODE = 3; private int _mode; private VARNAPanel _vp; private ArrayList<BaseList> data = new ArrayList<BaseList>(); private Hashtable<String,BaseList> revdata = new Hashtable<String,BaseList>(); private JTable table; private BaseTableModel specialTableModel; public VueBases(VARNAPanel vp, int mode) { super(new GridLayout(1, 0)); _vp = vp; switch (mode) { case (KIND_MODE): _mode = KIND_MODE; kindMode(); break; case (ALL_MODE): _mode = ALL_MODE; allMode(); break; case (COUPLE_MODE): _mode = COUPLE_MODE; coupleMode(); break; default: break; } } private BaseList locateOrAddList(String caption) { if (!revdata.containsKey(caption)) { BaseList mbl = new BaseList(caption); revdata.put(caption,mbl); data.add(mbl); } return revdata.get(caption); } private void coupleMode() { String pairString; for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++) { int j = _vp.getRNA().get_listeBases().get(i).getElementStructure(); if (j > i) { String tmp1 = (_vp.getRNA().get_listeBases().get(i).getContent()); String tmp2 = (_vp.getRNA().get_listeBases().get(j).getContent()); pairString = tmp1 +"-"+ tmp2; BaseList bl = locateOrAddList(pairString); bl.addBase(_vp.getRNA().get_listeBases().get(i)); bl.addBase(_vp.getRNA().get_listeBases().get(j)); } } createView(); } private void allMode() { for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++) { ModeleBase mb = _vp.getRNA().get_listeBases().get(i); BaseList bl = locateOrAddList(""+i); bl.addBase(mb); } createView(); } private void kindMode() { for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++) { ModeleBase mb = _vp.getRNA().get_listeBases().get(i); String tmp1 = (mb.getContent()); BaseList bl = locateOrAddList(tmp1); bl.addBase(mb); } createView(); } private void createView() { specialTableModel = new BaseTableModel(data); table = new JTable(specialTableModel); table.setPreferredScrollableViewportSize(new Dimension(500, 300)); // TODO: Find equivalent in JRE 1.5 //table.setFillsViewportHeight(true); // Create the scroll pane and add the table to it. JScrollPane scrollPane = new JScrollPane(table); // Set up renderer and editor for the Favorite Color column. table.setDefaultRenderer(Color.class, new ColorRenderer(true)); table.setDefaultEditor(Color.class, new BaseSpecialColorEditor(this)); specialTableModel.addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e) { _vp.repaint(); } }); // Add the scroll pane to this panel. add(scrollPane); UIvueBases(); } /** * Create the GUI and show it. For thread safety, this method should be * invoked from the event-dispatching thread. */ public void UIvueBases() { // Create and set up the content pane. JComponent newContentPane = this; newContentPane.setOpaque(true); // content panes must be opaque JOptionPane.showMessageDialog(_vp, newContentPane, "Base Colors Edition", JOptionPane.PLAIN_MESSAGE); } public int getMode() { return _mode; } public BaseList getDataAt(int i) { return data.get(i); } public ArrayList<BaseList> getData() { return data; } public VARNAPanel get_vp() { return _vp; } public JTable getTable() { return table; } public void setTable(JTable table) { this.table = table; } public BaseTableModel getSpecialTableModel() { return specialTableModel; } public void setSpecialTableModel(BaseTableModel specialTableModel) { this.specialTableModel = specialTableModel; } }