JAL-3032 adds Java 8 functionality (2/2)
[jalview.git] / src2 / fr / orsay / lri / varna / views / VueBaseValues.java
diff --git a/src2/fr/orsay/lri/varna/views/VueBaseValues.java b/src2/fr/orsay/lri/varna/views/VueBaseValues.java
new file mode 100644 (file)
index 0000000..980ac65
--- /dev/null
@@ -0,0 +1,134 @@
+package fr.orsay.lri.varna.views;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.AbstractTableModel;
+
+import fr.orsay.lri.varna.VARNAPanel;
+import fr.orsay.lri.varna.components.ColorRenderer;
+import fr.orsay.lri.varna.models.rna.ModeleBase;
+import fr.orsay.lri.varna.models.rna.ModeleBaseNucleotide;
+import fr.orsay.lri.varna.models.rna.ModeleColorMap;
+import fr.orsay.lri.varna.models.rna.RNA;
+
+public class VueBaseValues extends JPanel implements TableModelListener {
+
+       private JTable table;
+       private ValueTableModel _tm;
+       private VARNAPanel _vp;
+       private ArrayList<ModeleBase> data;
+       private ArrayList<Double> _backup;
+       private ArrayList<Object> columns;
+       
+       
+       public VueBaseValues(VARNAPanel vp)
+       {
+               super(new GridLayout(1, 0));
+               _vp = vp;
+               init();
+       }
+       
+       private void init()
+       {
+               Object[] col = {"Number","Base","Value","Preview"};
+               columns = new ArrayList<Object>();
+               for (int i = 0; i < col.length; i++)
+               {
+                       columns.add(col[i]);
+               }
+               
+               _backup = new ArrayList<Double>();
+               data = new ArrayList<ModeleBase>();
+               for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++) 
+               {
+                       ModeleBase mb = _vp.getRNA().get_listeBases().get(i);
+                       data.add(mb);
+                       _backup.add(mb.getValue());
+               }
+               _tm = new ValueTableModel();
+               table = new JTable(_tm);
+               table.setDefaultRenderer(Color.class, new ColorRenderer(true)); 
+               table.setPreferredScrollableViewportSize(new Dimension(300, 300));
+               table.getModel().addTableModelListener(this);
+               
+               JScrollPane scrollPane = new JScrollPane(table);
+               this.add(scrollPane);
+       }
+       
+       public void cancelChanges()
+       {
+               for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++) 
+               {
+                       ModeleBase mb = _vp.getRNA().get_listeBases().get(i);
+                       mb.setValue(_backup.get(i));
+               }
+         _vp.getRNA().rescaleColorMap(_vp.getColorMap());
+       }
+
+       private class ValueTableModel extends AbstractTableModel {
+           public String getColumnName(int col) {
+               return columns.get(col).toString();
+           }
+           public int getRowCount() { return data.size(); }
+           public int getColumnCount() { return columns.size(); }
+           public Object getValueAt(int row, int col) {
+               ModeleBase mb = data.get(row);
+               if (col==0)
+               {
+                       return new Integer(mb.getBaseNumber());
+               }
+               else if (col==1)
+               {
+                       return new String(mb.getContent());
+               } 
+               else if (col==2)
+               {
+                       return new Double(mb.getValue());
+               } 
+               else if (col==3)
+               {
+                       return _vp.getColorMap().getColorForValue(mb.getValue());
+               }
+               return "N/A";
+           }
+           public boolean isCellEditable(int row, int col)
+               { 
+                       if (getColumnName(col).equals("Value")) 
+                               return true;
+                       return false;
+               }
+           public void setValueAt(Object value, int row, int col) {
+               if (getColumnName(col).equals("Value"))
+               {
+                 data.get(row).setValue(((Double)value));
+                 _vp.getRNA().rescaleColorMap(_vp.getColorMap());
+                 _vp.repaint();
+                 fireTableCellUpdated(row, col);
+               }
+           }
+           public Class getColumnClass(int c) {
+               return getValueAt(0, c).getClass();
+           }
+       }
+
+       public void tableChanged(TableModelEvent e) {
+               if (e.getType() == TableModelEvent.UPDATE)
+               {
+                       table.repaint();
+               }
+               
+       }
+
+}