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    }