View Javadoc

1   // Copyright 2004-2005, FreeHEP.
2   package hep.wired.util;
3   
4   import java.awt.*;
5   import java.awt.event.*;
6   import java.util.*;
7   import javax.swing.*;
8   import javax.swing.event.*;
9   import javax.swing.tree.*;
10  
11  import hep.wired.util.TristateCheckBox.State;
12  
13  /***
14   *
15   * @author Mark Donszelmann
16   * @version $Id: TristateTreeCellEditor.java 1860 2005-06-08 23:04:05Z duns $
17   */
18  public class TristateTreeCellEditor extends TristateTreeCellRenderer implements TreeCellEditor {
19  
20      private boolean select;
21      private boolean local;
22      protected CellEditorListener list;
23  
24      public TristateTreeCellEditor(JTree tree) {
25          this(tree, new NoIconTreeCellRenderer());
26      }
27  
28      public TristateTreeCellEditor(JTree tree, TreeCellRenderer renderer) {
29  
30          super(tree, renderer);
31  
32          tristate.addActionListener(new ActionListener() {
33              public void actionPerformed(ActionEvent event) {
34                  local = false;
35                  select = false;
36                  fireEditingStopped();
37              }
38          });
39          
40          check.addActionListener(new ActionListener() {
41              public void actionPerformed(ActionEvent event) {
42                  local = true;
43                  select = false;
44                  fireEditingStopped();
45              }
46          });        
47      }
48  
49      public Component getTreeCellEditorComponent(JTree tree, Object value,
50                                                  boolean selected,
51                                                  boolean expanded,
52                                                  boolean leaf, int row) {
53          return getTreeCellRendererComponent(tree, value, true, expanded,
54                                                     leaf, row, true);
55      }
56  
57      public boolean stopCellEditing() {
58          return true;
59      }
60      
61      public Object getCellEditorValue() {
62          if (!select && (node instanceof TristateTreeNode)) {
63              TristateTreeNode treeNode = (TristateTreeNode)node;
64              if (local) {
65                  treeNode.select(check.isSelected());
66              } else {
67                  treeNode.include(treeNode.getState() == TristateCheckBox.NOT_SELECTED);
68              }
69          }
70          select = true;
71          return node;
72      }
73  
74      public boolean isCellEditable(EventObject event) {
75          return true;
76      }
77  
78      public boolean shouldSelectCell(EventObject event) {
79          return true;
80      }
81  
82      public void cancelCellEditing() {
83          fireEditingCanceled();
84      }
85  
86      public void addCellEditorListener(CellEditorListener listener) {
87          list = SwingEventMulticaster.add(list, listener);
88      }
89  
90      public void removeCellEditorListener(CellEditorListener listener) {
91          list = SwingEventMulticaster.remove(list, listener);
92      }
93  
94      protected void fireEditingStopped() {
95          if(list != null) {
96              list.editingStopped(new ChangeEvent(this));
97          }
98      }
99  
100     protected void fireEditingCanceled() {
101         if(list != null) {
102             list.editingCanceled(new ChangeEvent(this));
103         }
104     }
105 
106 }