Sharing Marker between multiple clients
This commit is contained in:
+101
-29
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user