576 lines
26 KiB
Java
Executable File
576 lines
26 KiB
Java
Executable File
import ch.psi.pshell.bs.StreamCamera;
|
|
import ch.psi.pshell.camserver.PipelineSource;
|
|
import ch.psi.pshell.data.DataStore;
|
|
import ch.psi.pshell.device.Device;
|
|
import ch.psi.pshell.epics.DiscretePositioner;
|
|
import ch.psi.pshell.epics.ChannelInteger;
|
|
import ch.psi.pshell.epics.Epics;
|
|
import ch.psi.pshell.imaging.Overlay;
|
|
import ch.psi.pshell.imaging.Overlays;
|
|
import ch.psi.pshell.imaging.Source;
|
|
import ch.psi.pshell.workbench.App;
|
|
import ch.psi.pshell.framework.Context;
|
|
import ch.psi.pshell.framework.Panel;
|
|
import ch.psi.pshell.framework.Setup;
|
|
import ch.psi.pshell.utils.Elog;
|
|
import ch.psi.pshell.utils.State;
|
|
import ch.psi.pshell.swing.SwingUtils;
|
|
import ch.psi.pshell.swing.SwingUtils.OptionResult;
|
|
import ch.psi.pshell.swing.SwingUtils.OptionType;
|
|
import ch.psi.pshell.screenpanel.Options;
|
|
import ch.psi.pshell.screenpanel.CamServerViewer;
|
|
import ch.psi.pshell.utils.Str;
|
|
import java.awt.GridBagConstraints;
|
|
import java.awt.GridBagLayout;
|
|
import java.io.IOException;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
import javax.swing.DefaultComboBoxModel;
|
|
import javax.swing.JComboBox;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JTextField;
|
|
import javax.swing.SwingUtilities;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public class ScreenPanelSF extends Panel implements CamServerViewer.CamServerViewerListener{
|
|
|
|
public static final String LASER_TYPE = "Laser";
|
|
public static final String ELECTRONS_TYPE = "Electrons";
|
|
public static final String PHOTONICS_TYPE = "Photonics";
|
|
public static final String TWO_PULSES_TYPE = "2Pulses";
|
|
|
|
DiscretePositioner screen;
|
|
DiscretePositioner filter;
|
|
final Logger logger;
|
|
|
|
static public void main(String[] args) {
|
|
ch.psi.pshell.workbench.Options.add();
|
|
ch.psi.pshell.screenpanel.Options.add();
|
|
App.init(args);
|
|
App.create();
|
|
}
|
|
|
|
public ScreenPanelSF() {
|
|
logger = Logger.getLogger(getClass().getName());
|
|
initComponents();
|
|
panelPulse.setVisible(false);
|
|
panelScreen.setVisible(false);
|
|
panelFilter.setVisible(false);
|
|
camServerViewer.setListener(this);
|
|
this.remove(customPanel);
|
|
|
|
camServerViewer.getCustomPanel().add(customPanel);
|
|
camServerViewer.applyOptions();
|
|
camServerViewer.setSidePanelVisible(true);
|
|
camServerViewer.setShowFit(true);
|
|
camServerViewer.setShowProfile(true);
|
|
camServerViewer.setShowReticle(true);
|
|
}
|
|
|
|
@Override
|
|
public void onStart() {
|
|
super.onStart();
|
|
try {
|
|
SwingUtilities.invokeLater(()->{
|
|
try {
|
|
camServerViewer.initialize(App.getArgumentValue(Options.SP_MODE.getString(null)));
|
|
startTimer(1000);
|
|
} catch (Exception ex) {
|
|
Logger.getLogger(ScreenPanelSF.class.getName()).log(Level.SEVERE, null, ex);
|
|
}
|
|
updateDialogTitle();
|
|
});
|
|
|
|
} catch (Exception ex) {
|
|
logger.log(Level.SEVERE, null, ex);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onStop() {
|
|
stopTimer();
|
|
super.onStop();
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
public void onStateChange(State state, State former) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onExecutedFile(String fileName, Object result) {
|
|
}
|
|
|
|
//Callback to perform update - in event thread
|
|
@Override
|
|
protected void doUpdate() {
|
|
}
|
|
|
|
Thread devicesInitTask;
|
|
|
|
|
|
State state;
|
|
void checkAppState(){
|
|
if (Setup.isDetached()){
|
|
State state = App.getInstance().getState();
|
|
StreamCamera camera = camServerViewer.getCamera();
|
|
if (state.isInitialized()){
|
|
state = (camera == null) ? state : camera.getState();
|
|
}
|
|
if (state!=this.state){
|
|
App.getInstance().getPropertyChangeSupport().firePropertyChange("appstate", this.state, state);
|
|
this.state = state;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
protected void onTimer() {
|
|
for (Device dev : new Device[]{screen, filter}) {
|
|
if ((dev != null) && (dev.getState().isNormal())) {
|
|
dev.request();
|
|
}
|
|
}
|
|
|
|
checkAppState();
|
|
|
|
try {
|
|
if (panelPulse.isVisible()){
|
|
CamServerViewer.Frame frame = camServerViewer.getCurrentFrame();
|
|
Object pulse = null;
|
|
try{
|
|
pulse = frame.cache.getValue("pulse");
|
|
} catch (Exception ex) {
|
|
}
|
|
textPulse.setText((pulse==null) ? "" : Str.toString(pulse));
|
|
}
|
|
} catch (Exception ex) {
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onOpeningStream(String name) throws Exception {
|
|
System.out.println("Initializing stream " + name);
|
|
if ((devicesInitTask != null) && (devicesInitTask.isAlive())) {
|
|
devicesInitTask.interrupt();
|
|
}
|
|
if (screen != null) {
|
|
screen.close();
|
|
screen = null;
|
|
}
|
|
if (filter != null) {
|
|
filter.close();
|
|
filter = null;
|
|
}
|
|
updateDialogTitle();
|
|
}
|
|
|
|
|
|
@Override
|
|
public void onOpenedStream(String name, String instance) throws Exception {
|
|
|
|
System.out.println("Initialized instance: " + instance);
|
|
String cameraName = camServerViewer.getCameraName();
|
|
boolean electrons = (cameraName!=null) && camServerViewer.getCameraTypes(cameraName).contains(ELECTRONS_TYPE);
|
|
boolean twoPulses = (cameraName!=null) && camServerViewer.getCameraTypes(cameraName).contains(TWO_PULSES_TYPE);
|
|
comboScreen.setModel(new DefaultComboBoxModel());
|
|
comboScreen.setEnabled(false);
|
|
comboFilter.setModel(new DefaultComboBoxModel());
|
|
comboFilter.setEnabled(false);
|
|
panelFilter.setVisible(electrons);
|
|
panelScreen.setVisible(electrons);
|
|
panelPulse.setVisible(twoPulses);
|
|
textPulse.setText("");
|
|
if (cameraName!=null){
|
|
if (electrons) {
|
|
//Parallelizing initialization
|
|
devicesInitTask = new Thread(() -> {
|
|
try {
|
|
if (cameraName.contains("DSRM")) {
|
|
screen = new DiscretePositioner("CurrentScreen", cameraName + ":POSITION_SP", cameraName + ":POSITION");
|
|
} else {
|
|
screen = new DiscretePositioner("CurrentScreen", cameraName + ":SET_SCREEN1_POS", cameraName + ":GET_SCREEN1_POS");
|
|
}
|
|
screen.setMonitored(true);
|
|
screen.initialize();
|
|
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
|
for (String pos : screen.getPositions()) {
|
|
model.addElement(pos);
|
|
}
|
|
comboScreen.setModel(model);
|
|
comboScreen.setSelectedItem(screen.read());
|
|
|
|
} catch (Exception ex) {
|
|
comboScreen.setModel(new DefaultComboBoxModel());
|
|
System.err.println(ex.getMessage());
|
|
screen = null;
|
|
}
|
|
comboScreen.setEnabled(screen != null);
|
|
valueScreen.setDevice(screen);
|
|
|
|
try {
|
|
filter = new DiscretePositioner("CurrentFilter", cameraName + ":SET_FILTER", cameraName + ":GET_FILTER");
|
|
filter.setMonitored(true);
|
|
filter.initialize();
|
|
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
|
for (String pos : filter.getPositions()) {
|
|
model.addElement(pos);
|
|
}
|
|
comboFilter.setModel(model);
|
|
comboFilter.setSelectedItem(filter.read());
|
|
} catch (Exception ex) {
|
|
System.err.println(ex.getMessage());
|
|
filter = null;
|
|
}
|
|
comboFilter.setEnabled(filter != null);
|
|
valueFilter.setDevice(filter);
|
|
});
|
|
devicesInitTask.start();
|
|
}
|
|
}
|
|
updateDialogTitle();
|
|
}
|
|
|
|
public void onSavedSnapshot(String name, String instancee, String snapshotFile) throws Exception {
|
|
JPanel panel = new JPanel();
|
|
GridBagLayout layout = new GridBagLayout();
|
|
layout.columnWidths = new int[]{0, 180}; //Minimum width
|
|
layout.rowHeights = new int[]{30, 30, 30}; //Minimum height
|
|
panel.setLayout(layout);
|
|
JComboBox comboLogbook = new JComboBox(new String[]{"SwissFEL commissioning data", "SwissFEL commissioning"});
|
|
JTextField textComment = new JTextField();
|
|
GridBagConstraints c = new GridBagConstraints();
|
|
c.gridx = 0;
|
|
c.gridy = 0;
|
|
panel.add(new JLabel("Data file:"), c);
|
|
c.gridy = 1;
|
|
panel.add(new JLabel("Logbook:"), c);
|
|
c.gridy = 2;
|
|
panel.add(new JLabel("Comment:"), c);
|
|
c.fill = GridBagConstraints.HORIZONTAL;
|
|
c.gridx = 1;
|
|
panel.add(textComment, c);
|
|
c.gridy = 1;
|
|
panel.add(comboLogbook, c);
|
|
c.gridy = 0;
|
|
panel.add(new JLabel(Context.getSequencer().getExecutionPars().getPath()), c);
|
|
|
|
if (SwingUtils.showOption(getTopLevel(), "Success", panel, OptionType.OkCancel) == OptionResult.Yes) {
|
|
StringBuilder message = new StringBuilder();
|
|
message.append("Camera: ").append(name).append("\n");
|
|
message.append("Screen: ").append(String.valueOf(valueScreen.getLabel().getText())).append("\n");
|
|
message.append("Filter: ").append(String.valueOf(valueFilter.getLabel().getText())).append("\n");
|
|
message.append("Data file: ").append(Context.getSequencer().getExecutionPars().getPath()).append("\n");
|
|
message.append("Comment: ").append(textComment.getText()).append("\n");
|
|
//Add slicing message
|
|
Overlay[] fitOv = camServerViewer.getFitOverlays();
|
|
if ((fitOv != null) && (fitOv.length > 5) && (fitOv[fitOv.length - 1] instanceof Overlays.Text)) {
|
|
Overlays.Text text = (Overlays.Text) fitOv[fitOv.length - 1];
|
|
message.append(text.getText()).append("\n");
|
|
}
|
|
Elog.log((String) comboLogbook.getSelectedItem(), "ScreenPanel Snapshot", message.toString(), new String[]{snapshotFile});
|
|
}
|
|
}
|
|
|
|
public void onSavingImages(String name, String instance, DataStore ds, String pathRoot) throws IOException{
|
|
if (camServerViewer.getTypes().contains(ELECTRONS_TYPE)) {
|
|
ds.setAttribute(pathRoot, "Screen", String.valueOf(valueScreen.getLabel().getText()));
|
|
ds.setAttribute(pathRoot, "Filter", String.valueOf(valueFilter.getLabel().getText()));
|
|
}
|
|
}
|
|
|
|
void updateDialogTitle() {
|
|
if (Setup.isDetached()) {
|
|
getTopLevel().setTitle(camServerViewer.getInstanceName() == null ? "ScreenPanel" : camServerViewer.getInstanceName());
|
|
}
|
|
}
|
|
|
|
void setLaserState(int bunch, boolean value) throws Exception {
|
|
System.out.println("Setting laser state: " + value + " - bunch" + bunch);
|
|
//Epics.putq("SIN-TIMAST-TMA:Beam-Las-Delay-Sel", value ? 0 : 1);
|
|
if ((bunch<=0) || (bunch==1)){
|
|
Epics.putq("SIN-TIMAST-TMA:Bunch-1-OnDelay-Sel", value ? 0 : 1);
|
|
}
|
|
if ((bunch<=0) || (bunch==2)){
|
|
Epics.putq("SIN-TIMAST-TMA:Bunch-2-OnDelay-Sel", value ? 0 : 1);
|
|
}
|
|
|
|
Epics.putq("SIN-TIMAST-TMA:Beam-Apply-Cmd.PROC", 1);
|
|
Thread.sleep(3000);
|
|
}
|
|
|
|
boolean getLaserState(int bunch) throws Exception {
|
|
//return (Epics.get("SIN-TIMAST-TMA:Beam-Las-Delay-Sel", Integer.class) == 0);
|
|
try{
|
|
if (bunch<=0){
|
|
return getLaserState(1) && getLaserState(2);
|
|
}
|
|
if (bunch==2){
|
|
return (Epics.get("SWISSFEL-STATUS:Bunch-2-OnDelay-Sel", Integer.class) == 0);
|
|
}
|
|
return (Epics.get("SWISSFEL-STATUS:Bunch-1-OnDelay-Sel", Integer.class) == 0);
|
|
} catch (Exception ex){
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
////////
|
|
@SuppressWarnings("unchecked")
|
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
|
private void initComponents() {
|
|
|
|
buttonGroup1 = new javax.swing.ButtonGroup();
|
|
buttonGroup2 = new javax.swing.ButtonGroup();
|
|
buttonGroup3 = new javax.swing.ButtonGroup();
|
|
buttonGroup4 = new javax.swing.ButtonGroup();
|
|
jProgressBar1 = new javax.swing.JProgressBar();
|
|
customPanel = new javax.swing.JPanel();
|
|
panelScreen = new javax.swing.JPanel();
|
|
valueScreen = new ch.psi.pshell.swing.DeviceValuePanel();
|
|
comboScreen = new javax.swing.JComboBox();
|
|
panelFilter = new javax.swing.JPanel();
|
|
valueFilter = new ch.psi.pshell.swing.DeviceValuePanel();
|
|
comboFilter = new javax.swing.JComboBox();
|
|
panelPulse = new javax.swing.JPanel();
|
|
buttonPulse1 = new javax.swing.JButton();
|
|
buttonPulse2 = new javax.swing.JButton();
|
|
textPulse = new javax.swing.JTextField();
|
|
camServerViewer = new ch.psi.pshell.screenpanel.CamServerViewer();
|
|
|
|
setPreferredSize(new java.awt.Dimension(873, 600));
|
|
setLayout(new java.awt.BorderLayout());
|
|
|
|
panelScreen.setBorder(javax.swing.BorderFactory.createTitledBorder("Screen"));
|
|
|
|
comboScreen.setEnabled(false);
|
|
comboScreen.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
comboScreenActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
javax.swing.GroupLayout panelScreenLayout = new javax.swing.GroupLayout(panelScreen);
|
|
panelScreen.setLayout(panelScreenLayout);
|
|
panelScreenLayout.setHorizontalGroup(
|
|
panelScreenLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(panelScreenLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(panelScreenLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(valueScreen, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(comboScreen, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
.addContainerGap())
|
|
);
|
|
panelScreenLayout.setVerticalGroup(
|
|
panelScreenLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelScreenLayout.createSequentialGroup()
|
|
.addGap(4, 4, 4)
|
|
.addComponent(comboScreen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(valueScreen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addContainerGap())
|
|
);
|
|
|
|
panelFilter.setBorder(javax.swing.BorderFactory.createTitledBorder("Filter"));
|
|
|
|
comboFilter.setEnabled(false);
|
|
comboFilter.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
comboFilterActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
javax.swing.GroupLayout panelFilterLayout = new javax.swing.GroupLayout(panelFilter);
|
|
panelFilter.setLayout(panelFilterLayout);
|
|
panelFilterLayout.setHorizontalGroup(
|
|
panelFilterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(panelFilterLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(panelFilterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(valueFilter, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(comboFilter, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
.addContainerGap())
|
|
);
|
|
panelFilterLayout.setVerticalGroup(
|
|
panelFilterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelFilterLayout.createSequentialGroup()
|
|
.addGap(4, 4, 4)
|
|
.addComponent(comboFilter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(valueFilter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
|
|
panelPulse.setBorder(javax.swing.BorderFactory.createTitledBorder("Pulse"));
|
|
|
|
buttonPulse1.setText("Pulse 1");
|
|
buttonPulse1.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
buttonPulse1ActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
buttonPulse2.setText("Pulse 2");
|
|
buttonPulse2.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
buttonPulse2ActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
textPulse.setEditable(false);
|
|
textPulse.setHorizontalAlignment(javax.swing.JTextField.CENTER);
|
|
|
|
javax.swing.GroupLayout panelPulseLayout = new javax.swing.GroupLayout(panelPulse);
|
|
panelPulse.setLayout(panelPulseLayout);
|
|
panelPulseLayout.setHorizontalGroup(
|
|
panelPulseLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(panelPulseLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addComponent(buttonPulse1)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(buttonPulse2)
|
|
.addGap(18, 18, Short.MAX_VALUE)
|
|
.addComponent(textPulse, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addContainerGap())
|
|
);
|
|
|
|
panelPulseLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonPulse1, buttonPulse2});
|
|
|
|
panelPulseLayout.setVerticalGroup(
|
|
panelPulseLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(panelPulseLayout.createSequentialGroup()
|
|
.addGroup(panelPulseLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(buttonPulse1, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(buttonPulse2, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(textPulse, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addContainerGap())
|
|
);
|
|
|
|
javax.swing.GroupLayout customPanelLayout = new javax.swing.GroupLayout(customPanel);
|
|
customPanel.setLayout(customPanelLayout);
|
|
customPanelLayout.setHorizontalGroup(
|
|
customPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(customPanelLayout.createSequentialGroup()
|
|
.addGap(0, 0, 0)
|
|
.addGroup(customPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
|
.addComponent(panelScreen, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(panelFilter, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(panelPulse, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
.addGap(0, 0, 0))
|
|
);
|
|
customPanelLayout.setVerticalGroup(
|
|
customPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(customPanelLayout.createSequentialGroup()
|
|
.addGap(0, 0, 0)
|
|
.addComponent(panelScreen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(panelFilter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(panelPulse, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
|
|
add(customPanel, java.awt.BorderLayout.WEST);
|
|
add(camServerViewer, java.awt.BorderLayout.CENTER);
|
|
}// </editor-fold>//GEN-END:initComponents
|
|
|
|
private void comboScreenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboScreenActionPerformed
|
|
|
|
comboScreen.setEnabled(false);
|
|
new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
ChannelInteger setpoint = null;
|
|
try {
|
|
int index = comboScreen.getSelectedIndex();
|
|
if (index >= 0) {
|
|
String cameraName = camServerViewer.getCameraName();
|
|
if (cameraName.contains("DSRM")) {
|
|
setpoint = new ChannelInteger(null, cameraName + ":POSITION_SP");
|
|
} else {
|
|
setpoint = new ChannelInteger(null, cameraName + ":SET_SCREEN1_POS");
|
|
}
|
|
setpoint.initialize();
|
|
Integer readback = setpoint.read();
|
|
if ((readback == null) || (setpoint.read() != index)) {
|
|
setpoint.write(index);
|
|
}
|
|
screen.read();
|
|
}
|
|
} catch (Exception ex) {
|
|
showException(ex);
|
|
} finally {
|
|
comboScreen.setEnabled(true);
|
|
if (setpoint != null) {
|
|
setpoint.close();
|
|
}
|
|
}
|
|
}
|
|
}).start();
|
|
}//GEN-LAST:event_comboScreenActionPerformed
|
|
|
|
private void comboFilterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboFilterActionPerformed
|
|
try {
|
|
String setpoint = (String) comboFilter.getSelectedItem();
|
|
if (setpoint != null) {
|
|
if (!setpoint.equals(filter.read())) {
|
|
filter.write(setpoint);
|
|
}
|
|
}
|
|
} catch (Exception ex) {
|
|
showException(ex);
|
|
}
|
|
}//GEN-LAST:event_comboFilterActionPerformed
|
|
|
|
private void buttonPulse1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonPulse1ActionPerformed
|
|
try {
|
|
PipelineSource server = camServerViewer.getServer();
|
|
if ((server != null) && (server.isStarted())) {
|
|
server.setInstanceConfigValue("pulse",1);
|
|
}
|
|
} catch (Exception ex) {
|
|
showException(ex);
|
|
}
|
|
}//GEN-LAST:event_buttonPulse1ActionPerformed
|
|
|
|
private void buttonPulse2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonPulse2ActionPerformed
|
|
try {
|
|
PipelineSource server = camServerViewer.getServer();
|
|
if ((server != null) && (server.isStarted())) {
|
|
server.setInstanceConfigValue("pulse",2);
|
|
}
|
|
} catch (Exception ex) {
|
|
showException(ex);
|
|
}
|
|
}//GEN-LAST:event_buttonPulse2ActionPerformed
|
|
|
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
|
private javax.swing.ButtonGroup buttonGroup1;
|
|
private javax.swing.ButtonGroup buttonGroup2;
|
|
private javax.swing.ButtonGroup buttonGroup3;
|
|
private javax.swing.ButtonGroup buttonGroup4;
|
|
private javax.swing.JButton buttonPulse1;
|
|
private javax.swing.JButton buttonPulse2;
|
|
private ch.psi.pshell.screenpanel.CamServerViewer camServerViewer;
|
|
private javax.swing.JComboBox comboFilter;
|
|
private javax.swing.JComboBox comboScreen;
|
|
private javax.swing.JPanel customPanel;
|
|
private javax.swing.JProgressBar jProgressBar1;
|
|
private javax.swing.JPanel panelFilter;
|
|
private javax.swing.JPanel panelPulse;
|
|
private javax.swing.JPanel panelScreen;
|
|
private javax.swing.JTextField textPulse;
|
|
private ch.psi.pshell.swing.DeviceValuePanel valueFilter;
|
|
private ch.psi.pshell.swing.DeviceValuePanel valueScreen;
|
|
// End of variables declaration//GEN-END:variables
|
|
|
|
}
|
|
|