1 package fr.orsay.lri.varna.views;
4 import java.awt.Dimension;
5 import java.awt.GridLayout;
6 import java.beans.PropertyChangeEvent;
7 import java.beans.PropertyVetoException;
8 import java.beans.VetoableChangeListener;
9 import java.util.ArrayList;
10 import java.util.Vector;
12 import javax.swing.JPanel;
13 import javax.swing.JScrollPane;
14 import javax.swing.JTable;
15 import javax.swing.event.TableModelEvent;
16 import javax.swing.event.TableModelListener;
17 import javax.swing.table.AbstractTableModel;
19 import fr.orsay.lri.varna.VARNAPanel;
20 import fr.orsay.lri.varna.components.ColorRenderer;
21 import fr.orsay.lri.varna.models.rna.ModeleBase;
22 import fr.orsay.lri.varna.models.rna.ModeleBaseNucleotide;
23 import fr.orsay.lri.varna.models.rna.ModeleColorMap;
24 import fr.orsay.lri.varna.models.rna.RNA;
26 public class VueBaseValues extends JPanel implements TableModelListener {
29 private ValueTableModel _tm;
30 private VARNAPanel _vp;
31 private ArrayList<ModeleBase> data;
32 private ArrayList<Double> _backup;
33 private ArrayList<Object> columns;
36 public VueBaseValues(VARNAPanel vp)
38 super(new GridLayout(1, 0));
45 Object[] col = {"Number","Base","Value","Preview"};
46 columns = new ArrayList<Object>();
47 for (int i = 0; i < col.length; i++)
52 _backup = new ArrayList<Double>();
53 data = new ArrayList<ModeleBase>();
54 for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++)
56 ModeleBase mb = _vp.getRNA().get_listeBases().get(i);
58 _backup.add(mb.getValue());
60 _tm = new ValueTableModel();
61 table = new JTable(_tm);
62 table.setDefaultRenderer(Color.class, new ColorRenderer(true));
63 table.setPreferredScrollableViewportSize(new Dimension(300, 300));
64 table.getModel().addTableModelListener(this);
66 JScrollPane scrollPane = new JScrollPane(table);
70 public void cancelChanges()
72 for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++)
74 ModeleBase mb = _vp.getRNA().get_listeBases().get(i);
75 mb.setValue(_backup.get(i));
77 _vp.getRNA().rescaleColorMap(_vp.getColorMap());
80 private class ValueTableModel extends AbstractTableModel {
81 public String getColumnName(int col) {
82 return columns.get(col).toString();
84 public int getRowCount() { return data.size(); }
85 public int getColumnCount() { return columns.size(); }
86 public Object getValueAt(int row, int col) {
87 ModeleBase mb = data.get(row);
90 return new Integer(mb.getBaseNumber());
94 return new String(mb.getContent());
98 return new Double(mb.getValue());
102 return _vp.getColorMap().getColorForValue(mb.getValue());
106 public boolean isCellEditable(int row, int col)
108 if (getColumnName(col).equals("Value"))
112 public void setValueAt(Object value, int row, int col) {
113 if (getColumnName(col).equals("Value"))
115 data.get(row).setValue(((Double)value));
116 _vp.getRNA().rescaleColorMap(_vp.getColorMap());
118 fireTableCellUpdated(row, col);
121 public Class getColumnClass(int c) {
122 return getValueAt(0, c).getClass();
126 public void tableChanged(TableModelEvent e) {
127 if (e.getType() == TableModelEvent.UPDATE)