diff --git a/src/main/java/ch/psi/mxsc/BasePlatePanel.java b/src/main/java/ch/psi/mxsc/BasePlatePanel.java index ae61e27..37812d1 100644 --- a/src/main/java/ch/psi/mxsc/BasePlatePanel.java +++ b/src/main/java/ch/psi/mxsc/BasePlatePanel.java @@ -30,8 +30,8 @@ import javax.swing.JPopupMenu; */ public class BasePlatePanel extends DevicePanel { JPopupMenu samplePopupMenu; - JMenuItem menuLoadSample; - JMenuItem menuUnloadSample; + JMenuItem menuMountSample; + JMenuItem menuUnmountSample; BasePlateGraphics basePlateGraphics; PuckGraphics puckGraphics; @@ -43,8 +43,8 @@ public class BasePlatePanel extends DevicePanel { initComponents(); addMouseListener(mouseAdapter); samplePopupMenu = new JPopupMenu(); - menuLoadSample = new JMenuItem("Load"); - menuLoadSample.addActionListener((ActionEvent e) -> { + menuMountSample = new JMenuItem("Mount"); + menuMountSample.addActionListener((ActionEvent e) -> { try { //getDevice().loadSample(); int sample = clickedSample.getNumber(); @@ -55,8 +55,8 @@ public class BasePlatePanel extends DevicePanel { SwingUtils.showException(this, ex); } }); - menuUnloadSample = new JMenuItem("Unload"); - menuUnloadSample.addActionListener((ActionEvent e) -> { + menuUnmountSample = new JMenuItem("Unmount"); + menuUnmountSample.addActionListener((ActionEvent e) -> { try { //getDevice().unloadSample(getDevice().getSelectedSample()); int sample = clickedSample.getNumber(); @@ -67,8 +67,8 @@ public class BasePlatePanel extends DevicePanel { SwingUtils.showException(this, ex); } }); - samplePopupMenu.add(menuLoadSample); - samplePopupMenu.add(menuUnloadSample); + samplePopupMenu.add(menuMountSample); + samplePopupMenu.add(menuUnmountSample); } @Override @@ -408,8 +408,8 @@ public class BasePlatePanel extends DevicePanel { if (getSelectionMode()==SelectionMode.Samples){ //menuLoadSample.setEnabled(sample.isPresent() && getDevice().getLoadedSample()==null); //menuUnloadSample.setEnabled(!sample.isPresent() && getDevice().getLoadedSample()!=null); - menuLoadSample.setEnabled(!sample.isLoaded() && getDevice().getLoadedSample()==null); - menuUnloadSample.setEnabled(sample.isLoaded() && getDevice().getLoadedSample()!=null); + menuMountSample.setEnabled(!sample.isLoaded() && getDevice().getLoadedSample()==null); + menuUnmountSample.setEnabled(sample.isLoaded() && getDevice().getLoadedSample()!=null); samplePopupMenu.show(e.getComponent(), e.getX(), e.getY()); } } diff --git a/src/main/java/ch/psi/mxsc/MainPanel.form b/src/main/java/ch/psi/mxsc/MainPanel.form index e1bfb8a..674f478 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.form +++ b/src/main/java/ch/psi/mxsc/MainPanel.form @@ -1179,7 +1179,7 @@ - + diff --git a/src/main/java/ch/psi/mxsc/MainPanel.java b/src/main/java/ch/psi/mxsc/MainPanel.java index cac6c28..bcbe788 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.java +++ b/src/main/java/ch/psi/mxsc/MainPanel.java @@ -4,7 +4,6 @@ package ch.psi.mxsc; import ch.psi.mxsc.BasePlatePanel.SelectionMode; -import ch.psi.pshell.core.Context; import ch.psi.pshell.core.Plugin; import ch.psi.pshell.device.Device; import ch.psi.pshell.device.DeviceAdapter; @@ -12,7 +11,6 @@ import ch.psi.pshell.imaging.Renderer; import ch.psi.pshell.imaging.RendererMode; import ch.psi.pshell.imaging.Source; import ch.psi.pshell.scripting.ViewPreference; -import ch.psi.pshell.swing.ScriptEditor; import ch.psi.pshell.ui.App; import ch.psi.pshell.ui.Panel; import ch.psi.pshell.ui.StatusBar; @@ -31,14 +29,14 @@ import java.awt.Dimension; import java.awt.GridBagLayout; import java.awt.Image; import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.logging.Level; -import java.util.logging.Logger; -import javax.script.ScriptException; import javax.swing.GroupLayout; import javax.swing.ImageIcon; import javax.swing.JComponent; @@ -47,6 +45,7 @@ import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -64,6 +63,10 @@ public class MainPanel extends Panel { Boolean roomTemperature; public final String PUCK_LOADING_STATUS = "Puck loading"; StatusBar statusBar; + JPopupMenu samplePopupMenu; + JMenuItem menuMountSample; + JMenuItem menuUnmoountSample; + public enum BasePlateLayout { normal, @@ -95,6 +98,9 @@ public class MainPanel extends Panel { panelLegend.setVisible(false); panelLN2Level.setVisible(false); panelDisplayMode.setVisible(false); + panelBottom.setPreferredSize(panelTop.getPreferredSize()); + panelBottom.setMinimumSize(panelTop.getMinimumSize()); + panelBottom.setSize(panelTop.getSize()); panelDatamatrix.setVisible(false); } @@ -134,13 +140,9 @@ public class MainPanel extends Panel { if (e.getValueIsAdjusting() == false) { int selection = tableSamples.getSelectedRow(); if (selection >= 0) { - String add = String.valueOf(tableSamples.getModel().getValueAt(selection, COLUMN_PUCK_ADDRESS)); + String add = getSamplesTableSelectedPuck(); if (!add.trim().isEmpty()) { - int pos = -1; - try { - pos = Integer.valueOf(String.valueOf(tableSamples.getModel().getValueAt(selection, COLUMN_SAMPLE_POSITION))); - } catch (Exception ex) { - } + int pos = getSamplesTableSelectedPosition(); String curSelection = Controller.getInstance().getCurrentSelection(); String curPuck = (curSelection == null) ? null : curSelection.substring(0, 2); if (!add.equals(curPuck)) { @@ -162,6 +164,91 @@ public class MainPanel extends Panel { } } }); + + + tableSamples.addMouseListener(new MouseAdapter() { + /* + @Override + public void mouseClicked(MouseEvent e) { + try { + if ((e.getClickCount() == 2) && (!e.isPopupTrigger())) { + int index = tableSamples.getSelectedRow(); + if (index>=0) { + onDoubleClickSample(index); + } + } + } catch (Exception ex) { + showException(ex); + } + } + */ + + @Override + public void mouseReleased(MouseEvent e) { + checkPopup(e); + } + + @Override + public void mousePressed(MouseEvent e) { + checkPopup(e); + } + + private void checkPopup(MouseEvent e) { + try { + if (e.isPopupTrigger()) { + int r = tableSamples.rowAtPoint(e.getPoint()); + if (r >= 0 && r < tableSamples.getRowCount()) { + tableSamples.setRowSelectionInterval(r, r); + } else { + tableSamples.clearSelection(); + } + int index = tableSamples.getSelectedRow(); + + if (index>=0) { + Sample clickedSample = getSamplesTableSelectedSample(); + if (clickedSample!=null){ + //menuLoadSample.setEnabled(!clickedSample.isLoaded() && Controller.getInstance().basePlate.getLoadedSample()==null); + menuMountSample.setEnabled(!clickedSample.isLoaded()); + menuUnmoountSample.setEnabled(clickedSample.isLoaded() && Controller.getInstance().basePlate.getLoadedSample()!=null); + samplePopupMenu.show(e.getComponent(), e.getX(), e.getY()); + } + } + } + } catch (Exception ex) { + showException(ex); + } + + } + } + ); + + samplePopupMenu = new JPopupMenu(); + menuMountSample = new JMenuItem("Mount"); + menuMountSample.addActionListener((ActionEvent e) -> { + try { + Sample clickedSample = getSamplesTableSelectedSample(); + int sample = clickedSample.getNumber(); + int puck = clickedSample.getPuck().getNumber(); + char segment = clickedSample.getPuck().getSegment(); + Controller.instance.execute("mount('" + segment + "'," + puck + "," + sample + ", auto_unmount=True)"); + } catch (Exception ex) { + SwingUtils.showException(this, ex); + } + }); + menuUnmoountSample = new JMenuItem("Unmount"); + menuUnmoountSample.addActionListener((ActionEvent e) -> { + try { + Sample clickedSample = getSamplesTableSelectedSample(); + int sample = clickedSample.getNumber(); + int puck = clickedSample.getPuck().getNumber(); + char segment = clickedSample.getPuck().getSegment(); + Controller.instance.execute("unmount('" + segment + "'," + puck + "," + sample + ")"); + } catch (Exception ex) { + SwingUtils.showException(this, ex); + } + }); + samplePopupMenu.add(menuMountSample); + samplePopupMenu.add(menuUnmoountSample); } JMenuItem menuEditSamples; @@ -192,6 +279,38 @@ public class MainPanel extends Panel { } } + + public String getSamplesTableSelectedPuck(){ + try { + int selection = tableSamples.getSelectedRow(); + return String.valueOf(tableSamples.getModel().getValueAt(selection, COLUMN_PUCK_ADDRESS)); + } catch (Exception ex) { + return ""; + } + + } + + public int getSamplesTableSelectedPosition(){ + try { + int selection = tableSamples.getSelectedRow(); + return Integer.valueOf(String.valueOf(tableSamples.getModel().getValueAt(selection, COLUMN_SAMPLE_POSITION))); + } catch (Exception ex) { + return -1; + } + } + + + public Sample getSamplesTableSelectedSample(){ + try{ + String puck = getSamplesTableSelectedPuck(); + int pos = getSamplesTableSelectedPosition(); + return Controller.getInstance().basePlate.getSampleByName(puck+pos); + } catch (Exception ex){ + return null; + } + } + + @Override protected void onUnloaded() { if (getView() != null) { @@ -735,6 +854,7 @@ public class MainPanel extends Panel { JsonTableEditor editor = new JsonTableEditor(columns, types); + editor.setShowClearButton(true); editor.getDocument().addListener(new DocumentListener() { @Override public void onDocumentChanged(Document doc) { @@ -750,8 +870,9 @@ public class MainPanel extends Panel { } } }); - getView().openComponent(new File(file).getName(), editor); editor.load(file); + getView().openEditor(editor); + return editor; } catch (Exception ex) { showException(ex);