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 java.awt.Dimension; 20 import java.awt.Rectangle; 21 import java.awt.event.MouseEvent; 22 import java.util.EventObject; 23 24 import javax.swing.Icon; 25 import javax.swing.JTree; 26 import javax.swing.tree.DefaultTreeCellEditor; 27 import javax.swing.tree.TreePath; 28 29 /** 30 * CategoryImmediateEditor 31 * 32 * @author Michael J. Sikorsky 33 * @author Robert Shaw 34 */ 35 36 // Contributed by ThoughtWorks Inc. 37 38 public class CategoryImmediateEditor extends DefaultTreeCellEditor { 39 //-------------------------------------------------------------------------- 40 // Constants: 41 //-------------------------------------------------------------------------- 42 43 //-------------------------------------------------------------------------- 44 // Protected Variables: 45 //-------------------------------------------------------------------------- 46 private CategoryNodeRenderer renderer; 47 protected Icon editingIcon = null; 48 49 //-------------------------------------------------------------------------- 50 // Private Variables: 51 //-------------------------------------------------------------------------- 52 53 //-------------------------------------------------------------------------- 54 // Constructors: 55 //-------------------------------------------------------------------------- 56 public CategoryImmediateEditor(JTree tree, 57 CategoryNodeRenderer renderer, 58 CategoryNodeEditor editor) { 59 super(tree, renderer, editor); 60 this.renderer = renderer; 61 renderer.setIcon(null); 62 renderer.setLeafIcon(null); 63 renderer.setOpenIcon(null); 64 renderer.setClosedIcon(null); 65 66 super.editingIcon = null; 67 } 68 69 //-------------------------------------------------------------------------- 70 // Public Methods: 71 //-------------------------------------------------------------------------- 72 public boolean shouldSelectCell(EventObject e) { 73 boolean rv = false; // only mouse events 74 75 if (e instanceof MouseEvent) { 76 MouseEvent me = (MouseEvent) e; 77 TreePath path = tree.getPathForLocation(me.getX(), 78 me.getY()); 79 CategoryNode node = (CategoryNode) 80 path.getLastPathComponent(); 81 82 rv = node.isLeaf() /*|| !inCheckBoxHitRegion(me)*/; 83 } 84 return rv; 85 } 86 87 public boolean inCheckBoxHitRegion(MouseEvent e) { 88 TreePath path = tree.getPathForLocation(e.getX(), 89 e.getY()); 90 if (path == null) { 91 return false; 92 } 93 CategoryNode node = (CategoryNode) path.getLastPathComponent(); 94 boolean rv = false; 95 96 if (true) { 97 // offset and lastRow DefaultTreeCellEditor 98 // protected members 99 100 Rectangle bounds = tree.getRowBounds(lastRow); 101 Dimension checkBoxOffset = 102 renderer.getCheckBoxOffset(); 103 104 bounds.translate(offset + checkBoxOffset.width, 105 checkBoxOffset.height); 106 107 rv = bounds.contains(e.getPoint()); 108 } 109 return true; 110 } 111 112 //-------------------------------------------------------------------------- 113 // Protected Methods: 114 //-------------------------------------------------------------------------- 115 116 protected boolean canEditImmediately(EventObject e) { 117 boolean rv = false; 118 119 if (e instanceof MouseEvent) { 120 MouseEvent me = (MouseEvent) e; 121 rv = inCheckBoxHitRegion(me); 122 } 123 124 return rv; 125 } 126 127 protected void determineOffset(JTree tree, Object value, 128 boolean isSelected, boolean expanded, 129 boolean leaf, int row) { 130 // Very important: means that the tree won't jump around. 131 offset = 0; 132 } 133 134 //-------------------------------------------------------------------------- 135 // Private Methods: 136 //-------------------------------------------------------------------------- 137 138 //-------------------------------------------------------------------------- 139 // Nested Top-Level Classes or Interfaces: 140 //-------------------------------------------------------------------------- 141 142 } 143 144 145 146 147 148