diff --git a/src/main/java/plugins/tprovoost/Microscopy/MicroManager/MicroManager.java b/src/main/java/plugins/tprovoost/Microscopy/MicroManager/MicroManager.java index 12211da22a6386da76796333fb767226637f0730..6717a895f4c3b3a1a9d4e0c9d7d28e4d892d4fcb 100644 --- a/src/main/java/plugins/tprovoost/Microscopy/MicroManager/MicroManager.java +++ b/src/main/java/plugins/tprovoost/Microscopy/MicroManager/MicroManager.java @@ -38,6 +38,7 @@ import mmcorej.StrVector; import mmcorej.TaggedImage; import plugins.tprovoost.Microscopy.MicroManager.core.AcquisitionResult; import plugins.tprovoost.Microscopy.MicroManager.event.AcquisitionListener; +import plugins.tprovoost.Microscopy.MicroManager.event.CoreListener; import plugins.tprovoost.Microscopy.MicroManager.event.LiveListener; import plugins.tprovoost.Microscopy.MicroManager.gui.LiveSettingsPanel; import plugins.tprovoost.Microscopy.MicroManager.gui.LoadFrame; @@ -55,6 +56,7 @@ public class MicroManager */ private static final Map<Integer, JSONObject> metadatas = new HashMap<Integer, JSONObject>(4); + static final List<CoreListener> coreListeners = new ArrayList<CoreListener>(); static final List<AcquisitionListener> acqListeners = new ArrayList<AcquisitionListener>(); static final List<LiveListener> liveListeners = new ArrayList<LiveListener>(); @@ -83,6 +85,45 @@ public class MicroManager return new Version(MMVersion.VERSION_STRING); } + /** + * @return the core listener list. + */ + public static List<CoreListener> getCoreListeners() + { + final List<CoreListener> result; + + // create safe copy + synchronized (coreListeners) + { + result = new ArrayList<CoreListener>(coreListeners); + } + + return result; + }; + + /** + * Register this listener to get base MM core events. + * + * @param listener + * Your listener + */ + public static void addCoreListener(CoreListener listener) + { + synchronized (coreListeners) + { + if (!coreListeners.contains(listener)) + coreListeners.add(listener); + } + } + + public static void removeCoreListener(CoreListener listener) + { + synchronized (coreListeners) + { + coreListeners.remove(listener); + } + } + /** * @return the acquisition listener list. */ @@ -1865,8 +1906,10 @@ public class MicroManager // set sequence prefix for acquisition final LiveSettingsPanel livePanel = instance.livePanel; - if (livePanel.hasCustomAcqName()) settings.prefix = livePanel.getAcqName(); - else settings.prefix = "Acquisition"; + if (livePanel.hasCustomAcqName()) + settings.prefix = livePanel.getAcqName(); + else + settings.prefix = "Acquisition"; // create the acquisition manager acquisitionManager = new AcquisitionResult(settings, metadata, livePanel.hasDateSuffix()); diff --git a/src/main/java/plugins/tprovoost/Microscopy/MicroManager/event/CoreListener.java b/src/main/java/plugins/tprovoost/Microscopy/MicroManager/event/CoreListener.java new file mode 100644 index 0000000000000000000000000000000000000000..e7a36bc2c68bcec1339be3ebf60423c085ed0612 --- /dev/null +++ b/src/main/java/plugins/tprovoost/Microscopy/MicroManager/event/CoreListener.java @@ -0,0 +1,18 @@ +package plugins.tprovoost.Microscopy.MicroManager.event; + +public interface CoreListener +{ + public void onPropertiesChanged(); + + public void onConfigGroupChanged(String groupName, String newConfig); + + public void onExposureChanged(String deviceName, double exposure); + + public void onPropertyChanged(String deviceName, String propName, String propValue); + + public void onStagePositionChanged(String deviceName, double pos); + + public void onXYStagePositionChanged(String deviceName, double xPos, double yPos); + + public void onSystemConfigurationLoaded(); +} diff --git a/src/main/java/plugins/tprovoost/Microscopy/MicroManager/gui/MMMainFrame.java b/src/main/java/plugins/tprovoost/Microscopy/MicroManager/gui/MMMainFrame.java index 0e3947fac63a159f22b2464fa2fa2ee8cb29dfef..09599ea335ffeb334cd6f591d36f1ff7d0fefeaf 100644 --- a/src/main/java/plugins/tprovoost/Microscopy/MicroManager/gui/MMMainFrame.java +++ b/src/main/java/plugins/tprovoost/Microscopy/MicroManager/gui/MMMainFrame.java @@ -55,6 +55,7 @@ import mmcorej.MMCoreJ; import mmcorej.MMEventCallback; import plugins.tprovoost.Microscopy.MicroManager.MicroManager; import plugins.tprovoost.Microscopy.MicroManager.core.AcquisitionHandler; +import plugins.tprovoost.Microscopy.MicroManager.event.CoreListener; import plugins.tprovoost.Microscopy.MicroManager.tools.FrameUtils; import plugins.tprovoost.Microscopy.MicroManager.tools.MMUtils; import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover; @@ -957,21 +958,35 @@ public class MMMainFrame extends IcyFrame @Override public void onPropertiesChanged() { + super.onPropertiesChanged(); + refreshGUI(); + + // dispatch to listeners + for (CoreListener listener : MicroManager.getCoreListeners()) + listener.onPropertiesChanged(); } @Override public void onConfigGroupChanged(String groupName, String newConfig) { + super.onConfigGroupChanged(groupName, newConfig); + if (configPanel != null) configPanel.refreshGroup(groupName); if (acquisitionInfoPanel != null) acquisitionInfoPanel.refresh(); + + // dispatch to listeners + for (CoreListener listener : MicroManager.getCoreListeners()) + listener.onConfigGroupChanged(groupName, newConfig); } @Override public void onExposureChanged(String deviceName, double exposure) { + super.onExposureChanged(deviceName, exposure); + // only if device name match current set camera name if ((cameraPanel != null) && StringUtil.equals(deviceName, cameraPanel.getCameraName())) { @@ -982,11 +997,17 @@ public class MMMainFrame extends IcyFrame if (acquisitionInfoPanel != null) acquisitionInfoPanel.refresh(); + + // dispatch to listeners + for (CoreListener listener : MicroManager.getCoreListeners()) + listener.onExposureChanged(deviceName, exposure); } @Override public void onPropertyChanged(String deviceName, String propName, String propValue) { + super.onPropertyChanged(deviceName, propName, propValue); + // only if device name match current set camera name if ((cameraPanel != null) && StringUtil.equals(deviceName, cameraPanel.getCameraName())) { @@ -998,31 +1019,53 @@ public class MMMainFrame extends IcyFrame acquisitionInfoPanel.refresh(); if (pluginsPanel != null) pluginsPanel.onCorePropertyChanged(deviceName, propName, propValue); + + // dispatch to listeners + for (CoreListener listener : MicroManager.getCoreListeners()) + listener.onPropertyChanged(deviceName, propName, propValue); } @Override public void onStagePositionChanged(String deviceName, double pos) { + super.onStagePositionChanged(deviceName, pos); + StageMover.onStagePositionChanged(deviceName, pos); if (acquisitionInfoPanel != null) acquisitionInfoPanel.refresh(); + + // dispatch to listeners + for (CoreListener listener : MicroManager.getCoreListeners()) + listener.onStagePositionChanged(deviceName, pos); } @Override public void onXYStagePositionChanged(String deviceName, double xPos, double yPos) { + super.onXYStagePositionChanged(deviceName, xPos, yPos); + StageMover.onXYStagePositionChanged(deviceName, xPos, yPos); if (acquisitionInfoPanel != null) acquisitionInfoPanel.refresh(); + + // dispatch to listeners + for (CoreListener listener : MicroManager.getCoreListeners()) + listener.onXYStagePositionChanged(deviceName, xPos, yPos); }; @Override public void onSystemConfigurationLoaded() { + super.onSystemConfigurationLoaded(); + if (pluginsPanel != null) pluginsPanel.onSystemConfigurationLoaded(); if (acquisitionInfoPanel != null) acquisitionInfoPanel.refresh(); + + // dispatch to listeners + for (CoreListener listener : MicroManager.getCoreListeners()) + listener.onSystemConfigurationLoaded(); } } } \ No newline at end of file