From b9ca25e91d014d99835fcdfe519f57b6520151f6 Mon Sep 17 00:00:00 2001 From: gac-S_Changer Date: Mon, 23 Mar 2026 13:37:17 +0100 Subject: [PATCH] PuckLoadingDialog options --- src/main/java/ch/psi/mxsc/BasePlatePanel.java | 6 + src/main/java/ch/psi/mxsc/Controller.java | 8 +- .../java/ch/psi/mxsc/PuckLoadingDialog.form | 404 ++++++++++-------- .../java/ch/psi/mxsc/PuckLoadingDialog.java | 274 +++++++----- 4 files changed, 417 insertions(+), 275 deletions(-) diff --git a/src/main/java/ch/psi/mxsc/BasePlatePanel.java b/src/main/java/ch/psi/mxsc/BasePlatePanel.java index bed87a4..d2dd36f 100644 --- a/src/main/java/ch/psi/mxsc/BasePlatePanel.java +++ b/src/main/java/ch/psi/mxsc/BasePlatePanel.java @@ -90,6 +90,7 @@ public class BasePlatePanel extends DevicePanel { public enum Mode { single, + pucks, horizontal, vertical, overlapped, @@ -180,6 +181,11 @@ public class BasePlatePanel extends DevicePanel { puckPlotRect = null; basePlateGraphics.draw(g2d, platePlotRect, (img==null), false, true, DrawMode.center, img); break; + case pucks: + platePlotRect = plotRect; + puckPlotRect = null; + basePlateGraphics.draw(g2d, platePlotRect, false, false, true, DrawMode.center, null); + break; case horizontal: platePlotRect = new Rectangle(plotRect.x, plotRect.y, plotRect.width / 2, plotRect.height); basePlateGraphics.draw(g2d, platePlotRect, false, true, true, DrawMode.fill, null); diff --git a/src/main/java/ch/psi/mxsc/Controller.java b/src/main/java/ch/psi/mxsc/Controller.java index a4c2b68..efbdc0e 100644 --- a/src/main/java/ch/psi/mxsc/Controller.java +++ b/src/main/java/ch/psi/mxsc/Controller.java @@ -25,7 +25,9 @@ import ch.psi.pshell.swing.SwingUtils; import ch.psi.pshell.utils.State.StateException; import java.awt.BorderLayout; import java.awt.Dimension; +import java.awt.Frame; import java.awt.Point; +import java.awt.Rectangle; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; @@ -844,6 +846,9 @@ public class Controller { laserPos = pos; getMainFrame().evalAsync("set_laser_pos(" + ((pos==null) ? "" : ("'" + pos + "'") ) + ")" ,true); getMainFrame().basePlatePanel.pointPuck((pos==null) ? null : basePlate.getPuckByName(pos)); + if ((dialogPuckLoading != null) && (dialogPuckLoading.isVisible()) && dialogPuckLoading.getBasePlatePanel()!=null) { + dialogPuckLoading.getBasePlatePanel().pointPuck((pos==null) ? null : basePlate.getPuckByName(pos)); + } } catch (StateException ex) { Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex); } @@ -1083,8 +1088,7 @@ public class Controller { if ((dialogPuckLoading != null) && (dialogPuckLoading.isVisible())) { return; } - dialogPuckLoading = new PuckLoadingDialog(mainFrame.getTopLevel(), false); - dialogPuckLoading.setLocationRelativeTo(mainFrame); + dialogPuckLoading = new PuckLoadingDialog(mainFrame.getTopLevel(), false, false, true); dialogPuckLoading.setVisible(true); checkPuckDetectionEnabling(); diff --git a/src/main/java/ch/psi/mxsc/PuckLoadingDialog.form b/src/main/java/ch/psi/mxsc/PuckLoadingDialog.form index cd82428..453811c 100644 --- a/src/main/java/ch/psi/mxsc/PuckLoadingDialog.form +++ b/src/main/java/ch/psi/mxsc/PuckLoadingDialog.form @@ -23,194 +23,250 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - -
-
- - - - - - - -
- - - - - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/main/java/ch/psi/mxsc/PuckLoadingDialog.java b/src/main/java/ch/psi/mxsc/PuckLoadingDialog.java index 1b4d462..58f02d8 100644 --- a/src/main/java/ch/psi/mxsc/PuckLoadingDialog.java +++ b/src/main/java/ch/psi/mxsc/PuckLoadingDialog.java @@ -5,6 +5,7 @@ import ch.psi.pshell.app.MainFrame; import ch.psi.pshell.framework.Setup; import ch.psi.pshell.swing.SwingUtils; import java.awt.Dimension; +import java.awt.Rectangle; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; @@ -20,8 +21,11 @@ import javax.swing.table.DefaultTableModel; * */ public class PuckLoadingDialog extends JDialog { - Path dialogPersistPath; - DefaultTableModel model; + final Path dialogPersistPath; + final DefaultTableModel model; + final boolean persist; + final boolean showBasePlate; + final int INDEX_USER = 0; final int INDEX_DEWAR = 1; @@ -30,38 +34,72 @@ public class PuckLoadingDialog extends JDialog { /** * Creates new form PuckLoadingDialog */ - public PuckLoadingDialog(java.awt.Frame parent, boolean modal) { + public PuckLoadingDialog(java.awt.Frame parent, boolean modal, boolean persist, boolean showBasePlate ) { super(parent, "Puck Loading", modal); initComponents(); this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); this.setName("PuckLoadingDialog"); dialogPersistPath = Paths.get(Setup.getContextPath(), getClass().getSimpleName()); + this.persist=persist; + this.showBasePlate=showBasePlate; setStatusLabel(null,-1); setSugestionLabel(null,-1); model = (DefaultTableModel) table.getModel(); table.getTableHeader().setFont(table.getTableHeader().getFont().deriveFont(16.0f)); - panelTable.getVerticalScrollBar().setPreferredSize(new Dimension(30, 0)); + panelTable.getVerticalScrollBar().setPreferredSize(new Dimension(30, 0)); + basePlatePanel.setMode(BasePlatePanel.Mode.pucks); + basePlatePanel.setSelectionMode(BasePlatePanel.SelectionMode.Pucks); + basePlatePanel.setDevice(Controller.getInstance().basePlate); + if (!showBasePlate){ + splitPanel.setDividerLocation(0); + } + if (!showBasePlate && !persist){ + Rectangle bounds = parent.getBounds(); + int width = bounds.width / 3; + int height = bounds.height; + int x = bounds.x + bounds.width - width; + int y = bounds.y; + setBounds(x, y, width, height); + } else { + setLocationRelativeTo(parent); + } + } + + public BasePlatePanel getBasePlatePanel(){ + return showBasePlate ? basePlatePanel : null; } @Override - public void setVisible(boolean value){ - boolean visible = isVisible(); - if (visible && !value){ - try { - MainFrame.save(PuckLoadingDialog.this, dialogPersistPath); - } catch (Exception ex) { - Logger.getLogger(DataPanel.class.getName()).log(Level.WARNING, null, ex); - } - } - super.setVisible(value); - if (!visible && value){ - try { - MainFrame.restore(PuckLoadingDialog.this, dialogPersistPath); - } catch (Exception ex) { - Logger.getLogger(DataPanel.class.getName()).log(Level.WARNING, null, ex); - } - update(); - } + public void setVisible(boolean visible){ + if (visible != isVisible()){ + if (!visible){ + if (persist) { + try { + MainFrame.save(PuckLoadingDialog.this, dialogPersistPath); + } catch (Exception ex) { + Logger.getLogger(DataPanel.class.getName()).log(Level.WARNING, null, ex); + } + } + } + super.setVisible(visible); + + if ( visible){ + if (persist){ + try { + MainFrame.restore(PuckLoadingDialog.this, dialogPersistPath); + } catch (Exception ex) { + Logger.getLogger(DataPanel.class.getName()).log(Level.WARNING, null, ex); + } + } else { + if(showBasePlate){ + Rectangle bounds = getParent().getBounds(); + setSize(new Dimension(bounds.width * 3 / 4, bounds.height * 3 / 4)); + setLocationRelativeTo(getParent()); + } + } + update(); + } + } } void update() { @@ -231,22 +269,45 @@ public class PuckLoadingDialog extends JDialog { // //GEN-BEGIN:initComponents private void initComponents() { - jLabel1 = new javax.swing.JLabel(); + splitPanel = new javax.swing.JSplitPane(); + jPanel1 = new javax.swing.JPanel(); + buttonSet = new javax.swing.JButton(); + textDetectedPuck = new javax.swing.JTextField(); + buttonClearDatamatrix = new javax.swing.JButton(); textScannedDatamatrix = new javax.swing.JTextField(); panelTable = new javax.swing.JScrollPane(); table = new javax.swing.JTable(); - buttonSet = new javax.swing.JButton(); - labelSuggestion = new javax.swing.JLabel(); labelStatus = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); + labelSuggestion = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); - textDetectedPuck = new javax.swing.JTextField(); - buttonClearDatamatrix = new javax.swing.JButton(); + basePlatePanel = new ch.psi.mxsc.BasePlatePanel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - jLabel1.setFont(new java.awt.Font("Lucida Grande", 0, 18)); // NOI18N - jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); - jLabel1.setText("Scanned Datamatrix:"); + splitPanel.setDividerLocation(500); + splitPanel.setDividerSize(0); + + buttonSet.setFont(new java.awt.Font("Lucida Grande", 0, 24)); // NOI18N + buttonSet.setText("Set"); + buttonSet.setEnabled(false); + buttonSet.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonSetActionPerformed(evt); + } + }); + + textDetectedPuck.setEditable(false); + textDetectedPuck.setFont(new java.awt.Font("Lucida Grande", 0, 30)); // NOI18N + textDetectedPuck.setHorizontalAlignment(javax.swing.JTextField.CENTER); + + buttonClearDatamatrix.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N + buttonClearDatamatrix.setText("Clear"); + buttonClearDatamatrix.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonClearDatamatrixActionPerformed(evt); + } + }); textScannedDatamatrix.setEditable(false); textScannedDatamatrix.setFont(new java.awt.Font("Lucida Grande", 0, 30)); // NOI18N @@ -287,96 +348,108 @@ public class PuckLoadingDialog extends JDialog { }); panelTable.setViewportView(table); - buttonSet.setFont(new java.awt.Font("Lucida Grande", 0, 24)); // NOI18N - buttonSet.setText("Set"); - buttonSet.setEnabled(false); - buttonSet.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonSetActionPerformed(evt); - } - }); - - labelSuggestion.setFont(new java.awt.Font("Lucida Grande", 0, 24)); // NOI18N - labelSuggestion.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - labelSuggestion.setText("Scan, Insert or Remove Pucks"); - labelStatus.setFont(new java.awt.Font("Lucida Grande", 0, 24)); // NOI18N labelStatus.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); labelStatus.setText("Waiting for Puck Detection"); labelStatus.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + jLabel1.setFont(new java.awt.Font("Lucida Grande", 0, 18)); // NOI18N + jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel1.setText("Scanned Datamatrix:"); + + labelSuggestion.setFont(new java.awt.Font("Lucida Grande", 0, 24)); // NOI18N + labelSuggestion.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + labelSuggestion.setText("Scan, Insert or Remove Pucks"); + jLabel2.setFont(new java.awt.Font("Lucida Grande", 0, 18)); // NOI18N jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel2.setText("Detected Puck:"); - textDetectedPuck.setEditable(false); - textDetectedPuck.setFont(new java.awt.Font("Lucida Grande", 0, 30)); // NOI18N - textDetectedPuck.setHorizontalAlignment(javax.swing.JTextField.CENTER); + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(buttonSet, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(labelSuggestion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(textScannedDatamatrix) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(buttonClearDatamatrix)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(textDetectedPuck)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(panelTable, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addGap(14, 14, 14)) + .addComponent(labelStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); - buttonClearDatamatrix.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N - buttonClearDatamatrix.setText("Clear"); - buttonClearDatamatrix.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonClearDatamatrixActionPerformed(evt); - } - }); + jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel2}); + + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(labelSuggestion) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(textScannedDatamatrix, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(buttonClearDatamatrix)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(textDetectedPuck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(panelTable, javax.swing.GroupLayout.DEFAULT_SIZE, 349, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(buttonSet) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(labelStatus) + .addContainerGap()) + ); + + jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {buttonClearDatamatrix, textScannedDatamatrix}); + + splitPanel.setRightComponent(jPanel1); + + javax.swing.GroupLayout basePlatePanelLayout = new javax.swing.GroupLayout(basePlatePanel); + basePlatePanel.setLayout(basePlatePanelLayout); + basePlatePanelLayout.setHorizontalGroup( + basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 500, Short.MAX_VALUE) + ); + basePlatePanelLayout.setVerticalGroup( + basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 600, Short.MAX_VALUE) + ); + + splitPanel.setLeftComponent(basePlatePanel); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(buttonSet, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE)) - .addComponent(labelSuggestion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(jLabel1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(textScannedDatamatrix) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonClearDatamatrix)) - .addGroup(layout.createSequentialGroup() - .addComponent(jLabel2) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(textDetectedPuck)) - .addGroup(layout.createSequentialGroup() - .addComponent(panelTable, javax.swing.GroupLayout.DEFAULT_SIZE, 531, Short.MAX_VALUE) - .addGap(14, 14, 14))) + .addComponent(splitPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1100, Short.MAX_VALUE) .addContainerGap()) - .addComponent(labelStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); - - layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel2}); - layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(labelSuggestion) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel1) - .addComponent(textScannedDatamatrix, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(buttonClearDatamatrix)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel2) - .addComponent(textDetectedPuck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(panelTable, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(buttonSet) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelStatus)) + .addComponent(splitPanel) ); - layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {buttonClearDatamatrix, textScannedDatamatrix}); - pack(); }// //GEN-END:initComponents @@ -447,7 +520,7 @@ public class PuckLoadingDialog extends JDialog { /* Create and display the dialog */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { - PuckLoadingDialog dialog = new PuckLoadingDialog(new javax.swing.JFrame(), true); + PuckLoadingDialog dialog = new PuckLoadingDialog(new javax.swing.JFrame(), true, false, true); dialog.addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowClosing(java.awt.event.WindowEvent e) { @@ -460,13 +533,16 @@ public class PuckLoadingDialog extends JDialog { } // Variables declaration - do not modify//GEN-BEGIN:variables + private ch.psi.mxsc.BasePlatePanel basePlatePanel; private javax.swing.JButton buttonClearDatamatrix; javax.swing.JButton buttonSet; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; + private javax.swing.JPanel jPanel1; private javax.swing.JLabel labelStatus; private javax.swing.JLabel labelSuggestion; private javax.swing.JScrollPane panelTable; + private javax.swing.JSplitPane splitPanel; javax.swing.JTable table; javax.swing.JTextField textDetectedPuck; javax.swing.JTextField textScannedDatamatrix;