JAL-3032 adds Java 8 functionality (2/2)
[jalview.git] / src2 / fr / orsay / lri / varna / views / VueBaseValues.java
1 package fr.orsay.lri.varna.views;
2
3 import java.awt.Color;
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;
11
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;
18
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;
25
26 public class VueBaseValues extends JPanel implements TableModelListener {
27
28         private JTable table;
29         private ValueTableModel _tm;
30         private VARNAPanel _vp;
31         private ArrayList<ModeleBase> data;
32         private ArrayList<Double> _backup;
33         private ArrayList<Object> columns;
34         
35         
36         public VueBaseValues(VARNAPanel vp)
37         {
38                 super(new GridLayout(1, 0));
39                 _vp = vp;
40                 init();
41         }
42         
43         private void init()
44         {
45                 Object[] col = {"Number","Base","Value","Preview"};
46                 columns = new ArrayList<Object>();
47                 for (int i = 0; i < col.length; i++)
48                 {
49                         columns.add(col[i]);
50                 }
51                 
52                 _backup = new ArrayList<Double>();
53                 data = new ArrayList<ModeleBase>();
54                 for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++) 
55                 {
56                         ModeleBase mb = _vp.getRNA().get_listeBases().get(i);
57                         data.add(mb);
58                         _backup.add(mb.getValue());
59                 }
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);
65                 
66                 JScrollPane scrollPane = new JScrollPane(table);
67                 this.add(scrollPane);
68         }
69         
70         public void cancelChanges()
71         {
72                 for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++) 
73                 {
74                         ModeleBase mb = _vp.getRNA().get_listeBases().get(i);
75                         mb.setValue(_backup.get(i));
76                 }
77           _vp.getRNA().rescaleColorMap(_vp.getColorMap());
78         }
79
80         private class ValueTableModel extends AbstractTableModel {
81             public String getColumnName(int col) {
82                 return columns.get(col).toString();
83             }
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);
88                 if (col==0)
89                 {
90                         return new Integer(mb.getBaseNumber());
91                 }
92                 else if (col==1)
93                 {
94                         return new String(mb.getContent());
95                 } 
96                 else if (col==2)
97                 {
98                         return new Double(mb.getValue());
99                 } 
100                 else if (col==3)
101                 {
102                         return _vp.getColorMap().getColorForValue(mb.getValue());
103                 }
104                 return "N/A";
105             }
106             public boolean isCellEditable(int row, int col)
107                 { 
108                         if (getColumnName(col).equals("Value")) 
109                                 return true;
110                         return false;
111                 }
112             public void setValueAt(Object value, int row, int col) {
113                 if (getColumnName(col).equals("Value"))
114                 {
115                   data.get(row).setValue(((Double)value));
116                   _vp.getRNA().rescaleColorMap(_vp.getColorMap());
117                   _vp.repaint();
118                   fireTableCellUpdated(row, col);
119                 }
120             }
121             public Class getColumnClass(int c) {
122                 return getValueAt(0, c).getClass();
123             }
124         }
125
126         public void tableChanged(TableModelEvent e) {
127                 if (e.getType() == TableModelEvent.UPDATE)
128                 {
129                         table.repaint();
130                 }
131                 
132         }
133
134 }