1 package fr.orsay.lri.varna.views;
4 import java.awt.Dimension;
5 import java.awt.GridLayout;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.beans.PropertyChangeEvent;
9 import java.beans.PropertyVetoException;
10 import java.beans.VetoableChangeListener;
11 import java.util.ArrayList;
12 import java.util.Arrays;
13 import java.util.Collections;
14 import java.util.Vector;
16 import javax.swing.DefaultCellEditor;
17 import javax.swing.JButton;
18 import javax.swing.JComboBox;
19 import javax.swing.JOptionPane;
20 import javax.swing.JPanel;
21 import javax.swing.JScrollPane;
22 import javax.swing.JTable;
23 import javax.swing.event.TableModelEvent;
24 import javax.swing.event.TableModelListener;
25 import javax.swing.table.AbstractTableModel;
27 import fr.orsay.lri.varna.VARNAPanel;
28 import fr.orsay.lri.varna.components.ActionEditor;
29 import fr.orsay.lri.varna.components.ActionRenderer;
30 import fr.orsay.lri.varna.components.ColorRenderer;
31 import fr.orsay.lri.varna.models.rna.ModeleBase;
32 import fr.orsay.lri.varna.models.rna.ModeleBaseNucleotide;
33 import fr.orsay.lri.varna.models.rna.ModeleColorMap;
34 import fr.orsay.lri.varna.models.rna.ModeleBP;
35 import fr.orsay.lri.varna.models.rna.RNA;
37 public class VueBPList extends JPanel implements TableModelListener, ActionListener
41 private BPTableModel _tm;
42 private VARNAPanel _vp;
43 private ArrayList<ModeleBP> data;
44 private ArrayList<Double> _backup;
45 private ArrayList<Object> columns;
52 public String toString()
58 case ACTION_EDIT_STYLE:
65 public VueBPList(VARNAPanel vp)
67 super(new GridLayout(1, 0));
74 Object[] col = {"Sec.Str.","5' partner","3' partner","5' edge","3' edge","Orientation","Remove"};
75 columns = new ArrayList<Object>();
76 for (int i = 0; i < col.length; i++)
81 _backup = new ArrayList<Double>();
82 data = new ArrayList<ModeleBP>();
83 for (ModeleBP ms: _vp.getRNA().getAllBPs())
87 Collections.sort(data);
88 _tm = new BPTableModel();
89 table = new JTable(_tm);
91 table.setDefaultRenderer(Color.class, new ColorRenderer(true));
92 table.setDefaultRenderer(Actions.class, new ActionRenderer());
94 table.setDefaultEditor(ModeleBP.Edge.class, new DefaultCellEditor(new JComboBox(ModeleBP.Edge.values())));
95 table.setDefaultEditor(ModeleBP.Stericity.class, new DefaultCellEditor(new JComboBox(ModeleBP.Stericity.values())));
96 table.setDefaultEditor(Actions.class, new ActionEditor(this));
98 table.setPreferredScrollableViewportSize(new Dimension(500, 500));
99 table.getModel().addTableModelListener(this);
101 table.setRowHeight(25);
103 JScrollPane scrollPane = new JScrollPane(table);
105 setOpaque(true); // content panes must be opaque
108 JOptionPane.showMessageDialog(_vp, this, "Base pairs Edition", JOptionPane.PLAIN_MESSAGE);
112 public void cancelChanges()
114 for (int i = 0; i < _vp.getRNA().get_listeBases().size(); i++)
116 ModeleBase mb = _vp.getRNA().get_listeBases().get(i);
117 mb.setValue(_backup.get(i));
119 _vp.getRNA().rescaleColorMap(_vp.getColorMap());
122 private class BPTableModel extends AbstractTableModel {
126 private static final long serialVersionUID = 1L;
127 public String getColumnName(int col) {
128 return columns.get(col).toString();
130 public int getRowCount() { return data.size(); }
131 public int getColumnCount() { return columns.size(); }
132 public Object getValueAt(int row, int col) {
133 ModeleBP mb = data.get(row);
136 return new Boolean(mb.getPartner3().getElementStructure()==mb.getPartner5().getIndex());
140 return new String(""+mb.getPartner5().getBaseNumber()+"-"+mb.getPartner5().getContent());
144 return new String(""+mb.getPartner3().getBaseNumber()+"-"+mb.getPartner3().getContent());
148 return mb.getEdgePartner5();
152 return mb.getEdgePartner3();
156 return mb.getStericity();
160 return Actions.ACTION_DELETE;
164 public boolean isCellEditable(int row, int col)
166 if ( col == 3 || col ==4 || col ==5 || col ==6)
170 public void setValueAt(Object value, int row, int col) {
171 if ( col == 3 || col ==4 || col ==5)
173 ModeleBP mb = data.get(row);
176 mb.setEdge5((ModeleBP.Edge)value);
180 mb.setEdge3((ModeleBP.Edge)value);
184 mb.setStericity((ModeleBP.Stericity)value);
186 fireTableCellUpdated(row, col);
192 public Class getColumnClass(int c) {
193 return getValueAt(0, c).getClass();
197 public void tableChanged(TableModelEvent e) {
198 if (e.getType() == TableModelEvent.UPDATE)
205 public void actionPerformed(ActionEvent arg0) {
206 //System.out.println(""+arg0.toString());
207 String[] data2 = arg0.getActionCommand().split("-");
208 int row = Integer.parseInt(data2[data2.length-1]);
209 if (data2[0].equals("Delete"))
211 ModeleBP ms = data.get(row);
212 _vp.getVARNAUI().UIRemoveBP(ms);
217 _tm.fireTableRowsDeleted(row, row);