diff --git a/plugins/Scan2D.form b/plugins/Scan2D.form new file mode 100644 index 0000000..a68edfd --- /dev/null +++ b/plugins/Scan2D.form @@ -0,0 +1,476 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/plugins/Scan2D.java b/plugins/Scan2D.java new file mode 100644 index 0000000..56037c2 --- /dev/null +++ b/plugins/Scan2D.java @@ -0,0 +1,549 @@ +/* + * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. + */ + +import ch.psi.pshell.device.Motor; +import ch.psi.pshell.epics.AreaDetector; +import ch.psi.pshell.ui.ScriptProcessor; +import ch.psi.utils.State; +import ch.psi.utils.swing.SwingUtils; +import java.awt.Component; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.swing.JCheckBox; +import javax.swing.JSpinner; +import javax.swing.JToggleButton; +import javax.swing.SpinnerNumberModel; + +/** + * + */ +public class Scan2D extends ScriptProcessor { + + final List motors = new ArrayList(); + + public Scan2D() { + initComponents(); + + //Component persistence + ArrayList persistedComponents = new ArrayList<>(); + persistedComponents.addAll(Arrays.asList(SwingUtils.getComponentsByType(this, JToggleButton.class))); + persistedComponents.addAll(Arrays.asList(SwingUtils.getComponentsByType(this, JSpinner.class))); + setPersistedComponents(persistedComponents.toArray(new Component[0])); + startTimer(1000); + } + + //Overridable callbacks + @Override + public void onInitialize(int runCount) { + AreaDetector ccd = (AreaDetector) getDevice("ccd"); + ckDummyActionPerformed(null); + + } + + @Override + protected void onTimer(){ + } + + @Override + public void onStateChange(State state, State former) { + setEnabled(isEnabled()); + } + + @Override + public void onExecutedFile(String fileName, Object result) { + } + + + @Override + public void setEnabled(boolean value) { + super.setEnabled(value); + + boolean enableControls = (value && (getState()==State.Ready)); + for (Component c : panelSensors.getComponents()) { + c.setEnabled(enableControls); + } + for (Component c : panelPositioners.getComponents()) { + c.setEnabled(enableControls); + } + + buttonStart.setEnabled(enableControls); + buttonAbort.setEnabled(value && getState().isInitialized()); + + spinnerStepSizeX.setEnabled(enableControls && radioStepSize.isSelected()); + spinnerStepsX.setEnabled(enableControls && radioSteps.isSelected()); + spinnerFromX.setEnabled(enableControls); + spinnerToX.setEnabled(enableControls); + + spinnerStepSizeY.setEnabled(spinnerStepSizeX.isEnabled()); + spinnerStepsY.setEnabled(spinnerStepsX.isEnabled()); + spinnerFromY.setEnabled(spinnerFromX.isEnabled()); + spinnerToY.setEnabled(spinnerToX.isEnabled()); + } + + @Override + public String getScript() { + return "templates/Scan2D"; + } + + @Override + public Map getArgs() { + HashMap args = new HashMap<>(); + ArrayList sensors = new ArrayList(); + for (Component c : panelSensors.getComponents()) { + if ((c instanceof JCheckBox) && ((JCheckBox) c).isSelected()) { + sensors.add(c.getName()); + } + } + args.put("MOTORS", motors); + args.put("SENSORS", sensors); + args.put("RANGE_X", new Double[]{(Double) spinnerFromX.getValue(), (Double) spinnerToX.getValue()}); + args.put("RANGE_Y", new Double[]{(Double) spinnerFromY.getValue(), (Double) spinnerToY.getValue()}); + ArrayList steps = new ArrayList(); + if (radioStepSize.isSelected()) { + steps.add((Double) spinnerStepSizeX.getValue()); + steps.add((Double) spinnerStepSizeY.getValue()); + } else { + steps.add((Integer) spinnerStepsX.getValue()); + steps.add((Integer) spinnerStepsY.getValue()); + } + args.put("STEPS", steps); + args.put("LATENCY", (Double) 0.0); + args.put("RELATIVE", false); + args.put("ZIGZAG", checkZigzag.isSelected()); + return args; + } + + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonGroup1 = new javax.swing.ButtonGroup(); + buttonGroup2 = new javax.swing.ButtonGroup(); + panelPositioners = new javax.swing.JPanel(); + motorPanelX = new ch.psi.pshell.swing.MotorReadoutPanel(); + radioStepSize = new javax.swing.JRadioButton(); + radioSteps = new javax.swing.JRadioButton(); + spinnerStepSizeX = new javax.swing.JSpinner(); + spinnerStepsX = new javax.swing.JSpinner(); + spinnerFromX = new javax.swing.JSpinner(); + jLabel4 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + spinnerToX = new javax.swing.JSpinner(); + jLabel6 = new javax.swing.JLabel(); + jLabel7 = new javax.swing.JLabel(); + motorPanelY = new ch.psi.pshell.swing.MotorReadoutPanel(); + jLabel8 = new javax.swing.JLabel(); + jLabel9 = new javax.swing.JLabel(); + spinnerFromY = new javax.swing.JSpinner(); + spinnerToY = new javax.swing.JSpinner(); + jLabel11 = new javax.swing.JLabel(); + jLabel12 = new javax.swing.JLabel(); + spinnerStepSizeY = new javax.swing.JSpinner(); + jLabel13 = new javax.swing.JLabel(); + jLabel14 = new javax.swing.JLabel(); + spinnerStepsY = new javax.swing.JSpinner(); + checkZigzag = new javax.swing.JCheckBox(); + ckDummy = new javax.swing.JCheckBox(); + panelSensors = new javax.swing.JPanel(); + checkImage = new javax.swing.JCheckBox(); + checkCurrent = new javax.swing.JCheckBox(); + panelScan = new javax.swing.JPanel(); + buttonStart = new javax.swing.JButton(); + buttonAbort = new javax.swing.JButton(); + buttonQueue = new javax.swing.JButton(); + + panelPositioners.setBorder(javax.swing.BorderFactory.createTitledBorder("Positioners")); + panelPositioners.setPreferredSize(new java.awt.Dimension(248, 543)); + + buttonGroup1.add(radioStepSize); + radioStepSize.setSelected(true); + radioStepSize.setText("Step Size"); + radioStepSize.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioStepSizeActionPerformed(evt); + } + }); + + buttonGroup1.add(radioSteps); + radioSteps.setText("Number of Steps"); + radioSteps.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + radioStepSizeActionPerformed(evt); + } + }); + + spinnerStepSizeX.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.1d, 180.0d, 0.1d)); + + spinnerStepsX.setModel(new javax.swing.SpinnerNumberModel(10, 1, 1000, 1)); + spinnerStepsX.setEnabled(false); + + spinnerFromX.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + jLabel4.setText("X From:"); + + jLabel5.setText("X To:"); + + spinnerToX.setModel(new javax.swing.SpinnerNumberModel(10.0d, 0.0d, 10.0d, 1.0d)); + + jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel6.setText("Sample X:"); + + jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel7.setText("Sample Y:"); + + jLabel8.setText("Y To:"); + + jLabel9.setText("Y From:"); + + spinnerFromY.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 1.0d, 1.0d)); + + spinnerToY.setModel(new javax.swing.SpinnerNumberModel(10.0d, 0.0d, 10.0d, 1.0d)); + + jLabel11.setText("X:"); + + jLabel12.setText("Y:"); + + spinnerStepSizeY.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.1d, 90.0d, 0.1d)); + + jLabel13.setText("X:"); + + jLabel14.setText("Y:"); + + spinnerStepsY.setModel(new javax.swing.SpinnerNumberModel(10, 1, 1000, 1)); + spinnerStepsY.setEnabled(false); + + checkZigzag.setText("Zigzag"); + + ckDummy.setText("Dummy"); + ckDummy.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + ckDummyActionPerformed(evt); + } + }); + + javax.swing.GroupLayout panelPositionersLayout = new javax.swing.GroupLayout(panelPositioners); + panelPositioners.setLayout(panelPositionersLayout); + panelPositionersLayout.setHorizontalGroup( + panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPositionersLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPositionersLayout.createSequentialGroup() + .addComponent(jLabel6) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(motorPanelX, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionersLayout.createSequentialGroup() + .addGap(0, 58, Short.MAX_VALUE) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionersLayout.createSequentialGroup() + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(spinnerFromX, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 91, Short.MAX_VALUE) + .addComponent(spinnerToX, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerFromY, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spinnerToY, javax.swing.GroupLayout.Alignment.TRAILING))) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionersLayout.createSequentialGroup() + .addComponent(jLabel11) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerStepSizeX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionersLayout.createSequentialGroup() + .addComponent(jLabel12) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(spinnerStepSizeY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionersLayout.createSequentialGroup() + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel14) + .addComponent(jLabel13)) + .addGap(6, 6, 6) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerStepsX, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerStepsY, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addGroup(panelPositionersLayout.createSequentialGroup() + .addComponent(jLabel7) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(motorPanelY, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(panelPositionersLayout.createSequentialGroup() + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(ckDummy) + .addComponent(radioSteps) + .addComponent(radioStepSize) + .addComponent(checkZigzag)) + .addGap(0, 71, Short.MAX_VALUE))) + .addContainerGap()) + ); + + panelPositionersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {radioStepSize, radioSteps}); + + panelPositionersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerStepSizeX, spinnerStepSizeY, spinnerStepsX}); + + panelPositionersLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel6, jLabel7}); + + panelPositionersLayout.setVerticalGroup( + panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelPositionersLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel6) + .addComponent(motorPanelX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel7) + .addComponent(motorPanelY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerFromX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4)) + .addGap(3, 3, 3) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerToX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5)) + .addGap(3, 3, 3) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerFromY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel9)) + .addGap(3, 3, 3) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerToY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel8)) + .addGap(18, 18, 18) + .addComponent(radioStepSize) + .addGap(3, 3, 3) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepSizeX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel11)) + .addGap(3, 3, 3) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepSizeY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel12)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(radioSteps) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepsX, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel13)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(panelPositionersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(spinnerStepsY, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel14)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkZigzag) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(ckDummy) + .addContainerGap(146, Short.MAX_VALUE)) + ); + + panelSensors.setBorder(javax.swing.BorderFactory.createTitledBorder("Sensors")); + panelSensors.setPreferredSize(new java.awt.Dimension(248, 543)); + + checkImage.setSelected(true); + checkImage.setText("CCD Image"); + checkImage.setToolTipText(""); + checkImage.setContentAreaFilled(false); + checkImage.setName("ccd.dataMatrix"); // NOI18N + + checkCurrent.setText("Current"); + checkCurrent.setName("current"); // NOI18N + + javax.swing.GroupLayout panelSensorsLayout = new javax.swing.GroupLayout(panelSensors); + panelSensors.setLayout(panelSensorsLayout); + panelSensorsLayout.setHorizontalGroup( + panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(checkImage) + .addComponent(checkCurrent)) + .addContainerGap(130, Short.MAX_VALUE)) + ); + panelSensorsLayout.setVerticalGroup( + panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelSensorsLayout.createSequentialGroup() + .addContainerGap() + .addComponent(checkImage) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(checkCurrent) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + panelScan.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); + panelScan.setPreferredSize(new java.awt.Dimension(248, 543)); + + buttonStart.setText("Start"); + buttonStart.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonStartActionPerformed(evt); + } + }); + + buttonAbort.setText("Abort"); + buttonAbort.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonAbortActionPerformed(evt); + } + }); + + buttonQueue.setText("Queue"); + buttonQueue.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonQueueActionPerformed(evt); + } + }); + + javax.swing.GroupLayout panelScanLayout = new javax.swing.GroupLayout(panelScan); + panelScan.setLayout(panelScanLayout); + panelScanLayout.setHorizontalGroup( + panelScanLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelScanLayout.createSequentialGroup() + .addContainerGap() + .addGroup(panelScanLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonStart, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonAbort, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonQueue, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 214, Short.MAX_VALUE)) + .addContainerGap()) + ); + panelScanLayout.setVerticalGroup( + panelScanLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelScanLayout.createSequentialGroup() + .addContainerGap() + .addComponent(buttonStart) + .addGap(18, 18, 18) + .addComponent(buttonAbort) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonQueue) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(panelSensors, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(panelPositioners, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(panelScan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {panelPositioners, panelScan, panelSensors}); + + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(panelPositioners, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelSensors, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelScan, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void buttonStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStartActionPerformed + try{ + execute(); + } catch (Exception ex){ + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_buttonStartActionPerformed + + private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed + try { + abort(); + ((AreaDetector) getDevice("ccd")).stop(); + } catch (Exception ex) { + showException(ex); + } + }//GEN-LAST:event_buttonAbortActionPerformed + + private void radioStepSizeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioStepSizeActionPerformed + setEnabled(isEnabled()); + }//GEN-LAST:event_radioStepSizeActionPerformed + + private void buttonQueueActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonQueueActionPerformed + try { + queue(); + } catch (Exception ex) { + SwingUtils.showException(this, ex); + } + }//GEN-LAST:event_buttonQueueActionPerformed + + private void ckDummyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ckDummyActionPerformed + motors.clear(); + if (ckDummy.isSelected()){ + motors.add((Motor) getDevice("dummy_x")); + motors.add((Motor) getDevice("dummy_y")); + } else { + motors.add((Motor) getDevice("sample_x")); + motors.add((Motor) getDevice("sample_y")); + } + Motor x=motors.get(0); + Motor y=motors.get(0); + motorPanelX.setDevice(x); + motorPanelY.setDevice(y); + try{ + spinnerFromX.setModel(new SpinnerNumberModel(Math.max(x.getMinValue(),(Double)spinnerFromX.getValue()), x.getMinValue(), x.getMaxValue(), 1.0)); + spinnerToX.setModel(new SpinnerNumberModel(Math.min(x.getMaxValue(),(Double)spinnerToX.getValue()), x.getMinValue(), x.getMaxValue(), 1.0)); + } catch (Exception ex){ + spinnerFromX.setModel(new SpinnerNumberModel(x.getMinValue(), x.getMinValue(), x.getMaxValue(), 1.0)); + spinnerToX.setModel(new SpinnerNumberModel(x.getMaxValue(), x.getMinValue(), x.getMaxValue(), 1.0)); + } + try{ + spinnerFromY.setModel(new SpinnerNumberModel(Math.max(y.getMinValue(),(Double)spinnerFromY.getValue()), y.getMinValue(), y.getMaxValue(), 1.0)); + spinnerToY.setModel(new SpinnerNumberModel(Math.min(y.getMaxValue(),(Double)spinnerToY.getValue()), y.getMinValue(), y.getMaxValue(), 1.0)); + } catch (Exception ex){ + spinnerFromY.setModel(new SpinnerNumberModel(y.getMinValue(), y.getMinValue(), y.getMaxValue(), 1.0)); + spinnerToY.setModel(new SpinnerNumberModel(y.getMaxValue(), y.getMinValue(), y.getMaxValue(), 1.0)); + } + }//GEN-LAST:event_ckDummyActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton buttonAbort; + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.ButtonGroup buttonGroup2; + private javax.swing.JButton buttonQueue; + private javax.swing.JButton buttonStart; + private javax.swing.JCheckBox checkCurrent; + private javax.swing.JCheckBox checkImage; + private javax.swing.JCheckBox checkZigzag; + private javax.swing.JCheckBox ckDummy; + private javax.swing.JLabel jLabel11; + private javax.swing.JLabel jLabel12; + private javax.swing.JLabel jLabel13; + private javax.swing.JLabel jLabel14; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel6; + private javax.swing.JLabel jLabel7; + private javax.swing.JLabel jLabel8; + private javax.swing.JLabel jLabel9; + private ch.psi.pshell.swing.MotorReadoutPanel motorPanelX; + private ch.psi.pshell.swing.MotorReadoutPanel motorPanelY; + private javax.swing.JPanel panelPositioners; + private javax.swing.JPanel panelScan; + private javax.swing.JPanel panelSensors; + private javax.swing.JRadioButton radioStepSize; + private javax.swing.JRadioButton radioSteps; + private javax.swing.JSpinner spinnerFromX; + private javax.swing.JSpinner spinnerFromY; + private javax.swing.JSpinner spinnerStepSizeX; + private javax.swing.JSpinner spinnerStepSizeY; + private javax.swing.JSpinner spinnerStepsX; + private javax.swing.JSpinner spinnerStepsY; + private javax.swing.JSpinner spinnerToX; + private javax.swing.JSpinner spinnerToY; + // End of variables declaration//GEN-END:variables +} +