Sharing Marker between multiple clients

This commit is contained in:
2018-05-16 15:03:23 +02:00
parent 7930234acf
commit cfec9a73a7
+101 -29
View File
@@ -320,7 +320,7 @@ public class ScreenPanel3 extends Panel {
if (App.hasArgument("integration")) { if (App.hasArgument("integration")) {
try { try {
setIntegration(Integer.valueOf(App.getArgumentValue("integration"))); setIntegration(Integer.valueOf(App.getArgumentValue("integration")));
if (integration!=0){ if (integration != 0) {
buttonFit.setSelected(false); buttonFit.setSelected(false);
buttonProfile.setSelected(false); buttonProfile.setSelected(false);
} }
@@ -451,9 +451,9 @@ public class ScreenPanel3 extends Panel {
} }
}); });
JCheckBoxMenuItem menuFrameIntegration = new JCheckBoxMenuItem("Multi-Frame", (integration!=0)); JCheckBoxMenuItem menuFrameIntegration = new JCheckBoxMenuItem("Multi-Frame", (integration != 0));
menuFrameIntegration.addActionListener((ActionEvent e) -> { menuFrameIntegration.addActionListener((ActionEvent e) -> {
if (integration==0){ if (integration == 0) {
JPanel panel = new JPanel(); JPanel panel = new JPanel();
GridBagLayout layout = new GridBagLayout(); GridBagLayout layout = new GridBagLayout();
layout.columnWidths = new int[]{150, 50}; //Minimum width layout.columnWidths = new int[]{150, 50}; //Minimum width
@@ -473,20 +473,19 @@ public class ScreenPanel3 extends Panel {
c.gridy = 0; c.gridy = 0;
panel.add(textFrames, c); panel.add(textFrames, c);
if (SwingUtils.showOption(getTopLevel(), "Multi-Frame Integration", panel, OptionType.OkCancel) == OptionResult.Yes) { if (SwingUtils.showOption(getTopLevel(), "Multi-Frame Integration", panel, OptionType.OkCancel) == OptionResult.Yes) {
setIntegration(checkContinuous.isSelected() ? -(Integer.valueOf(textFrames.getText())): (Integer.valueOf(textFrames.getText()))); setIntegration(checkContinuous.isSelected() ? -(Integer.valueOf(textFrames.getText())) : (Integer.valueOf(textFrames.getText())));
} }
} else { } else {
if (SwingUtils.showOption(getTopLevel(), "Multi-Frame Integration", if (SwingUtils.showOption(getTopLevel(), "Multi-Frame Integration",
"Do you want to disable " + ((integration<0)? "continuous ":"") +"multi-frame integration (" + Math.abs(integration)+ ")?", OptionType.YesNo) == OptionResult.Yes) { "Do you want to disable " + ((integration < 0) ? "continuous " : "") + "multi-frame integration (" + Math.abs(integration) + ")?", OptionType.YesNo) == OptionResult.Yes) {
setIntegration(0); setIntegration(0);
} }
} }
}); });
System.out.println("---"); for (Component cmp : SwingUtils.getComponentsByType(renderer.getPopupMenu(), JMenu.class)) {
for (Component cmp : SwingUtils.getComponentsByType(renderer.getPopupMenu(),JMenu.class)){ JMenu menu = (JMenu) cmp;
JMenu menu = (JMenu)cmp; if (menu.getText().equals("Integration")) {
if (menu.getText().equals("Integration")){
menu.addSeparator(); menu.addSeparator();
menu.add(menuFrameIntegration); menu.add(menuFrameIntegration);
} }
@@ -510,7 +509,7 @@ public class ScreenPanel3 extends Panel {
menuCalibrate.setEnabled((calibrationDialolg == null) || (!calibrationDialolg.isShowing())); menuCalibrate.setEnabled((calibrationDialolg == null) || (!calibrationDialolg.isShowing()));
menuSaveStack.setEnabled(imageBufferLenght > 0); menuSaveStack.setEnabled(imageBufferLenght > 0);
menuSetImageBufferSize.setEnabled(!renderer.isPaused()); menuSetImageBufferSize.setEnabled(!renderer.isPaused());
menuFrameIntegration.setSelected(integration!=0); menuFrameIntegration.setSelected(integration != 0);
} }
@Override @Override
@@ -522,6 +521,7 @@ public class ScreenPanel3 extends Panel {
} }
}); });
renderer.getPopupMenu().setVisible(false); renderer.getPopupMenu().setVisible(false);
clearMarker();
showFit = buttonFit.isSelected(); showFit = buttonFit.isSelected();
showProfile = buttonProfile.isSelected(); showProfile = buttonProfile.isSelected();
@@ -536,6 +536,18 @@ public class ScreenPanel3 extends Panel {
} }
} }
}); });
renderer.addListener(new RendererListener() {
@Override
public void onMoveFinished(Renderer renderer, Overlay overlay) {
if (overlay == marker) {
try {
onMarkerChanged();
} catch (IOException ex) {
Logger.getLogger(ScreenPanel3.class.getName()).log(Level.WARNING, null, ex);
}
}
}
});
if (MainFrame.isDark()) { if (MainFrame.isDark()) {
textState.setDisabledTextColor(textState.getForeground()); textState.setDisabledTextColor(textState.getForeground());
} }
@@ -544,11 +556,11 @@ public class ScreenPanel3 extends Panel {
} }
} }
void setIntegration(int frames){ void setIntegration(int frames) {
try { try {
if (integration != frames){ if (integration != frames) {
integration = frames; integration = frames;
if (camera!=null){ if (camera != null) {
if (Math.abs(integration) > 1) { if (Math.abs(integration) > 1) {
renderer.setDevice(new ImageIntegrator(integration)); renderer.setDevice(new ImageIntegrator(integration));
} else { } else {
@@ -785,6 +797,7 @@ public class ScreenPanel3 extends Panel {
System.out.println("Initializing"); System.out.println("Initializing");
parseUserOverlays(); parseUserOverlays();
errorOverlay = null; errorOverlay = null;
lastMarkerPos = null;
if (dataTableDialog != null) { if (dataTableDialog != null) {
dataTableDialog.dispose(); dataTableDialog.dispose();
@@ -909,7 +922,8 @@ public class ScreenPanel3 extends Panel {
renderer.setDevice(camera); renderer.setDevice(camera);
} }
renderer.setAutoScroll(true); renderer.setAutoScroll(true);
renderer.setMarker(marker); //renderer.setMarker(marker);
clearMarker();
imageSize = null; imageSize = null;
camera.addListener(new ImageListener() { camera.addListener(new ImageListener() {
@@ -945,6 +959,7 @@ public class ScreenPanel3 extends Panel {
if (!renderer.isPaused()) { if (!renderer.isPaused()) {
updateStreamData(); updateStreamData();
} }
updateMarker();
} }
} }
manageFit(bi, data); manageFit(bi, data);
@@ -1101,11 +1116,13 @@ public class ScreenPanel3 extends Panel {
renderer.refresh(); renderer.refresh();
} }
void checkMarker() { void checkMarker(Point p) throws IOException {
if (camera != null) { if (camera != null) {
if (buttonMarker.isSelected()) { if (buttonMarker.isSelected()) {
Dimension d = renderer.getImageSize(); Dimension d = renderer.getImageSize();
Point p = (d == null) ? new Point(renderer.getWidth() / 2, renderer.getHeight() / 2) : new Point(d.width / 2, d.height / 2); if (p==null){
p = (d == null) ? new Point(renderer.getWidth() / 2, renderer.getHeight() / 2) : new Point(d.width / 2, d.height / 2);
}
Overlay ov = null; Overlay ov = null;
marker = new Overlays.Crosshairs(renderer.getPenMarker(), p, new Dimension(100, 100)); marker = new Overlays.Crosshairs(renderer.getPenMarker(), p, new Dimension(100, 100));
marker.setMovable(true); marker.setMovable(true);
@@ -1114,6 +1131,73 @@ public class ScreenPanel3 extends Panel {
marker = null; marker = null;
} }
renderer.setMarker(marker); renderer.setMarker(marker);
onMarkerChanged();
}
}
Point lastMarkerPos;
void onMarkerChanged() throws IOException {
lastMarkerPos = getStreamMarkerPos();
if (marker == null) {
setInstanceConfigValue("Marker", null);
} else {
setInstanceConfigValue("Marker", new int[]{marker.getPosition().x, marker.getPosition().y});
}
}
void updateMarker() {
try {
if (server != null) {
Point p = getStreamMarkerPos();
if (p != null) {
//To prevent a local change being overriden by a message having the old settings.
//TODO: This is not bullet-proof, as one can have 2 changes between 2 frames...
if (!p.equals(lastMarkerPos)){
if (p.x == Integer.MIN_VALUE) {
if (buttonMarker.isSelected()) {
buttonMarker.setSelected(false);
checkMarker(null);
}
} else {
if (!buttonMarker.isSelected()) {
buttonMarker.setSelected(true);
checkMarker(p);
} else {
if (!p.equals(marker.getPosition())){
marker.setPosition(p);
}
}
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
Point getStreamMarkerPos() throws IOException{
//System.out.println(server.getInstanceConfig().get("Marker"));
Map<String, Object> pars = server.getProcessingParameters();
if (pars != null) {
List markerPosition = (List) pars.get("Marker");
if (markerPosition != null) {
return new Point((Integer)markerPosition.get(0), (Integer)markerPosition.get(1));
}
return new Point(Integer.MIN_VALUE,Integer.MIN_VALUE);
}
return null;
}
void clearMarker(){
marker = null;
renderer.setMarker(marker);
}
void setInstanceConfigValue(String name, Object value) throws IOException {
if (server != null) {
Map map = server.getInstanceConfig();
map.put(name, value);
server.setInstanceConfig(map);
} }
} }
@@ -1157,13 +1241,8 @@ public class ScreenPanel3 extends Panel {
buttonManual.setSelected(true); buttonManual.setSelected(true);
} }
btFixColormapRange.setVisible(buttonAutomatic.isSelected()); btFixColormapRange.setVisible(buttonAutomatic.isSelected());
//spinnerMin.setVisible(buttonManual.isSelected()); labelMin.setVisible(spinnerMin.isVisible());
//spinnerMax.setVisible(buttonManual.isSelected()); labelMax.setVisible(spinnerMax.isVisible());
spinnerMin.setEnabled(buttonManual.isSelected()); spinnerMin.setEnabled(buttonManual.isSelected());
spinnerMax.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)) { if (!Double.isNaN(config.colormapMin)) {
spinnerMin.setValue(Math.min(Math.max((int) config.colormapMin, 0), 65535)); spinnerMin.setValue(Math.min(Math.max((int) config.colormapMin, 0), 65535));
} }
@@ -1250,10 +1329,6 @@ public class ScreenPanel3 extends Panel {
buttonReticle.setEnabled(active && camera.getConfig().isCalibrated()); buttonReticle.setEnabled(active && camera.getConfig().isCalibrated());
buttonStreamData.setEnabled(active && (server != null)); buttonStreamData.setEnabled(active && (server != null));
buttonPause.setEnabled(active); buttonPause.setEnabled(active);
//buttonPause.setIcon(getIcon("Play"));
//buttonPause.setToolTipText("Resume");
//buttonPause.setIcon(getIcon("Pause"));
//buttonPause.setToolTipText("Pause");
if (renderer.isPaused() != buttonPause.isSelected()) { if (renderer.isPaused() != buttonPause.isSelected()) {
buttonPause.setSelected(renderer.isPaused()); buttonPause.setSelected(renderer.isPaused());
@@ -1341,7 +1416,6 @@ public class ScreenPanel3 extends Panel {
Double yMean = null, ySigma = null, yNorm = null, yCom = null, yRms = null; Double yMean = null, ySigma = null, yNorm = null, yCom = null, yRms = null;
double[] pX = null, pY = null, gX = null, gY = null; double[] pX = null, pY = null, gX = null, gY = null;
PointDouble[] sliceCenters = null; PointDouble[] sliceCenters = null;
//Double xCom=null, yCom=null;
if (data != null) { if (data != null) {
int height = data.getHeight(); int height = data.getHeight();
int width = data.getWidth(); int width = data.getWidth();
@@ -2182,8 +2256,6 @@ public class ScreenPanel3 extends Panel {
dataTableDialog.requestFocus(); dataTableDialog.requestFocus();
return; return;
} }
//String msg = String.join("\n", ids);
//SwingUtils.showMessage(getTopLevel(), "Image Data", msg);
dataTableModel = new DefaultTableModel(new Object[0][2], new String[]{"Name", "Value"}) { dataTableModel = new DefaultTableModel(new Object[0][2], new String[]{"Name", "Value"}) {
public Class getColumnClass(int columnIndex) { public Class getColumnClass(int columnIndex) {
return String.class; return String.class;
@@ -3582,7 +3654,7 @@ public class ScreenPanel3 extends Panel {
private void buttonMarkerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMarkerActionPerformed private void buttonMarkerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMarkerActionPerformed
try { try {
checkMarker(); checkMarker(null);
} catch (Exception ex) { } catch (Exception ex) {
showException(ex); showException(ex);
} }