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