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 data; private ArrayList columns; private ArrayList included; public VueRNAList( ArrayList rnas) { super(new BorderLayout()); data = rnas; init(); } public ArrayList getSelectedRNAs() { ArrayList result = new ArrayList(); 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(); for (int i = 0; i < col.length; i++) { columns.add(col[i]); } included = new ArrayList(); 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