View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.log4j.lf5.viewer.categoryexplorer;
18  
19  import javax.swing.*;
20  import javax.swing.tree.DefaultTreeCellEditor;
21  import javax.swing.tree.TreePath;
22  import java.awt.*;
23  import java.awt.event.MouseEvent;
24  import java.util.EventObject;
25  
26  /***
27   * CategoryImmediateEditor
28   *
29   * @author Michael J. Sikorsky
30   * @author Robert Shaw
31   */
32  
33  // Contributed by ThoughtWorks Inc.
34  
35  public class CategoryImmediateEditor extends DefaultTreeCellEditor {
36    //--------------------------------------------------------------------------
37    //   Constants:
38    //--------------------------------------------------------------------------
39  
40    //--------------------------------------------------------------------------
41    //   Protected Variables:
42    //--------------------------------------------------------------------------
43    private CategoryNodeRenderer renderer;
44    protected Icon editingIcon = null;
45  
46    //--------------------------------------------------------------------------
47    //   Private Variables:
48    //--------------------------------------------------------------------------
49  
50    //--------------------------------------------------------------------------
51    //   Constructors:
52    //--------------------------------------------------------------------------
53    public CategoryImmediateEditor(JTree tree,
54        CategoryNodeRenderer renderer,
55        CategoryNodeEditor editor) {
56      super(tree, renderer, editor);
57      this.renderer = renderer;
58      renderer.setIcon(null);
59      renderer.setLeafIcon(null);
60      renderer.setOpenIcon(null);
61      renderer.setClosedIcon(null);
62  
63      super.editingIcon = null;
64    }
65  
66    //--------------------------------------------------------------------------
67    //   Public Methods:
68    //--------------------------------------------------------------------------
69    public boolean shouldSelectCell(EventObject e) {
70      boolean rv = false;  // only mouse events
71  
72      if (e instanceof MouseEvent) {
73        MouseEvent me = (MouseEvent) e;
74        TreePath path = tree.getPathForLocation(me.getX(),
75            me.getY());
76        CategoryNode node = (CategoryNode)
77            path.getLastPathComponent();
78  
79        rv = node.isLeaf() /*|| !inCheckBoxHitRegion(me)*/;
80      }
81      return rv;
82    }
83  
84    public boolean inCheckBoxHitRegion(MouseEvent e) {
85      TreePath path = tree.getPathForLocation(e.getX(),
86          e.getY());
87      if (path == null) {
88        return false;
89      }
90      CategoryNode node = (CategoryNode) path.getLastPathComponent();
91      boolean rv = false;
92  
93      if (true) {
94        // offset and lastRow DefaultTreeCellEditor
95        // protected members
96  
97        Rectangle bounds = tree.getRowBounds(lastRow);
98        Dimension checkBoxOffset =
99            renderer.getCheckBoxOffset();
100 
101       bounds.translate(offset + checkBoxOffset.width,
102           checkBoxOffset.height);
103 
104       rv = bounds.contains(e.getPoint());
105     }
106     return true;
107   }
108 
109   //--------------------------------------------------------------------------
110   //   Protected Methods:
111   //--------------------------------------------------------------------------
112 
113   protected boolean canEditImmediately(EventObject e) {
114     boolean rv = false;
115 
116     if (e instanceof MouseEvent) {
117       MouseEvent me = (MouseEvent) e;
118       rv = inCheckBoxHitRegion(me);
119     }
120 
121     return rv;
122   }
123 
124   protected void determineOffset(JTree tree, Object value,
125       boolean isSelected, boolean expanded,
126       boolean leaf, int row) {
127     // Very important: means that the tree won't jump around.
128     offset = 0;
129   }
130 
131   //--------------------------------------------------------------------------
132   //   Private Methods:
133   //--------------------------------------------------------------------------
134 
135   //--------------------------------------------------------------------------
136   //   Nested Top-Level Classes or Interfaces:
137   //--------------------------------------------------------------------------
138 
139 }
140 
141 
142 
143 
144 
145