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.DefaultTreeCellRenderer; 21 import java.awt.*; 22 import java.net.URL; 23 24 /** 25 * CategoryNodeRenderer 26 * 27 * @author Michael J. Sikorsky 28 * @author Robert Shaw 29 */ 30 31 // Contributed by ThoughtWorks Inc. 32 33 public class CategoryNodeRenderer extends DefaultTreeCellRenderer { 34 private static final long serialVersionUID = -6046702673278595048L; 35 36 //-------------------------------------------------------------------------- 37 // Constants: 38 //-------------------------------------------------------------------------- 39 40 public static final Color FATAL_CHILDREN = new Color(189, 113, 0); 41 42 //-------------------------------------------------------------------------- 43 // Protected Variables: 44 //-------------------------------------------------------------------------- 45 protected JCheckBox _checkBox = new JCheckBox(); 46 protected JPanel _panel = new JPanel(); 47 protected static ImageIcon _sat = null; 48 // protected JLabel _label = new JLabel(); 49 50 //-------------------------------------------------------------------------- 51 // Private Variables: 52 //-------------------------------------------------------------------------- 53 54 //-------------------------------------------------------------------------- 55 // Constructors: 56 //-------------------------------------------------------------------------- 57 public CategoryNodeRenderer() { 58 _panel.setBackground(UIManager.getColor("Tree.textBackground")); 59 60 if (_sat == null) { 61 // Load the satellite image. 62 String resource = 63 "/org/apache/log4j/lf5/viewer/images/channelexplorer_satellite.gif"; 64 URL satURL = getClass().getResource(resource); 65 66 _sat = new ImageIcon(satURL); 67 } 68 69 setOpaque(false); 70 _checkBox.setOpaque(false); 71 _panel.setOpaque(false); 72 73 // The flowlayout set to LEFT is very important so that the editor 74 // doesn't jump around. 75 _panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); 76 _panel.add(_checkBox); 77 _panel.add(this); 78 79 setOpenIcon(_sat); 80 setClosedIcon(_sat); 81 setLeafIcon(_sat); 82 } 83 84 //-------------------------------------------------------------------------- 85 // Public Methods: 86 //-------------------------------------------------------------------------- 87 public Component getTreeCellRendererComponent( 88 JTree tree, Object value, 89 boolean selected, boolean expanded, 90 boolean leaf, int row, 91 boolean hasFocus) { 92 93 CategoryNode node = (CategoryNode) value; 94 //FileNode node = (FileNode)value; 95 //String s = tree.convertValueToText(value, selected, 96 // expanded, leaf, row, hasFocus); 97 98 super.getTreeCellRendererComponent( 99 tree, value, selected, expanded, 100 leaf, row, hasFocus); 101 102 if (row == 0) { 103 // Root row -- no check box 104 _checkBox.setVisible(false); 105 } else { 106 _checkBox.setVisible(true); 107 _checkBox.setSelected(node.isSelected()); 108 } 109 String toolTip = buildToolTip(node); 110 _panel.setToolTipText(toolTip); 111 if (node.hasFatalChildren()) { 112 this.setForeground(FATAL_CHILDREN); 113 } 114 if (node.hasFatalRecords()) { 115 this.setForeground(Color.red); 116 } 117 118 return _panel; 119 } 120 121 public Dimension getCheckBoxOffset() { 122 return new Dimension(0, 0); 123 } 124 125 //-------------------------------------------------------------------------- 126 // Protected Methods: 127 //-------------------------------------------------------------------------- 128 129 protected String buildToolTip(CategoryNode node) { 130 StringBuffer result = new StringBuffer(); 131 result.append(node.getTitle()).append(" contains a total of "); 132 result.append(node.getTotalNumberOfRecords()); 133 result.append(" LogRecords."); 134 result.append(" Right-click for more info."); 135 return result.toString(); 136 } 137 //-------------------------------------------------------------------------- 138 // Private Methods: 139 //-------------------------------------------------------------------------- 140 141 //-------------------------------------------------------------------------- 142 // Nested Top-Level Classes or Interfaces: 143 //-------------------------------------------------------------------------- 144 145 } 146 147 148 149 150 151