// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.ui.components.gpropertyeditor.renderers;
import graphtea.ui.components.gpropertyeditor.GBasicCellRenderer;
import graphtea.ui.components.gpropertyeditor.GCellRenderer;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;
/**
* Renders any Iterable object( including vcollections, ectors, sets, ...)
*
* @author Azin Azadi
*/
public class IterableRenderer implements GBasicCellRenderer<Iterable> {
public Component getRendererComponent(Iterable value) {
GridLayout layout = new GridLayout();
int n = 0;
int w = Integer.MIN_VALUE;
int h = 0;
// final JPanel p = new JPanel(layout);
Vector v = new Vector();
for (Object o : value) {
v.add(o);
n++;
}
final JList ret = new JList(v);
final GCellRenderer renderer = new GCellRenderer();
ret.setCellRenderer(renderer);
if (n > 0)
layout.setRows(n);
if (n == 1)
return GCellRenderer.getRendererFor(v.get(0));
else {
ret.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int row = ret.getSelectedIndex();
if (row == -1)
return;
MouseListener[] mouseListeners = renderer.getLastCreatedRenderer(row).getMouseListeners();
if (mouseListeners != null) {
for (MouseListener ml : mouseListeners) {
ml.mouseClicked(e);
}
}
}
});
}
//pass the click events to the childs
return new JScrollPane(ret);
}
}