JAL-3032 adds Java 8 functionality (2/2)
[jalview.git] / src2 / fr / orsay / lri / varna / views / VueRNAList.java
1 package fr.orsay.lri.varna.views;
2
3
4 import java.awt.BorderLayout;
5 import java.awt.Color;
6 import java.awt.Dimension;
7 import java.awt.GridLayout;
8 import java.awt.event.ActionEvent;
9 import java.awt.event.ActionListener;
10 import java.beans.PropertyChangeEvent;
11 import java.beans.PropertyVetoException;
12 import java.beans.VetoableChangeListener;
13 import java.util.ArrayList;
14 import java.util.Collection;
15 import java.util.Vector;
16
17 import javax.swing.JButton;
18 import javax.swing.JLabel;
19 import javax.swing.JPanel;
20 import javax.swing.JScrollPane;
21 import javax.swing.JTable;
22 import javax.swing.event.TableModelEvent;
23 import javax.swing.event.TableModelListener;
24 import javax.swing.table.AbstractTableModel;
25 import javax.swing.table.TableColumn;
26
27 import fr.orsay.lri.varna.VARNAPanel;
28 import fr.orsay.lri.varna.components.ColorRenderer;
29 import fr.orsay.lri.varna.models.rna.ModeleBase;
30 import fr.orsay.lri.varna.models.rna.ModeleBaseNucleotide;
31 import fr.orsay.lri.varna.models.rna.ModeleColorMap;
32 import fr.orsay.lri.varna.models.rna.RNA;
33
34 public class VueRNAList extends JPanel implements TableModelListener, ActionListener {
35
36         private JTable table;
37         private ValueTableModel _tm;
38         private ArrayList<RNA> data;
39         private ArrayList<Object> columns;
40         private ArrayList<Boolean> included;
41         
42         
43         public VueRNAList( ArrayList<RNA> rnas)
44         {
45                 super(new BorderLayout());
46                 data = rnas;
47                 init();
48         }
49         
50         public ArrayList<RNA> getSelectedRNAs()
51         {
52                 ArrayList<RNA> result = new ArrayList<RNA>();
53                 for (int i = 0; i < data.size(); i++)
54                 {
55                         if (included.get(i))
56                         {
57                                 result.add(data.get(i));
58                         }
59                 }               
60                 return result;
61         }
62         
63         private void init()
64         {
65                 Object[] col = {"Num","Selected","Name","ID","Length"};
66                 columns = new ArrayList<Object>();
67                 for (int i = 0; i < col.length; i++)
68                 {
69                         columns.add(col[i]);
70                 }
71                 included = new ArrayList<Boolean>();
72                 for (int i = 0; i < data.size(); i++)
73                 {
74                         included.add(new Boolean(true));
75                 }
76                 
77                 
78                 _tm = new ValueTableModel();
79                 table = new JTable(_tm);
80                 table.setDefaultRenderer(Color.class, new ColorRenderer(true)); 
81                 table.setPreferredScrollableViewportSize(new Dimension(600, 300));
82                 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
83                 TableColumn c0 = table.getColumnModel().getColumn(0);
84                 c0.setPreferredWidth(30);
85                 TableColumn c1 = table.getColumnModel().getColumn(1);
86                 c1.setPreferredWidth(30);
87                 TableColumn c2 = table.getColumnModel().getColumn(2);
88                 c2.setPreferredWidth(200);
89                 TableColumn c3 = table.getColumnModel().getColumn(3);
90                 c3.setPreferredWidth(200);
91                 TableColumn c4 = table.getColumnModel().getColumn(4);
92                 c4.setPreferredWidth(30);
93                 table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
94                 table.getModel().addTableModelListener(this);
95                 
96                 JScrollPane scrollPane = new JScrollPane(table);
97                 this.add(scrollPane,BorderLayout.CENTER);
98                 JPanel jp = new JPanel();
99                 JPanel jpl = new JPanel();
100                 JPanel jpr = new JPanel();
101                 jp.setLayout(new BorderLayout());
102                 jp.add(jpl,BorderLayout.WEST);
103                 jp.add(jpr,BorderLayout.EAST);
104                 jp.add(new JLabel("Please select which model(s) should be imported." ),BorderLayout.SOUTH);
105                 JButton selectAll = new JButton("Select All");
106                 selectAll.addActionListener(this);
107                 selectAll.setActionCommand("all");
108                 JButton deselectAll = new JButton("Deselect All");
109                 deselectAll.addActionListener(this);
110                 deselectAll.setActionCommand("none");
111                 jpl.add(selectAll);
112                 jpr.add(deselectAll);
113                 
114                 add(scrollPane,BorderLayout.CENTER);
115                 add(jp,BorderLayout.SOUTH);
116                 }
117         
118
119
120         private class ValueTableModel extends AbstractTableModel {
121             public String getColumnName(int col) {
122                 return columns.get(col).toString();
123             }
124             public int getRowCount() { return data.size(); }
125             public int getColumnCount() { return columns.size(); }
126             public Object getValueAt(int row, int col) {
127                 RNA r = data.get(row);
128                 if (col==0)
129                 {
130                         return new Integer(row+1);
131                 }
132                 else if (col==1)
133                 {
134                         return new Boolean(included.get(row));
135                 }
136                 else if (col==2)
137                 {
138                         return new String(r.getName());
139                 } 
140                 else if (col==3)
141                 {
142                         return new String(r.getID());
143                 } 
144                 else if (col==4)
145                 {
146                         return new Integer(r.getSize());
147                 } 
148                 return "N/A";
149             }
150             public boolean isCellEditable(int row, int col)
151                 { 
152                         if (col==1) 
153                                 return true;
154                         return false;
155                 }
156             public void setValueAt(Object value, int row, int col) {
157                 if (col==1)
158                 {
159                   included.set(row, (Boolean)value);
160                   fireTableCellUpdated(row, col);
161                 }
162             }
163             public Class getColumnClass(int c) {
164                 return getValueAt(0, c).getClass();
165             }
166         }
167
168         public void tableChanged(TableModelEvent e) {
169                 if (e.getType() == TableModelEvent.UPDATE)
170                 {
171                         table.repaint();
172                 }
173                 
174         }
175
176         public void actionPerformed(ActionEvent e) {
177                 if (e.getActionCommand().equals("none"))
178                 {
179                         for(int i=0;i<this.included.size();i++)
180                         {
181                                 included.set(i, false);
182                         }
183                         _tm.fireTableRowsUpdated(0, included.size()-1);
184                 }
185                 else if (e.getActionCommand().equals("all"))
186                 {
187                         for(int i=0;i<this.included.size();i++)
188                         {
189                                 included.set(i, true);
190                         }
191                         _tm.fireTableRowsUpdated(0, included.size()-1);
192                 }
193         }
194
195 }