package ch.psi.mxsc; import ch.psi.pshell.swing.SwingUtils; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; /** * */ public class SampleGraphics { final Sample sample; final PuckGraphics puckGraphics; public SampleGraphics(Sample sample, PuckGraphics graphics){ this.sample = sample; this.puckGraphics = graphics; } Color getColor() { Color ret = Color.LIGHT_GRAY; if (sample.isLoaded() ) { ret = Color.BLUE; //} else if (sample.wasLoaded()) { // ret = Color.GREEN; } else if (sample.isPresent()) { ret = Color.CYAN.darker().darker(); } if (sample.isSelected()) { ret = ret.brighter(); } return ret; } int getNormalDrawSize() { return puckGraphics.getDrawSize(sample.getSize().getWidth() ); } int getDrawSize() { int ret = getNormalDrawSize(); if (sample.isSelected()) { ret += 2; } return ret; } Point getDrawPosition() { return puckGraphics.getDrawPosition(puckGraphics.getSamplePosition(sample)); } Color getLabelColor(boolean drawBackground) { return drawBackground ? puckGraphics.isHighlithted() ? Color.DARK_GRAY : new Color(92, 92, 92) : new Color (0,96,0); } Font getLabelFont() { ////return new Font("Times New Roman", Font.PLAIN, 8); //return new Font("Courier New", Font.PLAIN, 8); return new Font("Tahoma", Font.PLAIN, 8); } Point getLabelPosition(String text, Graphics g) { Point center = getDrawPosition(); Dimension textSize = SwingUtils.getTextSize(text, g.getFontMetrics()); return new Point(center.x - textSize.width / 2 + 1, center.y + (g.getFontMetrics().getAscent()/2)); } Color getBorderColor(boolean drawBackground) { if (drawBackground){ if (!sample.isEnabled()) { return Color.GRAY; } else if (sample.isSelected()) { return new Color(32,32,32); } return Color.GRAY; } return sample.isSelected() ? new Color(0,32,0) : new Color(0,128,0); } void draw (Graphics2D g, boolean drawBackground){ Point position = getDrawPosition(); int size = getDrawSize(); if (drawBackground){ g.setColor(getColor()); g.fillOval(position.x - size / 2, position.y - size / 2, size, size); } g.setColor(getBorderColor(drawBackground)); g.drawOval(position.x - size / 2, position.y - size / 2, size, size); if (getNormalDrawSize()>10){ String text = String.valueOf(sample.index + 1); g.setColor(getLabelColor(drawBackground)); g.setFont(getLabelFont()); Point labelPosition = getLabelPosition(text, g); g.drawString(text, labelPosition.x, labelPosition.y); } g.setPaintMode(); } }