View Javadoc

1   // Copyright 2004-2005, FreeHEP.
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/*<Flag>*/ layerList;
28      private boolean numbersOnly;
29  
30      public LayerTableModel(List /*<String>*/ layers) {
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         // persist layers
109         List oldLayerList = new ArrayList();
110         oldLayerList.addAll(layerList);
111         layerList.clear();
112         
113         // layers
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 }