-package fr.orsay.lri.varna.views;
-
-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.Arrays;
-import java.util.Collections;
-import java.util.Vector;
-
-import javax.swing.DefaultCellEditor;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JOptionPane;
-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.ActionEditor;
-import fr.orsay.lri.varna.components.ActionRenderer;
-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.ModeleBP;
-import fr.orsay.lri.varna.models.rna.RNA;
-
-public class VueBPList extends JPanel implements TableModelListener, ActionListener
-{
-
- private JTable table;
- private BPTableModel _tm;
- private VARNAPanel _vp;
- private ArrayList<ModeleBP> data;
- private ArrayList<Double> _backup;
- private ArrayList<Object> columns;
-
-
- public enum Actions{
- ACTION_DELETE,
- ACTION_EDIT_STYLE;
-
- public String toString()
- {
- switch(this)
- {
- case ACTION_DELETE:
- return "Delete";
- case ACTION_EDIT_STYLE:
- return "Edit Style";
- }
- return "N/A";
- }
- };
-
- public VueBPList(VARNAPanel vp)
- {
- super(new GridLayout(1, 0));
- _vp = vp;
- init();
- }
-
- private void init()
- {
- Object[] col = {"Sec.Str.","5' partner","3' partner","5' edge","3' edge","Orientation","Remove"};
- columns = new ArrayList<Object>();
- for (int i = 0; i < col.length; i++)
- {
- columns.add(col[i]);
- }
-
- _backup = new ArrayList<Double>();
- data = new ArrayList<ModeleBP>();
- for (ModeleBP ms: _vp.getRNA().getAllBPs())
- {
- data.add(ms);
- }
- Collections.sort(data);
- _tm = new BPTableModel();
- table = new JTable(_tm);
-
- table.setDefaultRenderer(Color.class, new ColorRenderer(true));
- table.setDefaultRenderer(Actions.class, new ActionRenderer());
-
- table.setDefaultEditor(ModeleBP.Edge.class, new DefaultCellEditor(new JComboBox(ModeleBP.Edge.values())));
- table.setDefaultEditor(ModeleBP.Stericity.class, new DefaultCellEditor(new JComboBox(ModeleBP.Stericity.values())));
- table.setDefaultEditor(Actions.class, new ActionEditor(this));
-
- table.setPreferredScrollableViewportSize(new Dimension(500, 500));
- table.getModel().addTableModelListener(this);
-
- table.setRowHeight(25);
-
- JScrollPane scrollPane = new JScrollPane(table);
- add(scrollPane);
- setOpaque(true); // content panes must be opaque
- this.doLayout();
-
- JOptionPane.showMessageDialog(_vp, this, "Base pairs Edition", JOptionPane.PLAIN_MESSAGE);
-
- }
-
- 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 BPTableModel extends AbstractTableModel {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- 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) {
- ModeleBP mb = data.get(row);
- if (col==0)
- {
- return new Boolean(mb.getPartner3().getElementStructure()==mb.getPartner5().getIndex());
- }
- else if (col==1)
- {
- return new String(""+mb.getPartner5().getBaseNumber()+"-"+mb.getPartner5().getContent());
- }
- else if (col==2)
- {
- return new String(""+mb.getPartner3().getBaseNumber()+"-"+mb.getPartner3().getContent());
- }
- else if (col==3)
- {
- return mb.getEdgePartner5();
- }
- else if (col==4)
- {
- return mb.getEdgePartner3();
- }
- else if (col==5)
- {
- return mb.getStericity();
- }
- else if (col==6)
- {
- return Actions.ACTION_DELETE;
- }
- return "N/A";
- }
- public boolean isCellEditable(int row, int col)
- {
- if ( col == 3 || col ==4 || col ==5 || col ==6)
- return true;
- return false;
- }
- public void setValueAt(Object value, int row, int col) {
- if ( col == 3 || col ==4 || col ==5)
- {
- ModeleBP mb = data.get(row);
- if ( col == 3)
- {
- mb.setEdge5((ModeleBP.Edge)value);
- }
- else if ( col == 4)
- {
- mb.setEdge3((ModeleBP.Edge)value);
- }
- else if ( col == 5)
- {
- mb.setStericity((ModeleBP.Stericity)value);
- }
- fireTableCellUpdated(row, col);
- _vp.repaint();
-
- }
- }
-
- 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 arg0) {
- //System.out.println(""+arg0.toString());
- String[] data2 = arg0.getActionCommand().split("-");
- int row = Integer.parseInt(data2[data2.length-1]);
- if (data2[0].equals("Delete"))
- {
- ModeleBP ms = data.get(row);
- _vp.getVARNAUI().UIRemoveBP(ms);
-
-
- data.remove(row);
-
- _tm.fireTableRowsDeleted(row, row);
- }
- }
-
-}