/*
* Lokomo OneCMDB - An Open Source Software for Configuration
* Management of Datacenter Resources
*
* Copyright (C) 2006 Lokomo Systems AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* Lokomo Systems AB can be contacted via e-mail: info@lokomo.com or via
* paper mail: Lokomo Systems AB, Sv�rdv�gen 27, SE-182 33
* Danderyd, Sweden.
*
*/
package org.onecmdb.rest.graph.utils.swing;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultTreeCellRenderer;
import org.onecmdb.rest.graph.events.Event;
import org.onecmdb.rest.graph.events.IEventListener;
import prefuse.data.Edge;
import prefuse.data.tuple.TableNode;
import prefuse.render.ImageFactory;
public class CheckBoxTreeRenderer extends DefaultTreeCellRenderer {
ImageFactory iFactory = new ImageFactory();
JCheckBox check = new JCheckBox("");
IEventListener listener = null;
public CheckBoxTreeRenderer() {
//iFactory.setAsynchronous(false);
}
public void setEventListsner(IEventListener listener) {
this.listener = listener;
}
private JPanel getPanel(JLabel label) {
JPanel panel = new JPanel();
panel.setBackground(UIManager.getColor("Tree.textBackground"));
check.setBackground(UIManager.getColor("Tree.textBackground"));
setOpaque(true);
panel.setOpaque(true);
check.setOpaque(true);
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0,0));
panel.add(check);
panel.add(label);
panel.add(Box.createHorizontalStrut(5));
panel.invalidate();
return(panel);
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
DefaultTreeCellRenderer label = new DefaultTreeCellRenderer();
// Update icons.
String refType = "";
if (value instanceof TableNode) {
final TableNode n = (TableNode)value;
Edge edge = n.getParentEdge();
if (edge != null) {
if (edge.canGet("type", String.class)) {
refType = edge.getString("type");
if (refType == null) {
refType = "";
}
boolean inBound = edge.getBoolean("inBound");
if (refType.length() != 0) {
if (inBound) {
refType = "<-- [" + refType + "] ";
} else {
refType = "--> [" + refType + "] ";
}
}
}
}
if (n.canGet("image", String.class)) {
String imageURL = n.getString("image");
if (imageURL != null) {
Image image = iFactory.getImage(imageURL);
//Image image = iFactory.getImage("http://localhost:8080/icons/generate?iconid=" + iconId);
ImageIcon icon = new ImageIcon(image);
label.setOpenIcon(icon);
label.setClosedIcon(icon);
label.setLeafIcon(icon);
}
}
if (n.canGet("checked", Boolean.class)) {
check.setSelected(n.getBoolean("checked"));
check.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
n.set("checked", check.isSelected());
if (listener != null) {
listener.onEvent(new Event(0, n));
}
System.out.println("Checkbox checked....");
}
});
}
}
String valueStr = tree.convertValueToText(value, selected, expanded, leaf, row, hasFocus);
valueStr = refType + valueStr;
label.getTreeCellRendererComponent(tree, valueStr, sel, expanded, leaf,
row, hasFocus);
return(getPanel(label));
}
}