001 // GraphLab Project: http://graphlab.sharif.edu 002 // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology 003 // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ 004 005 package graphlab.ui.components.gpropertyeditor.renderers; 006 007 import graphlab.ui.components.gpropertyeditor.GBasicCellRenderer; 008 import graphlab.ui.components.gpropertyeditor.GCellRenderer; 009 010 import javax.swing.*; 011 import java.awt.*; 012 import java.awt.event.MouseAdapter; 013 import java.awt.event.MouseEvent; 014 import java.awt.event.MouseListener; 015 import java.util.Vector; 016 017 /** 018 * Renders any Iterable object( including vcollections, ectors, sets, ...) 019 * 020 * @author Azin Azadi 021 */ 022 public class IterableRenderer implements GBasicCellRenderer<Iterable> { 023 public Component getRendererComponent(Iterable value) { 024 GridLayout layout = new GridLayout(); 025 int n = 0; 026 int w = Integer.MIN_VALUE; 027 int h = 0; 028 // final JPanel p = new JPanel(layout); 029 Vector v = new Vector(); 030 Component ren = null; 031 for (Object o : value) { 032 v.add(o); 033 n++; 034 } 035 final JList ret = new JList(v); 036 final GCellRenderer renderer = new GCellRenderer(); 037 ret.setCellRenderer(renderer); 038 if (n > 0) 039 layout.setRows(n); 040 if (n == 1) 041 return GCellRenderer.getRendererFor(v.get(0)); 042 else { 043 ret.addMouseListener(new MouseAdapter() { 044 public void mouseClicked(MouseEvent e) { 045 int row = ret.getSelectedIndex(); 046 if (row == -1) 047 return; 048 MouseListener[] mouseListeners = renderer.getLastCreatedRenderer(row).getMouseListeners(); 049 if (mouseListeners != null) { 050 for (MouseListener ml : mouseListeners) { 051 ml.mouseClicked(e); 052 } 053 } 054 } 055 }); 056 } 057 058 //pass the click events to the childs 059 return new JScrollPane(ret); 060 } 061 }