From 9a2d5e060cdff7590d173fbab271e18ef1ea4d5c Mon Sep 17 00:00:00 2001
From: Thomas <thomas.musset@pasteur.fr>
Date: Tue, 2 Jul 2024 14:05:46 +0200
Subject: [PATCH] updated pom to v2.0.0-a.1, fix classes accordingly to new
 architecture, added icon, updated .gitignore

---
 .gitignore                                    |  45 ++++++++++++++----
 pom.xml                                       |  14 ++++--
 .../block/AbstractMicroscopeBlock.java        |  15 +++---
 .../micromanager/block/MicroscopyBlocks.java  |  10 ++--
 .../block/capture/MicroscopeGetMetadata.java  |  18 +++----
 .../capture/MicroscopeSetTaggedImage.java     |  14 +++---
 .../block/capture/MicroscopeSnapChannels.java |  20 ++++----
 .../block/capture/MicroscopeSnapImage.java    |  16 +++----
 .../micromanager/block/lang/VarChannels.java  |   4 +-
 .../block/lang/VarChannelsEditor.java         |   5 +-
 .../micromanager/block/lang/VarMMGroup.java   |   6 +--
 .../micromanager/block/lang/VarMMPreset.java  |   9 ++--
 .../block/lang/VarMultiStagePosition.java     |   9 +++-
 .../block/setting/MicroscopeChannels.java     |   6 ++-
 .../block/setting/MicroscopeGetBinning.java   |  11 +++--
 .../block/setting/MicroscopeGetExposure.java  |  11 +++--
 .../block/setting/MicroscopePositions.java    |   9 +++-
 .../block/setting/MicroscopeSetBinning.java   |  11 +++--
 .../block/setting/MicroscopeSetConfig.java    |   9 +++-
 .../block/setting/MicroscopeSetExposure.java  |  11 +++--
 .../block/setting/MicroscopeSetShutter.java   |  11 +++--
 .../block/stage/MicroscopeGetStageXYZ.java    |  13 +++--
 .../stage/MicroscopeSetStagePosition.java     |   8 +++-
 .../block/stage/MicroscopeSetStageXY.java     |  11 +++--
 .../block/stage/MicroscopeSetStageZ.java      |  11 +++--
 .../block/tool/TaggedImageToIcyImage.java     |  22 ++++-----
 src/main/resources/mm_blocks.png              | Bin 0 -> 17218 bytes
 27 files changed, 215 insertions(+), 114 deletions(-)
 create mode 100644 src/main/resources/mm_blocks.png

diff --git a/.gitignore b/.gitignore
index d4c3a6c..57f16fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,41 @@
-.idea/
-.settings/
-build/
+/build*
+/workspace
+setting.xml
+release/
 target/
-bin/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+icy.log
+
+### IntelliJ IDEA ###
+.idea/
+*.iws
 *.iml
-*.eml
-*.jar
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
+.factorypath
 .project
-export.jardesc
-**/.DS_Store
\ No newline at end of file
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+**/.DS_Store
+Icon?
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 1ac5ed6..2c74297 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,11 +7,11 @@
     <parent>
         <groupId>org.bioimageanalysis.icy</groupId>
         <artifactId>pom-icy</artifactId>
-        <version>2.2.0</version>
+        <version>3.0.0-a.1</version>
     </parent>
 
     <artifactId>micromanager-block</artifactId>
-    <version>2.0.0</version>
+    <version>2.0.0-a.1</version>
 
     <name>Micro-Manager Block</name>
     <description>
@@ -21,19 +21,23 @@
     <dependencies>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
-            <artifactId>micromanager</artifactId>
+            <artifactId>ezplug</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>protocols</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>micromanager</artifactId>
+        </dependency>
     </dependencies>
 
     <repositories>
         <repository>
             <id>icy</id>
-            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+            <url>https://nexus-icy.pasteur.cloud/repository/icy/</url>
         </repository>
     </repositories>
 </project>
\ No newline at end of file
diff --git a/src/main/java/plugins/stef/micromanager/block/AbstractMicroscopeBlock.java b/src/main/java/plugins/stef/micromanager/block/AbstractMicroscopeBlock.java
index 24ba799..1988b78 100644
--- a/src/main/java/plugins/stef/micromanager/block/AbstractMicroscopeBlock.java
+++ b/src/main/java/plugins/stef/micromanager/block/AbstractMicroscopeBlock.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,18 +18,19 @@
 
 package plugins.stef.micromanager.block;
 
-import icy.gui.dialog.MessageDialog;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginBundled;
-import icy.plugin.interface_.PluginLibrary;
 import mmcorej.CMMCore;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.interface_.PluginBundled;
+import org.bioimageanalysis.icy.extension.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.gui.dialog.MessageDialog;
+import org.jetbrains.annotations.Nullable;
 import org.micromanager.utils.ReportingUtils;
 import plugins.adufour.blocks.lang.Block;
 import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
 import plugins.tprovoost.Microscopy.MicroManagerForIcy.MicromanagerPlugin;
 
 /**
- * @author Stephane
+ * @author Stephane Dallongeville
  */
 public abstract class AbstractMicroscopeBlock extends Plugin implements Block, PluginLibrary, PluginBundled {
     public AbstractMicroscopeBlock() {
@@ -46,7 +47,7 @@ public abstract class AbstractMicroscopeBlock extends Plugin implements Block, P
         return MicroscopyBlocks.class.getName();
     }
 
-    public static CMMCore getMMCore(final boolean throwException) {
+    public static @Nullable CMMCore getMMCore(final boolean throwException) {
         try {
             return MicroManager.getCore();
         }
diff --git a/src/main/java/plugins/stef/micromanager/block/MicroscopyBlocks.java b/src/main/java/plugins/stef/micromanager/block/MicroscopyBlocks.java
index a61fa17..7d7d331 100644
--- a/src/main/java/plugins/stef/micromanager/block/MicroscopyBlocks.java
+++ b/src/main/java/plugins/stef/micromanager/block/MicroscopyBlocks.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,9 +18,13 @@
 
 package plugins.stef.micromanager.block;
 
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginLibrary;
+import org.bioimageanalysis.icy.extension.plugin.abstract_.Plugin;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.extension.plugin.interface_.PluginLibrary;
 
+@IcyPluginName("Microscopy Blocks")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopyBlocks extends Plugin implements PluginLibrary {
     public MicroscopyBlocks() {
         super();
diff --git a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeGetMetadata.java b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeGetMetadata.java
index bd0f6c2..1c89110 100644
--- a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeGetMetadata.java
+++ b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeGetMetadata.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.capture;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import org.json.JSONObject;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
@@ -28,8 +31,10 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
 /**
  * Retrieve global acquisition metadata and last acquired image metadata (Micro-Manager)
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("Get Micro-Manager Metadata")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeGetMetadata extends AbstractMicroscopeBlock {
     VarInteger channel = new VarInteger("Channel", 0);
     Var<JSONObject> metadata = new Var<>("Image metadata", JSONObject.class);
@@ -42,18 +47,13 @@ public class MicroscopeGetMetadata extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("channel", channel);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("imageMetadata", metadata);
         outputMap.add("acqMetadata", acqMetadata);
     }
-
-    @Override
-    public String getName() {
-        return "Get Micro-Manager Metadata";
-    }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSetTaggedImage.java b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSetTaggedImage.java
index a6b9882..25a3c1f 100644
--- a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSetTaggedImage.java
+++ b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSetTaggedImage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -19,6 +19,9 @@
 package plugins.stef.micromanager.block.capture;
 
 import mmcorej.TaggedImage;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarInteger;
@@ -32,6 +35,8 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.MMUtils;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Tagged Image(s)")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetTaggedImage extends AbstractMicroscopeBlock {
     VarArray<TaggedImage> taggedImages = new VarArray<>("Tagged image(s)", TaggedImage[].class, new TaggedImage[0]);
     VarSequence seq = new VarSequence("Sequence", null);
@@ -66,7 +71,7 @@ public class MicroscopeSetTaggedImage extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("taggedImage", taggedImages);
         inputMap.add("seq", seq);
         inputMap.add("t", posT);
@@ -81,9 +86,4 @@ public class MicroscopeSetTaggedImage extends AbstractMicroscopeBlock {
     public void declareOutput(final VarList outputMap) {
         //
     }
-
-    @Override
-    public String getName() {
-        return "Set Tagged Image(s)";
-    }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapChannels.java b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapChannels.java
index 05c7845..062fb61 100644
--- a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapChannels.java
+++ b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapChannels.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -21,11 +21,14 @@ package plugins.stef.micromanager.block.capture;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.bioimageanalysis.icy.common.string.StringUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import org.json.JSONObject;
 import org.micromanager.utils.ChannelSpec;
 import org.micromanager.utils.MDUtils;
 
-import icy.util.StringUtil;
 import mmcorej.TaggedImage;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
@@ -41,8 +44,10 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
  * Snap multi channel image (Micro-Manager)
  * Class in standby until an EzPlug fix
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("Snap Channel(s)")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSnapChannels extends AbstractMicroscopeBlock {
     VarObject trigger;
     VarMMGroup group;
@@ -130,19 +135,14 @@ public class MicroscopeSnapChannels extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("group", group);
         inputMap.add("channels", channels);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("out", out);
     }
-
-    @Override
-    public String getName() {
-        return "Snap Channel(s)";
-    }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapImage.java b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapImage.java
index 7105ac8..1e47dd9 100644
--- a/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapImage.java
+++ b/src/main/java/plugins/stef/micromanager/block/capture/MicroscopeSnapImage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -19,6 +19,9 @@
 package plugins.stef.micromanager.block.capture;
 
 import mmcorej.TaggedImage;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarArray;
 import plugins.adufour.vars.lang.VarObject;
@@ -33,6 +36,8 @@ import java.util.List;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Snap Image")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSnapImage extends AbstractMicroscopeBlock {
     VarArray<TaggedImage> out = new VarArray<>("Tagged image(s)", TaggedImage[].class, new TaggedImage[0]);
     VarObject trigger = new VarObject("Trigger", null);
@@ -52,17 +57,12 @@ public class MicroscopeSnapImage extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("out", out);
     }
-
-    @Override
-    public String getName() {
-        return "Snap Image";
-    }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarChannels.java b/src/main/java/plugins/stef/micromanager/block/lang/VarChannels.java
index 005b165..f97cb80 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarChannels.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarChannels.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,7 +18,7 @@
 
 package plugins.stef.micromanager.block.lang;
 
-import icy.type.collection.CollectionUtil;
+import org.bioimageanalysis.icy.common.collection.CollectionUtil;
 import org.micromanager.utils.ChannelSpec;
 import plugins.adufour.vars.gui.VarEditor;
 import plugins.adufour.vars.lang.Var;
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarChannelsEditor.java b/src/main/java/plugins/stef/micromanager/block/lang/VarChannelsEditor.java
index 67d70d7..0342b5f 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarChannelsEditor.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarChannelsEditor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -86,8 +86,7 @@ public class VarChannelsEditor extends VarEditor<ChannelSpec[]> {
         });
 
         final JButton upButton = new JButton("Up");
-        upButton.setToolTipText(TooltipTextMaker
-                .addHTMLBreaksForTooltip("Move currently selected channel up (Channels higher on list are acquired first)"));
+        upButton.setToolTipText(TooltipTextMaker.addHTMLBreaksForTooltip("Move currently selected channel up (Channels higher on list are acquired first)"));
         upButton.addActionListener(e -> {
             final int sel = table.getSelectedRow();
 
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarMMGroup.java b/src/main/java/plugins/stef/micromanager/block/lang/VarMMGroup.java
index ecf62f7..dbe80b2 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarMMGroup.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarMMGroup.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -27,7 +27,7 @@ import java.util.List;
 /**
  * EzVar representing Micro-Manager config group.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
 public class VarMMGroup extends VarString {
     public VarMMGroup(final String name) {
@@ -36,7 +36,7 @@ public class VarMMGroup extends VarString {
         final List<String> groups = MicroManager.getConfigGroups();
 
         if (!groups.isEmpty())
-            setDefaultEditorModel(new ValueSelectionModel<>(groups.toArray(new String[0]), groups.get(0), false));
+            setDefaultEditorModel(new ValueSelectionModel<>(groups.toArray(new String[0]), groups.getFirst(), false));
     }
 
     public VarMMGroup() {
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarMMPreset.java b/src/main/java/plugins/stef/micromanager/block/lang/VarMMPreset.java
index f6952b4..af62c44 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarMMPreset.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarMMPreset.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,7 @@
 
 package plugins.stef.micromanager.block.lang;
 
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.vars.gui.model.ValueSelectionModel;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarString;
@@ -29,10 +30,10 @@ import java.util.List;
 /**
  * EzVar representing Micro-Manager config preset.
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
 public class VarMMPreset extends VarString {
-    public VarMMPreset(final String name, final VarMMGroup groupVar) {
+    public VarMMPreset(final String name, final @NotNull VarMMGroup groupVar) {
         super(name, "");
 
         // set values
@@ -60,7 +61,7 @@ public class VarMMPreset extends VarString {
         final List<String> presets = MicroManager.getConfigs(group);
 
         if (!presets.isEmpty())
-            setDefaultEditorModel(new ValueSelectionModel<>(presets.toArray(new String[0]), presets.get(0), false));
+            setDefaultEditorModel(new ValueSelectionModel<>(presets.toArray(new String[0]), presets.getFirst(), false));
         else
             setDefaultEditorModel(new ValueSelectionModel<>(new String[]{""}, "", false));
     }
diff --git a/src/main/java/plugins/stef/micromanager/block/lang/VarMultiStagePosition.java b/src/main/java/plugins/stef/micromanager/block/lang/VarMultiStagePosition.java
index 656ff7d..c40882d 100644
--- a/src/main/java/plugins/stef/micromanager/block/lang/VarMultiStagePosition.java
+++ b/src/main/java/plugins/stef/micromanager/block/lang/VarMultiStagePosition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,7 @@
 
 package plugins.stef.micromanager.block.lang;
 
+import org.jetbrains.annotations.Contract;
 import org.micromanager.api.MultiStagePosition;
 import plugins.adufour.vars.gui.VarEditor;
 import plugins.adufour.vars.lang.Var;
@@ -26,6 +27,7 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
 
 import javax.swing.*;
 import java.awt.*;
+import java.util.Objects;
 
 public class VarMultiStagePosition extends VarArray<MultiStagePosition> {
     VarEditorMultiStagePositions pos;
@@ -56,19 +58,22 @@ public class VarMultiStagePosition extends VarArray<MultiStagePosition> {
         @Override
         protected JComponent createEditorComponent() {
             btnOpen = new JButton("Open");
-            btnOpen.addActionListener(e -> MicroManager.getMMStudio().showXYPositionList());
+            btnOpen.addActionListener(e -> Objects.requireNonNull(MicroManager.getMMStudio()).showXYPositionList());
 
             return btnOpen;
         }
 
+        @Contract(pure = true)
         @Override
         protected void activateListeners() {
         }
 
+        @Contract(pure = true)
         @Override
         protected void deactivateListeners() {
         }
 
+        @Contract(pure = true)
         @Override
         protected void updateInterfaceValue() {
         }
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeChannels.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeChannels.java
index ece292c..1dbc6b8 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeChannels.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeChannels.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,8 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
 import plugins.adufour.blocks.tools.input.InputBlock;
 import plugins.adufour.blocks.util.VarList;
 import plugins.stef.micromanager.block.AbstractMicroscopeBlock;
@@ -30,6 +32,8 @@ import plugins.stef.micromanager.block.lang.VarMMGroup;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("(WIP) Microscope Channels")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeChannels extends AbstractMicroscopeBlock implements InputBlock {
     VarMMGroup group;
     VarChannels channels;
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetBinning.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetBinning.java
index 59c9086..5ad9ed0 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetBinning.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetBinning.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarInteger;
 import plugins.adufour.vars.lang.VarObject;
@@ -30,17 +33,19 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Get Micro-Manager Binning")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeGetBinning extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarInteger binning = new VarInteger("Binning", 1);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("binning", binning);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetExposure.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetExposure.java
index 52157d6..94baccb 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetExposure.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeGetExposure.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarDouble;
 import plugins.adufour.vars.lang.VarObject;
@@ -30,17 +33,19 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Get Micro-Manager Exposure")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeGetExposure extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarDouble exposure = new VarDouble("Exposure (ms)", 50d);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("exposure", exposure);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopePositions.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopePositions.java
index e481421..feedefb 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopePositions.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopePositions.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import org.micromanager.MMStudio;
 import org.micromanager.api.MultiStagePosition;
 import org.micromanager.api.PositionList;
@@ -34,6 +37,8 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Stage Positions")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopePositions extends AbstractMicroscopeBlock implements InputBlock {
     VarArray<MultiStagePosition> varPositions;
 
@@ -44,7 +49,7 @@ public class MicroscopePositions extends AbstractMicroscopeBlock implements Inpu
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("positions", varPositions);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetBinning.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetBinning.java
index 19ce2c4..095ef69 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetBinning.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetBinning.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarInteger;
@@ -31,19 +34,21 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Binning")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetBinning extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarInteger binning = new VarInteger("Binning", 1);
     VarBoolean done = new VarBoolean("Done", false);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("binning", binning);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", done);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetConfig.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetConfig.java
index fbb0c2b..79f230d 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetConfig.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetConfig.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.lang.BlockDescriptor;
 import plugins.adufour.blocks.lang.WorkFlow;
 import plugins.adufour.blocks.util.VarList;
@@ -45,6 +48,8 @@ import java.util.List;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Preset")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetConfig extends AbstractMicroscopeBlock {
     VarObject trigger;
     VarMMGroup group;
@@ -89,7 +94,7 @@ public class MicroscopeSetConfig extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("group", group);
         inputMap.add("preset", preset);
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetExposure.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetExposure.java
index 803e6e7..90e9b45 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetExposure.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetExposure.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarDouble;
@@ -31,19 +34,21 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Exposure")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetExposure extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarDouble exposure = new VarDouble("Exposure", 10d);
     VarBoolean done = new VarBoolean("Done", false);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("exposure", exposure);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", done);
     }
 
diff --git a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetShutter.java b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetShutter.java
index 82b13e0..0588cd3 100644
--- a/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetShutter.java
+++ b/src/main/java/plugins/stef/micromanager/block/setting/MicroscopeSetShutter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.setting;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarObject;
@@ -30,6 +33,8 @@ import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Shutter")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetShutter extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarBoolean open = new VarBoolean("Open", true);
@@ -49,13 +54,13 @@ public class MicroscopeSetShutter extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("open", open);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", done);
     }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeGetStageXYZ.java b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeGetStageXYZ.java
index 9f91b34..900b15a 100644
--- a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeGetStageXYZ.java
+++ b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeGetStageXYZ.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,7 +18,10 @@
 
 package plugins.stef.micromanager.block.stage;
 
-import icy.type.point.Point3D;
+import org.bioimageanalysis.icy.common.geom.point.Point3D;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarDouble;
@@ -32,6 +35,8 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Get Micro-Manager Stage XYZ")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeGetStageXYZ extends AbstractMicroscopeBlock {
     VarObject trigger = new VarObject("Trigger", null);
     VarBoolean wait = new VarBoolean("Wait stage", true);
@@ -40,13 +45,13 @@ public class MicroscopeGetStageXYZ extends AbstractMicroscopeBlock {
     VarDouble outZ = new VarDouble("Z", 0d);
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("wait", wait);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("x", outX);
         outputMap.add("y", outY);
         outputMap.add("z", outZ);
diff --git a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStagePosition.java b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStagePosition.java
index 8b08e76..aa52224 100644
--- a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStagePosition.java
+++ b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStagePosition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,8 +18,10 @@
 
 package plugins.stef.micromanager.block.stage;
 
-import icy.system.thread.ThreadUtil;
 import mmcorej.CMMCore;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.system.thread.ThreadUtil;
 import org.micromanager.api.MultiStagePosition;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
@@ -35,6 +37,8 @@ import plugins.stef.micromanager.block.setting.MicroscopePositions;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Stage Position")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetStagePosition extends AbstractMicroscopeBlock {
     Var<MultiStagePosition> input;
     VarBoolean waitForStage;
diff --git a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageXY.java b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageXY.java
index 97db9cc..bbb32b2 100644
--- a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageXY.java
+++ b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageXY.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.stage;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarDouble;
@@ -33,6 +36,8 @@ import java.awt.geom.Point2D;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Stage XY")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetStageXY extends AbstractMicroscopeBlock {
     VarDouble inX;
     VarDouble inY;
@@ -73,7 +78,7 @@ public class MicroscopeSetStageXY extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("x", inX);
         inputMap.add("y", inY);
@@ -82,7 +87,7 @@ public class MicroscopeSetStageXY extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", done);
     }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageZ.java b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageZ.java
index 71084a0..23f46ea 100644
--- a/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageZ.java
+++ b/src/main/java/plugins/stef/micromanager/block/stage/MicroscopeSetStageZ.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,6 +18,9 @@
 
 package plugins.stef.micromanager.block.stage;
 
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.VarBoolean;
 import plugins.adufour.vars.lang.VarDouble;
@@ -31,6 +34,8 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
  *
  * @author Stephane Dallongeville
  */
+@IcyPluginName("Set Micro-Manager Stage Z")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class MicroscopeSetStageZ extends AbstractMicroscopeBlock {
     VarDouble inZ;
     VarObject trigger = new VarObject("Trigger", null);
@@ -65,7 +70,7 @@ public class MicroscopeSetStageZ extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("trigger", trigger);
         inputMap.add("z", inZ);
         inputMap.add("relative", varRelative);
@@ -73,7 +78,7 @@ public class MicroscopeSetStageZ extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("done", varDone);
     }
 }
diff --git a/src/main/java/plugins/stef/micromanager/block/tool/TaggedImageToIcyImage.java b/src/main/java/plugins/stef/micromanager/block/tool/TaggedImageToIcyImage.java
index 7574f55..15efac4 100644
--- a/src/main/java/plugins/stef/micromanager/block/tool/TaggedImageToIcyImage.java
+++ b/src/main/java/plugins/stef/micromanager/block/tool/TaggedImageToIcyImage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2023. Institut Pasteur.
+ * Copyright (c) 2010-2024. Institut Pasteur.
  *
  * This file is part of Icy.
  * Icy is free software: you can redistribute it and/or modify
@@ -18,9 +18,12 @@
 
 package plugins.stef.micromanager.block.tool;
 
-import icy.image.IcyBufferedImage;
-import icy.type.collection.CollectionUtil;
 import mmcorej.TaggedImage;
+import org.bioimageanalysis.icy.common.collection.CollectionUtil;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginIcon;
+import org.bioimageanalysis.icy.extension.plugin.annotation_.IcyPluginName;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.blocks.util.VarList;
 import plugins.adufour.vars.lang.Var;
 import plugins.adufour.vars.lang.VarArray;
@@ -31,8 +34,10 @@ import plugins.tprovoost.Microscopy.MicroManager.tools.MMUtils;
 /**
  * Block to convert a TaggedImage to an IcyBufferedImage (Micro-Manager)
  *
- * @author Stephane
+ * @author Stephane Dallongeville
  */
+@IcyPluginName("TaggedImage to IcyBufferedImage")
+@IcyPluginIcon(path = "/mm_blocks.png")
 public class TaggedImageToIcyImage extends AbstractMicroscopeBlock {
     VarArray<TaggedImage> in = new VarArray<>("Tagged Image", TaggedImage[].class, new TaggedImage[0]);
     Var<IcyBufferedImage> out = new Var<>("Icy Image", IcyBufferedImage.class);
@@ -48,17 +53,12 @@ public class TaggedImageToIcyImage extends AbstractMicroscopeBlock {
     }
 
     @Override
-    public void declareInput(final VarList inputMap) {
+    public void declareInput(final @NotNull VarList inputMap) {
         inputMap.add("taggedImage", in);
     }
 
     @Override
-    public void declareOutput(final VarList outputMap) {
+    public void declareOutput(final @NotNull VarList outputMap) {
         outputMap.add("icyImage", out);
     }
-
-    @Override
-    public String getName() {
-        return "TaggedImage to IcyBufferedImage";
-    }
 }
\ No newline at end of file
diff --git a/src/main/resources/mm_blocks.png b/src/main/resources/mm_blocks.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d67c2a6236f3c07c84f5b24989f19b80308d412
GIT binary patch
literal 17218
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

literal 0
HcmV?d00001

-- 
GitLab