diff --git a/src/main/java/ch/psi/mxsc/BasePlate.java b/src/main/java/ch/psi/mxsc/BasePlate.java
index e2e46dd..c26d120 100644
--- a/src/main/java/ch/psi/mxsc/BasePlate.java
+++ b/src/main/java/ch/psi/mxsc/BasePlate.java
@@ -10,7 +10,6 @@ import ch.psi.pshell.imaging.PointDouble;
import ch.psi.pshell.imaging.Utils;
import ch.psi.utils.swing.MainFrame;
import java.awt.Color;
-import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
@@ -279,4 +278,20 @@ public class BasePlate extends DeviceBase {
unloadSample (getLoadedSample());
}
+
+ void onSelectionChanged(){
+ Sample sample = getSelectedSample();
+ if (sample!=null){
+ //setCache(sample.getName());
+ setCache(new Object[]{sample.getPuck().segment, sample.getPuck().number, sample.index+1});
+ } else {
+ Puck puck = getSelectedPuck();
+ if (puck!=null){
+ //setCache(puck.getName());
+ setCache(new Object[]{puck.segment, puck.number, null});
+ }
+ }
+ setCache(null);
+ }
+
}
diff --git a/src/main/java/ch/psi/mxsc/BasePlatePanel.java b/src/main/java/ch/psi/mxsc/BasePlatePanel.java
index 5466354..03021a3 100644
--- a/src/main/java/ch/psi/mxsc/BasePlatePanel.java
+++ b/src/main/java/ch/psi/mxsc/BasePlatePanel.java
@@ -301,6 +301,15 @@ public class BasePlatePanel extends DevicePanel {
}
+ void selectSample(Sample sample){
+ if (getDevice().isSelectable()){
+ sample.setSelected(true);
+ repaint();
+ }
+ Controller.getInstance().onSamplePressed(sample);
+
+ }
+
void onSamplePressed(MouseEvent e, Sample sample){
if (getDevice().isSelectable()){
if (TOGGLE_SELECTION){
@@ -332,6 +341,14 @@ public class BasePlatePanel extends DevicePanel {
}
+ void selectPuck(Puck puck){
+ if (getDevice().isSelectable()){
+ puck.setSelected(true);
+ repaint();
+ }
+ Controller.getInstance().onPuckPressed(puck);
+ }
+
void onPuckPressed(MouseEvent e, Puck puck){
if (getDevice().isSelectable()){
if (TOGGLE_SELECTION){
diff --git a/src/main/java/ch/psi/mxsc/Controller.java b/src/main/java/ch/psi/mxsc/Controller.java
index a5bb6db..1523da1 100644
--- a/src/main/java/ch/psi/mxsc/Controller.java
+++ b/src/main/java/ch/psi/mxsc/Controller.java
@@ -91,6 +91,43 @@ public class Controller {
this.mainFrame = (MainPanel) mainFrame;
instance = this;
clearPuckStates();
+
+ basePlate.addListener(new DeviceAdapter() {
+ @Override
+ public void onValueChanged(Device device, Object value, Object former) {
+ if (value!=null){
+ String segment = ((Object[])value)[0].toString();
+ Integer puck = (Integer) ((Object[])value)[1];
+ Integer sample = (Integer) ((Object[])value)[2];
+ Controller.this.mainFrame.onSelectionChanged(segment, puck, sample);
+ } else {
+ Controller.this.mainFrame.onSelectionChanged(null,null,null);
+ }
+ }
+ });
+ }
+
+ String getCurrentSelection(){
+ Object value = basePlate.take();
+ if (value!=null){
+ String segment = ((Object[])value)[0].toString();
+ Integer puck = (Integer) ((Object[])value)[1];
+ Integer sample = (Integer) ((Object[])value)[2];
+ String ret = segment + String.valueOf(puck);
+ if (sample!=null){
+ ret = ret + String.valueOf(sample);
+ }
+ return ret;
+ }
+ return null;
+ }
+
+ public void selectPuck(Puck puck){
+ getMainFrame().basePlatePanel.selectPuck(puck);
+ }
+
+ public void selectSample(Sample sample){
+ getMainFrame().basePlatePanel.selectSample(sample);
}
//public Panel getMainFrame() {
@@ -109,6 +146,7 @@ public class Controller {
}
getMainFrame().addDevice(basePlate);
+
if (puckSensorAccess == PuckSensorAccess.Esera) {
getMainFrame().getContext().getDevicePool().addListener(new DevicePoolListener() {
diff --git a/src/main/java/ch/psi/mxsc/MainPanel.form b/src/main/java/ch/psi/mxsc/MainPanel.form
index b25fd46..e20369c 100644
--- a/src/main/java/ch/psi/mxsc/MainPanel.form
+++ b/src/main/java/ch/psi/mxsc/MainPanel.form
@@ -79,6 +79,9 @@
+
+
+
@@ -805,18 +808,16 @@
+
-
-
-
-
-
+
-
+
-
+
+
@@ -1144,10 +1145,7 @@
-
-
-
-
+
@@ -1166,7 +1164,6 @@
-
diff --git a/src/main/java/ch/psi/mxsc/MainPanel.java b/src/main/java/ch/psi/mxsc/MainPanel.java
index 5d1d101..7dde1db 100644
--- a/src/main/java/ch/psi/mxsc/MainPanel.java
+++ b/src/main/java/ch/psi/mxsc/MainPanel.java
@@ -30,6 +30,8 @@ import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
/**
@@ -56,7 +58,26 @@ public class MainPanel extends Panel {
for (int puck=1; puck<=5; puck++){
tablePucks.getModel().setValueAt(segment+puck, row++, 0);
}
- }
+ }
+
+ tablePucks.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+ @Override
+ public void valueChanged(ListSelectionEvent e) {
+ try{
+ String add = String.valueOf(tablePucks.getModel().getValueAt(tablePucks.getSelectedRow(), 0));
+ String cur = Controller.getInstance().getCurrentSelection();
+ if (cur!=null){
+ cur = cur.substring(0,2);
+ }
+ if (!add.equals(cur)){
+ Puck puck = Controller.getInstance().getPuck(add);
+ Controller.getInstance().selectPuck(puck);
+ }
+ } catch (Exception ex){
+ showException(ex);
+ }
+ }
+ });
}
@Override
@@ -73,8 +94,10 @@ public class MainPanel extends Panel {
public void onInitialize(int runCount) {
stopTimer();
Controller.getInstance().onInitialize(runCount);
- //basePlatePanel.setDevice((Device) getDevice("BasePlate"));
- //basePlatePanel.getDevice().setSelectable(true);
+ if (basePlatePanel.getDevice() != (Device) getDevice("BasePlate")){
+ basePlatePanel.setDevice((Device) getDevice("BasePlate"));
+ basePlatePanel.getDevice().setSelectable(true);
+ }
try {
devicesPanel.initialize();
((Device) getDevice("dewar_level")).addListener(new DeviceAdapter() {
@@ -167,6 +190,7 @@ public class MainPanel extends Panel {
void refresh(){
repaint();
for (Puck p : Controller.getInstance().basePlate.getPucks()) {
+ //int index = (p.getSegment() - new Character('A')) * 5 + p.getNumber();
tablePucks.getModel().setValueAt(p.getStatus(), p.getIndex(), 1);
tablePucks.getModel().setValueAt(p.getId(), p.getIndex(), 2);
}
@@ -430,6 +454,23 @@ public class MainPanel extends Panel {
HEADER
));
}
+
+
+ void onSelectionChanged(String segment, Integer puck, Integer sample){
+ if (segment != null){
+ String add = segment + String.valueOf(puck);
+ for (int i=0; i