001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: * The Original Software is NetBeans. The Initial Developer of the Original
026: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
027: * Microsystems, Inc. All Rights Reserved.
028: *
029: * If you wish your version of this file to be governed by only the CDDL
030: * or only the GPL Version 2, indicate your decision by adding
031: * "[Contributor] elects to include this software in this distribution
032: * under the [CDDL or GPL Version 2] license." If you do not indicate a
033: * single choice of license, a recipient has the option to distribute
034: * your version of this file under either the CDDL, the GPL Version 2 or
035: * to extend the choice of license to its licensees as provided above.
036: * However, if you add GPL Version 2 code and therefore, elected the GPL
037: * Version 2 license, then the option applies only if the new code is
038: * made subject to such option by the copyright holder.
039: */
040:
041: package org.netbeans.lib.profiler.ui.components.tree;
042:
043: import java.awt.Color;
044: import org.netbeans.lib.profiler.results.cpu.PrestimeCPUCCTNode;
045: import java.awt.Component;
046: import javax.swing.*;
047: import org.netbeans.lib.profiler.ui.UIUtils;
048:
049: /**
050: * Formats the node as follows:
051: * - if node does not contain either '.' or '(', format the node in plain font (typically if not a class or method name)
052: * - anything after '(' is formatted using gray font (typically method arguments)
053: * - anything between last '.' and before '(' is formatted using bold font (typically method name)
054: */
055: public class MethodNameTreeCellRenderer extends
056: EnhancedTreeCellRenderer {
057: //~ Instance fields ----------------------------------------------------------------------------------------------------------
058:
059: private ImageIcon allThreadsIcon = new ImageIcon(
060: MethodNameTreeCellRenderer.class
061: .getResource("/org/netbeans/lib/profiler/ui/resources/allThreads.png")); //NOI18N
062: private ImageIcon threadIcon = new ImageIcon(
063: MethodNameTreeCellRenderer.class
064: .getResource("/org/netbeans/lib/profiler/ui/resources/thread.png")); //NOI18N
065:
066: //~ Methods ------------------------------------------------------------------------------------------------------------------
067:
068: public Component getTreeCellRendererComponentPersistent(JTree tree,
069: Object value, boolean sel, boolean expanded, boolean leaf,
070: int row, boolean hasFocus) {
071: MethodNameTreeCellRenderer renderer = new MethodNameTreeCellRenderer();
072: renderer.setLeafIcon(getLeafIcon(value));
073: renderer.setClosedIcon(getClosedIcon(value));
074: renderer.setOpenIcon(getOpenIcon(value));
075: Color backgroundColor = UIUtils.getProfilerResultsBackground();
076:
077: if ((row & 0x1) == 0) { //even row
078: renderer.setBackgroundNonSelectionColor(UIUtils
079: .getDarker(backgroundColor));
080: } else {
081: renderer.setBackgroundNonSelectionColor(backgroundColor);
082: }
083:
084: return renderer.getTreeCellRendererComponent(tree, value, sel,
085: expanded, leaf, row, hasFocus);
086: }
087:
088: protected Icon getClosedIcon(Object value) {
089: if (value instanceof PrestimeCPUCCTNode) {
090: PrestimeCPUCCTNode cct = (PrestimeCPUCCTNode) value;
091:
092: if (cct.isThreadNode()) {
093: if (cct.getThreadId() == -1) {
094: return allThreadsIcon;
095: } else {
096: return threadIcon;
097: }
098: }
099: }
100:
101: // not a thread node or not instance of PrestimeCPUCCTNode
102: return super .getClosedIcon(value);
103: }
104:
105: protected String getLabel1Text(Object node, String value) {
106: int bracketIndex = value.indexOf('('); //NOI18N
107: int dotIndex = value.lastIndexOf('.'); //NOI18N
108:
109: if ((dotIndex == -1) && (bracketIndex == -1)) {
110: return value; // not a method -> we will format it in plain text
111: }
112:
113: if (bracketIndex != -1) {
114: value = value.substring(0, bracketIndex);
115: dotIndex = value.lastIndexOf('.'); //NOI18N
116: }
117:
118: return value.substring(0, dotIndex + 1);
119: }
120:
121: protected String getLabel2Text(Object node, String value) {
122: int bracketIndex = value.indexOf('('); //NOI18N
123: int dotIndex = value.lastIndexOf('.'); //NOI18N
124:
125: if ((dotIndex == -1) && (bracketIndex == -1)) {
126: return ""; //NOI18N // not a method -> we will format it in plain text
127: }
128:
129: if (bracketIndex != -1) {
130: value = value.substring(0, bracketIndex);
131: dotIndex = value.lastIndexOf('.'); //NOI18N
132: }
133:
134: return value.substring(dotIndex + 1);
135: }
136:
137: protected String getLabel3Text(Object node, String value) {
138: int bracketIndex = value.indexOf('('); //NOI18N
139:
140: if (bracketIndex != -1) {
141: return " " + value.substring(bracketIndex); //NOI18N
142: } else {
143: return ""; //NOI18N
144: }
145: }
146:
147: protected Icon getLeafIcon(Object value) {
148: if (value instanceof PrestimeCPUCCTNode) {
149: PrestimeCPUCCTNode cct = (PrestimeCPUCCTNode) value;
150:
151: if (cct.isThreadNode()) {
152: if (cct.getThreadId() == -1) {
153: return allThreadsIcon;
154: } else {
155: return threadIcon;
156: }
157: }
158: }
159:
160: // not a thread node or not instance of PrestimeCPUCCTNode
161: return super .getLeafIcon(value);
162: }
163:
164: protected Icon getOpenIcon(Object value) {
165: if (value instanceof PrestimeCPUCCTNode) {
166: PrestimeCPUCCTNode cct = (PrestimeCPUCCTNode) value;
167:
168: if (cct.isThreadNode()) {
169: if (cct.getThreadId() == -1) {
170: return allThreadsIcon;
171: } else {
172: return threadIcon;
173: }
174: }
175: }
176:
177: // not a thread node or not instance of PrestimeCPUCCTNode
178: return super.getOpenIcon(value);
179: }
180: }
|