package org.gephi.desktop.datalab.utils.componentproviders; import java.awt.Color; import java.awt.image.BufferedImage; import javax.swing.JLabel; import org.gephi.desktop.datalab.utils.GraphModelProvider; import org.gephi.graph.api.types.TimeSet; import org.gephi.utils.TimeIntervalGraphics; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.painter.ImagePainter; import org.jdesktop.swingx.renderer.CellContext; import org.jdesktop.swingx.renderer.ComponentProvider; import org.jdesktop.swingx.renderer.JRendererLabel; /** * * @author Eduardo Ramos */ public abstract class AbstractTimeSetGraphicsComponentProvider extends ComponentProvider<JLabel> { protected static final Color SELECTED_BACKGROUND = new Color(225, 255, 255); protected static final Color UNSELECTED_BACKGROUND = Color.white; protected static final Color FILL_COLOR = new Color(153, 255, 255); protected static final Color BORDER_COLOR = new Color(2, 104, 255); protected final TimeIntervalGraphics timeIntervalGraphics; protected final JXTable table; protected final GraphModelProvider graphModelProvider; protected JRendererLabel rendererLabel; public AbstractTimeSetGraphicsComponentProvider(GraphModelProvider graphModelProvider, JXTable table) { super(null, JLabel.LEADING); this.graphModelProvider = graphModelProvider; this.table = table; this.timeIntervalGraphics = new TimeIntervalGraphics(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); } private String getTextFromValue(Object value) { TimeSet timeSet = (TimeSet) value; String text = null; if (timeSet != null) { text = timeSet.toString(graphModelProvider.getGraphModel().getTimeFormat(), graphModelProvider.getGraphModel().getTimeZone()); } return text; } @Override protected void format(CellContext context) { //Set image or text int witdth = table.getColumnModel().getColumn(context.getColumn()).getWidth(); int height = table.getRowHeight(context.getRow()); String text = getTextFromValue(context.getValue()); rendererLabel.setSize(witdth, height); rendererLabel.setToolTipText(text); rendererLabel.setBorder(null); setImagePainter((TimeSet) context.getValue(), context.isSelected()); } @Override protected void configureState(CellContext context) { } @Override protected JLabel createRendererComponent() { return rendererLabel = new JRendererLabel(); } protected class TimeIntervalGraphicsParameters { private final double[] starts; private final double[] ends; public TimeIntervalGraphicsParameters(double[] starts, double[] ends) { this.starts = starts; this.ends = ends; } } public abstract TimeIntervalGraphicsParameters getTimeIntervalGraphicsParameters(TimeSet value); public void setImagePainter(TimeSet value, boolean isSelected) { if (value == null) { rendererLabel.setPainter(null); return; } Color background; if (isSelected) { background = SELECTED_BACKGROUND; } else { background = UNSELECTED_BACKGROUND; } TimeIntervalGraphicsParameters params = getTimeIntervalGraphicsParameters(value); final BufferedImage image = timeIntervalGraphics.createTimeIntervalImage( params.starts, params.ends, rendererLabel.getWidth() - 1, rendererLabel.getHeight() - 1, FILL_COLOR, BORDER_COLOR, background ); rendererLabel.setPainter(new ImagePainter(image)); } public double getMax() { return timeIntervalGraphics.getMax(); } public double getMin() { return timeIntervalGraphics.getMin(); } public void setMinMax(double min, double max) { timeIntervalGraphics.setMinMax(min, max); } }