diff --git a/plugins/ScreenPanel.form b/plugins/ScreenPanel.form old mode 100755 new mode 100644 index 3974d55..05a3120 --- a/plugins/ScreenPanel.form +++ b/plugins/ScreenPanel.form @@ -28,683 +28,47 @@ + - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + - + + - - - + + + - + + + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -755,7 +119,7 @@ - + @@ -805,16 +169,11 @@ - - - - - - + - + @@ -822,56 +181,24 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - + - - - - - - - - - - - - - + + + @@ -879,82 +206,38 @@ - + - + - + - + - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/plugins/ScreenPanel.java b/plugins/ScreenPanel.java old mode 100755 new mode 100644 index 275395a..2413eee --- a/plugins/ScreenPanel.java +++ b/plugins/ScreenPanel.java @@ -1,3223 +1,611 @@ -/* - * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. - */ - -import ch.psi.pshell.bs.CameraServer; -import ch.psi.pshell.core.Context; -import java.io.IOException; -import java.nio.file.Paths; -import javax.swing.DefaultComboBoxModel; -import ch.psi.pshell.ui.Panel; -import ch.psi.pshell.imaging.ImageListener; -import ch.psi.utils.State; -import ch.psi.utils.Chrono; -import ch.psi.utils.swing.SwingUtils; -import ch.psi.utils.swing.TextEditor; -import ch.psi.pshell.bs.PipelineServer; -import ch.psi.pshell.bs.StreamValue; -import ch.psi.pshell.core.JsonSerializer; -import ch.psi.pshell.data.DataManager; -import ch.psi.pshell.device.DescStatsDouble; -import ch.psi.pshell.device.Device; -import ch.psi.pshell.epics.ChannelInteger; -import ch.psi.pshell.epics.DiscretePositioner; -import ch.psi.pshell.epics.Epics; -import ch.psi.pshell.imaging.Calibration; -import ch.psi.pshell.imaging.Colormap; -import ch.psi.pshell.imaging.ColormapSource; -import ch.psi.pshell.imaging.ColormapSource.ColormapSourceConfig; -import ch.psi.pshell.ui.App; -import ch.psi.pshell.imaging.Data; -import ch.psi.pshell.imaging.DimensionDouble; -import ch.psi.pshell.imaging.Histogram; -import ch.psi.pshell.imaging.ImageBuffer; -import ch.psi.pshell.imaging.Overlay; -import ch.psi.pshell.imaging.Overlays; -import ch.psi.pshell.imaging.Overlays.Text; -import ch.psi.pshell.imaging.Pen; -import ch.psi.pshell.imaging.PointDouble; -import ch.psi.pshell.imaging.Renderer; -import ch.psi.pshell.imaging.RendererListener; -import ch.psi.pshell.imaging.RendererMode; -import ch.psi.pshell.imaging.Source; -import ch.psi.pshell.imaging.SourceBase; -import ch.psi.pshell.imaging.Utils; -import ch.psi.pshell.scripting.InterpreterResult; -import ch.psi.pshell.scripting.ScriptManager; -import ch.psi.pshell.swing.ValueSelection; -import ch.psi.pshell.swing.ValueSelection.ValueSelectionListener; -import ch.psi.utils.Arr; -import ch.psi.utils.ArrayProperties; -import ch.psi.utils.Convert; -import ch.psi.utils.swing.Editor.EditorDialog; -import ch.psi.utils.swing.MainFrame; -import ch.psi.utils.swing.StandardDialog; -import ch.psi.utils.swing.StandardDialog.StandardDialogListener; -import ch.psi.utils.swing.SwingUtils.OptionResult; -import ch.psi.utils.swing.SwingUtils.OptionType; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.image.BufferedImage; -import java.io.FileInputStream; -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JMenuItem; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; -import javax.swing.event.PopupMenuEvent; -import javax.swing.event.PopupMenuListener; -import javax.swing.table.DefaultTableModel; -import org.apache.commons.math3.analysis.function.Gaussian; -import org.apache.commons.math3.fitting.GaussianCurveFitter; -import org.apache.commons.math3.fitting.WeightedObservedPoint; -import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; - -/** - * - */ -public class ScreenPanel extends Panel { - - final String CAMERA_DEVICE_NAME = "CurrentCamera"; - boolean useServerStats = true; - String userOverlaysConfigFile; - ColormapSource camera; - PipelineServer server; - String cameraName; - int polling = 1000; - Overlay marker = null; - JDialog histogramDialog; - DiscretePositioner screen; - DiscretePositioner filter; - boolean showFit; - boolean showProfile; - Overlay[] userOv; - Overlay[] fitOv; - Overlay[] profileOv; - Overlay errorOverlay; - boolean requestCameraListUpdate; - boolean goodRegion; - String serverUrl; - String instanceName; - - boolean averaging = false; - - Double getServerDouble(String name) { - return (Double) Convert.toDouble(server.getValue(name)); - } - - double[] getServerDoubleArray(String name) { - return (double[]) Convert.toDouble(server.getValue(name)); - } - - Double getServerDouble(String name, StreamValue cache) { - return (Double) Convert.toDouble(cache.__getitem__(name)); - } - - double[] getServerDoubleArray(String name, StreamValue cache) { - return (double[]) Convert.toDouble(cache.__getitem__(name)); - } - - class ImageData { - - ImageData() { - if (server != null) { - cache = server.getStream().take(); - String prefix = goodRegion ? "gr_" : ""; - x_fit_mean = getServerDouble(prefix + "x_fit_mean", cache); - y_fit_mean = getServerDouble(prefix + "y_fit_mean", cache); - x_fit_standard_deviation = getServerDouble(prefix + "x_fit_standard_deviation", cache); - y_fit_standard_deviation = getServerDouble(prefix + "y_fit_standard_deviation", cache); - x_fit_gauss_function = getServerDoubleArray(prefix + "x_fit_gauss_function", cache); - y_fit_gauss_function = getServerDoubleArray(prefix + "y_fit_gauss_function", cache); - x_profile = getServerDoubleArray("x_profile", cache); - y_profile = getServerDoubleArray("y_profile", cache); - x_center_of_mass = getServerDouble("x_center_of_mass", cache); - y_center_of_mass = getServerDouble("y_center_of_mass", cache); - x_rms = getServerDouble("x_rms", cache); - y_rms = getServerDouble("y_rms", cache); - if (goodRegion) { - double[] gX2 = new double[x_profile.length]; - Arrays.fill(gX2, Double.NaN); - try { - double x = getServerDoubleArray("gr_x_axis", cache)[0]; - System.arraycopy(x_fit_gauss_function, 0, gX2, (int) ((renderer.getCalibration() != null) ? renderer.getCalibration().convertToImageX(x) : x), x_fit_gauss_function.length); - } catch (Exception ex) { - } - x_fit_gauss_function = gX2; - double[] gY2 = new double[y_profile.length]; - Arrays.fill(gY2, Double.NaN); - try { - double y = getServerDoubleArray("gr_y_axis", cache)[0]; - System.arraycopy(y_fit_gauss_function, 0, gY2, (int) ((renderer.getCalibration() != null) ? renderer.getCalibration().convertToImageY(y) : y), y_fit_gauss_function.length); - } catch (Exception ex) { - } - y_fit_gauss_function = gY2; - } - } - } - public Double x_fit_mean; - public Double y_fit_mean; - public Double x_center_of_mass; - public Double x_rms; - public Double x_fit_standard_deviation; - public Double y_fit_standard_deviation; - public Double y_center_of_mass; - public Double y_rms; - public double[] x_profile; - public double[] x_fit_gauss_function; - public double[] y_profile; - public double[] y_fit_gauss_function; - public StreamValue cache; - - } - - class Frame extends ImageData { - - Frame(Data data) { - this.data = data; - } - Data data; - - } - - final ArrayList imageBuffer = new ArrayList(); - Frame currentFrame; - int imageBufferLenght = 1; - Text imageBufferOverlay; - - public ScreenPanel() { - initComponents(); - spinnerThreshold.setVisible(false); - btFixColormapRange.setVisible(false); - spinnerGrThreshold.setVisible(false); - labelGrThreshold.setVisible(false); - spinnerGrScale.setVisible(false); - labelGrScale.setVisible(false); - //spinnerMin.setVisible(false); labelMin.setVisible(false); - //spinnerMax.setVisible(false); labelMax.setVisible(false); - renderer.setPersistenceFile(Paths.get(getContext().getSetup().getContextPath(), "Renderer_Cameras.bin")); - setPersistedComponents(new Component[]{buttonServer, buttonDirect}); - comboCameras.setEnabled(false); - SwingUtils.setEnumCombo(comboColormap, Colormap.class); - if (App.hasArgument("poll")) { - try { - polling = Integer.valueOf(App.getArgumentValue("poll")); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - if (App.hasArgument("zoom")) { - try { - renderer.setDefaultZoom(Double.valueOf(App.getArgumentValue("zoom"))); - renderer.resetZoom(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - if (App.hasArgument("buf")) { - try { - imageBufferLenght = Integer.valueOf(App.getArgumentValue("buf")); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - if (App.hasArgument("usr_ov")) { - try { - userOverlaysConfigFile = App.getArgumentValue("usr_ov"); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - if (App.hasArgument("srv_url")) { - serverUrl = App.getArgumentValue("srv_url"); - } - - if (App.hasArgument("calc")) { - useServerStats = false; - } - - renderer.setProfileNormalized(true); - renderer.setShowProfileLimits(false); - - JMenuItem menuCalibrate = new JMenuItem("Calibrate..."); - menuCalibrate.addActionListener((ActionEvent e) -> { - try { - calibrate(); - } catch (Exception ex) { - ex.printStackTrace(); - showException(ex); - } - }); - - JMenuItem menuShowStreamData = new JMenuItem("Show Stream Data"); - menuShowStreamData.addActionListener((ActionEvent e) -> { - try { - showStreamData(); - } catch (Exception ex) { - showException(ex); - } - }); - - JMenuItem menuSaveStack = new JMenuItem("Save Stack"); - menuSaveStack.addActionListener((ActionEvent e) -> { - try { - saveStack(); - } catch (Exception ex) { - showException(ex); - } - }); - menuSaveStack.setEnabled(imageBufferLenght > 0); - - JMenuItem menuSetROI = new JMenuItem("Set ROI..."); - menuSetROI.addActionListener((ActionEvent e) -> { - renderer.abortSelection(); - if (server != null) { - final Overlays.Rect selection = new Overlays.Rect(renderer.getPenMovingOverlay()); - renderer.addListener(new RendererListener() { - @Override - public void onSelectionFinished(Renderer renderer, Overlay overlay) { - try { - renderer.setShowReticle(false); - Rectangle roi = overlay.isFixed() ? renderer.toImageCoord(overlay.getBounds()) : overlay.getBounds(); - if (server.isRoiEnabled()) { - int[] cur = server.getRoi(); - server.setRoi(new int[]{roi.x + cur[0], roi.y + cur[1], roi.width, roi.height}); - } else { - server.setRoi(new int[]{roi.x, roi.y, roi.width, roi.height}); - } - } catch (Exception ex) { - } finally { - renderer.removeListener(this); - } - } - - @Override - public void onSelectionAborted(Renderer renderer, Overlay overlay) { - renderer.removeListener(this); - } - }); - selection.setFixed(true); - renderer.startSelection(selection); - } - }); - - JMenuItem menuResetROI = new JMenuItem("Reset ROI"); - menuResetROI.addActionListener((ActionEvent e) -> { - renderer.abortSelection(); - if (server != null) { - try { - renderer.setShowReticle(false); - server.resetRoi(); - } catch (IOException ex) { - showException(ex); - } - } - }); - - renderer.getPopupMenu().add(menuShowStreamData); - renderer.getPopupMenu().add(menuCalibrate); - renderer.getPopupMenu().add(menuSaveStack); - renderer.getPopupMenu().addSeparator(); - renderer.getPopupMenu().add(menuSetROI); - renderer.getPopupMenu().add(menuResetROI); - renderer.getPopupMenu().addPopupMenuListener(new PopupMenuListener() { - @Override - public void popupMenuWillBecomeVisible(PopupMenuEvent e) { - menuResetROI.setEnabled(server != null); - menuSetROI.setEnabled(server != null); - menuShowStreamData.setVisible(server != null); - menuCalibrate.setVisible(server != null); - menuCalibrate.setEnabled((calibrationDialolg == null) || (!calibrationDialolg.isShowing())); - } - - @Override - public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { - } - - @Override - public void popupMenuCanceled(PopupMenuEvent e) { - } - }); - renderer.getPopupMenu().setVisible(false); - - showFit = buttonFit.isSelected(); - showProfile = buttonProfile.isSelected(); - - pauseSelection.setVisible(false); - pauseSelection.setMinValue(1); - pauseSelection.addListener(new ValueSelectionListener() { - @Override - public void onValueChanged(ValueSelection origin, double value, boolean editing) { - if (editing && (value >= 1) && (value <= imageBuffer.size())) { - updatePause(); - } - } - }); - imageBufferOverlay = new Text(renderer.getPenErrorText(), "", new Font("Verdana", Font.PLAIN, 12), new Point(-100, 20)); - imageBufferOverlay.setFixed(true); - imageBufferOverlay.setAnchor(Overlay.ANCHOR_VIEWPORT_TOP_RIGHT); - if (MainFrame.isDark()) { - textState.setEnabled(true); - } - } - - @Override - public void onStart() { - super.onStart(); - if (App.hasArgument("ct")) { - boolean direct = App.getArgumentValue("ct").equals("0") || App.getArgumentValue("ct").equalsIgnoreCase("false"); - buttonServer.setSelected(!direct); - buttonDirect.setSelected(direct); - } - } - - @Override - public void onStop() { - try { - if (camera != null) { - camera.close(); - camera = null; - server = null; - } - } catch (Exception ex) { - ex.printStackTrace(); - } - super.onStop(); - } - - //Overridable callbacks - @Override - public void onInitialize(int runCount) { - comboCameras.setEnabled(false); - if (App.hasArgument("s")) { - renderer.setDevice((Source) getDevice("image")); - renderer.setAutoScroll(true); - ((Source) getDevice("image")).addListener(new ImageListener() { - @Override - public void onImage(Object o, BufferedImage bi, Data data) { - manageFit(bi, data); - manageUserOverlays(bi, data); - } - - @Override - public void onError(Object o, Exception ex) { - } - } - ); - - } else { - usingServer = buttonServer.isSelected(); - updateCameraList(); - comboCameras.setEnabled(true); - setComboCameraSelection(-1); - - if (comboCameras.getModel().getSize() > 0) { - try { - if (App.hasArgument("cam")) { - setComboCameraSelection(App.getArgumentValue("cam")); - comboCamerasActionPerformed(null); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - } - startTimer(1000); - } - - DefaultComboBoxModel getCameraList(boolean fromServer) throws Exception { - DefaultComboBoxModel model = new DefaultComboBoxModel(); - if (fromServer) { - try (PipelineServer srv = newServer()) { - srv.initialize(); - List cameras = srv.getCameras(); - Collections.sort(cameras); - for (String camera : cameras) { - model.addElement(camera); - } - } - - } else { - ArrayList cameras = (ArrayList) getContext().getClassByName("SfCamera").getMethod("getCameras", new Class[]{}).invoke(null); - for (String cam : cameras) { - model.addElement(cam); - } - } - return model; - } - - PipelineServer newServer() throws IOException { - if (serverUrl != null) { - System.out.println("Connecting to server: " + serverUrl); - server = new PipelineServer(CAMERA_DEVICE_NAME, serverUrl); - } else { - System.out.println("Connecting to server"); - server = new PipelineServer(CAMERA_DEVICE_NAME); - } - return server; - } - - boolean updatingCameraSelection; - - void setComboCameraSelection(Object selection) { - updatingCameraSelection = true; - try { - comboCameras.setSelectedItem(selection); - } finally { - updatingCameraSelection = false; - } - } - - boolean usingServer; - - void updateCameraList() { - try { - String selected = (String) comboCameras.getSelectedItem(); - DefaultComboBoxModel model = getCameraList(usingServer); - if (App.hasArgument("cam")) { - String cam = App.getArgumentValue("cam"); - if (model.getIndexOf(cam) < 0) { - model.addElement(cam); - } - } - comboCameras.setModel(model); - if (selected != null) { - setComboCameraSelection(selected); - } - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - updateStop(); - } - } - - final Object lockOverlays = new Object(); - - void manageFit(BufferedImage bi, Data data) { - Overlay[][] fo = ((bi == null) || ((!showFit && !showProfile))) ? null : getFitOverlays(data); - synchronized (lockOverlays) { - fo = (fo == null) ? new Overlay[][]{null, null} : fo; - renderer.updateOverlays(fo[0], profileOv); - profileOv = fo[0]; - renderer.updateOverlays(fo[1], fitOv); - fitOv = fo[1]; - } - } - - void manageUserOverlays(BufferedImage bi, Data data) { - Overlay[] fo = (bi == null) ? null : getUserOverlays(data); - synchronized (lockOverlays) { - renderer.updateOverlays(fo, userOv); - userOv = fo; - } - } - - @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; - - class ImageAverager extends SourceBase { - final ArrayList images = new ArrayList(); - ImageAverager() { - super("Image Averager"); - - camera.addListener(new ImageListener() { - @Override - public void onImage(Object o, BufferedImage bi, Data data) { - images.add(bi); - if (images.size()>10){ - images.remove(0); - } - BufferedImage ret = null; - for (BufferedImage ib : images){ - if (ret == null){ - ret = Utils.copy(ib, null, null); - } else { - Utils.add(ret, ib, true); - - } - } - //ret =Utils.scale(ret, 1.0/images.size()); - ImageAverager.this.pushImage(ret); - } - - @Override - public void onError(Object origin, Exception ex) { - } - }); - - } - } - - void setCamera(String cameraName) throws IOException, InterruptedException { - System.out.println("Initializing"); - parseUserOverlays(); - errorOverlay = null; - - if (dataTableDialog != null) { - dataTableDialog.dispose(); - dataTableDialog = null; - } - dataTableModel = null; - - if (calibrationDialolg != null) { - calibrationDialolg.dispose(); - calibrationDialolg = null; - } - - boolean was_server = false; - if (camera != null) { - //camera.removeAllListeners(); - was_server = (server != null); - camera.close(); - camera = null; - server = null; - } - instanceName = null; - renderer.setDevice(null); - - renderer.setShowReticle(false); - renderer.removeOverlays(fitOv); - renderer.removeOverlays(profileOv); - renderer.removeOverlays(userOv); - renderer.clear(); - renderer.resetZoom(); - - boolean changed = !String.valueOf(cameraName).equals(this.cameraName); - this.cameraName = cameraName; - - if (changed || buttonDirect.isSelected()) { - spinnerThreshold.setVisible(false); - spinnerGrThreshold.setVisible(false); - labelGrThreshold.setVisible(false); - spinnerGrScale.setVisible(false); - labelGrScale.setVisible(false); - checkThreshold.setEnabled(false); - checkGoodRegion.setEnabled(false); - } - if (changed) { - checkBackground.setEnabled(false); - if ((devicesInitTask != null) && (devicesInitTask.isAlive())) { - devicesInitTask.interrupt(); - } - if (screen != null) { - screen.close(); - screen = null; - } - if (filter != null) { - filter.close(); - filter = null; - } - } - if (cameraName == null) { - return; - } - - System.out.println("Setting camera: " + cameraName + " [" + (buttonServer.isSelected() ? "server" : "direct") + "]"); - - synchronized (imageBuffer) { - currentFrame = null; - imageBuffer.clear(); - } - - try { - if (buttonServer.isSelected()) { - camera = newServer(); - camera.getConfig().flipHorizontally = false; - camera.getConfig().flipVertically = false; - camera.getConfig().rotation = 0.0; - camera.getConfig().roiX = 0; - camera.getConfig().roiY = 0; - camera.getConfig().roiWidth = -1; - camera.getConfig().roiHeight = -1; - } else { - //camera = new SfCamera(CAMERA_DEVICE_NAME, cameraName); - camera = (ColormapSource) getContext().getClassByName("SfCamera").getConstructor(new Class[]{String.class, String.class}).newInstance(new Object[]{CAMERA_DEVICE_NAME, cameraName}); - } - camera.initialize(); - camera.assertInitialized(); - System.out.println("Camera initialization OK"); - if (server != null) { - //server.start(cameraName, false); - String pipelineName = cameraName + "_sp"; - instanceName = cameraName + "_sp1"; - if (!server.getPipelines().contains(pipelineName)) { - System.out.println("Creating pipeline: " + pipelineName); - HashMap config = new HashMap<>(); - config.put("camera_name", cameraName); - //server.createFromConfig(config, pipelineName); - server.savePipelineConfig(pipelineName, config); - } - server.start(pipelineName, instanceName); - - updateServerControls(); - checkThreshold.setEnabled(true); - checkGoodRegion.setEnabled(true); - } else { - checkThreshold.setSelected(false); - checkGoodRegion.setSelected(false); - if (polling <= 0) { - camera.setMonitored(true); - } else { - camera.setPolling(polling); - } - camera.setBackgroundEnabled(checkBackground.isSelected()); - } - - buttonReticle.setEnabled(camera.getConfig().isCalibrated()); - camera.getConfig().save(); - if (averaging) { - SourceBase source = new ImageAverager(); - renderer.setDevice(source); - } else { - renderer.setDevice(camera); - } - renderer.setAutoScroll(true); - renderer.setMarker(marker); - imageSize = null; - - camera.addListener(new ImageListener() { - @Override - public void onImage(Object o, BufferedImage bi, Data data) { - if (bi != null) { - if ((imageSize == null) || imageSize.width != bi.getWidth() || imageSize.height != bi.getHeight()) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - if ((renderer.getMode() == RendererMode.Zoom) || (renderer.getMode() == RendererMode.Fixed)) { - centralizeRenderer(); - } - checkReticle(); - } - }); - imageSize = new Dimension(bi.getWidth(), bi.getHeight()); - } - renderer.setProfileSize(Math.min(bi.getWidth(), bi.getHeight())); - } - //renderer.setCalibration(camera.getCalibration()); - if (!renderer.isPaused()) { - if (data != null) { - synchronized (imageBuffer) { - currentFrame = new Frame(data); - if (imageBufferLenght >= 1) { - imageBuffer.add(currentFrame); - if (imageBuffer.size() > imageBufferLenght) { - imageBuffer.remove(0); - } - } - } - } - manageFit(bi, data); - manageUserOverlays(bi, data); - } - //updateImageData(); - } - - @Override - public void onError(Object o, Exception ex) { - //System.err.println(ex); - } - }); - - } catch (Exception ex) { - ex.printStackTrace(); - showException(ex); - renderer.clearOverlays(); - updateServerControls(); - if (renderer.getDevice() == null) { - //renderer.setZoom(1.0); - //renderer.setMode(RendererMode.Zoom); - errorOverlay = new Text(renderer.getPenErrorText(), ex.toString(), new Font("Verdana", Font.PLAIN, 12), new Point(20, 20)); - errorOverlay.setFixed(true); - errorOverlay.setAnchor(Overlay.ANCHOR_VIEWPORT_TOP_LEFT); - renderer.addOverlay(errorOverlay); - } - } finally { - //checkReticle(); - onTimer(); - } - onChangeColormap(null); - checkBackground.setEnabled(true); - if (changed) { - comboScreen.setModel(new DefaultComboBoxModel()); comboScreen.setEnabled(false); - comboFilter.setModel(new DefaultComboBoxModel()); comboFilter.setEnabled(false); - if (getCameraType(cameraName).equals("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(); - } - } - - } - - volatile Dimension imageSize; - - void checkReticle() { - if ((renderer.getDevice() != null) && (camera != null) && (camera.getConfig().isCalibrated()) && buttonReticle.isSelected()) { - //renderer.setCalibration(camera.getCalibration()); - renderer.configureReticle(new Dimension(800, 800), 200); - renderer.setShowReticle(true); - } else { - //renderer.setCalibration(null); - renderer.setShowReticle(false); - } - renderer.refresh(); - } - - void checkMarker() { - if (camera != null) { - if (buttonMarker.isSelected()) { - Dimension d = renderer.getImageSize(); - Point p = (d == null) ? new Point(renderer.getWidth() / 2, renderer.getHeight() / 2) : new Point(d.width / 2, d.height / 2); - Overlay ov = null; - marker = new Overlays.Crosshairs(renderer.getPenMarker(), p, new Dimension(100, 100)); - marker.setMovable(true); - marker.setPassive(false); - } else { - marker = null; - } - renderer.setMarker(marker); - } - } - - void updateZoom() { - try { - buttonZoomStretch.setSelected(renderer.getMode() == RendererMode.Stretch); - buttonZoomFit.setSelected(renderer.getMode() == RendererMode.Fit); - if (renderer.getMode() == RendererMode.Fixed) { - buttonZoomNormal.setSelected(true); - } else if (renderer.getMode() == RendererMode.Zoom) { - if (renderer.getZoom() == 1) { - buttonZoomNormal.setSelected(true); - } else if (renderer.getZoom() == 0.5) { - buttonZoom05.setSelected(true); - } else if (renderer.getZoom() == 0.25) { - buttonZoom025.setSelected(true); - } else if (renderer.getZoom() == 2.0) { - buttonZoom2.setSelected(true); - } else { - buttonGroup1.clearSelection(); - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - boolean updatingColormap; - - void updateColormap() { - updatingColormap = true; - try { - if ((camera != null) && (camera instanceof ColormapSource)) { - ColormapSourceConfig config = ((ColormapSource) camera).getConfig(); - comboColormap.setSelectedItem(config.colormap); - if (config.isDefaultColormap()) { - buttonFullRange.setSelected(true); - } else if (config.colormapAutomatic) { - buttonAutomatic.setSelected(true); - } else { - buttonManual.setSelected(true); - } - btFixColormapRange.setVisible(buttonAutomatic.isSelected()); - - //spinnerMin.setVisible(buttonManual.isSelected()); labelMin.setVisible(spinnerMin.isVisible()); - //spinnerMax.setVisible(buttonManual.isSelected()); labelMax.setVisible(spinnerMax.isVisible()); - spinnerMin.setEnabled(buttonManual.isSelected()); - spinnerMax.setEnabled(buttonManual.isSelected()); - //spinnerMin.setValue(Double.isNaN(config.colormapMin) ? 0 : Math.min(Math.max((int) config.colormapMin, 0), 65535)); - //spinnerMax.setValue(Double.isNaN(config.colormapMax) ? 0 : Math.min(Math.max((int) config.colormapMax, 0), 65535)); - if (!Double.isNaN(config.colormapMin)) { - spinnerMin.setValue(Math.min(Math.max((int) config.colormapMin, 0), 65535)); - } - if (!Double.isNaN(config.colormapMax)) { - spinnerMax.setValue(Math.min(Math.max((int) config.colormapMax, 0), 65535)); - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - updatingColormap = false; - } - - boolean updatingServerControls; - - void updateServerControls() { - if (server != null) { - updatingServerControls = true; - try { - checkBackground.setSelected(server.getBackgroundSubtraction()); - Double threshold = (server.getThreshold()); - checkThreshold.setSelected(threshold != null); - spinnerThreshold.setValue((threshold == null) ? 0 : threshold); - Map gr = (server.getGoodRegion()); - checkGoodRegion.setSelected(gr != null); - if (gr != null) { - spinnerGrThreshold.setValue(((Number) gr.get("threshold")).doubleValue()); - spinnerGrScale.setValue(((Number) gr.get("gfscale")).doubleValue()); - } - } catch (Exception ex) { - } - goodRegion = checkGoodRegion.isSelected(); - spinnerThreshold.setVisible(checkThreshold.isSelected()); - spinnerGrThreshold.setVisible(goodRegion); - labelGrThreshold.setVisible(spinnerGrThreshold.isVisible()); - spinnerGrScale.setVisible(goodRegion); - labelGrScale.setVisible(spinnerGrScale.isVisible()); - updatingServerControls = false; - } - } - - boolean isCameraStopped() { - if (server != null) { - if (!server.isStarted()) { - return true; - } - } - return ((camera == null) || (camera.isClosed()) || !buttonStop.isEnabled()); - } - - void updateStop() { - buttonStop.setEnabled(comboCameras.getSelectedItem() != null); - buttonStop.setText(isCameraStopped() ? "Start" : "Stop"); - - } - - @Override - protected void onTimer() { - for (Device dev : new Device[]{screen, filter}) { - if (dev != null) { - dev.request(); - } - } - - textState.setText((camera == null) ? "" : camera.getState().toString()); - buttonArgs.setEnabled(camera != null); - if (App.hasArgument("s")) { - try { - ((Source) getDevice("image")).initialize(); - } catch (IOException ex) { - Logger.getLogger(ScreenPanel.class.getName()).log(Level.SEVERE, null, ex); - } catch (InterruptedException ex) { - Logger.getLogger(ScreenPanel.class.getName()).log(Level.SEVERE, null, ex); - } - } - if (renderer.isPaused() != buttonPause.isSelected()) { - buttonPause.setSelected(renderer.isPaused()); - buttonPauseActionPerformed(null); - } - if (renderer.getShowReticle() != buttonReticle.isSelected()) { - //buttonReticle.setSelected(renderer.getShowReticle()); - } - if ((renderer.getMarker() == null) && buttonMarker.isSelected()) { - buttonMarker.setSelected(false); - } - if (!renderer.isPaused() && (dataTableDialog != null) && (dataTableDialog.isShowing())) { - updateStreamData(); - } - updateZoom(); - updateColormap(); - updateStop(); - buttonSave.setSelected(renderer.isSnapshotDialogVisible()); - checkHistogram.setSelected((histogramDialog != null) && (histogramDialog.isShowing())); - } - - Pen penFit = new Pen(new Color(192, 105, 0), 0); - Pen penCross = new Pen(new Color(192, 105, 0), 0); - - public Frame getCurrentFrame() { - if ((imageBufferLenght > 1) && (renderer.isPaused())) { - int index = ((int) pauseSelection.getValue()) - 1; - synchronized (imageBuffer) { - return (index < imageBuffer.size()) ? imageBuffer.get(index) : null; - } - } - return currentFrame; - } - - Frame getFrame(Data data) { - synchronized (imageBuffer) { - for (Frame f : imageBuffer) { - if (f.data == data) { - return f; - } - } - } - return null; - } - - Overlay[][] getFitOverlays(Data data) { - Overlays.Polyline hgaussian = null; - Overlays.Polyline vgaussian = null; - Overlays.Polyline hprofile = null; - Overlays.Polyline vprofile = null; - Double xMean = null, xSigma = null, xNorm = null, xCom = null, xRms = null; - Double yMean = null, ySigma = null, yNorm = null, yCom = null, yRms = null; - double[] pX = null, pY = null, gX = null, gY = null; - int height = data.getHeight(); - int width = data.getWidth(); - //Double xCom=null, yCom=null; - if (data != null) { - int profileSize = renderer.getProfileSize(); - if ((useServerStats) && (server != null)) { - try { - - ImageData id = getFrame(data); - if (id == null) { - return null; - } - xMean = id.x_fit_mean; - xSigma = id.x_fit_standard_deviation; - yMean = id.y_fit_mean; - ySigma = id.y_fit_standard_deviation; - gX = id.x_fit_gauss_function; - gY = id.y_fit_gauss_function; - pX = id.x_profile; - pY = id.y_profile; - xCom = id.x_center_of_mass; - xRms = id.x_rms; - yCom = id.y_center_of_mass; - yRms = id.y_rms; - - profileSize /= 4; - if (pX != null) { - int[] x = Arr.indexesInt(pX.length); - int[] y = new int[pX.length]; - int[] p = new int[pX.length]; - List l = Arrays.asList((Double[]) Convert.toWrapperArray(pX)); - Double min = Collections.min(l); - Double max = Collections.max(l); - double minPlot = min; - double rangePlot = max - min; - - for (int i = 0; i < x.length; i++) { - if (gX != null) { - y[i] = (int) (height - 1 - (((gX[i] - minPlot) / rangePlot) * profileSize)); - } - p[i] = (int) (height - 1 - (((pX[i] - minPlot) / rangePlot) * profileSize)); - } - - if (goodRegion) { - for (int i = 0; i < x.length; i++) { - y[i] = (Double.isNaN(gX[i])) ? 100000 : y[i]; - } - } - - vgaussian = new Overlays.Polyline(penFit, x, y); - vprofile = new Overlays.Polyline(renderer.getPenProfile(), x, p); - } - - if (pY != null) { - int[] y = Arr.indexesInt(pY.length); - int[] x = new int[pY.length]; - int[] p = new int[pY.length]; - - List l = Arrays.asList((Double[]) Convert.toWrapperArray(pY)); - Double min = Collections.min(l); - Double max = Collections.max(l); - double minPlot = min; - double rangePlot = max - min; - - for (int i = 0; i < x.length; i++) { - if (gY != null) { - x[i] = (int) (((gY[i] - minPlot) / rangePlot) * profileSize); - } - p[i] = (int) (((pY[i] - minPlot) / rangePlot) * profileSize); - } - - if (goodRegion) { - for (int i = 0; i < x.length; i++) { - x[i] = (Double.isNaN(gY[i])) ? -1 : x[i]; - } - } - hgaussian = new Overlays.Polyline(penFit, x, y); - hprofile = new Overlays.Polyline(renderer.getPenProfile(), p, y); - } - } catch (Exception ex) { - System.err.println(ex.getMessage()); - return null; - } - } else { - ArrayProperties properties = data.getProperties(); - double maxPlot = properties.max; - double minPlot = properties.min; - double rangePlot = maxPlot - minPlot; - - if (rangePlot <= 0) { - return null; - } - if (renderer.getCalibration() != null) { - try { - double[] sum = data.integrateVertically(true); - double[] saux = new double[sum.length]; - int[] p = new int[sum.length]; - double[] x_egu = renderer.getCalibration().getAxisX(sum.length); - double[] comRms = getComRms(sum, x_egu); - xCom = comRms[0]; - xRms = comRms[1]; - int[] x = Arr.indexesInt(sum.length); - DescriptiveStatistics stats = new DescriptiveStatistics(sum); - double min = stats.getMin(); - for (int i = 0; i < sum.length; i++) { - saux[i] = sum[i] - min; - } - if (showFit) { - double[] gaussian = fitGaussian(saux, x); - if (gaussian != null) { - if ((gaussian[2] < sum.length * 0.45) - && (gaussian[2] > 2) - && (gaussian[0] > min * 0.03)) { - xNorm = gaussian[0]; - xMean = gaussian[1]; - xSigma = gaussian[2]; - double[] fit = getFitFunction(gaussian, x); - int[] y = new int[x.length]; - for (int i = 0; i < x.length; i++) { - y[i] = (int) (height - 1 - ((((fit[i] + min) / height - minPlot) / rangePlot) * profileSize)); - } - vgaussian = new Overlays.Polyline(penFit, x, y); - } - } - } - if (showProfile) { - for (int i = 0; i < x.length; i++) { - p[i] = (int) (height - 1 - (((sum[i] / height - minPlot) / rangePlot) * profileSize)); - } - vprofile = new Overlays.Polyline(renderer.getPenProfile(), x, p); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - - try { - double[] sum = data.integrateHorizontally(true); - double[] saux = new double[sum.length]; - int[] p = new int[sum.length]; - double[] y_egu = renderer.getCalibration().getAxisY(sum.length); - double[] comRms = getComRms(sum, y_egu); - yCom = comRms[0]; - yRms = comRms[1]; - int[] x = Arr.indexesInt(sum.length); - DescriptiveStatistics stats = new DescriptiveStatistics(sum); - double min = stats.getMin(); - for (int i = 0; i < sum.length; i++) { - saux[i] = sum[i] - min; - } - - if (showFit) { - double[] gaussian = fitGaussian(saux, x); - if (gaussian != null) { - //Only aknowledge beam fully inside the image and peak over 3% of min - if ((gaussian[2] < sum.length * 0.45) - && (gaussian[2] > 2) - && (gaussian[0] > min * 0.03)) { - yNorm = gaussian[0]; - yMean = gaussian[1]; - ySigma = gaussian[2]; - double[] fit = getFitFunction(gaussian, x); - - int[] y = new int[x.length]; - for (int i = 0; i < x.length; i++) { - y[i] = (int) ((((fit[i] + min) / width - minPlot) / rangePlot) * profileSize); - } - hgaussian = new Overlays.Polyline(penFit, y, x); - } - } - } - if (showProfile) { - for (int i = 0; i < x.length; i++) { - p[i] = (int) (((sum[i] / width - minPlot) / rangePlot) * profileSize); - } - hprofile = new Overlays.Polyline(renderer.getPenProfile(), p, x); - } - - } catch (Exception ex) { - ex.printStackTrace(); - } - if (xSigma != null) { - xSigma *= renderer.getCalibration().getScaleX(); - } - if (ySigma != null) { - ySigma *= renderer.getCalibration().getScaleY(); - } - if (xMean != null) { - xMean = data.getX((int) Math.round(xMean)); - } - if (yMean != null) { - yMean = data.getY((int) Math.round(yMean)); - } - } - } - final String units = (renderer.getCalibration() != null) ? "\u00B5m" : "px"; - final String fmt = "%7.1f" + units; - Overlays.Text textCom = null; - Overlay[] pOv = null, fOv = null; - Point textPosition = new Point(12, 20); - if (showProfile) { - if ((xCom != null) && (yCom != null)) { - String text = String.format("com x: m=" + fmt + " \u03C3=" + fmt + "\ncom y: m=" + fmt + " \u03C3=" + fmt, xCom, xRms, yCom, yRms); - textCom = new Overlays.Text(renderer.getPenProfile(), text, new Font(Font.MONOSPACED, 0, 14), textPosition); - textCom.setFixed(true); - textCom.setAnchor(Overlay.ANCHOR_VIEWPORT_TOP_LEFT); - } - pOv = new Overlay[]{hprofile, vprofile, textCom}; - } - if (showFit) { - Overlays.Crosshairs cross = null; - Overlays.Text textFit = null; - if ((xMean != null) && (yMean != null)) { - String text = String.format("fit x: m=" + fmt + " \u03C3=" + fmt + "\nfit y: m=" + fmt + " \u03C3=" + fmt, xMean, xSigma, yMean, ySigma); - textFit = new Overlays.Text(penFit, text, new Font(Font.MONOSPACED, 0, 14), showProfile ? new Point(12, 54) : textPosition); - textFit.setFixed(true); - textFit.setAnchor(Overlay.ANCHOR_VIEWPORT_TOP_LEFT); - Point center = new Point(xMean.intValue(), yMean.intValue()); - if (renderer.getCalibration() != null) { - center = renderer.getCalibration().convertToImagePosition(new PointDouble(xMean, yMean)); - xSigma /= renderer.getCalibration().getScaleX(); - ySigma /= renderer.getCalibration().getScaleY(); - } - cross = new Overlays.Crosshairs(penCross, center, new Dimension(Math.abs(2 * xSigma.intValue()), 2 * Math.abs(ySigma.intValue()))); - } - fOv = new Overlay[]{hgaussian, vgaussian, cross, textFit}; - - if (goodRegion) { - try { - double[] x = getServerDoubleArray("gr_x_axis"); - double[] y = getServerDoubleArray("gr_y_axis"); - double x1 = x[0]; - double x2 = x[x.length - 1]; - double y1 = y[0]; - double y2 = y[y.length - 1]; - Overlays.Rect goodRegionOv = new Overlays.Rect(new Pen(penFit.getColor(), 0, Pen.LineStyle.dotted)); - goodRegionOv.setCalibration(renderer.getCalibration()); - goodRegionOv.setAbsolutePosition(new PointDouble(x1, y1)); - goodRegionOv.setAbsoluteSize(new DimensionDouble(x2 - x1, y2 - y1)); - fOv = Arr.append(fOv, goodRegionOv); - } catch (Exception ex) { - } - } - - } - return new Overlay[][]{pOv, fOv}; - } - return null; - } - - class UserOverlay { - - String name; - Overlay obj; - String[] channels; - } - ArrayList userOverlayConfig; - - void parseUserOverlays() { - Properties userOverlays = new Properties(); - userOverlayConfig = new ArrayList<>(); - if (userOverlaysConfigFile != null) { - try { - try (FileInputStream in = new FileInputStream(getContext().getSetup().expandPath(userOverlaysConfigFile))) { - userOverlays.load(in); - - for (String name : userOverlays.stringPropertyNames()) { - String val = userOverlays.getProperty(name); - try { - UserOverlay uo = new UserOverlay(); - uo.name = name; - String type = val.substring(0, val.indexOf("(")).trim(); - String pars = val.substring(val.indexOf("(") + 1, val.lastIndexOf(")")).trim(); - String[] tokens = pars.split(","); - for (int i = 0; i < tokens.length; i++) { - tokens[i] = tokens[i].trim(); - } - Color color = Color.GRAY; - try { - color = (Color) Color.class.getField(tokens[tokens.length - 1].toUpperCase()).get(null); - } catch (Exception ex) { - } - Pen pen = new Pen(color); - try { - String[] penTokens = tokens[tokens.length - 1].split(":"); - color = (Color) Color.class.getField(penTokens[0].toUpperCase()).get(null); - int width = Integer.valueOf(penTokens[1]); - Pen.LineStyle style = Pen.LineStyle.valueOf(penTokens[2]); - pen = new Pen(color, width, style); - } catch (Exception ex) { - } - switch (type) { - case "Point": - uo.obj = new Overlays.Crosshairs(); - uo.obj.setSize(new Dimension(Integer.valueOf(tokens[2]), Integer.valueOf(tokens[3]))); - break; - case "Line": - uo.obj = new Overlays.Line(); - break; - case "Arrow": - uo.obj = new Overlays.Arrow(); - break; - case "Rect": - uo.obj = new Overlays.Rect(); - break; - case "Ellipse": - uo.obj = new Overlays.Ellipse(); - break; - case "Polyline": - uo.obj = new Overlays.Polyline(); - break; - } - if (type.equals("Polyline") || type.equals("Point")) { - uo.channels = new String[]{tokens[0], tokens[1]}; - } else { - uo.channels = new String[]{tokens[0], tokens[1], tokens[2], tokens[3]}; - } - uo.obj.setPen(pen); - userOverlayConfig.add(uo); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - } - - Overlay[] getUserOverlays(Data data) { - ArrayList ret = new ArrayList<>(); - if (server != null) { - for (UserOverlay uo : userOverlayConfig) { - try { - Overlay ov = uo.obj; - //Overlay ov = (Overlay)uo.cls.newInstance(); - ov.setCalibration(renderer.getCalibration()); - boolean valid = false; - if (ov instanceof Overlays.Polyline) { - double[] x = (uo.channels[0].equals("null")) ? null : getServerDoubleArray(uo.channels[0]); - double[] y = (uo.channels[1].equals("null")) ? null : getServerDoubleArray(uo.channels[1]); - if ((x != null) || (y != null)) { - if (x == null) { - x = (renderer.getCalibration() == null) ? Arr.indexesDouble(y.length) : renderer.getCalibration().getAxisX(y.length); - } - if (y == null) { - y = (renderer.getCalibration() == null) ? Arr.indexesDouble(x.length) : renderer.getCalibration().getAxisY(x.length); - } - ((Overlays.Polyline) ov).updateAbsolute(x, y); - valid = true; - } - } else { - Double x = getServerDouble(uo.channels[0]); - Double y = getServerDouble(uo.channels[1]); - if ((x != null) && (y != null)) { - PointDouble position = new PointDouble(x, y); - ov.setAbsolutePosition(position); - if (!(ov instanceof Overlays.Crosshairs)) { - Double x2 = getServerDouble(uo.channels[2]); - Double y2 = getServerDouble(uo.channels[3]); - if ((x != null) && (y != null)) { - DimensionDouble size = new DimensionDouble(x2 - position.x, y2 - position.y); - ov.setAbsoluteSize(size); - valid = true; - } - } else { - valid = true; - } - } - } - if (valid) { - ret.add(ov); - } - } catch (Exception ex) { - //ex.printStackTrace(); - } - } - } - return ret.toArray(new Overlay[0]); - } - - double[] getComRms(double[] arr, double[] x) { - if (arr != null) { - double xmd = 0; - double xmd2 = 0; - double total = 0; - for (int i = 0; i < arr.length; i++) { - double v = (arr[i] * x[i]); - xmd += v; - xmd2 += (v * x[i]); - total += arr[i]; - } - if (total > 0) { - double com = xmd / total; - double com2 = xmd2 / total; - double rms = Math.sqrt(Math.abs(com2 - com * com)); - return new double[]{com, rms}; - } - } - return new double[]{Double.NaN, Double.NaN}; - } - - double[] fitGaussianScript(int[] y, int[] x) { - ScriptManager sm = Context.getInstance().getScriptManager(); - ArrayProperties pY = ArrayProperties.get(y); - sm.setVar("y", y); - sm.setVar("x", x); - InterpreterResult r = sm.eval("r = fit_gaussians(y, x, [" + pY.maxIndex + ",])"); - if (r.exception != null) { - r.exception.printStackTrace(); - } else { - List ret = (List) sm.getVar("r"); - if ((ret != null) && (ret.size() == 1) && (ret.get(0) instanceof List) && (((List) (ret.get(0))).size() == 3)) { - double norm = (Double) ((List) ret.get(0)).get(0); - double mean = (Double) ((List) ret.get(0)).get(1); - double sigma = (Double) ((List) ret.get(0)).get(2); - return new double[]{norm, mean, sigma}; - } - } - return null; - } - - double[] fitGaussian(double[] y, int[] x) { - try { - ArrayProperties pY = ArrayProperties.get(y); - GaussianCurveFitter fitter = GaussianCurveFitter.create().withStartPoint(new double[]{(pY.max - pY.min) / 2, x[pY.maxIndex], 1.0}).withMaxIterations(1000); - ArrayList values = new ArrayList<>(); - for (int i = 0; i < y.length; i++) { - values.add(new WeightedObservedPoint(1.0, x[i], y[i])); - } - return fitter.fit(values); - } catch (Exception ex) { - return null; - } - - } - - double[] getFitFunction(double[] pars, int[] x) { - double[] fit = new double[x.length]; - Gaussian g = new Gaussian(pars[0], pars[1], pars[2]); - for (int i = 0; i < x.length; i++) { - fit[i] = g.value(x[i]); - } - return fit; - } - - void setHistogramVisible(boolean value) { - if (value) { - if ((histogramDialog == null) || (!histogramDialog.isShowing())) { - Histogram histogram = new Histogram(true); - histogram.setRenderer(renderer); - histogramDialog = SwingUtils.showDialog(SwingUtils.getWindow(renderer), "Histogram", null, histogram); - renderer.refresh(); - } - } else { - if (histogramDialog != null) { - histogramDialog.setVisible(false); - histogramDialog = null; - } - } - } - - void setLaserState(boolean value) throws Exception { - System.out.println("Setting laser state: " + value); - Epics.putq("SIN-TIMAST-TMA:Beam-Las-Delay-Sel", value ? 0 : 1); - Epics.putq("SIN-TIMAST-TMA:Beam-Apply-Cmd.PROC", 1); - Thread.sleep(3000); - } - - boolean getLaserState() throws Exception { - return (Epics.get("SIN-TIMAST-TMA:Beam-Las-Delay-Sel", Integer.class) == 0); - } - - void elog(String logbook, String title, String message, String[] attachments) throws Exception { - String domain = ""; - String category = "Info"; - String entry = ""; - StringBuffer cmd = new StringBuffer(); - - cmd.append("G_CS_ELOG_add -l \"").append(logbook).append("\" "); - cmd.append("-a \"Author=ScreenPanel\" "); - cmd.append("-a \"Type=pshell\" "); - cmd.append("-a \"Entry=").append(entry).append("\" "); - cmd.append("-a \"Title=").append(title).append("\" "); - cmd.append("-a \"Category=").append(category).append("\" "); - cmd.append("-a \"Domain=").append(domain).append("\" "); - for (String attachment : attachments) { - cmd.append("-f \"").append(attachment).append("\" "); - } - cmd.append("-n 1 "); - cmd.append("\"").append(message).append("\" "); - System.out.println(cmd.toString()); - - final Process process = Runtime.getRuntime().exec(new String[]{"bash", "-c", cmd.toString()}); - new Thread(() -> { - try { - process.waitFor(); - int bytes = process.getInputStream().available(); - byte[] arr = new byte[bytes]; - process.getInputStream().read(arr, 0, bytes); - System.out.println(new String(arr)); - bytes = process.getErrorStream().available(); - arr = new byte[bytes]; - process.getErrorStream().read(arr, 0, bytes); - System.err.println(new String(arr)); - } catch (Exception ex) { - System.err.println(ex); - } - }).start(); - } - - void centralizeRenderer() { - Point center = null; - Dimension size = renderer.getImageSize(); - double zoom = (renderer.getMode() == RendererMode.Fixed) ? 1.0 : renderer.getZoom(); - if (renderer.getCalibration() != null) { - center = renderer.getCalibration().getCenter(); - } else if (size != null) { - center = new Point(size.width / 2, size.height / 2); - } - if (center != null) { - Point topleft = new Point(Math.max((int) (center.x - renderer.getWidth() / 2 / zoom), 0), - Math.max((int) (center.y - renderer.getHeight() / 2 / zoom), 0)); - renderer.setViewPosition(topleft); - } - } - - void updatePause() { - int index = ((int) pauseSelection.getValue()) - 1; - synchronized (imageBuffer) { - if (index < imageBuffer.size()) { - Data data = imageBuffer.get(index).data; - BufferedImage image = camera.generateImage(data); - renderer.setImage(renderer.getOrigin(), image, data); - imageBufferOverlay.update(Chrono.getTimeStr(data.getTimestamp(), "HH:mm:ss.SSS")); - manageFit(image, data); - manageUserOverlays(image, data); - } - } - } - - /* - void writeFrameMetadata(String path, Frame frame) throws Exception { - getContext().getDataManager().setAttribute("/", "Camera", String.valueOf(cameraName)); - getContext().getDataManager().setAttribute("/", "Screen", String.valueOf(valueScreen.getLabel().getText())); - getContext().getDataManager().setAttribute("/", "Filter", String.valueOf(valueFilter.getLabel().getText())); - Calibration cal = renderer.getCalibration(); - getContext().getDataManager().setAttribute("/", "Calibration", cal == null ? new double[]{1, 1, 0, 0} - : new double[]{cal.getScaleX(), cal.getScaleY(), cal.getOffsetX(), cal.getOffsetY()}); - getContext().getDataManager().setAttribute(path, "Timestamp", Chrono.getTimeStr(frame.data.getTimestamp(), "HH:mm:ss.SSS")); - if (server != null) { - try { - getContext().getDataManager().setAttribute("/", "ROI", server.getRoi()); - } catch (Exception ex) { - getContext().getDataManager().setAttribute("/", "ROI", new int[]{0, 0, -1, -1}); - } - if (frame != null) { - for (Field f : ImageData.class.getFields()) { - Object value = f.get(frame); - getContext().getDataManager().setAttribute(path, f.getName(), (value == null) ? Double.NaN : value); - } - } - for (String name : new String[]{"x_axis", "y_axis", "gr_x_axis", "gr_y_axis"}) { - double[] val = getServerDoubleArray(name); - getContext().getDataManager().setAttribute("/", "GoodRegion", goodRegion); - if (val != null) { - getContext().getDataManager().setAttribute("/", name, val); - } - } - } - } - */ - - void saveSnapshot() throws Exception { - /* - getContext().setExecutionPars("snapshot"); - String path = "/data"; - String snapshotFile = null; - synchronized (imageBuffer) { - Frame id = getCurrentFrame(); - if (id == null) { - throw new Exception("No current image"); - } - Object data = id.data.getMatrix(); - getContext().getDataManager().setDataset(path, data, id.data.isUnsigned()); - writeFrameMetadata(path, id); - getContext().getDataManager().closeOutput(); - //Enforce the same timestamp to data & image files. - //snapshotFile = getContext().getSetup().expandPath("{images}/{date}_{time}_snapshot.png", getContext().getExecutionPars().getStart()); - snapshotFile = getContext().getExecutionPars().getPath() + ".png"; - //renderer.saveSnapshot(snapshotFile, "png", true); - ImageBuffer.saveImage(SwingUtils.createImage(renderer), snapshotFile, "png"); - } - */ - String snapshotFile = null; - synchronized (imageBuffer) { - Frame frame = getCurrentFrame(); - if (frame == null) { - throw new Exception("No current image"); - } - ArrayList frames = new ArrayList<>(); - frames.add(frame); - this.saveFrames("camera_snapshot", frames); - - //Enforce the same timestamp to data & image files. - //snapshotFile = getContext().getSetup().expandPath("{images}/{date}_{time}_snapshot.png", getContext().getExecutionPars().getStart()); - snapshotFile = getContext().getExecutionPars().getPath() + ".png"; - //renderer.saveSnapshot(snapshotFile, "png", true); - ImageBuffer.saveImage(SwingUtils.createImage(renderer), snapshotFile, "png"); - } - - 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(getContext().getExecutionPars().getPath()), c); - - if (SwingUtils.showOption(getTopLevel(), "Success", panel, OptionType.OkCancel) == OptionResult.Yes) { - StringBuilder message = new StringBuilder(); - message.append("Camera: ").append(cameraName).append(" ("). - append((server != null) ? "server" : "direct").append(")").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(getContext().getExecutionPars().getPath()).append("\n"); - message.append("Comment: ").append(textComment.getText()).append("\n"); - if ((fitOv != null) && (fitOv.length > 5)) { - Overlays.Text text = (Overlays.Text) fitOv[5]; - message.append(text.getText()).append("\n"); - } - elog((String) comboLogbook.getSelectedItem(), "ScreenPanel Snapshot", message.toString(), new String[]{snapshotFile}); - } - //SwingUtils.showMessage(getTopLevel(), "Success", "Generated data file:\n" + getContext().getExecutionPars().getPath(), 5000); - //elog("SwissFEL commissioning data", "ScreenPanel Snapshot", message.toString(), new String[]{snapshotFile}); - } - - - - public static String getCameraType(String name){ - for (String s : new String[]{"LCAM"}){ - if (name.contains(s)){ - return "LCAM"; - } - } - for (String s : new String[]{"DSCR", "DSRM", "DLAC"}){ - if (name.contains(s)){ - return "ELECTRONS"; - } - } - for (String s : new String[]{"PROF", "PPRM", "PSSS", "PSCR", "PSRD"}){ - if (name.contains(s)){ - return "PHOTONICS"; - } - } - return "UNKNOWN"; - } - - public Map getProcessingParameters(StreamValue value) throws IOException { - return (Map) JsonSerializer.decode(value.getValue("processing_parameters").toString(), Map.class); - } - - void saveFrames(String name, ArrayList frames) throws IOException{ - ArrayList values = new ArrayList<>(); - for (Frame frame : frames){ - values.add(frame.cache); - } - saveImages(name, values); - } - - void saveImages(String name, ArrayList images) throws IOException{ - int depth = images.size(); - if (depth == 0){ - return; - } - StreamValue first = images.get(0); - String pathRoot = "/camera1/"; - String pathImage = pathRoot + "image"; - String pathPid = pathRoot + "pulse_id"; - String pathTimestampStr = pathRoot + "timestamp_str"; - Map processingPars = getProcessingParameters(first); - System.out.println(processingPars); - String camera = (String) processingPars.get("camera_name"); - String type = getCameraType(camera); - - int width = ((Number)first.getValue("width")).intValue(); - int height = ((Number)first.getValue("height")).intValue(); - Class dataType = first.getValue("image").getClass().getComponentType(); - - getContext().setExecutionPars(name); - DataManager dm = getContext().getDataManager(); - - //Create tables - dm.createDataset(pathImage, dataType, new int[]{depth, height, width}); - dm.createDataset(pathPid, Long.class, new int[]{depth}); - dm.createDataset(pathTimestampStr, String.class, new int[]{depth}); - for (String id : first.getIdentifiers()){ - Object val = first.getValue(id); - if (id.equals("image")){ - } else if (id.equals("processing_parameters")){ - Map pars = getProcessingParameters(first); - for (String key : pars.keySet()){ - if ((pars.get(key) != null) && (pars.get(key) instanceof Map)){ - for (Object k : ((Map)pars.get(key)).keySet()){ - Object v = ((Map)pars.get(key)).get(k); - dm.setAttribute(pathImage, key + " " + k, (v == null)? "" : v); - } - } else { - dm.setAttribute(pathImage, key, (pars.get(key) == null)? "" : pars.get(key)); - } - } - } else if (val.getClass().isArray()) { - dm.createDataset(pathRoot + id, Double.class, new int[]{depth, Array.getLength(val)}); - } else { - dm.createDataset(pathRoot + id, val.getClass(), new int[]{depth}); - } - } - - //Add metadata - dm.setAttribute(pathRoot,"Camera", camera); - dm.setAttribute(pathRoot,"Images", depth); - dm.setAttribute(pathRoot,"Interval", -1); - dm.setAttribute(pathRoot,"Type", type); - if (type.equals("ELECTRONS")){ - dm.setAttribute(pathRoot,"Screen", String.valueOf(valueScreen.getLabel().getText())); - dm.setAttribute(pathRoot,"Filter", String.valueOf(valueFilter.getLabel().getText())); - } - - //Save data - for (int index=0; index x = new ArrayList<>(); - ArrayList y = new ArrayList<>(); - synchronized (imageBuffer) { - for (int i = 0; i < imageBuffer.size(); i++) { - Frame frame = imageBuffer.get(i); - String path = "/data_" + i; - getContext().getDataManager().setDataset(path, frame.data.getMatrix(), frame.data.isUnsigned()); - writeFrameMetadata(path, frame); - x.add(frame.x_fit_mean); - y.add(frame.y_fit_mean); - } - } - DescStatsDouble xs = new DescStatsDouble(x.toArray(new Double[0]), -1); - DescStatsDouble ys = new DescStatsDouble(y.toArray(new Double[0]), -1); - - getContext().getDataManager().closeOutput(); - ) - */ - synchronized (imageBuffer) { - saveFrames("camera_stack", imageBuffer); - } - SwingUtils.showMessage(getTopLevel(), "Success", "Generated data file:\n" + getContext().getExecutionPars().getPath(), 5000); - } - - StandardDialog calibrationDialolg; - - void calibrate() throws Exception { - if (server != null) { - server.resetRoi(); - calibrationDialolg = (StandardDialog) getContext().getClassByName("CameraCalibrationDialog").getConstructors()[0].newInstance(new Object[]{getTopLevel(), server.getCurrentCamera(), renderer}); - SwingUtils.centerComponent(getTopLevel(), calibrationDialolg); - calibrationDialolg.setVisible(true); - calibrationDialolg.setListener(new StandardDialogListener() { - @Override - public void onWindowOpened(StandardDialog dlg) { - } - - @Override - public void onWindowClosed(StandardDialog dlg, boolean accepted) { - if (accepted) { - //comboCamerasActionPerformed(null); - } - } - }); - } - } - - StandardDialog dataTableDialog; - DefaultTableModel dataTableModel; - - void showStreamData() { - dataTableModel = null; - if (server != null) { - - if ((dataTableDialog != null) && (dataTableDialog.isShowing())) { - SwingUtils.centerComponent(getTopLevel(), dataTableDialog); - dataTableDialog.requestFocus(); - return; - } - //String msg = String.join("\n", ids); - //SwingUtils.showMessage(getTopLevel(), "Image Data", msg); - dataTableModel = new DefaultTableModel(new Object[0][2], new String[]{"Name", "Value"}) { - public Class getColumnClass(int columnIndex) { - return String.class; - } - - public boolean isCellEditable(int rowIndex, int columnIndex) { - return false; - } - }; - updateStreamData(); - StreamValue val = server.getStream().take(); - JTable dataTable = new JTable(dataTableModel); - dataTable.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); - dataTable.setCellSelectionEnabled(true); - dataTable.getTableHeader().setReorderingAllowed(false); - dataTable.getTableHeader().setResizingAllowed(true); - dataTableDialog = new StandardDialog(getTopLevel(), "Image Data", false); - dataTableDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); - JScrollPane scrollPane = new JScrollPane(); - scrollPane.setViewportView(dataTable); - scrollPane.setPreferredSize(new Dimension(300, 400)); - dataTableDialog.setContentPane(scrollPane); - dataTableDialog.pack(); - SwingUtils.centerComponent(getTopLevel(), dataTableDialog); - dataTableDialog.setVisible(true); - dataTableDialog.addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - dataTableModel = null; - } - }); - } - } - - void updateStreamData() { - if ((dataTableModel != null) && (server != null)) { - StreamValue value = server.getValue(); - - List ids = (value == null) ? new ArrayList<>() : new ArrayList(value.getIdentifiers()); - if (ids.size() + 2 != dataTableModel.getRowCount()) { - dataTableModel.setNumRows(0); - try { - dataTableModel.addRow(new Object[]{"Locator", server.getUrl() + "/" + ((value == null) ? instanceName : server.getCurrentInstance())}); - } catch (Exception ex) { - dataTableModel.addRow(new Object[]{"Locator", ex.getMessage()}); - } - try { - dataTableModel.addRow(new Object[]{"Stream", server.getStreamAddress()}); - } catch (Exception ex) { - dataTableModel.addRow(new Object[]{"Stream", ex.getMessage()}); - } - Collections.sort(ids); - for (String id : ids) { - dataTableModel.addRow(new Object[]{id, ""}); - } - } - for (int i = 2; i < dataTableModel.getRowCount(); i++) { - String id = String.valueOf(dataTableModel.getValueAt(i, 0)); - Object obj = server.getValue(id); - if (obj != null) { - if (obj.getClass().isArray()) { - obj = obj.getClass().getComponentType().getSimpleName() + "[" + Array.getLength(obj) + "]"; - } else if (obj instanceof Double) { - obj = Convert.roundDouble((Double) obj, 1); - } else if (obj instanceof Float) { - obj = Convert.roundDouble((Float) obj, 1); - } - } - dataTableModel.setValueAt(String.valueOf(obj), i, 1); - } - } - } - - //////// - @SuppressWarnings("unchecked") - // //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(); - jPanel1 = new javax.swing.JPanel(); - jPanel7 = new javax.swing.JPanel(); - buttonMarker = new javax.swing.JToggleButton(); - buttonGrabBackground = new javax.swing.JButton(); - buttonSave = new javax.swing.JToggleButton(); - buttonFit = new javax.swing.JToggleButton(); - buttonReticle = new javax.swing.JToggleButton(); - buttonPause = new javax.swing.JToggleButton(); - buttonProfile = new javax.swing.JToggleButton(); - jPanel6 = new javax.swing.JPanel(); - textState = new javax.swing.JTextField(); - jLabel2 = new javax.swing.JLabel(); - comboCameras = new javax.swing.JComboBox(); - buttonConfig = new javax.swing.JButton(); - jLabel1 = new javax.swing.JLabel(); - buttonArgs = new javax.swing.JButton(); - buttonStop = new javax.swing.JButton(); - renderer = new ch.psi.pshell.imaging.Renderer(); - jPanel4 = new javax.swing.JPanel(); - jPanel3 = new javax.swing.JPanel(); - buttonZoomFit = new javax.swing.JRadioButton(); - buttonZoomStretch = new javax.swing.JRadioButton(); - buttonZoomNormal = new javax.swing.JRadioButton(); - buttonZoom025 = new javax.swing.JRadioButton(); - buttonZoom05 = new javax.swing.JRadioButton(); - buttonZoom2 = new javax.swing.JRadioButton(); - jPanel2 = new javax.swing.JPanel(); - checkHistogram = new javax.swing.JCheckBox(); - comboColormap = new javax.swing.JComboBox(); - jLabel3 = new javax.swing.JLabel(); - jLabel4 = new javax.swing.JLabel(); - buttonFullRange = new javax.swing.JRadioButton(); - buttonManual = new javax.swing.JRadioButton(); - buttonAutomatic = new javax.swing.JRadioButton(); - labelMin = new javax.swing.JLabel(); - spinnerMin = new javax.swing.JSpinner(); - spinnerMax = new javax.swing.JSpinner(); - labelMax = new javax.swing.JLabel(); - btFixColormapRange = new javax.swing.JButton(); - jPanel5 = new javax.swing.JPanel(); - buttonServer = new javax.swing.JRadioButton(); - buttonDirect = new javax.swing.JRadioButton(); - panelScreen = new javax.swing.JPanel(); - valueScreen = new ch.psi.pshell.swing.DeviceValuePanel(); - comboScreen = new javax.swing.JComboBox(); - panelScreen1 = new javax.swing.JPanel(); - valueFilter = new ch.psi.pshell.swing.DeviceValuePanel(); - comboFilter = new javax.swing.JComboBox(); - pauseSelection = new ch.psi.pshell.swing.ValueSelection(); - panelScreen2 = new javax.swing.JPanel(); - checkThreshold = new javax.swing.JCheckBox(); - spinnerThreshold = new javax.swing.JSpinner(); - checkBackground = new javax.swing.JCheckBox(); - checkGoodRegion = new javax.swing.JCheckBox(); - spinnerGrScale = new javax.swing.JSpinner(); - spinnerGrThreshold = new javax.swing.JSpinner(); - labelGrThreshold = new javax.swing.JLabel(); - labelGrScale = new javax.swing.JLabel(); - - setPreferredSize(new java.awt.Dimension(873, 600)); - - buttonMarker.setText("Marker"); - buttonMarker.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonMarkerActionPerformed(evt); - } - }); - - buttonGrabBackground.setText("Grab Background"); - buttonGrabBackground.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonGrabBackgroundActionPerformed(evt); - } - }); - - buttonSave.setText("Save Snapshot"); - buttonSave.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonSaveActionPerformed(evt); - } - }); - - buttonFit.setSelected(true); - buttonFit.setText("Fit"); - buttonFit.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonFitActionPerformed(evt); - } - }); - - buttonReticle.setSelected(true); - buttonReticle.setText("Reticle"); - buttonReticle.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonReticleActionPerformed(evt); - } - }); - - buttonPause.setText("Pause"); - buttonPause.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonPauseActionPerformed(evt); - } - }); - - buttonProfile.setSelected(true); - buttonProfile.setText("Profile"); - buttonProfile.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonProfileActionPerformed(evt); - } - }); - - javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7); - jPanel7.setLayout(jPanel7Layout); - jPanel7Layout.setHorizontalGroup( - jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel7Layout.createSequentialGroup() - .addGap(0, 0, 0) - .addComponent(buttonPause) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonMarker) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonProfile) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonFit) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonReticle) - .addGap(18, 18, Short.MAX_VALUE) - .addComponent(buttonGrabBackground) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonSave) - .addGap(0, 0, 0)) - ); - - jPanel7Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonFit, buttonMarker, buttonPause, buttonProfile, buttonReticle}); - - jPanel7Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonGrabBackground, buttonSave}); - - jPanel7Layout.setVerticalGroup( - jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel7Layout.createSequentialGroup() - .addGap(0, 0, 0) - .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(buttonPause) - .addComponent(buttonFit) - .addComponent(buttonMarker) - .addComponent(buttonSave) - .addComponent(buttonReticle) - .addComponent(buttonGrabBackground) - .addComponent(buttonProfile)) - .addGap(0, 0, 0)) - ); - - textState.setEditable(false); - textState.setHorizontalAlignment(javax.swing.JTextField.CENTER); - textState.setDisabledTextColor(new java.awt.Color(0, 0, 0)); - textState.setEnabled(false); - - jLabel2.setText("State:"); - - comboCameras.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N - comboCameras.setMaximumRowCount(30); - comboCameras.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - comboCamerasActionPerformed(evt); - } - }); - - buttonConfig.setText("Config"); - buttonConfig.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonConfigActionPerformed(evt); - } - }); - - jLabel1.setText("Camera:"); - - buttonArgs.setText("Setup"); - buttonArgs.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonArgsActionPerformed(evt); - } - }); - - buttonStop.setText("Stop"); - buttonStop.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonStopActionPerformed(evt); - } - }); - - javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); - jPanel6.setLayout(jPanel6Layout); - jPanel6Layout.setHorizontalGroup( - jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel6Layout.createSequentialGroup() - .addGap(0, 0, 0) - .addComponent(jLabel1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(comboCameras, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonArgs) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonConfig) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(buttonStop) - .addGap(18, 18, 18) - .addComponent(jLabel2) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(textState, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, 0)) - ); - - jPanel6Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonArgs, buttonConfig, buttonStop}); - - jPanel6Layout.setVerticalGroup( - jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel6Layout.createSequentialGroup() - .addGap(0, 0, 0) - .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel1) - .addComponent(comboCameras, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel2) - .addComponent(textState, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(buttonArgs) - .addComponent(buttonConfig) - .addComponent(buttonStop)) - .addGap(0, 0, 0)) - ); - - jPanel6Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {comboCameras, textState}); - - javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); - jPanel1.setLayout(jPanel1Layout); - jPanel1Layout.setHorizontalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(renderer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) - ); - jPanel1Layout.setVerticalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(renderer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) - ); - - jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Zoom")); - - buttonGroup1.add(buttonZoomFit); - buttonZoomFit.setText("Fit"); - buttonZoomFit.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonZoomFitActionPerformed(evt); - } - }); - - buttonGroup1.add(buttonZoomStretch); - buttonZoomStretch.setText("Stretch"); - buttonZoomStretch.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonZoomStretchActionPerformed(evt); - } - }); - - buttonGroup1.add(buttonZoomNormal); - buttonZoomNormal.setText("Normal"); - buttonZoomNormal.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonZoomNormalActionPerformed(evt); - } - }); - - buttonGroup1.add(buttonZoom025); - buttonZoom025.setText("1/4"); - buttonZoom025.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonZoom025ActionPerformed(evt); - } - }); - - buttonGroup1.add(buttonZoom05); - buttonZoom05.setText("1/2"); - buttonZoom05.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonZoom05ActionPerformed(evt); - } - }); - - buttonGroup1.add(buttonZoom2); - buttonZoom2.setText("2"); - buttonZoom2.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonZoom2ActionPerformed(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(buttonZoomFit) - .addComponent(buttonZoomNormal) - .addComponent(buttonZoomStretch)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(buttonZoom025) - .addComponent(buttonZoom05) - .addComponent(buttonZoom2)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - jPanel3Layout.setVerticalGroup( - jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addGap(4, 4, 4) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) - .addComponent(buttonZoomNormal) - .addComponent(buttonZoom025)) - .addGap(0, 0, 0) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) - .addComponent(buttonZoomFit) - .addComponent(buttonZoom05)) - .addGap(0, 0, 0) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) - .addComponent(buttonZoomStretch) - .addComponent(buttonZoom2)) - .addContainerGap()) - ); - - jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Colormap")); - - checkHistogram.setText("Histogram"); - checkHistogram.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - checkHistogramActionPerformed(evt); - } - }); - - comboColormap.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - onChangeColormap(evt); - } - }); - - jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); - jLabel3.setText("Type:"); - - jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); - jLabel4.setText("Range:"); - - buttonGroup3.add(buttonFullRange); - buttonFullRange.setText("Full"); - buttonFullRange.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - onChangeColormap(evt); - } - }); - - buttonGroup3.add(buttonManual); - buttonManual.setText("Manual"); - buttonManual.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - onChangeColormap(evt); - } - }); - - buttonGroup3.add(buttonAutomatic); - buttonAutomatic.setText("Automatic"); - buttonAutomatic.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - onChangeColormap(evt); - } - }); - - labelMin.setText("Min:"); - - spinnerMin.setModel(new javax.swing.SpinnerNumberModel(0, 0, 65535, 1)); - spinnerMin.setEnabled(false); - spinnerMin.setPreferredSize(new java.awt.Dimension(77, 20)); - spinnerMin.addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - onChangeColormapRange(evt); - } - }); - - spinnerMax.setModel(new javax.swing.SpinnerNumberModel(255, 0, 65535, 1)); - spinnerMax.setEnabled(false); - spinnerMax.setPreferredSize(new java.awt.Dimension(77, 20)); - spinnerMax.addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - onChangeColormapRange(evt); - } - }); - - labelMax.setText("Max:"); - - btFixColormapRange.setText("Fix"); - btFixColormapRange.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btFixColormapRangeActionPerformed(evt); - } - }); - - javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); - jPanel2.setLayout(jPanel2Layout); - jPanel2Layout.setHorizontalGroup( - jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel2Layout.createSequentialGroup() - .addGap(4, 4, 4) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel3) - .addComponent(jLabel4)) - .addGap(4, 4, 4) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(buttonAutomatic) - .addComponent(buttonFullRange) - .addComponent(buttonManual) - .addComponent(comboColormap, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 12, Short.MAX_VALUE) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() - .addComponent(labelMax) - .addGap(2, 2, 2) - .addComponent(spinnerMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(checkHistogram, javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() - .addComponent(labelMin) - .addGap(2, 2, 2) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(btFixColormapRange, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(spinnerMin, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .addContainerGap()) - ); - - jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btFixColormapRange, spinnerMax, spinnerMin}); - - jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel3, jLabel4}); - - jPanel2Layout.setVerticalGroup( - jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() - .addGap(4, 4, 4) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(comboColormap, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel3) - .addComponent(checkHistogram)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(buttonAutomatic) - .addComponent(jLabel4) - .addComponent(btFixColormapRange, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(0, 0, 0) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) - .addComponent(labelMin) - .addComponent(spinnerMin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(buttonFullRange)) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) - .addComponent(buttonManual) - .addComponent(labelMax) - .addComponent(spinnerMax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) - ); - - jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Source")); - - buttonGroup4.add(buttonServer); - buttonServer.setSelected(true); - buttonServer.setText("Server"); - buttonServer.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonServerActionPerformed(evt); - } - }); - - buttonGroup4.add(buttonDirect); - buttonDirect.setText("Direct"); - buttonDirect.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonDirectActionPerformed(evt); - } - }); - - javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); - jPanel5.setLayout(jPanel5Layout); - jPanel5Layout.setHorizontalGroup( - jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel5Layout.createSequentialGroup() - .addContainerGap() - .addComponent(buttonServer) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(buttonDirect) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - jPanel5Layout.setVerticalGroup( - jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel5Layout.createSequentialGroup() - .addGap(4, 4, 4) - .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(buttonServer) - .addComponent(buttonDirect)) - .addContainerGap()) - ); - - 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()) - ); - - panelScreen1.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 panelScreen1Layout = new javax.swing.GroupLayout(panelScreen1); - panelScreen1.setLayout(panelScreen1Layout); - panelScreen1Layout.setHorizontalGroup( - panelScreen1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelScreen1Layout.createSequentialGroup() - .addContainerGap() - .addGroup(panelScreen1Layout.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()) - ); - panelScreen1Layout.setVerticalGroup( - panelScreen1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelScreen1Layout.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)) - ); - - pauseSelection.setDecimals(0); - - panelScreen2.setBorder(javax.swing.BorderFactory.createTitledBorder("Image")); - - checkThreshold.setText("Threshold"); - checkThreshold.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - checkThresholdActionPerformed(evt); - } - }); - - spinnerThreshold.setModel(new javax.swing.SpinnerNumberModel(0.0d, 0.0d, 99999.0d, 1.0d)); - spinnerThreshold.setPreferredSize(new java.awt.Dimension(77, 20)); - spinnerThreshold.addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - spinnerThresholdonChange(evt); - } - }); - - checkBackground.setText("Subtract Background"); - checkBackground.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - checkBackgroundActionPerformed(evt); - } - }); - - checkGoodRegion.setText("Good Region"); - checkGoodRegion.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - checkGoodRegionActionPerformed(evt); - } - }); - - spinnerGrScale.setModel(new javax.swing.SpinnerNumberModel(3.0d, 0.01d, 100.0d, 1.0d)); - spinnerGrScale.setPreferredSize(new java.awt.Dimension(77, 20)); - spinnerGrScale.addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - spinnerGrThresholdonChange(evt); - } - }); - - spinnerGrThreshold.setModel(new javax.swing.SpinnerNumberModel(0.5d, 0.04d, 1.0d, 0.1d)); - spinnerGrThreshold.setPreferredSize(new java.awt.Dimension(77, 20)); - spinnerGrThreshold.addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - spinnerGrThresholdonChange(evt); - } - }); - - labelGrThreshold.setText("Threshold:"); - - labelGrScale.setText("Scale:"); - - javax.swing.GroupLayout panelScreen2Layout = new javax.swing.GroupLayout(panelScreen2); - panelScreen2.setLayout(panelScreen2Layout); - panelScreen2Layout.setHorizontalGroup( - panelScreen2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(panelScreen2Layout.createSequentialGroup() - .addContainerGap() - .addGroup(panelScreen2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelScreen2Layout.createSequentialGroup() - .addComponent(checkGoodRegion) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(labelGrScale) - .addGap(2, 2, 2) - .addComponent(spinnerGrScale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelScreen2Layout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(labelGrThreshold) - .addGap(2, 2, 2) - .addComponent(spinnerGrThreshold, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(panelScreen2Layout.createSequentialGroup() - .addComponent(checkBackground) - .addGap(0, 0, Short.MAX_VALUE)) - .addGroup(panelScreen2Layout.createSequentialGroup() - .addComponent(checkThreshold) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(spinnerThreshold, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap()) - ); - - panelScreen2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerGrScale, spinnerGrThreshold, spinnerThreshold}); - - panelScreen2Layout.setVerticalGroup( - panelScreen2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelScreen2Layout.createSequentialGroup() - .addGap(4, 4, 4) - .addComponent(checkBackground) - .addGap(2, 2, 2) - .addGroup(panelScreen2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(checkThreshold) - .addComponent(spinnerThreshold, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(2, 2, 2) - .addGroup(panelScreen2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(checkGoodRegion) - .addComponent(spinnerGrScale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelGrScale)) - .addGap(2, 2, 2) - .addGroup(panelScreen2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(spinnerGrThreshold, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelGrThreshold)) - .addContainerGap()) - ); - - 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.TRAILING, false) - .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(panelScreen, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(panelScreen1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(pauseSelection, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) - .addComponent(panelScreen2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - jPanel4Layout.setVerticalGroup( - jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel4Layout.createSequentialGroup() - .addContainerGap() - .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(panelScreen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(panelScreen1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(panelScreen2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel2, 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) - .addComponent(pauseSelection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) - ); - - 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() - .addGap(0, 0, 0) - .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(0, 0, 0) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - ); - }// //GEN-END:initComponents - - private void comboCamerasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboCamerasActionPerformed - try { - if (!updatingCameraSelection) { - if (!comboCameras.isEnabled()) { - throw new Exception("Invalid state"); - } - comboCameras.setEnabled(false); - buttonServer.setEnabled(false); - buttonDirect.setEnabled(false); - final String cameraName = (String) comboCameras.getSelectedItem(); - new Thread(new Runnable() { - @Override - public void run() { - if (requestCameraListUpdate) { - requestCameraListUpdate = false; - try { - updateCameraList(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - try { - setCamera(cameraName); - } catch (Exception ex) { - ex.printStackTrace(); - } finally { - updateStop(); - comboCameras.setEnabled(true); - buttonServer.setEnabled(true); - buttonDirect.setEnabled(true); - } - } - }).start(); - } - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_comboCamerasActionPerformed - - private void buttonArgsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonArgsActionPerformed - try { - if (camera != null) { - String cameraConfigJson = null; - if (usingServer) { - String cameraServerUrl = server.getUrl().substring(0, server.getUrl().length() - 1) + "8"; - try (CameraServer srv = new CameraServer("CamServer", cameraServerUrl)) { - srv.initialize(); - //TODO: replace into encodeMultiline - cameraConfigJson = JsonSerializer.encode(srv.getConfig(cameraName), true); - } - - } else { - String configFolder = (String) getContext().getClassByName("SfCamera").getMethod("getConfigFolder", new Class[]{}).invoke(null); - Path configFile = Paths.get(configFolder, cameraName + ".json"); - cameraConfigJson = configFile.toFile().exists() ? new String(Files.readAllBytes(configFile)) : null; - } - TextEditor editor = new TextEditor(); - editor.setText(cameraConfigJson); - editor.setReadOnly(true); - editor.setTitle(cameraName); - EditorDialog dlg = editor.getDialog(getTopLevel(), false); - dlg.setSize(480, 640); - dlg.setVisible(true); - SwingUtils.centerComponent(getTopLevel(), dlg); - } - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonArgsActionPerformed - - private void buttonConfigActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonConfigActionPerformed - try { - if (camera != null) { - this.showDeviceConfigDialog(camera, false); - } - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonConfigActionPerformed - - private void buttonPauseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonPauseActionPerformed - try { - renderer.removeOverlay(imageBufferOverlay); - if (camera != null) { - synchronized (imageBuffer) { - if (buttonPause.isSelected()) { - renderer.pause(); - } else { - imageBuffer.clear(); - renderer.resume(); - } - pauseSelection.setVisible(buttonPause.isSelected() && (imageBuffer.size() > 1)); - if (pauseSelection.isVisible()) { - renderer.addOverlay(imageBufferOverlay); - pauseSelection.setMaxValue(imageBuffer.size()); - pauseSelection.setValue(imageBuffer.size());; - } - } - updateStreamData(); - } - } catch (Exception ex) { - ex.printStackTrace(); - showException(ex); - } - }//GEN-LAST:event_buttonPauseActionPerformed - - private void buttonMarkerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMarkerActionPerformed - try { - checkMarker(); - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonMarkerActionPerformed - - private void buttonFitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonFitActionPerformed - try { - showFit = buttonFit.isSelected(); - if (showFit) { - renderer.setProfile(Renderer.Profile.None); - } else { - renderer.removeOverlays(fitOv); - fitOv = null; - } - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonFitActionPerformed - - private void buttonReticleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonReticleActionPerformed - try { - checkReticle(); - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonReticleActionPerformed - - private void buttonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonSaveActionPerformed - try { - saveSnapshot(); - } catch (Exception ex) { - ex.printStackTrace(); - showException(ex); - } - }//GEN-LAST:event_buttonSaveActionPerformed - - private void buttonGrabBackgroundActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonGrabBackgroundActionPerformed - try { - if (camera != null) { - if (SwingUtils.showOption(getTopLevel(), "Background", "Do you want to capture background now?", OptionType.YesNo) == OptionResult.Yes) { - boolean laserOn = getLaserState(); - if (laserOn) { - setLaserState(false); - } - try { - System.out.println("Grabbing background for: " + cameraName); - if (server != null) { - server.captureBackground(5); - } else { - camera.captureBackground(5, 0); - } - } finally { - if (laserOn) { - setLaserState(true); - } - } - SwingUtils.showMessage(getTopLevel(), "Success", "Success capturing background", 5000); - } - } - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonGrabBackgroundActionPerformed - - private void buttonZoomFitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonZoomFitActionPerformed - try { - renderer.setMode(RendererMode.Fit); - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonZoomFitActionPerformed - - private void buttonZoomStretchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonZoomStretchActionPerformed - try { - renderer.setMode(RendererMode.Stretch); - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonZoomStretchActionPerformed - - private void buttonZoomNormalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonZoomNormalActionPerformed - try { - renderer.setMode(RendererMode.Fixed); - centralizeRenderer(); - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonZoomNormalActionPerformed - - private void onChangeColormap(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onChangeColormap - try { - if ((camera != null) && (camera instanceof ColormapSource) && !updatingColormap) { - ColormapSource source = (ColormapSource) camera; - Color colorReticule = new Color(16, 16, 16); - Color colorMarker = new Color(128, 128, 128); - source.getConfig().colormap = (Colormap) comboColormap.getSelectedItem(); - switch (source.getConfig().colormap) { - case Grayscale: - case Inverted: - colorReticule = new Color(0, 192, 0); - colorMarker = new Color(64, 255, 64); - break; - case Flame: - colorReticule = new Color(0, 192, 0); - colorMarker = new Color(64, 255, 64); - break; - } - - renderer.setPenReticle(new Pen(colorReticule)); - renderer.setPenProfile(new Pen(colorReticule, 0)); - renderer.setPenMarker(new Pen(colorMarker, 2)); - renderer.setShowReticle(false); - checkReticle(); - source.getConfig().colormapAutomatic = buttonAutomatic.isSelected(); - source.getConfig().colormapMin = buttonFullRange.isSelected() ? Double.NaN : (Integer) spinnerMin.getValue(); - source.getConfig().colormapMax = buttonFullRange.isSelected() ? Double.NaN : (Integer) spinnerMax.getValue(); - try { - source.getConfig().save(); - } catch (Exception ex) { - Logger.getLogger(ScreenPanel.class.getName()).log(Level.WARNING, null, ex); - } - source.refresh(); - if (buttonPause.isSelected()) { - updatePause(); - } - updateColormap(); - } - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_onChangeColormap - - private void onChangeColormapRange(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_onChangeColormapRange - onChangeColormap(null); - }//GEN-LAST:event_onChangeColormapRange - - private void buttonZoom025ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonZoom025ActionPerformed - renderer.setZoom(0.25); - renderer.setMode(RendererMode.Zoom); - centralizeRenderer(); - }//GEN-LAST:event_buttonZoom025ActionPerformed - - private void buttonZoom05ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonZoom05ActionPerformed - renderer.setZoom(0.5); - renderer.setMode(RendererMode.Zoom); - centralizeRenderer(); - }//GEN-LAST:event_buttonZoom05ActionPerformed - - private void buttonServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonServerActionPerformed - if (!usingServer) { - usingServer = true; - requestCameraListUpdate = true; - } - comboCamerasActionPerformed(null); - }//GEN-LAST:event_buttonServerActionPerformed - - private void buttonDirectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDirectActionPerformed - if (usingServer) { - usingServer = false; - requestCameraListUpdate = true; - } - comboCamerasActionPerformed(null); - }//GEN-LAST:event_buttonDirectActionPerformed - - 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 (cameraName.contains("DSRM")) { - setpoint = new ChannelInteger(null, cameraName + ":POSITION_SP"); - } else { - setpoint = new ChannelInteger(null, cameraName + ":SET_SCREEN1_POS"); - } - setpoint.initialize(); - if (setpoint.read() != index) { - setpoint.write(index); - //Must be threaded to control the laser because of sleep in setLaserState - /* - boolean laserOn = getLaserState(); - if (laserOn) { - setLaserState(false); - } - try { - setpoint.write(index); - } finally { - if (laserOn) { - setLaserState(true); - } - } - */ - } - 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.equals(filter.read())) { - filter.write(setpoint); - } - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_comboFilterActionPerformed - - private void checkHistogramActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkHistogramActionPerformed - try { - setHistogramVisible(checkHistogram.isSelected()); - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_checkHistogramActionPerformed - - private void buttonZoom2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonZoom2ActionPerformed - renderer.setZoom(2.0); - renderer.setMode(RendererMode.Zoom); - centralizeRenderer(); - }//GEN-LAST:event_buttonZoom2ActionPerformed - - private void spinnerThresholdonChange(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerThresholdonChange - if (!updatingServerControls) { - try { - if ((server != null) && (server.isStarted())) { - server.setThreshold((Double) spinnerThreshold.getValue()); - } - } catch (Exception ex) { - showException(ex); - updateServerControls(); - } - } - }//GEN-LAST:event_spinnerThresholdonChange - - private void checkBackgroundActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkBackgroundActionPerformed - if (server != null) { - if (!updatingServerControls) { - try { - if (server.isStarted()) { - server.setBackgroundSubtraction(checkBackground.isSelected()); - } - } catch (Exception ex) { - showException(ex); - updateServerControls(); - updatingServerControls = true; - checkBackground.setSelected(false); - updatingServerControls = false; - - } - } - } else { - camera.setBackgroundEnabled(checkBackground.isSelected()); - } - }//GEN-LAST:event_checkBackgroundActionPerformed - - private void checkThresholdActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkThresholdActionPerformed - if (!updatingServerControls) { - try { - if ((server != null) && (server.isStarted())) { - spinnerThreshold.setVisible(checkThreshold.isSelected()); - server.setThreshold(checkThreshold.isSelected() ? (Double) spinnerThreshold.getValue() : null); - } - } catch (Exception ex) { - showException(ex); - updateServerControls(); - } - } - }//GEN-LAST:event_checkThresholdActionPerformed - - private void buttonStopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStopActionPerformed - try { - if (buttonStop.getText().equals("Stop")) { - if ((camera != null) && !camera.isClosed()) { - camera.close(); - } - } else { - if (isCameraStopped()) { - comboCamerasActionPerformed(null); - } - } - } catch (Exception ex) { - showException(ex); - } finally { - updateStop(); - } - }//GEN-LAST:event_buttonStopActionPerformed - - private void buttonProfileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonProfileActionPerformed - try { - showProfile = buttonProfile.isSelected(); - if (showProfile) { - renderer.setProfile(Renderer.Profile.None); - } else { - renderer.removeOverlays(profileOv); - profileOv = null; - } - } catch (Exception ex) { - showException(ex); - } - }//GEN-LAST:event_buttonProfileActionPerformed - - private void checkGoodRegionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkGoodRegionActionPerformed - if (!updatingServerControls) { - try { - if ((server != null) && (server.isStarted())) { - spinnerGrScale.setVisible(checkGoodRegion.isSelected()); - labelGrScale.setVisible(spinnerGrScale.isVisible()); - spinnerGrThreshold.setVisible(checkGoodRegion.isSelected()); - labelGrThreshold.setVisible(spinnerGrThreshold.isVisible()); - if (checkGoodRegion.isSelected()) { - server.setGoodRegion(((Number) spinnerGrThreshold.getValue()).doubleValue(), ((Number) spinnerGrScale.getValue()).doubleValue()); - } else { - server.setGoodRegion(null); - } - goodRegion = checkGoodRegion.isSelected(); - } - } catch (Exception ex) { - showException(ex); - ex.printStackTrace(); - updateServerControls(); - } - } - }//GEN-LAST:event_checkGoodRegionActionPerformed - - private void spinnerGrThresholdonChange(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerGrThresholdonChange - if (!updatingServerControls) { - try { - if ((server != null) && (server.isStarted())) { - server.setGoodRegion((Double) spinnerGrThreshold.getValue(), (Double) spinnerGrScale.getValue()); - } - } catch (Exception ex) { - showException(ex); - updateServerControls(); - } - } - }//GEN-LAST:event_spinnerGrThresholdonChange - - private void btFixColormapRangeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btFixColormapRangeActionPerformed - try { - updatingColormap = true; - ArrayProperties properties = currentFrame.data.getProperties(); - spinnerMax.setValue(properties.max.intValue()); - spinnerMin.setValue(properties.min.intValue()); - buttonManual.setSelected(true); - } catch (Exception ex) { - showException(ex); - } finally { - updatingColormap = false; - onChangeColormap(null); - } - }//GEN-LAST:event_btFixColormapRangeActionPerformed - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton btFixColormapRange; - private javax.swing.JButton buttonArgs; - private javax.swing.JRadioButton buttonAutomatic; - private javax.swing.JButton buttonConfig; - private javax.swing.JRadioButton buttonDirect; - private javax.swing.JToggleButton buttonFit; - private javax.swing.JRadioButton buttonFullRange; - private javax.swing.JButton buttonGrabBackground; - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.ButtonGroup buttonGroup2; - private javax.swing.ButtonGroup buttonGroup3; - private javax.swing.ButtonGroup buttonGroup4; - private javax.swing.JRadioButton buttonManual; - private javax.swing.JToggleButton buttonMarker; - private javax.swing.JToggleButton buttonPause; - private javax.swing.JToggleButton buttonProfile; - private javax.swing.JToggleButton buttonReticle; - private javax.swing.JToggleButton buttonSave; - private javax.swing.JRadioButton buttonServer; - private javax.swing.JButton buttonStop; - private javax.swing.JRadioButton buttonZoom025; - private javax.swing.JRadioButton buttonZoom05; - private javax.swing.JRadioButton buttonZoom2; - private javax.swing.JRadioButton buttonZoomFit; - private javax.swing.JRadioButton buttonZoomNormal; - private javax.swing.JRadioButton buttonZoomStretch; - private javax.swing.JCheckBox checkBackground; - private javax.swing.JCheckBox checkGoodRegion; - private javax.swing.JCheckBox checkHistogram; - private javax.swing.JCheckBox checkThreshold; - private javax.swing.JComboBox comboCameras; - private javax.swing.JComboBox comboColormap; - private javax.swing.JComboBox comboFilter; - private javax.swing.JComboBox comboScreen; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel jLabel3; - private javax.swing.JLabel jLabel4; - private javax.swing.JPanel jPanel1; - private javax.swing.JPanel jPanel2; - private javax.swing.JPanel jPanel3; - private javax.swing.JPanel jPanel4; - private javax.swing.JPanel jPanel5; - private javax.swing.JPanel jPanel6; - private javax.swing.JPanel jPanel7; - private javax.swing.JProgressBar jProgressBar1; - private javax.swing.JLabel labelGrScale; - private javax.swing.JLabel labelGrThreshold; - private javax.swing.JLabel labelMax; - private javax.swing.JLabel labelMin; - private javax.swing.JPanel panelScreen; - private javax.swing.JPanel panelScreen1; - private javax.swing.JPanel panelScreen2; - private ch.psi.pshell.swing.ValueSelection pauseSelection; - private ch.psi.pshell.imaging.Renderer renderer; - private javax.swing.JSpinner spinnerGrScale; - private javax.swing.JSpinner spinnerGrThreshold; - private javax.swing.JSpinner spinnerMax; - private javax.swing.JSpinner spinnerMin; - private javax.swing.JSpinner spinnerThreshold; - private javax.swing.JTextField textState; - private ch.psi.pshell.swing.DeviceValuePanel valueFilter; - private ch.psi.pshell.swing.DeviceValuePanel valueScreen; - // End of variables declaration//GEN-END:variables -} +import ch.psi.pshell.bs.StreamCamera; +import ch.psi.pshell.camserver.PipelineSource; +import ch.psi.pshell.data.DataManager; +import ch.psi.pshell.device.Device; +import ch.psi.pshell.epics.ChannelInteger; +import ch.psi.pshell.epics.DiscretePositioner; +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.ui.App; +import ch.psi.pshell.ui.CamServerViewer; +import static ch.psi.pshell.ui.CamServerViewer.ARG_CAMERA; +import static ch.psi.pshell.ui.CamServerViewer.ARG_CAMERA_SERVER; +import static ch.psi.pshell.ui.CamServerViewer.ARG_CONSOLE; +import static ch.psi.pshell.ui.CamServerViewer.ARG_PIPELINE_SERVER; +import static ch.psi.pshell.ui.CamServerViewer.ARG_STREAM_LIST; +import static ch.psi.pshell.ui.CamServerViewer.ARG_TYPE; +import static ch.psi.pshell.ui.CamServerViewer.ARG_BUFFER_SIZE; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.Elog; +import ch.psi.utils.State; +import ch.psi.utils.Str; +import ch.psi.utils.swing.SwingUtils; +import ch.psi.utils.swing.SwingUtils.OptionResult; +import ch.psi.utils.swing.SwingUtils.OptionType; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +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; + +/** + * + */ +public class ScreenPanel 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; + + + + public ScreenPanel() { + 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.setSidePanelVisible(true); + + camServerViewer.setPersistenceFile(Paths.get(getContext().getSetup().getContextPath(), "ScreenPanel.bin")); + + if (App.hasArgument(ARG_BUFFER_SIZE)) { + try { + camServerViewer.setBufferLength(Integer.valueOf(App.getArgumentValue(ARG_BUFFER_SIZE))); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + camServerViewer.setTypeList(App.hasArgument(ARG_TYPE) ? List.of(App.getArgumentValue(ARG_TYPE).split(",")) : null); + camServerViewer.setStreamList(App.hasArgument(ARG_STREAM_LIST) ? Arrays.asList(App.getArgumentValue(ARG_STREAM_LIST).split("\\|")) : null); + camServerViewer.setConsoleEnabled(App.getBoolArgumentValue(ARG_CONSOLE)); + + + if (App.hasArgument("user_overlays")) { + try { + camServerViewer.setUserOverlaysConfigFile(App.getArgumentValue("user_overlays")); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + if (App.getBoolArgumentValue("local_fit")) { + camServerViewer.setLocalFit(true); + } + + if (App.getBoolArgumentValue("persist_camera")) { + camServerViewer.setPersistCameraState(true); + } + + if (App.hasArgument("pipeline_format")) { + camServerViewer.setPipelineNameFormat(App.getArgumentValue("pipeline_format")); + } + + if (App.hasArgument("instance_format")) { + camServerViewer.setInstanceNameFormat(App.getArgumentValue("instance_format")); + } + } + + @Override + public void onStart() { + super.onStart(); + try { + camServerViewer.setCameraServerUrl(App.getArgumentValue(ARG_CAMERA_SERVER)); + camServerViewer.setPipelineServerUrl(App.getArgumentValue(ARG_PIPELINE_SERVER)); + camServerViewer.setStartupStream(App.getArgumentValue(ARG_CAMERA)); + camServerViewer.initialize(CamServerViewer.SourceSelecionMode.Cameras); + } catch (Exception ex) { + logger.log(Level.SEVERE, null, ex); + } + updateDialogTitle(); + } + + @Override + public void onStop() { + 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 (App.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.request(); + } + } + + checkAppState(); + + if (App.hasArgument("s")) { + try { + ((Source) getDevice("image")).initialize(); + } catch (IOException ex) { + logger.log(Level.SEVERE, null, ex); + } catch (InterruptedException ex) { + logger.log(Level.SEVERE, null, ex); + } + } + 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; + } + } + + + @Override + public void onOpenedStream(String name, String instance) throws Exception { + + System.out.println("Initialized instance: " + instance); + String cameraName = camServerViewer.getStream(); + 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(); + } + } + + } + + 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(getContext().getExecutionPars().getPath()), c); + + if (SwingUtils.showOption(getTopLevel(), "Success", panel, OptionType.OkCancel) == OptionResult.Yes) { + StringBuilder message = new StringBuilder(); + message.append("Camera: ").append(name); + 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(getContext().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, DataManager dm, String pathRoot) throws IOException{ + if (camServerViewer.getTypes().contains(ELECTRONS_TYPE)) { + dm.setAttribute(pathRoot, "Screen", String.valueOf(valueScreen.getLabel().getText())); + dm.setAttribute(pathRoot, "Filter", String.valueOf(valueFilter.getLabel().getText())); + } + } + + void updateDialogTitle() { + if (App.isDetached()) { + getTopLevel().setTitle(camServerViewer.getStream() == null ? "ScreenPanel" : camServerViewer.getStream()); + } + } + + 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") + // //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.ui.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); + }// //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.getStream(); + 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.ui.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 + +}