/******************************************************************************* * Copyright (c) 2013 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.wala.viz.viewer; import java.awt.Component; import javax.swing.ImageIcon; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeCellRenderer; import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ipa.callgraph.propagation.PointerKey; /** * Renderer for the heap tree. Gives non default icons for pointer keys and instance keys. * @author yinnonh * */ class DualTreeCellRenderer implements TreeCellRenderer { private final DefaultTreeCellRenderer defaultTreeCellRenderer; private final DefaultTreeCellRenderer ikTreeCellRenderer; private final DefaultTreeCellRenderer pkTreeCellRenderer; public DualTreeCellRenderer() { defaultTreeCellRenderer = new DefaultTreeCellRenderer(); ikTreeCellRenderer = new DefaultTreeCellRenderer(); ikTreeCellRenderer.setOpenIcon(createImageIcon("images/ik_open.png")); ikTreeCellRenderer.setClosedIcon(createImageIcon("images/ik_closed.png")); ikTreeCellRenderer.setLeafIcon(createImageIcon("images/ik_leaf.png")); pkTreeCellRenderer = new DefaultTreeCellRenderer(); pkTreeCellRenderer.setOpenIcon(createImageIcon("images/pk_open.png")); pkTreeCellRenderer.setClosedIcon(createImageIcon("images/pk_closed.png")); pkTreeCellRenderer.setLeafIcon(createImageIcon("images/pk_leaf.png")); } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { TreeCellRenderer delegate = getTreeCellRenderer(value); return delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); } private TreeCellRenderer getTreeCellRenderer(Object value) { if (value instanceof DefaultMutableTreeNode){ value = ((DefaultMutableTreeNode) value).getUserObject(); } if (value instanceof PointerKey){ return pkTreeCellRenderer; } else if (value instanceof InstanceKey){ return ikTreeCellRenderer; } else { return defaultTreeCellRenderer; } } /** Returns an ImageIcon, or null if the path was invalid. */ protected ImageIcon createImageIcon(String path) { java.net.URL imgURL = DualTreeCellRenderer.class.getResource(path); if (imgURL != null) { return new ImageIcon(imgURL); } else { System.err.println("Couldn't find file: " + path); return null; } } }