From 0cf990492958c4dac3215d9f35bdd08f30620b75 Mon Sep 17 00:00:00 2001 From: Alexandre Gobbo Date: Tue, 11 Sep 2018 11:57:51 +0200 Subject: [PATCH] Link samples table to GUI events --- src/main/java/ch/psi/mxsc/Controller.java | 44 +++++++++++++++-------- src/main/java/ch/psi/mxsc/MainPanel.java | 5 +++ src/main/java/ch/psi/mxsc/Puck.java | 9 +++++ 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/main/java/ch/psi/mxsc/Controller.java b/src/main/java/ch/psi/mxsc/Controller.java index 58791da..4296b1c 100644 --- a/src/main/java/ch/psi/mxsc/Controller.java +++ b/src/main/java/ch/psi/mxsc/Controller.java @@ -15,6 +15,7 @@ import ch.psi.pshell.device.GenericDevice; import ch.psi.pshell.device.ReadbackDevice; import ch.psi.pshell.ui.Panel; import ch.psi.utils.State; +import ch.psi.utils.swing.SwingUtils; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -24,6 +25,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.script.ScriptException; import javax.swing.JComponent; +import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; /** @@ -509,9 +511,10 @@ public class Controller { ////////////////////// Sample Info ///////////////////////////////// String samplesTableJson; - final Object samplesTableLock = new Object(); + //final Object samplesTableLock = new Object(); void refreshSamplesTable() { - synchronized(samplesTableLock){ + //synchronized(samplesTableLock){ + SwingUtilities.invokeLater(()->{ try { String json = (String) Context.getInstance().evalLineBackground("get_samples_info()"); if (!json.equals(samplesTableJson)) { @@ -530,7 +533,8 @@ public class Controller { clearSamplesTable(); Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex); } - } + }); + //} } void clearSamplesTable() { @@ -557,6 +561,7 @@ public class Controller { } else if (getState().isInitialized()){ execute("barcode_reader.polling = 0", true); execute("barcode_reader.disable()", true); + getMainFrame().setPuckDatamatrix(null); } } } @@ -575,18 +580,17 @@ public class Controller { Puck.Detection[] detection = basePlate.getDetection(); for (int i=0; i< Controller.NUMBER_OF_PUCKS; i++){ Puck puck = basePlate.getPucks()[i]; + //Only manage pucks for current hexiposi position if (isSelectedPuck(puck)){ - boolean detectedPuckInserted = (currentDetection[i] != Puck.Detection.Present) && (detection[i] == Puck.Detection.Present); + boolean detectedPuckInserted = (currentDetection[i] != Puck.Detection.Present) && (detection[i] == Puck.Detection.Present); boolean detectedPuckRemoved = (currentDetection[i] != Puck.Detection.Empty) && (detection[i] == Puck.Detection.Empty); if (detectedPuckInserted){ - System.out.println("Detected puck at position: " + puck.getName() + " - Datamatrix: " + (datamatrix.isEmpty() ? null : datamatrix)); if (!datamatrix.isEmpty()){ getMainFrame().setPuckDatamatrix(null); - setPuckDatamatrix(puck, datamatrix); + linkPuckDatamatrix(puck, datamatrix); } } else if (detectedPuckRemoved){ - System.out.println("Removed puck from position " + puck.getName() + " - Datamatrix: " + puck.getId()); - setPuckDatamatrix(puck, null); + linkPuckDatamatrix(puck, null); } } } @@ -595,14 +599,24 @@ public class Controller { } } - void setPuckDatamatrix(Puck puck, String datamatrix){ - if ( ((puck.getId()==null) && (datamatrix!=null)) || - (puck.getId()!=null) && (!puck.getId().equals(datamatrix))){ + public void linkPuckDatamatrix(Puck puck, String datamatrix){ +// if ( ((puck.getId()==null) && (datamatrix!=null)) || +// (puck.getId()!=null) && (!puck.getId().equals(datamatrix))){ System.out.println("Setting to: " + puck.getName() + " datamatrix: " + datamatrix); - - puck.setId(datamatrix); - getMainFrame().refresh(); - } + + try { + Context.getInstance().evalLineBackground("set_puck_datamatrix('" + puck.getName() + "','" + datamatrix + "')"); + puck.setId(datamatrix); + SwingUtils.showMessage(getMainFrame(), "Puck loading", + "Puck " + datamatrix + "set to position " + puck.getName(), + 5000); + } catch (Exception ex) { + Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex); + } + + refreshSamplesTable(); + getMainFrame().refresh(); +// } } } diff --git a/src/main/java/ch/psi/mxsc/MainPanel.java b/src/main/java/ch/psi/mxsc/MainPanel.java index 017dcb6..16b8f49 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.java +++ b/src/main/java/ch/psi/mxsc/MainPanel.java @@ -30,6 +30,7 @@ import javax.swing.ImageIcon; 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; @@ -219,6 +220,10 @@ public class MainPanel extends Panel { } void refresh() { + if (!SwingUtilities.isEventDispatchThread()){ + SwingUtilities.invokeLater(()->{refresh();}); + return; + } repaint(); for (Puck p : Controller.getInstance().basePlate.getPucks()) { int index = p.getUserIndex(); diff --git a/src/main/java/ch/psi/mxsc/Puck.java b/src/main/java/ch/psi/mxsc/Puck.java index a1c3e50..86e8a9c 100644 --- a/src/main/java/ch/psi/mxsc/Puck.java +++ b/src/main/java/ch/psi/mxsc/Puck.java @@ -175,6 +175,15 @@ public class Puck extends DeviceBase { } public void setId(String value) { + for (Device d : getParent().getChildren()) { + if (d instanceof Puck) { + if (((Puck)d).getId() != null){ + if (((Puck)d).getId().equals(value)){ + ((Puck)d).setId(null); + } + } + } + } id = value; }