import ch.psi.pshell.ui.Panel; import ch.psi.utils.State; import ch.psi.utils.swing.SwingUtils; import java.awt.Component; import java.util.HashMap; import javax.swing.JSpinner; /** * */ public class OTF extends Panel { public OTF() { initComponents(); } //Overridable callbacks @Override public void onInitialize(int runCount) { } @Override public void onStateChange(State state, State former) { boolean enabled = state==State.Ready; buttonAbort.setEnabled(state.isProcessing()); buttonStart.setEnabled(enabled); for (Component c : SwingUtils.getComponentsByType(panelPositioner, JSpinner.class)) { c.setEnabled(enabled); } boolean energy = spinnerMode.getValue().equals("ENERGY"); spinnerMode.setEnabled(enabled); spinnerTime.setEnabled(enabled); spinnerModulo.setEnabled(enabled); spinnerE1.setEnabled(enabled && energy); spinnerE2.setEnabled(enabled && energy); spinnerBeta1.setEnabled(enabled && !energy); spinnerBeta2.setEnabled(enabled && !energy); spinnerTheta1.setEnabled(enabled && !energy); spinnerTheta2.setEnabled(enabled && !energy); } @Override public void onExecutedFile(String fileName, Object result) { } @Override protected void onTimer() { } @Override protected void onLoaded() { } @Override protected void onUnloaded() { } //Invoked by 'update()' to update components in the event thread @Override protected void doUpdate() { } void startScan() throws Exception { 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("SENSORS", sensors); */ args.put("MODE", spinnerMode.getValue()); args.put("E1", spinnerE1.getValue()); args.put("E2", spinnerE2.getValue()); args.put("BETA1", spinnerBeta1.getValue()); args.put("BETA2", spinnerBeta2.getValue()); args.put("THETA1", spinnerTheta1.getValue()); args.put("THETA2", spinnerTheta2.getValue()); args.put("TIME", spinnerTime.getValue()); args.put("MODULO", spinnerModulo.getValue()); args.put("ENDSCAN", checkEndScan.isSelected()); runAsync("otf", args); } @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { panelSensors = new javax.swing.JPanel(); panelPositioner = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); spinnerE1 = new javax.swing.JSpinner(); spinnerE2 = new javax.swing.JSpinner(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); spinnerTime = new javax.swing.JSpinner(); jLabel7 = new javax.swing.JLabel(); spinnerModulo = new javax.swing.JSpinner(); jLabel8 = new javax.swing.JLabel(); spinnerMode = new javax.swing.JSpinner(); jLabel9 = new javax.swing.JLabel(); spinnerBeta1 = new javax.swing.JSpinner(); jLabel10 = new javax.swing.JLabel(); spinnerBeta2 = new javax.swing.JSpinner(); jLabel11 = new javax.swing.JLabel(); spinnerTheta1 = new javax.swing.JSpinner(); spinnerTheta2 = new javax.swing.JSpinner(); jLabel12 = new javax.swing.JLabel(); jPanel3 = new javax.swing.JPanel(); buttonStart = new javax.swing.JButton(); buttonAbort = new javax.swing.JButton(); checkEndScan = new javax.swing.JCheckBox(); panelSensors.setBorder(javax.swing.BorderFactory.createTitledBorder("Sensors")); javax.swing.GroupLayout panelSensorsLayout = new javax.swing.GroupLayout(panelSensors); panelSensors.setLayout(panelSensorsLayout); panelSensorsLayout.setHorizontalGroup( panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 228, Short.MAX_VALUE) ); panelSensorsLayout.setVerticalGroup( panelSensorsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 530, Short.MAX_VALUE) ); panelPositioner.setBorder(javax.swing.BorderFactory.createTitledBorder("Parameters")); jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel4.setText("E1(eV):"); spinnerE1.setModel(new javax.swing.SpinnerNumberModel(450.0d, 50.0d, 2000.0d, 1.0d)); spinnerE2.setModel(new javax.swing.SpinnerNumberModel(460.0d, 50.0d, 2000.0d, 1.0d)); jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel5.setText("E2(eV):"); jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel6.setText("Time(min):"); spinnerTime.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1440, 1)); jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel7.setText("Modulo:"); spinnerModulo.setModel(new javax.swing.SpinnerNumberModel(4, 1, 10, 1)); jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel8.setText("Mode:"); spinnerMode.setModel(new javax.swing.SpinnerListModel(new String[] {"ENERGY", "ANGLE"})); spinnerMode.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerModeStateChanged(evt); } }); jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel9.setText("Beta1(deg):"); spinnerBeta1.setModel(new javax.swing.SpinnerNumberModel(-86.325d, -360.0d, 360.0d, 1.0d)); jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel10.setText("Beta2(deg):"); spinnerBeta2.setModel(new javax.swing.SpinnerNumberModel(-86.365d, -360.0d, 360.0d, 1.0d)); jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel11.setText("Theta1(deg):"); spinnerTheta1.setModel(new javax.swing.SpinnerNumberModel(87.345d, -360.0d, 360.0d, 1.0d)); spinnerTheta2.setModel(new javax.swing.SpinnerNumberModel(87.37d, -360.0d, 360.0d, 1.0d)); jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel12.setText("Theta2(deg):"); javax.swing.GroupLayout panelPositionerLayout = new javax.swing.GroupLayout(panelPositioner); panelPositioner.setLayout(panelPositionerLayout); panelPositionerLayout.setHorizontalGroup( panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelPositionerLayout.createSequentialGroup() .addGap(41, 41, 41) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelPositionerLayout.createSequentialGroup() .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerE1)) .addGroup(panelPositionerLayout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerE2)) .addGroup(panelPositionerLayout.createSequentialGroup() .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerTime)) .addGroup(panelPositionerLayout.createSequentialGroup() .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerModulo)) .addGroup(panelPositionerLayout.createSequentialGroup() .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerMode)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPositionerLayout.createSequentialGroup() .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel9) .addComponent(jLabel10) .addComponent(jLabel11) .addComponent(jLabel12)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spinnerBeta1) .addComponent(spinnerBeta2, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(spinnerTheta1) .addComponent(spinnerTheta2, javax.swing.GroupLayout.Alignment.TRAILING)))) .addContainerGap()) ); panelPositionerLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel10, jLabel11, jLabel12, jLabel4, jLabel5, jLabel6, jLabel7, jLabel8, jLabel9}); panelPositionerLayout.setVerticalGroup( panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelPositionerLayout.createSequentialGroup() .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spinnerMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel8)) .addGap(50, 50, 50) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spinnerE1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spinnerE2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel5)) .addGap(18, 18, 18) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spinnerBeta1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel9)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel10) .addComponent(spinnerBeta2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spinnerTheta1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel11)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel12) .addComponent(spinnerTheta2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(50, 50, 50) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spinnerTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelPositionerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spinnerModulo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel7)) .addContainerGap(136, Short.MAX_VALUE)) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Scan Control")); 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); } }); checkEndScan.setText("Turn off beam at end"); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.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) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addComponent(checkEndScan) .addGap(0, 62, Short.MAX_VALUE))) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.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(checkEndScan) .addGap(26, 26, 26)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 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(panelPositioner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(17, Short.MAX_VALUE)) ); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jPanel3, panelPositioner, panelSensors}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panelPositioner, 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(jPanel3, 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 { startScan(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonStartActionPerformed private void buttonAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAbortActionPerformed try { abort(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonAbortActionPerformed private void spinnerModeStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerModeStateChanged onStateChange(getState(), getState()); }//GEN-LAST:event_spinnerModeStateChanged // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton buttonAbort; private javax.swing.JButton buttonStart; private javax.swing.JCheckBox checkEndScan; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; 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 javax.swing.JPanel jPanel3; private javax.swing.JPanel panelPositioner; private javax.swing.JPanel panelSensors; private javax.swing.JSpinner spinnerBeta1; private javax.swing.JSpinner spinnerBeta2; private javax.swing.JSpinner spinnerE1; private javax.swing.JSpinner spinnerE2; private javax.swing.JSpinner spinnerMode; private javax.swing.JSpinner spinnerModulo; private javax.swing.JSpinner spinnerTheta1; private javax.swing.JSpinner spinnerTheta2; private javax.swing.JSpinner spinnerTime; // End of variables declaration//GEN-END:variables }