/* * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. */ package ch.psi.mxsc; import ch.psi.pshell.device.Device; import ch.psi.pshell.device.DeviceBase; import ch.psi.pshell.imaging.DimensionDouble; import ch.psi.pshell.imaging.PointDouble; import ch.psi.utils.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 Sample extends DeviceBase { final int index; public Sample(Puck puck, int index){ super((puck.getIndex()+1) + ":" + (index+1)); setParent(puck); this.index = index; } public Puck getPuck() { return (Puck) getParent(); } DimensionDouble getSize(){ return new DimensionDouble(12.0, 12.0); } public int getIndex() { return index; } boolean enabled; public boolean isEnabled() { return enabled; } public void setEnabled(boolean value) { enabled = value; } boolean selected; public boolean isSelected() { return selected; } public void setSelected(boolean value) { if (value != selected){ if (value == true){ ((Puck)getParent()).setSelected(true); for (Device d : getParent().getChildren()){ if (d instanceof Sample){ ((Sample)d).selected = false; } } } selected = value; } } boolean present; public boolean isPresent() { return present; } public void setPresent(boolean value) { present = value; } boolean loaded; public boolean isLoaded() { return loaded; } public void setLoaded(boolean value) { loaded = value; if (value) { wasLoaded = true; } } boolean wasLoaded; public boolean wasLoaded() { return wasLoaded; } Color getColor() { Color ret = Color.LIGHT_GRAY; if (isLoaded()) { ret = Color.BLUE; } else if (wasLoaded()) { ret = Color.GREEN; } else if (isPresent()) { ret = Color.CYAN.darker().darker(); } if (selected) { ret = ret.brighter(); } return ret; } int getDrawSize() { int ret = (int)((getSize().getWidth() / getPuck().getSize().getWidth()) * getPuck().getDrawSize()); if (isSelected()) { ret += 2; } return ret; } Point getDrawPosition() { Point puckCenter = getPuck().getDrawPosition(); int puckDrawSize = getPuck().getDrawSize(); DimensionDouble puckSize = getPuck().getSize(); int size = getDrawSize(); PointDouble pos = getPuck().getSamplePosition(this); return new Point( (int) ((pos.x / puckSize.getWidth())* puckDrawSize/2 + puckCenter.x) , (int) ((pos.y / puckSize.getHeight())* puckDrawSize/2 + puckCenter.y) ); } Color getLabelColor() { return Color.BLACK; } Font getLabelFont() { return new Font("Times New Roman", Font.PLAIN, 9); } 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() { if (!isEnabled()) { return Color.GRAY; } else if (isSelected()) { return new Color(32,32,32); } return Color.GRAY; } void draw (Graphics2D g){ Point position = getDrawPosition(); int size = getDrawSize(); g.setColor(getColor()); g.fillOval(position.x - size / 2, position.y - size / 2, size, size); g.setColor(getBorderColor()); g.drawOval(position.x - size / 2, position.y - size / 2, size, size); String text = String.valueOf(index + 1); Point labelPosition = getLabelPosition(text, g); g.setColor(getLabelColor()); g.setFont(getLabelFont()); g.drawString(text, labelPosition.x, labelPosition.y); g.setPaintMode(); } }