fiore@0
|
1 /*
|
fiore@0
|
2 CCmI Editor - A Collaborative Cross-Modal Diagram Editing Tool
|
fiore@0
|
3
|
fiore@0
|
4 Copyright (C) 2011 Queen Mary University of London (http://ccmi.eecs.qmul.ac.uk/)
|
fiore@0
|
5
|
fiore@0
|
6 This program is free software: you can redistribute it and/or modify
|
fiore@0
|
7 it under the terms of the GNU General Public License as published by
|
fiore@0
|
8 the Free Software Foundation, either version 3 of the License, or
|
fiore@0
|
9 (at your option) any later version.
|
fiore@0
|
10
|
fiore@0
|
11 This program is distributed in the hope that it will be useful,
|
fiore@0
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
fiore@0
|
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
fiore@0
|
14 GNU General Public License for more details.
|
fiore@0
|
15
|
fiore@0
|
16 You should have received a copy of the GNU General Public License
|
fiore@0
|
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
|
fiore@0
|
18 */
|
fiore@0
|
19 package uk.ac.qmul.eecs.ccmi.gui;
|
fiore@0
|
20
|
fiore@0
|
21 import java.util.HashSet;
|
fiore@0
|
22 import java.util.List;
|
fiore@0
|
23 import java.util.ArrayList;
|
fiore@0
|
24 import java.util.Set;
|
fiore@0
|
25
|
fiore@0
|
26 import javax.swing.table.AbstractTableModel;
|
fiore@0
|
27
|
fiore@0
|
28 import uk.ac.qmul.eecs.ccmi.diagrammodel.NodeProperties.Modifiers;
|
fiore@0
|
29
|
fiore@0
|
30
|
fiore@0
|
31 /**
|
fiore@0
|
32 *
|
fiore@0
|
33 * A table model containing the property values currently edited and the modifiers assigned to them
|
fiore@0
|
34 * in the form of an array of indexes pointing to the modifiers types
|
fiore@0
|
35 */
|
fiore@0
|
36 @SuppressWarnings("serial")
|
fiore@0
|
37 public class PropertyTableModel extends AbstractTableModel {
|
fiore@0
|
38
|
fiore@0
|
39 public PropertyTableModel(String propertyType, List<String> values, Modifiers modifiers ){
|
fiore@0
|
40 data = new ArrayList<ModifierString>();
|
fiore@0
|
41 for(int i = 0; i< values.size();i++){
|
fiore@0
|
42 String value = values.get(i);
|
fiore@0
|
43 data.add(new ModifierString(value, (modifiers == null) ? null : modifiers.getIndexes(i)));
|
fiore@0
|
44 }
|
fiore@0
|
45 data.add(new ModifierString(null));
|
fiore@0
|
46 columnName = propertyType;
|
fiore@0
|
47 }
|
fiore@0
|
48
|
fiore@0
|
49 @Override
|
fiore@0
|
50 public int getColumnCount() {
|
fiore@0
|
51 return 1;
|
fiore@0
|
52 }
|
fiore@0
|
53
|
fiore@0
|
54 @Override
|
fiore@0
|
55 public int getRowCount() {
|
fiore@0
|
56 return data.size();
|
fiore@0
|
57 }
|
fiore@0
|
58
|
fiore@0
|
59 @Override
|
fiore@0
|
60 public Object getValueAt(int rowIndex, int columnIndex) {
|
fiore@0
|
61 return data.get(rowIndex);
|
fiore@0
|
62 }
|
fiore@0
|
63
|
fiore@0
|
64 @Override
|
fiore@0
|
65 public String getColumnName(int column){
|
fiore@0
|
66 return columnName;
|
fiore@0
|
67 }
|
fiore@0
|
68
|
fiore@0
|
69 @Override
|
fiore@0
|
70 public void setValueAt(Object value, int rowIndex, int columnIndex){
|
fiore@0
|
71 /* we filled up the last row, create another one */
|
fiore@0
|
72 if((rowIndex == data.size()-1)&&(!value.toString().equals(""))){
|
fiore@0
|
73 data.add(new ModifierString(null));
|
fiore@0
|
74 data.get(rowIndex).value = value.toString();
|
fiore@0
|
75 fireTableRowsInserted(data.size()-1, data.size()-1);
|
fiore@0
|
76 fireTableCellUpdated(rowIndex,columnIndex);
|
fiore@0
|
77 }else if((rowIndex != data.size()-1)&&(value.toString().equals(""))){
|
fiore@0
|
78 data.remove(rowIndex);
|
fiore@0
|
79 fireTableRowsDeleted(rowIndex,rowIndex);
|
fiore@0
|
80 }else {
|
fiore@0
|
81 data.get(rowIndex).value = value.toString();
|
fiore@0
|
82 fireTableCellUpdated(rowIndex,columnIndex);
|
fiore@0
|
83 }
|
fiore@0
|
84 }
|
fiore@0
|
85
|
fiore@0
|
86 @Override
|
fiore@0
|
87 public boolean isCellEditable(int rowIndex, int columnIndex){
|
fiore@0
|
88 return true;
|
fiore@0
|
89 }
|
fiore@0
|
90
|
fiore@0
|
91 public Set<Integer> getIndexesAt(int row){
|
fiore@0
|
92 return data.get(row).modifierIndexes;
|
fiore@0
|
93 }
|
fiore@0
|
94
|
fiore@0
|
95 public void setIndexesAt(int row, Set<Integer> indexes){
|
fiore@0
|
96 data.get(row).modifierIndexes = new HashSet<Integer>();
|
fiore@0
|
97 data.get(row).modifierIndexes.addAll(indexes);
|
fiore@0
|
98 }
|
fiore@0
|
99
|
fiore@0
|
100 public void setIndexesAt(int row, Integer[] indexes){
|
fiore@0
|
101 data.get(row).modifierIndexes = new HashSet<Integer>();
|
fiore@0
|
102 for(int i=0; i<indexes.length; i++)
|
fiore@0
|
103 data.get(row).modifierIndexes.add(indexes[i]);
|
fiore@0
|
104 }
|
fiore@0
|
105
|
fiore@0
|
106 List<ModifierString> data;
|
fiore@0
|
107 String columnName;
|
fiore@0
|
108
|
fiore@0
|
109 private class ModifierString {
|
fiore@0
|
110 ModifierString(String value, Set<Integer> s){
|
fiore@0
|
111 this.value = value;
|
fiore@0
|
112 modifierIndexes = new HashSet<Integer>();
|
fiore@0
|
113 if(s != null){
|
fiore@0
|
114 modifierIndexes.addAll(s);
|
fiore@0
|
115 }
|
fiore@0
|
116 }
|
fiore@0
|
117
|
fiore@0
|
118 ModifierString(Set<Integer> s){
|
fiore@0
|
119 this("",s);
|
fiore@0
|
120 }
|
fiore@0
|
121
|
fiore@0
|
122 @Override
|
fiore@0
|
123 public boolean equals(Object o){
|
fiore@0
|
124 return value.equals(o);
|
fiore@0
|
125 }
|
fiore@0
|
126
|
fiore@0
|
127 @Override
|
fiore@0
|
128 public int hashCode(){
|
fiore@0
|
129 return value.hashCode();
|
fiore@0
|
130 }
|
fiore@0
|
131
|
fiore@0
|
132 @Override
|
fiore@0
|
133 public String toString(){
|
fiore@0
|
134 return value;
|
fiore@0
|
135 }
|
fiore@0
|
136
|
fiore@0
|
137 String value;
|
fiore@0
|
138 Set<Integer> modifierIndexes;
|
fiore@0
|
139 }
|
fiore@0
|
140
|
fiore@0
|
141 }
|