Merge branch 'Jalview-JS/jim/JAL-3253-JAL-3418' into Jalview-JS/JAL-3253-applet
[jalview.git] / srcjar / fr / orsay / lri / varna / components / BaseTableModel.java
1 /*
2  VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases.
3  Copyright (C) 2008  Kevin Darty, Alain Denise and Yann Ponty.
4  electronic mail : Yann.Ponty@lri.fr
5  paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France
6
7  This file is part of VARNA version 3.1.
8  VARNA version 3.1 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License
9  as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
10
11  VARNA version 3.1 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13  See the GNU General Public License for more details.
14
15  You should have received a copy of the GNU General Public License along with VARNA version 3.1.
16  If not, see http://www.gnu.org/licenses.
17  */
18 package fr.orsay.lri.varna.components;
19
20 import java.awt.Color;
21 import java.util.ArrayList;
22
23 import javax.swing.table.AbstractTableModel;
24
25 import fr.orsay.lri.varna.models.BaseList;
26 import fr.orsay.lri.varna.models.VARNAConfig;
27 import fr.orsay.lri.varna.models.rna.ModeleBase;
28 import fr.orsay.lri.varna.models.rna.ModelBaseStyle;
29
30
31 public class BaseTableModel extends AbstractTableModel {
32         /**
33          * 
34          */
35         private static final long serialVersionUID = 1L;
36
37         private String[] columnNames = { "Numbers", "Base", "Outline Color", "Inner Color",
38                         "Name Color", "Number Color" };
39         private ArrayList<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>();
40         private ArrayList<BaseList> _bases;
41         private boolean _singleBases = true;
42
43         public BaseTableModel(ArrayList<BaseList> bases) {
44                 _bases = bases;
45                 ArrayList<Object> ligne;
46                 for (int i = 0; i < bases.size(); i++) {
47                         ligne = new ArrayList<Object>();
48                         BaseList bl  = bases.get(i);
49                         if (bl.size()!=1)
50                         {
51                                 _singleBases = false;
52                         }
53                         ligne.add(bl.getNumbers());
54                         ligne.add(bl.getContents());
55                         ligne.add(bl.getAverageOutlineColor());
56                         ligne.add(bl.getAverageInnerColor());
57                         ligne.add(bl.getAverageNameColor());
58                         ligne.add(bl.getAverageNumberColor());
59                         this.data.add(ligne);   
60                 }
61
62         }
63
64         public int getColumnCount() {
65                 return columnNames.length;
66         }
67
68         public int getRowCount() {
69                 return data.size();
70         }
71
72         public String getColumnName(int col) {
73                 return columnNames[col];
74         }
75
76         public Object getValueAt(int row, int col) {
77                 return data.get(row).get(col);
78         }
79
80         /*
81          * JTable uses this method to determine the default renderer/ editor for
82          * each cell. If we didn't implement this method, then the last column would
83          * contain text ("true"/"false"), rather than a check box.
84          */
85         @SuppressWarnings("unchecked")
86         public Class getColumnClass(int c) {
87                 return getValueAt(0, c).getClass();
88         }
89
90         public boolean isCellEditable(int row, int col) {
91                 // Note that the data/cell address is constant,
92                 // no matter where the cell appears onscreen.
93                 if (col < 1) {
94                         return false;
95                 } else {
96                         return true;
97                 }
98         }
99
100         public void setValueAt(Object value, int row, int col) {
101                 data.get(row).set(col, value);
102                 if (col == 1 && _singleBases)
103                 {
104                         ModeleBase mb = _bases.get(row).getBases().get(0);
105                         mb.setContent(value.toString());
106                 }
107                 fireTableCellUpdated(row, col);
108
109         }
110 }