diff --git a/.gitignore b/.gitignore index d4c3a6c5e5d37c1d2e1b9bcdddf30fb1530593bd..57f16fb67c1b1589981416b323d7a9debc728665 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 1ac5ed60cf6b5586bb20c3aac3bb9a853c90be83..2c74297cdfc04b2124e3c2104590281667561198 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 24ba799a9cf2cb5d7ec6726050b7dc47288f1492..1988b78fbb59356e6e33e03fdd1ae6134d2726a4 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 a61fa1725b396379c44e8068577e721b0cecad97..7d7d331cf205dd326677ae60dcb9817365a8662b 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 bd0f6c2ed13695dbb5f4b7519de54b9f3b174a49..1c8911064e0b0d71513f537728395f36b658ad0d 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 a6b988253dd3d21afa8df4d37ee23f9111a9bb16..25a3c1f4653e5509ce086f51eb7ebc132b83d864 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 05c7845fb8001282c1013b2356e56bed0f519ba4..062fb6124f4336a7463769f9fe2d7b07c62a2242 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 7105ac8bd0e039ebe3a7c810ce706b932c2778c3..1e47dd944f6b30f89533efbfc0b4f71b9c125696 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 005b165619417e9164e1c0ece5f42c99c78c3977..f97cb8080b0bde101ec95e333e973a4ec2dda150 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 67d70d78501e4ea21cf160b4fac482848c739278..0342b5f0c12536b813498b37b5bc5f1ee24d0dda 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 ecf62f70255c452ec7944330378474461af54471..dbe80b299fbc6fd7ca36be74fd9102fb71aff6af 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 f6952b4d81c101788ddc6e0b0c5fcfc95af30e8a..af62c444b33373ca475b53f0eb6be6f78245c290 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 656ff7d2633993be4d31e19e1c03ee490f7ab2aa..c40882dcc5e1d54198dd4f76ea9cece6ccde4ba9 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 ece292cd08fb9aae1af85a574695e2ed7e0b45ca..1dbc6b8cca44ad9d6126dd1b2a9b8f31c66b6b7b 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 59c90868601b970be45ec0107f3d806e74f301ab..5ad9ed021e8d3dcf646058e940c93dd582138a6c 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 52157d65b52469910a3b1539e755d294c35e6ada..94baccb874973d7486745e865136bb3d02778db6 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 e4814215097777108cabea81c5b64b4c7366875c..feedefb8ab0b19ccace94e100566cac6d87cf977 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 19ce2c474ced75fc9915381e183517302a8cdc70..095ef69a45474451ea59bb6ea5d82d225838b31c 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 fbb0c2bea2e7843248dd65ce710dc06dc9eb35fe..79f230d2a1b23a5c01ee03394a8852df5db9b8d0 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 803e6e75f4c81d07b566c88757b7cbc27b39a61a..90e9b45a815bf75f28bd0c6847f8f16736d818d7 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 82b13e0a5a8cdc2cd9ffefb6ba1248dca58086f8..0588cd396b3ce9f54365e52242ea7cdc11fcc567 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 9f91b3403ff42cf824516e62cacf5aeb87403fee..900b15a673bf44a9d60f1e30fd61dce2a6da4fe6 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 8b08e76c81cad640dfa237945fae51808e5925bd..aa52224d579ca33ab244848c5665e7ef761ccf97 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 97db9cc131badf2003a9099b42457247045bc6ab..bbb32b228317079fd373772ab1d50af5cf45e877 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 71084a044c126b5906e54ebdfa7a51bf82eddf3f..23f46eaf08ef91a28c046bc504e83d94b9e79479 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 7574f55a0c8a3c2b75c2fbddf5d685c9571c4b24..15efac45b693c76586ef8f2b5c6a40354b6d8a8d 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 Binary files /dev/null and b/src/main/resources/mm_blocks.png differ