Sharing Marker between multiple clients

This commit is contained in:
2018-05-16 15:03:23 +02:00
parent 7930234acf
commit cfec9a73a7

View File

@@ -320,9 +320,9 @@ public class ScreenPanel3 extends Panel {
if (App.hasArgument("integration")) {
try {
setIntegration(Integer.valueOf(App.getArgumentValue("integration")));
if (integration!=0){
if (integration != 0) {
buttonFit.setSelected(false);
buttonProfile.setSelected(false);
buttonProfile.setSelected(false);
}
} catch (Exception ex) {
ex.printStackTrace();
@@ -448,12 +448,12 @@ public class ScreenPanel3 extends Panel {
} catch (IOException ex) {
showException(ex);
}
}
}
});
JCheckBoxMenuItem menuFrameIntegration = new JCheckBoxMenuItem("Multi-Frame", (integration!=0));
JCheckBoxMenuItem menuFrameIntegration = new JCheckBoxMenuItem("Multi-Frame", (integration != 0));
menuFrameIntegration.addActionListener((ActionEvent e) -> {
if (integration==0){
if (integration == 0) {
JPanel panel = new JPanel();
GridBagLayout layout = new GridBagLayout();
layout.columnWidths = new int[]{150, 50}; //Minimum width
@@ -473,20 +473,19 @@ public class ScreenPanel3 extends Panel {
c.gridy = 0;
panel.add(textFrames, c);
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 {
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) {
} else {
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) {
setIntegration(0);
}
}
}
});
System.out.println("---");
for (Component cmp : SwingUtils.getComponentsByType(renderer.getPopupMenu(),JMenu.class)){
JMenu menu = (JMenu)cmp;
if (menu.getText().equals("Integration")){
for (Component cmp : SwingUtils.getComponentsByType(renderer.getPopupMenu(), JMenu.class)) {
JMenu menu = (JMenu) cmp;
if (menu.getText().equals("Integration")) {
menu.addSeparator();
menu.add(menuFrameIntegration);
}
@@ -510,7 +509,7 @@ public class ScreenPanel3 extends Panel {
menuCalibrate.setEnabled((calibrationDialolg == null) || (!calibrationDialolg.isShowing()));
menuSaveStack.setEnabled(imageBufferLenght > 0);
menuSetImageBufferSize.setEnabled(!renderer.isPaused());
menuFrameIntegration.setSelected(integration!=0);
menuFrameIntegration.setSelected(integration != 0);
}
@Override
@@ -522,6 +521,7 @@ public class ScreenPanel3 extends Panel {
}
});
renderer.getPopupMenu().setVisible(false);
clearMarker();
showFit = buttonFit.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()) {
textState.setDisabledTextColor(textState.getForeground());
}
@@ -543,26 +555,26 @@ public class ScreenPanel3 extends Panel {
ex.printStackTrace();
}
}
void setIntegration(int frames){
void setIntegration(int frames) {
try {
if (integration != frames){
if (integration != frames) {
integration = frames;
if (camera!=null){
if (camera != null) {
if (Math.abs(integration) > 1) {
renderer.setDevice(new ImageIntegrator(integration));
} else {
renderer.setDevice(camera);
}
}
synchronized (imageBuffer) {
currentFrame = null;
imageBuffer.clear();
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
@Override
@@ -785,6 +797,7 @@ public class ScreenPanel3 extends Panel {
System.out.println("Initializing");
parseUserOverlays();
errorOverlay = null;
lastMarkerPos = null;
if (dataTableDialog != null) {
dataTableDialog.dispose();
@@ -909,7 +922,8 @@ public class ScreenPanel3 extends Panel {
renderer.setDevice(camera);
}
renderer.setAutoScroll(true);
renderer.setMarker(marker);
//renderer.setMarker(marker);
clearMarker();
imageSize = null;
camera.addListener(new ImageListener() {
@@ -945,6 +959,7 @@ public class ScreenPanel3 extends Panel {
if (!renderer.isPaused()) {
updateStreamData();
}
updateMarker();
}
}
manageFit(bi, data);
@@ -1101,11 +1116,13 @@ public class ScreenPanel3 extends Panel {
renderer.refresh();
}
void checkMarker() {
void checkMarker(Point p) throws IOException {
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);
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;
marker = new Overlays.Crosshairs(renderer.getPenMarker(), p, new Dimension(100, 100));
marker.setMovable(true);
@@ -1114,6 +1131,73 @@ public class ScreenPanel3 extends Panel {
marker = null;
}
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);
}
}
@@ -1156,14 +1240,9 @@ public class ScreenPanel3 extends Panel {
} else {
buttonManual.setSelected(true);
}
btFixColormapRange.setVisible(buttonAutomatic.isSelected());
//spinnerMin.setVisible(buttonManual.isSelected()); labelMin.setVisible(spinnerMin.isVisible());
//spinnerMax.setVisible(buttonManual.isSelected()); labelMax.setVisible(spinnerMax.isVisible());
btFixColormapRange.setVisible(buttonAutomatic.isSelected());
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));
}
@@ -1249,11 +1328,7 @@ public class ScreenPanel3 extends Panel {
buttonFit.setEnabled(active);
buttonReticle.setEnabled(active && camera.getConfig().isCalibrated());
buttonStreamData.setEnabled(active && (server != null));
buttonPause.setEnabled(active);
//buttonPause.setIcon(getIcon("Play"));
//buttonPause.setToolTipText("Resume");
//buttonPause.setIcon(getIcon("Pause"));
//buttonPause.setToolTipText("Pause");
buttonPause.setEnabled(active);
if (renderer.isPaused() != buttonPause.isSelected()) {
buttonPause.setSelected(renderer.isPaused());
@@ -1340,8 +1415,7 @@ public class ScreenPanel3 extends Panel {
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;
PointDouble[] sliceCenters = null;
//Double xCom=null, yCom=null;
PointDouble[] sliceCenters = null;
if (data != null) {
int height = data.getHeight();
int width = data.getWidth();
@@ -2181,9 +2255,7 @@ public class ScreenPanel3 extends Panel {
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;
@@ -3582,7 +3654,7 @@ public class ScreenPanel3 extends Panel {
private void buttonMarkerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMarkerActionPerformed
try {
checkMarker();
checkMarker(null);
} catch (Exception ex) {
showException(ex);
}