JAL-3541 selectively merged build.gradle and gradle.properties
[jalview.git] / srcjar / fr / orsay / lri / varna / views / VueRNAList.java
diff --git a/srcjar/fr/orsay/lri/varna/views/VueRNAList.java b/srcjar/fr/orsay/lri/varna/views/VueRNAList.java
new file mode 100644 (file)
index 0000000..1fc7e28
--- /dev/null
@@ -0,0 +1,195 @@
+package fr.orsay.lri.varna.views;
+
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+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 javax.swing.table.TableColumn;
+
+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 VueRNAList extends JPanel implements TableModelListener, ActionListener {
+
+       private JTable table;
+       private ValueTableModel _tm;
+       private ArrayList<RNA> data;
+       private ArrayList<Object> columns;
+       private ArrayList<Boolean> included;
+       
+       
+       public VueRNAList( ArrayList<RNA> rnas)
+       {
+               super(new BorderLayout());
+               data = rnas;
+               init();
+       }
+       
+       public ArrayList<RNA> getSelectedRNAs()
+       {
+               ArrayList<RNA> result = new ArrayList<RNA>();
+               for (int i = 0; i < data.size(); i++)
+               {
+                       if (included.get(i))
+                       {
+                               result.add(data.get(i));
+                       }
+               }               
+               return result;
+       }
+       
+       private void init()
+       {
+               Object[] col = {"Num","Selected","Name","ID","Length"};
+               columns = new ArrayList<Object>();
+               for (int i = 0; i < col.length; i++)
+               {
+                       columns.add(col[i]);
+               }
+               included = new ArrayList<Boolean>();
+               for (int i = 0; i < data.size(); i++)
+               {
+                       included.add(new Boolean(true));
+               }
+               
+               
+               _tm = new ValueTableModel();
+               table = new JTable(_tm);
+               table.setDefaultRenderer(Color.class, new ColorRenderer(true)); 
+               table.setPreferredScrollableViewportSize(new Dimension(600, 300));
+               table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+               TableColumn c0 = table.getColumnModel().getColumn(0);
+               c0.setPreferredWidth(30);
+               TableColumn c1 = table.getColumnModel().getColumn(1);
+               c1.setPreferredWidth(30);
+               TableColumn c2 = table.getColumnModel().getColumn(2);
+               c2.setPreferredWidth(200);
+               TableColumn c3 = table.getColumnModel().getColumn(3);
+               c3.setPreferredWidth(200);
+               TableColumn c4 = table.getColumnModel().getColumn(4);
+               c4.setPreferredWidth(30);
+               table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
+               table.getModel().addTableModelListener(this);
+               
+               JScrollPane scrollPane = new JScrollPane(table);
+               this.add(scrollPane,BorderLayout.CENTER);
+               JPanel jp = new JPanel();
+               JPanel jpl = new JPanel();
+               JPanel jpr = new JPanel();
+               jp.setLayout(new BorderLayout());
+               jp.add(jpl,BorderLayout.WEST);
+               jp.add(jpr,BorderLayout.EAST);
+               jp.add(new JLabel("Please select which model(s) should be imported." ),BorderLayout.SOUTH);
+               JButton selectAll = new JButton("Select All");
+               selectAll.addActionListener(this);
+               selectAll.setActionCommand("all");
+               JButton deselectAll = new JButton("Deselect All");
+               deselectAll.addActionListener(this);
+               deselectAll.setActionCommand("none");
+               jpl.add(selectAll);
+               jpr.add(deselectAll);
+               
+               add(scrollPane,BorderLayout.CENTER);
+               add(jp,BorderLayout.SOUTH);
+               }
+       
+
+
+       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) {
+               RNA r = data.get(row);
+               if (col==0)
+               {
+                       return new Integer(row+1);
+               }
+               else if (col==1)
+               {
+                       return new Boolean(included.get(row));
+               }
+               else if (col==2)
+               {
+                       return new String(r.getName());
+               } 
+               else if (col==3)
+               {
+                       return new String(r.getID());
+               } 
+               else if (col==4)
+               {
+                       return new Integer(r.getSize());
+               } 
+               return "N/A";
+           }
+           public boolean isCellEditable(int row, int col)
+               { 
+                       if (col==1) 
+                               return true;
+                       return false;
+               }
+           public void setValueAt(Object value, int row, int col) {
+               if (col==1)
+               {
+                 included.set(row, (Boolean)value);
+                 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();
+               }
+               
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               if (e.getActionCommand().equals("none"))
+               {
+                       for(int i=0;i<this.included.size();i++)
+                       {
+                               included.set(i, false);
+                       }
+                       _tm.fireTableRowsUpdated(0, included.size()-1);
+               }
+               else if (e.getActionCommand().equals("all"))
+               {
+                       for(int i=0;i<this.included.size();i++)
+                       {
+                               included.set(i, true);
+                       }
+                       _tm.fireTableRowsUpdated(0, included.size()-1);
+               }
+       }
+
+}