import ch.psi.pshell.core.Context; import ch.psi.pshell.imaging.Overlay; import ch.psi.pshell.imaging.Overlays.Rect; import ch.psi.pshell.imaging.Pen; import ch.psi.pshell.imaging.Renderer; import ch.psi.pshell.imaging.RendererListener; import ch.psi.pshell.swing.DeviceValuePanel; import ch.psi.pshell.ui.App; import ch.psi.pshell.ui.Panel; import ch.psi.utils.Arr; import ch.psi.utils.State; import ch.psi.utils.swing.SwingUtils; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; 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.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JToggleButton; import javax.swing.SwingConstants; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.DefaultTableModel ; /** * */ public class Eiger extends Panel { public enum Switching { Normal, Tune_Detune } public enum ImgMethod { Two_Pol, Two_Energies, Take_Image } static String DEFAULT_PATH = "{data}/{year}_{month}/{date}_{seq}%03d"; final Component[] parameterControls; final ArrayList rois = new ArrayList<>(); final DefaultTableModel modelRegions; public Eiger() { initComponents(); SwingUtils.setEnumCombo(comboSwitch, Switching.class, true); comboSwitch.setSelectedIndex(1); SwingUtils.setEnumCombo(comboImgMethod, ImgMethod.class, true); Component[] parameterControls = new Component[0]; for (JPanel panel : new JPanel[]{panelImgControls, panelSpectrum}) { for (Class cls : new Class[]{JComboBox.class, JSpinner.class, JToggleButton.class}) { parameterControls = Arr.append(parameterControls, SwingUtils.getComponentsByType(panel, cls)); } } parameterControls = Arr.append(parameterControls, SwingUtils.getComponentsByType(panelRoi, JButton.class)); this.parameterControls = parameterControls; setPersistedComponents(parameterControls); rendererRoi.addListener(new RendererListener() { public void onMoveFinished(Renderer renderer, Overlay overlay) { if (rois.contains(overlay)) { updateRoiList(); } } @Override public void onDeleted(Renderer renderer, Overlay overlay) { if (rois.contains(overlay)) { rois.remove(overlay); updateRoiList(); } } }); DefaultTableModel model = (DefaultTableModel) tableRoi.getModel(); model.addTableModelListener(new TableModelListener() { boolean processingUpdate; @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); if ((tableRoi.isEditing()) && (e.getType() == TableModelEvent.UPDATE) && !processingUpdate) { processingUpdate = true; try { rois.get(row).update(new Point((Integer) model.getValueAt(row, 1), (Integer) model.getValueAt(row, 2)), new Dimension((Integer) model.getValueAt(row, 3), (Integer) model.getValueAt(row, 4))); rendererRoi.refresh(); } catch (Exception ex) { showException(ex); } finally { processingUpdate = false; } } } }); modelRegions = (DefaultTableModel) tableRegions.getModel(); } //Overridable callbacks @Override public void onInitialize(int runCount) { try { textNorm.setText(String.valueOf(getSetting("NORM_FILE"))); removeNorm(); try{ spinnerOutliersThreshold.setValue(Integer.valueOf(getSetting("OUTLIERS_THRESHOLD"))); } catch (IOException ex) { spinnerOutliersThreshold.setValue(0); } textOutliersMask.setText(String.valueOf(getSetting("OUTLIERS_MASK_FILE"))); } catch (IOException ex) { showException(ex); } } @Override public void onStateChange(State state, State former) { updateControls(); } @Override public void onExecutedFile(String fileName, Object result) { } //Callback to perform update - in event thread @Override protected void doUpdate() { } void updateControls() { boolean editable = getState().isInitialized() && !getState().isProcessing(); for (Component c : parameterControls) { c.setEnabled(editable); } if (editable) { comboSwitch.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Pol.toString()); spinnerImgEng1.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Energies.toString()); spinnerImgEng2.setEnabled(comboImgMethod.getSelectedItem() == ImgMethod.Two_Energies.toString()); } buttonImgStart.setEnabled(getState() == State.Ready); buttonImgAbort.setEnabled(getState().isProcessing()); buttonSpecStart.setEnabled(getState() == State.Ready); buttonSpecAbort.setEnabled(getState().isProcessing()); } void updateRoiList() { DefaultTableModel model = (DefaultTableModel) tableRoi.getModel(); model.setRowCount(rois.size()); for (int i = 0; i < rois.size(); i++) { model.setValueAt("ROI" + (i + 1), i, 0); model.setValueAt(rois.get(i).getPosition().x, i, 1); model.setValueAt(rois.get(i).getPosition().y, i, 2); model.setValueAt(rois.get(i).getWidth(), i, 3); model.setValueAt(rois.get(i).getHeight(), i, 4); } } void addRoi() { final Rect selection = new Rect(rendererRoi.getPenMovingOverlay()); rendererRoi.addListener(new RendererListener() { @Override public void onSelectionFinished(Renderer renderer, Overlay overlay) { try { if (overlay.getLength() > 0) { Rect roi = (Rect) overlay.copy(); roi.setPen(new Pen(rendererRoi.getPenSelectedOverlay().getColor())); roi.setSelectable(true); roi.setMovable(true); roi.setSolid(true); renderer.addOverlay(roi); rois.add(roi); updateRoiList(); } } catch (Exception ex) { } finally { renderer.removeListener(this); } } @Override public void onSelectionAborted(Renderer renderer, Overlay overlay) { renderer.removeListener(this); } }); //selection.setFixed(true); selection.setPassive(false); rendererRoi.startSelection(selection); } void removeRoi() { for (Rect rect : rois) { if (rendererRoi.getSelectedOverlay() == rect) { rendererRoi.removeOverlay(rect); rois.remove(rect); updateRoiList(); break; } } rendererRoi.abortSelection(); } void run2Images() throws Context.ContextStateException { HashMap args = new HashMap(); args.put("METHOD", comboImgMethod.getSelectedItem()); args.put("SWITCHING", comboSwitch.getSelectedItem()); args.put("MEASUREMENTS", spinnerImgMeasurements.getValue()); args.put("AUTO_SAVE", checkImgAutosave.isSelected()); args.put("EXPOSURE_1", spinnerImgExp1.getValue()); args.put("AVERAGE_1", spinnerImgAvg1.getValue()); args.put("ENERGY_1", spinnerImgEng1.getValue()); args.put("EXPOSURE_2", spinnerImgExp2.getValue()); args.put("AVERAGE_2", spinnerImgAvg2.getValue()); args.put("ENERGY_2", spinnerImgEng2.getValue()); runAsync("templates/Eiger2Img", args).handle((ret, t) -> { if ((t != null) && (!getContext().isAborted())) { showException((Exception) t); } return t; }); } void runAbsSpectrum() throws Context.ContextStateException { List ranges = new ArrayList(); for (int i=0; i> roi = new HashMap<>(); for (int i=0; i { if ((t != null) && (!getContext().isAborted())) { showException((Exception) t); } return t; }); } void removeNorm(){ try{ JDialog dlg = App.getInstance().getDevicePanelManager().getPanelDialog("norm"); if (dlg!=null){ dlg.dispose(); } removeDevice(this.getDevice("norm"), true); if (buttonShowNorm.isSelected()){ buttonShowNorm.setSelected(false); buttonShowNorm.setText("Show"); } } catch (Exception ex){ ex.printStackTrace(); } } void enableNorm(boolean enabled) throws Context.ContextStateException { if (!enabled){ removeNorm(); } else { runAsync("devices/norm", null).handle((ret, t) -> { if ((t != null) && (!getContext().isAborted())) { showException((Exception) t); } JDialog dlg = App.getInstance().getDevicePanelManager().getPanelDialog("norm"); if (dlg!=null){ dlg.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { dlg.removeWindowListener(this); removeNorm(); } }); } return t; }); } } @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel1 = new javax.swing.JPanel(); panelNorm = new javax.swing.JPanel(); buttonSetNorm = new javax.swing.JButton(); textNorm = new javax.swing.JTextField(); jLabel29 = new javax.swing.JLabel(); buttonShowNorm = new javax.swing.JToggleButton(); panelNorm1 = new javax.swing.JPanel(); textSelectOutliersMask = new javax.swing.JButton(); textOutliersMask = new javax.swing.JTextField(); jLabel30 = new javax.swing.JLabel(); jLabel31 = new javax.swing.JLabel(); textClearOutliersMask = new javax.swing.JButton(); spinnerOutliersThreshold = new javax.swing.JSpinner(); buttonTriggerDetector = new javax.swing.JButton(); buttonShowDetectorPanel = new javax.swing.JButton(); buttonMeasurements = new javax.swing.JToggleButton(); panelRoi = new javax.swing.JPanel(); rendererRoi = new ch.psi.pshell.imaging.Renderer(); jLabel26 = new javax.swing.JLabel(); buttonRoiAdd = new javax.swing.JButton(); buttonRoiRemove = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); tableRoi = new javax.swing.JTable(); jPanel2 = new javax.swing.JPanel(); buttonImgStart = new javax.swing.JButton(); buttonImgAbort = new javax.swing.JButton(); panelImgControls = new javax.swing.JPanel(); jPanel8 = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); spinnerImgExp1 = new javax.swing.JSpinner(); jLabel9 = new javax.swing.JLabel(); spinnerImgAvg1 = new javax.swing.JSpinner(); jLabel11 = new javax.swing.JLabel(); spinnerImgEng1 = new javax.swing.JSpinner(); jPanel10 = new javax.swing.JPanel(); jLabel12 = new javax.swing.JLabel(); spinnerImgExp2 = new javax.swing.JSpinner(); jLabel17 = new javax.swing.JLabel(); spinnerImgAvg2 = new javax.swing.JSpinner(); jLabel19 = new javax.swing.JLabel(); spinnerImgEng2 = new javax.swing.JSpinner(); jLabel21 = new javax.swing.JLabel(); spinnerImgMeasurements = new javax.swing.JSpinner(); comboImgMethod = new javax.swing.JComboBox<>(); jLabel20 = new javax.swing.JLabel(); checkImgAutosave = new javax.swing.JCheckBox(); labelSwitching = new javax.swing.JLabel(); comboSwitch = new javax.swing.JComboBox<>(); deviceValuePanel11 = new ch.psi.pshell.swing.DeviceValuePanel(); jLabel22 = new javax.swing.JLabel(); jLabel28 = new javax.swing.JLabel(); deviceValuePanel12 = new ch.psi.pshell.swing.DeviceValuePanel(); jPanel3 = new javax.swing.JPanel(); panelSpectrum = new javax.swing.JPanel(); jLabel23 = new javax.swing.JLabel(); jLabel24 = new javax.swing.JLabel(); checkSpecSaveImages = new javax.swing.JCheckBox(); spinnerSpecAvg = new javax.swing.JSpinner(); checkSpecSwitchPol = new javax.swing.JCheckBox(); spinnerSpecScans = new javax.swing.JSpinner(); jLabel25 = new javax.swing.JLabel(); spinnerSpecExp = new javax.swing.JSpinner(); checkSpecWithI0 = new javax.swing.JCheckBox(); checkSpecSaveSpectrum = new javax.swing.JCheckBox(); jPanel4 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); tableRegions = new javax.swing.JTable(); buttonAdd = new javax.swing.JButton(); buttonRemove = new javax.swing.JButton(); buttonSpecStart = new javax.swing.JButton(); buttonSpecAbort = new javax.swing.JButton(); panelNorm.setBorder(javax.swing.BorderFactory.createTitledBorder("Normalization")); buttonSetNorm.setText("Select"); buttonSetNorm.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSetNormActionPerformed(evt); } }); textNorm.setEditable(false); textNorm.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { textNormKeyTyped(evt); } public void keyReleased(java.awt.event.KeyEvent evt) { textNormKeyReleased(evt); } }); jLabel29.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel29.setText("File: "); buttonShowNorm.setText("Show"); buttonShowNorm.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonShowNormActionPerformed(evt); } }); javax.swing.GroupLayout panelNormLayout = new javax.swing.GroupLayout(panelNorm); panelNorm.setLayout(panelNormLayout); panelNormLayout.setHorizontalGroup( panelNormLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNormLayout.createSequentialGroup() .addContainerGap() .addComponent(buttonShowNorm) .addGap(18, 18, 18) .addComponent(jLabel29) .addGap(0, 0, 0) .addComponent(textNorm) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonSetNorm) .addContainerGap()) ); panelNormLayout.setVerticalGroup( panelNormLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNormLayout.createSequentialGroup() .addContainerGap() .addGroup(panelNormLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel29) .addComponent(textNorm, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(buttonSetNorm) .addComponent(buttonShowNorm)) .addContainerGap()) ); panelNorm1.setBorder(javax.swing.BorderFactory.createTitledBorder("Outliers")); textSelectOutliersMask.setText("Select"); textSelectOutliersMask.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { textSelectOutliersMaskActionPerformed(evt); } }); textOutliersMask.setEditable(false); textOutliersMask.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { textOutliersMaskKeyTyped(evt); } public void keyReleased(java.awt.event.KeyEvent evt) { textOutliersMaskKeyReleased(evt); } }); jLabel30.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel30.setText("Mask File:"); jLabel31.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel31.setText("Threshold:"); textClearOutliersMask.setText("Clear"); textClearOutliersMask.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { textClearOutliersMaskActionPerformed(evt); } }); spinnerOutliersThreshold.setModel(new javax.swing.SpinnerNumberModel(Long.valueOf(0L), Long.valueOf(0L), Long.valueOf(1000000000000L), Long.valueOf(1L))); spinnerOutliersThreshold.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spinnerOutliersThresholdStateChanged(evt); } }); javax.swing.GroupLayout panelNorm1Layout = new javax.swing.GroupLayout(panelNorm1); panelNorm1.setLayout(panelNorm1Layout); panelNorm1Layout.setHorizontalGroup( panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNorm1Layout.createSequentialGroup() .addContainerGap() .addGroup(panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNorm1Layout.createSequentialGroup() .addComponent(jLabel30) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textOutliersMask) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textClearOutliersMask) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(textSelectOutliersMask)) .addGroup(panelNorm1Layout.createSequentialGroup() .addComponent(jLabel31) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spinnerOutliersThreshold, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 326, Short.MAX_VALUE))) .addContainerGap()) ); panelNorm1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel30, jLabel31}); panelNorm1Layout.setVerticalGroup( panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelNorm1Layout.createSequentialGroup() .addContainerGap() .addGroup(panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel30) .addComponent(textOutliersMask, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textSelectOutliersMask) .addComponent(textClearOutliersMask)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelNorm1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel31) .addComponent(spinnerOutliersThreshold, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); buttonTriggerDetector.setText("Trigger Detector"); buttonTriggerDetector.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonTriggerDetectorActionPerformed(evt); } }); buttonShowDetectorPanel.setText("Show Detector Panel"); buttonShowDetectorPanel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonShowDetectorPanelActionPerformed(evt); } }); buttonMeasurements.setText("Image Measurements"); buttonMeasurements.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonMeasurementsActionPerformed(evt); } }); 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) .addComponent(panelNorm, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelNorm1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(buttonTriggerDetector, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(buttonShowDetectorPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 201, Short.MAX_VALUE) .addComponent(buttonMeasurements, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonMeasurements, buttonShowDetectorPanel, buttonTriggerDetector}); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(panelNorm, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelNorm1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, Short.MAX_VALUE) .addComponent(buttonMeasurements) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(buttonShowDetectorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(buttonTriggerDetector) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Detector", jPanel1); rendererRoi.setDeviceName("image"); rendererRoi.setMode(ch.psi.pshell.imaging.RendererMode.Stretch); rendererRoi.setShowStatus(false); jLabel26.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel26.setText("ROIs:"); buttonRoiAdd.setText("Add"); buttonRoiAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRoiAddActionPerformed(evt); } }); buttonRoiRemove.setText("Remove"); buttonRoiRemove.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRoiRemoveActionPerformed(evt); } }); tableRoi.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Name", "X", "Y", "W", "H" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class }; boolean[] canEdit = new boolean [] { false, true, true, true, true }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tableRoi.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(tableRoi); javax.swing.GroupLayout panelRoiLayout = new javax.swing.GroupLayout(panelRoi); panelRoi.setLayout(panelRoiLayout); panelRoiLayout.setHorizontalGroup( panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelRoiLayout.createSequentialGroup() .addGap(17, 17, 17) .addComponent(rendererRoi, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(buttonRoiRemove, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(buttonRoiAdd, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jLabel26)) .addGap(13, 13, 13)) ); panelRoiLayout.setVerticalGroup( panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelRoiLayout.createSequentialGroup() .addContainerGap() .addGroup(panelRoiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(rendererRoi, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(panelRoiLayout.createSequentialGroup() .addComponent(buttonRoiAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonRoiRemove, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jLabel26) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE))) .addContainerGap()) ); jTabbedPane1.addTab("ROIs", panelRoi); buttonImgStart.setText("Start"); buttonImgStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonImgStartActionPerformed(evt); } }); buttonImgAbort.setText("Abort"); buttonImgAbort.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonImgAbortActionPerformed(evt); } }); jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder("First Image")); jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel4.setText("Exposure(s):"); spinnerImgExp1.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 3600.0d, 1.0d)); jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel9.setText("Average:"); spinnerImgAvg1.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1)); jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel11.setText("Energy:"); spinnerImgEng1.setModel(new javax.swing.SpinnerNumberModel(1000.0d, 90.0d, 2000.0d, 1.0d)); javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8); jPanel8.setLayout(jPanel8Layout); jPanel8Layout.setHorizontalGroup( jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel8Layout.createSequentialGroup() .addGap(14, 14, 14) .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel11, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spinnerImgExp1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerImgAvg1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerImgEng1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel8Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerImgAvg1, spinnerImgEng1, spinnerImgExp1}); jPanel8Layout.setVerticalGroup( jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel8Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(spinnerImgExp1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9) .addComponent(spinnerImgAvg1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel11) .addComponent(spinnerImgEng1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel10.setBorder(javax.swing.BorderFactory.createTitledBorder("Second Image")); jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel12.setText("Exposure(s):"); spinnerImgExp2.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 3600.0d, 1.0d)); jLabel17.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel17.setText("Average:"); spinnerImgAvg2.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1)); jLabel19.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel19.setText("Energy:"); spinnerImgEng2.setModel(new javax.swing.SpinnerNumberModel(1000.0d, 90.0d, 2000.0d, 1.0d)); javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10); jPanel10.setLayout(jPanel10Layout); jPanel10Layout.setHorizontalGroup( jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel10Layout.createSequentialGroup() .addGap(14, 14, 14) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel19, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel17, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel12, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spinnerImgExp2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerImgAvg2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerImgEng2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel10Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerImgAvg2, spinnerImgEng2, spinnerImgExp2}); jPanel10Layout.setVerticalGroup( jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel10Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel12) .addComponent(spinnerImgExp2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel17) .addComponent(spinnerImgAvg2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel19) .addComponent(spinnerImgEng2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jLabel21.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel21.setText("Method:"); spinnerImgMeasurements.setModel(new javax.swing.SpinnerNumberModel(1, 1, 10000, 1)); comboImgMethod.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); comboImgMethod.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { comboImgMethodActionPerformed(evt); } }); jLabel20.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel20.setText("Measurements:"); checkImgAutosave.setSelected(true); checkImgAutosave.setText("Autosave"); labelSwitching.setText("Switching:"); comboSwitch.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); deviceValuePanel11.setDeviceName("id1_pol"); jLabel22.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel22.setText("Mode ID1:"); jLabel28.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel28.setText("Mode ID2:"); deviceValuePanel12.setDeviceName("id2_pol"); javax.swing.GroupLayout panelImgControlsLayout = new javax.swing.GroupLayout(panelImgControls); panelImgControls.setLayout(panelImgControlsLayout); panelImgControlsLayout.setHorizontalGroup( panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelImgControlsLayout.createSequentialGroup() .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel28, javax.swing.GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE) .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addGroup(panelImgControlsLayout.createSequentialGroup() .addContainerGap() .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(labelSwitching) .addComponent(jLabel21) .addComponent(jLabel20))) .addGroup(panelImgControlsLayout.createSequentialGroup() .addGap(22, 22, 22) .addComponent(jLabel22, javax.swing.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(spinnerImgMeasurements) .addComponent(comboImgMethod, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(checkImgAutosave, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(comboSwitch, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(deviceValuePanel11, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addComponent(deviceValuePanel12, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) .addGap(18, 18, Short.MAX_VALUE) .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(18, 18, Short.MAX_VALUE) .addComponent(jPanel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); panelImgControlsLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {checkImgAutosave, comboImgMethod, comboSwitch, spinnerImgMeasurements}); panelImgControlsLayout.setVerticalGroup( panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelImgControlsLayout.createSequentialGroup() .addContainerGap() .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(panelImgControlsLayout.createSequentialGroup() .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(comboImgMethod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel21)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel20) .addComponent(spinnerImgMeasurements, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(6, 6, 6) .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(labelSwitching) .addComponent(comboSwitch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(checkImgAutosave)) .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(24, 24, 24) .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(jLabel22) .addComponent(deviceValuePanel11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelImgControlsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(jLabel28) .addComponent(deviceValuePanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(34, Short.MAX_VALUE)) ); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panelImgControls, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(buttonImgStart) .addGap(76, 76, 76) .addComponent(buttonImgAbort) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonImgAbort, buttonImgStart}); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(18, 18, 18) .addComponent(panelImgControls, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(buttonImgStart) .addComponent(buttonImgAbort)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jTabbedPane1.addTab("2-Images", jPanel2); jLabel23.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel23.setText("Exposure(s):"); jLabel24.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel24.setText("Average:"); checkSpecSaveImages.setSelected(true); checkSpecSaveImages.setText("Save images"); spinnerSpecAvg.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1)); checkSpecSwitchPol.setText("Switch pol after scan"); spinnerSpecScans.setModel(new javax.swing.SpinnerNumberModel(1, 1, 10000, 1)); jLabel25.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel25.setText("Scans:"); spinnerSpecExp.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.0d, 3600.0d, 1.0d)); checkSpecWithI0.setSelected(true); checkSpecWithI0.setText("With I0"); checkSpecSaveSpectrum.setSelected(true); checkSpecSaveSpectrum.setText("Save spectrum"); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Ranges")); tableRegions.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Start", "End", "Step" } ) { Class[] types = new Class [] { java.lang.Double.class, java.lang.Double.class, java.lang.Double.class }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); jScrollPane2.setViewportView(tableRegions); buttonAdd.setText("Add"); buttonAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonAddActionPerformed(evt); } }); buttonRemove.setText("Remove"); buttonRemove.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonRemoveActionPerformed(evt); } }); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(buttonAdd) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 88, Short.MAX_VALUE) .addComponent(buttonRemove))) .addContainerGap()) ); jPanel4Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonAdd, buttonRemove}); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(buttonAdd) .addComponent(buttonRemove)) .addContainerGap()) ); javax.swing.GroupLayout panelSpectrumLayout = new javax.swing.GroupLayout(panelSpectrum); panelSpectrum.setLayout(panelSpectrumLayout); panelSpectrumLayout.setHorizontalGroup( panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelSpectrumLayout.createSequentialGroup() .addContainerGap() .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel24) .addComponent(jLabel23) .addComponent(jLabel25)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(checkSpecSwitchPol) .addComponent(checkSpecWithI0) .addComponent(checkSpecSaveImages) .addComponent(checkSpecSaveSpectrum) .addComponent(spinnerSpecScans, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerSpecExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(spinnerSpecAvg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 108, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panelSpectrumLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerSpecAvg, spinnerSpecExp, spinnerSpecScans}); panelSpectrumLayout.setVerticalGroup( panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelSpectrumLayout.createSequentialGroup() .addContainerGap() .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(panelSpectrumLayout.createSequentialGroup() .addComponent(checkSpecSaveSpectrum) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(checkSpecSaveImages) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(checkSpecWithI0) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel23) .addComponent(spinnerSpecExp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel24) .addComponent(spinnerSpecAvg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(panelSpectrumLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel25) .addComponent(spinnerSpecScans, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(59, 59, 59) .addComponent(checkSpecSwitchPol) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); buttonSpecStart.setText("Start"); buttonSpecStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSpecStartActionPerformed(evt); } }); buttonSpecAbort.setText("Abort"); buttonSpecAbort.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSpecAbortActionPerformed(evt); } }); 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(panelSpectrum, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel3Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(buttonSpecStart) .addGap(76, 76, 76) .addComponent(buttonSpecAbort) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); jPanel3Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonSpecAbort, buttonSpecStart}); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(panelSpectrum, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(76, 76, 76) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(buttonSpecStart) .addComponent(buttonSpecAbort)) .addGap(73, 73, 73)) ); jTabbedPane1.addTab("Absorption Spectrum", jPanel3); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 691, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jTabbedPane1) .addGap(0, 0, 0)) ); }// //GEN-END:initComponents private void buttonImgStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonImgStartActionPerformed try { run2Images(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonImgStartActionPerformed private void comboImgMethodActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboImgMethodActionPerformed updateControls(); }//GEN-LAST:event_comboImgMethodActionPerformed private void buttonSpecStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSpecStartActionPerformed try { runAbsSpectrum(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonSpecStartActionPerformed private void buttonImgAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonImgAbortActionPerformed try { getContext().abort(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonImgAbortActionPerformed private void buttonRoiRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRoiRemoveActionPerformed try { removeRoi(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonRoiRemoveActionPerformed private void buttonRoiAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRoiAddActionPerformed try { addRoi(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonRoiAddActionPerformed private void buttonSpecAbortActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSpecAbortActionPerformed try { getContext().abort(); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonSpecAbortActionPerformed private void buttonTriggerDetectorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonTriggerDetectorActionPerformed try { this.evalAsync("trigger_eiger()"); } catch (Exception ex) { showException(ex); } }//GEN-LAST:event_buttonTriggerDetectorActionPerformed private void buttonAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAddActionPerformed modelRegions.addRow(new Object[]{Double.NaN, Double.NaN, Double.NaN}); }//GEN-LAST:event_buttonAddActionPerformed private void buttonRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRemoveActionPerformed int row = tableRegions.getSelectedRow(); if (row>=0){ modelRegions.removeRow(row); } }//GEN-LAST:event_buttonRemoveActionPerformed private void buttonSetNormActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSetNormActionPerformed try{ JFileChooser chooser = new JFileChooser(getContext().getSetup().expandPath(getContext().getConfig().dataPath)); FileNameExtensionFilter filter = new FileNameExtensionFilter("Image File", "tif", "tiff"); chooser.setFileFilter(filter); chooser.setFileHidingEnabled(true); int rVal = chooser.showOpenDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { textNorm.setText(chooser.getSelectedFile().getAbsoluteFile().toString()); this.setSetting("NORM_FILE", textNorm.getText()); } } catch (Exception ex){ showException (ex); } }//GEN-LAST:event_buttonSetNormActionPerformed private void textNormKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textNormKeyReleased // TODO add your handling code here: }//GEN-LAST:event_textNormKeyReleased private void textNormKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textNormKeyTyped // TODO add your handling code here: }//GEN-LAST:event_textNormKeyTyped private void buttonShowDetectorPanelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonShowDetectorPanelActionPerformed try{ this.showDevicePanel("eiger"); } catch (Exception ex){ showException (ex); } }//GEN-LAST:event_buttonShowDetectorPanelActionPerformed private void buttonShowNormActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonShowNormActionPerformed try{ this.enableNorm( buttonShowNorm.isSelected()); buttonShowNorm.setText(buttonShowNorm.isSelected() ? "Hide" : "Show"); } catch (Exception ex){ showException (ex); } }//GEN-LAST:event_buttonShowNormActionPerformed private void textSelectOutliersMaskActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_textSelectOutliersMaskActionPerformed try{ JFileChooser chooser = new JFileChooser(getContext().getSetup().expandPath(getContext().getConfig().dataPath)); FileNameExtensionFilter filter = new FileNameExtensionFilter("Image File", "tif", "tiff"); chooser.setFileFilter(filter); chooser.setFileHidingEnabled(true); int rVal = chooser.showOpenDialog(this); if (rVal == JFileChooser.APPROVE_OPTION) { textOutliersMask.setText(chooser.getSelectedFile().getAbsoluteFile().toString()); this.setSetting("OUTLIERS_MASK_FILE", textOutliersMask.getText()); } } catch (Exception ex){ showException (ex); } }//GEN-LAST:event_textSelectOutliersMaskActionPerformed private void textOutliersMaskKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textOutliersMaskKeyTyped // TODO add your handling code here: }//GEN-LAST:event_textOutliersMaskKeyTyped private void textOutliersMaskKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textOutliersMaskKeyReleased // TODO add your handling code here: }//GEN-LAST:event_textOutliersMaskKeyReleased private void textClearOutliersMaskActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_textClearOutliersMaskActionPerformed try{ setSetting("OUTLIERS_MASK_FILE", null); textOutliersMask.setText(""); } catch (Exception ex){ showException (ex); } }//GEN-LAST:event_textClearOutliersMaskActionPerformed private void spinnerOutliersThresholdStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerOutliersThresholdStateChanged try{ setSetting("OUTLIERS_THRESHOLD", spinnerOutliersThreshold.getValue()); } catch (Exception ex){ showException (ex); } }//GEN-LAST:event_spinnerOutliersThresholdStateChanged private void buttonMeasurementsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMeasurementsActionPerformed try{ evalAsync(buttonMeasurements.isSelected() ? "start_measurements()" : "stop_measurements()"); } catch (Exception ex){ showException (ex); } }//GEN-LAST:event_buttonMeasurementsActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton buttonAdd; private javax.swing.JButton buttonImgAbort; private javax.swing.JButton buttonImgStart; private javax.swing.JToggleButton buttonMeasurements; private javax.swing.JButton buttonRemove; private javax.swing.JButton buttonRoiAdd; private javax.swing.JButton buttonRoiRemove; private javax.swing.JButton buttonSetNorm; private javax.swing.JButton buttonShowDetectorPanel; private javax.swing.JToggleButton buttonShowNorm; private javax.swing.JButton buttonSpecAbort; private javax.swing.JButton buttonSpecStart; private javax.swing.JButton buttonTriggerDetector; private javax.swing.JCheckBox checkImgAutosave; private javax.swing.JCheckBox checkSpecSaveImages; private javax.swing.JCheckBox checkSpecSaveSpectrum; private javax.swing.JCheckBox checkSpecSwitchPol; private javax.swing.JCheckBox checkSpecWithI0; private javax.swing.JComboBox comboImgMethod; private javax.swing.JComboBox comboSwitch; private ch.psi.pshell.swing.DeviceValuePanel deviceValuePanel11; private ch.psi.pshell.swing.DeviceValuePanel deviceValuePanel12; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel17; private javax.swing.JLabel jLabel19; private javax.swing.JLabel jLabel20; private javax.swing.JLabel jLabel21; private javax.swing.JLabel jLabel22; private javax.swing.JLabel jLabel23; private javax.swing.JLabel jLabel24; private javax.swing.JLabel jLabel25; private javax.swing.JLabel jLabel26; private javax.swing.JLabel jLabel28; private javax.swing.JLabel jLabel29; private javax.swing.JLabel jLabel30; private javax.swing.JLabel jLabel31; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel10; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel8; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JLabel labelSwitching; private javax.swing.JPanel panelImgControls; private javax.swing.JPanel panelNorm; private javax.swing.JPanel panelNorm1; private javax.swing.JPanel panelRoi; private javax.swing.JPanel panelSpectrum; private ch.psi.pshell.imaging.Renderer rendererRoi; private javax.swing.JSpinner spinnerImgAvg1; private javax.swing.JSpinner spinnerImgAvg2; private javax.swing.JSpinner spinnerImgEng1; private javax.swing.JSpinner spinnerImgEng2; private javax.swing.JSpinner spinnerImgExp1; private javax.swing.JSpinner spinnerImgExp2; private javax.swing.JSpinner spinnerImgMeasurements; private javax.swing.JSpinner spinnerOutliersThreshold; private javax.swing.JSpinner spinnerSpecAvg; private javax.swing.JSpinner spinnerSpecExp; private javax.swing.JSpinner spinnerSpecScans; private javax.swing.JTable tableRegions; private javax.swing.JTable tableRoi; private javax.swing.JButton textClearOutliersMask; private javax.swing.JTextField textNorm; private javax.swing.JTextField textOutliersMask; private javax.swing.JButton textSelectOutliersMask; // End of variables declaration//GEN-END:variables }