diff --git a/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerPlugin.java b/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerPlugin.java index 7ee160d..fb7e35f 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerPlugin.java +++ b/src/main/java/org/micromanager/lightsheetmanager/LightSheetManagerPlugin.java @@ -15,7 +15,7 @@ public class LightSheetManagerPlugin implements MenuPlugin, SciJavaPlugin { public static final String copyright = "Applied Scientific Instrumentation (ASI), 2022-2026"; public static final String description = "A plugin to control various types of light sheet microscopes."; public static final String menuName = "Light Sheet Manager"; - public static final String version = "0.8.15"; + public static final String version = "0.8.16"; private Studio studio_; diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/NavigationTab.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/NavigationTab.java index c2938f1..810bb1a 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/NavigationTab.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/NavigationTab.java @@ -25,7 +25,8 @@ public NavigationPanel getNavigationPanel() { @Override public void selected() { - + // the beam may have been turned on or off on another tab or by an acquisition + navigationPanel_.updateBeamState(); } @Override diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/ControlPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/ControlPanel.java index f481a88..360393f 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/ControlPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/ControlPanel.java @@ -41,6 +41,8 @@ public String toString() { } } + private static final String BEAM_ENABLED = "BeamEnabled"; + private final CMMCore core_; // data @@ -60,6 +62,9 @@ public String toString() { private Button btnMoveToZero_; private Button btnSetZero_; + // true for a galvo whose device can blank the beam + private final boolean hasBeam_; + private final LightSheetManager model_; public ControlPanel(final LightSheetManager model, final String propertyName, final String deviceName, final DeviceType deviceType, final Axis axis, final Units units) { @@ -70,8 +75,10 @@ public ControlPanel(final LightSheetManager model, final String propertyName, fi deviceType_ = Objects.requireNonNull(deviceType); axis_ = axis; units_ = units; + hasBeam_ = deviceType_ == DeviceType.GalvoDevice && hasBeamProperty(); createUserInterface(); createEventHandlers(); + updateBeamState(); } public String getPropertyName() { @@ -464,4 +471,37 @@ public void update(String topic, Object value) { lblPosition_.setText(String.format("%.3f %s", position, units_))); } + /** + * Enables the move controls of a galvo only while its beam is on. + */ + public void updateBeamState() { + if (!hasBeam_) { + return; + } + final boolean isBeamOn = isBeamOn(); + SwingUtilities.invokeLater(() -> { + txtAbsoluteMove_.setEnabled(isBeamOn); + btnRelMoveMinus_.setEnabled(isBeamOn); + btnRelMovePlus_.setEnabled(isBeamOn); + btnMoveToZero_.setEnabled(isBeamOn); + }); + } + + private boolean hasBeamProperty() { + try { + return core_.hasProperty(deviceName_, BEAM_ENABLED); + } catch (Exception e) { + return false; + } + } + + // the device adapter answers from its own state, so this does not query the controller + private boolean isBeamOn() { + try { + return "Yes".equals(core_.getProperty(deviceName_, BEAM_ENABLED)); + } catch (Exception e) { + return true; // a failed read should not lock the controls + } + } + } diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/NavigationPanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/NavigationPanel.java index 8387d9c..1e47e98 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/NavigationPanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/navigation/NavigationPanel.java @@ -266,4 +266,12 @@ private boolean containsDigit(final String str) { return containsDigit; } + /** + * Updates the controls that depend on the beam, which can be turned on and off elsewhere. + */ + public void updateBeamState() { + for (ControlPanel controlPanel : controlPanels_) { + controlPanel.updateBeamState(); + } + } }