package org.geogebra.desktop.gui.dialog;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import javax.swing.BorderFactory;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import org.geogebra.common.kernel.geos.GeoElement;
/**
* @author Le Coq Loic 30/10/2006 This class defines the renderer for the
* ComboBox where the user chooses the decoration for GeoSegment
*
*/
public class DecorationListRenderer extends JPanel implements ListCellRenderer {
private static final long serialVersionUID = 1L;
int id = 0;
public DecorationListRenderer() {
setOpaque(true);
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// Get the selected index. (The index param isn't
// always valid, so just use the value.)
int selectedIndex = ((Integer) value).intValue();
this.id = selectedIndex;
if (isSelected) {
setBackground(Color.LIGHT_GRAY);
} else {
setBackground(list.getBackground());
}
setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
return this;
}
@Override
public void paint(Graphics g) {
super.paint(g);
if (getBackground() == Color.LIGHT_GRAY) {
g.setColor(Color.LIGHT_GRAY);
} else {
g.setColor(Color.WHITE);
}
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.BLACK);
int mid = getHeight() / 2;
g.drawLine(0, mid, getWidth(), mid);
switch (id) {
default:
case GeoElement.DECORATION_NONE:
break;
case GeoElement.DECORATION_SEGMENT_ONE_TICK:
int quart = mid / 2;
int mid_width = getWidth() / 2;
g.drawLine(mid_width, quart, mid_width, mid + quart);
break;
case GeoElement.DECORATION_SEGMENT_TWO_TICKS:
quart = mid / 2;
mid_width = getWidth() / 2;
g.drawLine(mid_width - 1, quart, mid_width - 1, mid + quart);
g.drawLine(mid_width + 2, quart, mid_width + 2, mid + quart);
break;
case GeoElement.DECORATION_SEGMENT_THREE_TICKS:
quart = mid / 2;
mid_width = getWidth() / 2;
g.drawLine(mid_width, quart, mid_width, mid + quart);
g.drawLine(mid_width + 3, quart, mid_width + 3, mid + quart);
g.drawLine(mid_width - 3, quart, mid_width - 3, mid + quart);
break;
case GeoElement.DECORATION_SEGMENT_ONE_ARROW:
quart = mid / 2;
mid_width = getWidth() / 2;
g.drawLine(mid_width, mid, mid_width - quart, mid - quart);
g.drawLine(mid_width, mid, mid_width - quart, mid + quart);
break;
case GeoElement.DECORATION_SEGMENT_TWO_ARROWS:
quart = mid / 2;
mid_width = getWidth() / 2;
g.drawLine(mid_width - 3, mid, mid_width - quart - 3, mid - quart);
g.drawLine(mid_width - 3, mid, mid_width - quart - 3, mid + quart);
g.drawLine(mid_width + 3, mid, mid_width - quart + 3, mid - quart);
g.drawLine(mid_width + 3, mid, mid_width - quart + 3, mid + quart);
break;
case GeoElement.DECORATION_SEGMENT_THREE_ARROWS:
quart = mid / 2;
mid_width = getWidth() / 2;
g.drawLine(mid_width, mid, mid_width - quart, mid - quart);
g.drawLine(mid_width, mid, mid_width - quart, mid + quart);
g.drawLine(mid_width + 6, mid, mid_width - quart + 6, mid - quart);
g.drawLine(mid_width + 6, mid, mid_width - quart + 6, mid + quart);
g.drawLine(mid_width - 6, mid, mid_width - quart - 6, mid - quart);
g.drawLine(mid_width - 6, mid, mid_width - quart - 6, mid + quart);
break;
}
}
}