1
2 package hep.wired.heprep.interaction;
3
4 import java.util.*;
5 import javax.swing.*;
6 import javax.swing.table.*;
7
8 import hep.graphics.heprep.HepRep;
9 import hep.graphics.heprep.HepRepAttDef;
10 import hep.graphics.heprep.HepRepAttValue;
11 import hep.graphics.heprep.HepRepInstance;
12 import hep.graphics.heprep.HepRepType;
13 import hep.graphics.heprep.HepRepTypeTree;
14
15 import hep.wired.util.SortableListTableModel;
16
17 import hep.wired.util.ScientificTable;
18
19 /***
20 * TableModel for HepRep Layers.
21 *
22 * @author Mark Donszelmann
23 * @version $Id: LayerTableModel.java 1935 2005-06-21 18:05:29Z duns $
24 */
25 public class LayerTableModel extends SortableListTableModel {
26
27 private List
28 private boolean numbersOnly;
29
30 public LayerTableModel(List
31 super(new String[] { "Layer", "Pickable" },
32 new Class[] { String.class, Boolean.class },
33 layers);
34 layerList = layers;
35 checkForNumbersOnly();
36 }
37
38 public boolean isCellEditable(int row, int col) {
39 return (col != Flag.NAME);
40 }
41
42 public Object getValueAt(int row, int col) {
43 Flag layer = (Flag)layerList.get(row);
44 switch(col) {
45 case Flag.NAME:
46 return layer.getName();
47 case Flag.FLAG:
48 return new Boolean(layer.isSet());
49 default:
50 return "";
51 }
52 }
53
54 public void setValueAt(Object value, int row, int col) {
55 switch(col) {
56 case Flag.NAME:
57 return;
58 case Flag.FLAG:
59 ((Flag)layerList.get(row)).set(((Boolean)value).booleanValue());
60 changed();
61 return;
62 default:
63 return;
64 }
65 }
66
67 protected int compareKeys(Object key1, Object key2, int col, boolean ascending) {
68 Flag f1 = (Flag)key1;
69 Flag f2 = (Flag)key2;
70 switch(col) {
71 default:
72 case Flag.NAME:
73 if (numbersOnly) {
74 return (ascending ? 1 : -1) *
75 (Double.valueOf(f1.getName()).compareTo(Double.valueOf(f2.getName())));
76 } else {
77 return (ascending ? 1 : -1) *
78 (f1.getName().compareTo(f2.getName()));
79 }
80 case Flag.FLAG:
81 return (ascending ? 1 : -1) *
82 (f1.isSet() ? (f2.isSet() ? 0 : 1) : f2.isSet() ? -1 : 0);
83 }
84 }
85
86 protected void changed() {
87 }
88
89 public void fireTableDataChanged() {
90 checkForNumbersOnly();
91 super.fireTableDataChanged();
92 }
93
94 private void checkForNumbersOnly() {
95 numbersOnly = true;
96 for (Iterator i=layerList.iterator(); i.hasNext(); ) {
97 Flag f = (Flag)i.next();
98 try {
99 Double.parseDouble(f.getName());
100 } catch (NumberFormatException e) {
101 numbersOnly = false;
102 return;
103 }
104 }
105 }
106
107 public void set(HepRep heprep) {
108
109 List oldLayerList = new ArrayList();
110 oldLayerList.addAll(layerList);
111 layerList.clear();
112
113
114 List layerNames = (heprep != null) ? heprep.getLayerOrder() : new ArrayList();
115 for (Iterator i=layerNames.iterator(); i.hasNext(); ) {
116 Flag layer = new Flag((String)i.next(), true);
117 int index = oldLayerList.indexOf(layer);
118 if (index >= 0) layer = (Flag)oldLayerList.get(index);
119 layerList.add(layer);
120 }
121 }
122 }