From 06b9232b9226285e7b68964f1f2f7efe9881cc4e Mon Sep 17 00:00:00 2001
From: Thomas <thomas.musset@pasteur.fr>
Date: Mon, 1 Jul 2024 11:49:42 +0200
Subject: [PATCH] updated pom to v3.0.0-a.1, fix classes accordingly to new
 architecture, added icon, updated .gitignore

---
 .gitignore                                    |  42 +++++++-
 pom.xml                                       |  13 +--
 .../adufour/viewers/ChannelMontage.java       |  95 +++++++++---------
 src/main/resources/Channel_Montage.png        | Bin 0 -> 15247 bytes
 4 files changed, 95 insertions(+), 55 deletions(-)
 create mode 100644 src/main/resources/Channel_Montage.png

diff --git a/.gitignore b/.gitignore
index 8d47cac..57f16fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,41 @@
-.idea/
+/build*
+/workspace
+setting.xml
+release/
 target/
-.settings/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+icy.log
+
+### IntelliJ IDEA ###
+.idea/
+*.iws
 *.iml
-.project
+*.ipr
+
+### Eclipse ###
+.apt_generated
 .classpath
-**/.DS_Store
\ No newline at end of file
+.factorypath
+.project
+.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 8e1e791..4753928 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,14 +8,12 @@
     <parent>
         <groupId>org.bioimageanalysis.icy</groupId>
         <artifactId>pom-icy</artifactId>
-        <version>2.2.0</version>
+        <version>3.0.0-a.1</version>
     </parent>
 
     <!-- Project Information -->
     <artifactId>channel-montage</artifactId>
-    <version>3.0.0</version>
-
-    <packaging>jar</packaging>
+    <version>3.0.0-a.1</version>
 
     <name>Channel Montage</name>
     <description>
@@ -58,6 +56,10 @@
 
     <!-- List of project's dependencies -->
     <dependencies>
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>ezplug</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.bioimageanalysis.icy</groupId>
             <artifactId>blockvars</artifactId>
@@ -68,8 +70,7 @@
     <repositories>
         <repository>
             <id>icy</id>
-            <name>Icy's Nexus</name>
-            <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/adufour/viewers/ChannelMontage.java b/src/main/java/plugins/adufour/viewers/ChannelMontage.java
index 2d7e08d..d5cd9c7 100644
--- a/src/main/java/plugins/adufour/viewers/ChannelMontage.java
+++ b/src/main/java/plugins/adufour/viewers/ChannelMontage.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,29 +18,31 @@
 
 package plugins.adufour.viewers;
 
-import icy.canvas.IcyCanvas;
-import icy.canvas.IcyCanvas2D;
-import icy.canvas.Layer;
-import icy.gui.component.button.IcyButton;
-import icy.gui.viewer.Viewer;
-import icy.image.IcyBufferedImage;
-import icy.image.IcyBufferedImageUtil;
-import icy.image.colormap.IcyColorMap;
-import icy.image.colormap.LinearColorMap;
-import icy.image.lut.LUT;
-import icy.image.lut.LUT.LUTChannel;
-import icy.plugin.abstract_.Plugin;
-import icy.plugin.interface_.PluginCanvas;
-import icy.preferences.CanvasPreferences;
-import icy.resource.ResourceUtil;
-import icy.resource.icon.IcyIcon;
-import icy.roi.ROI;
-import icy.sequence.DimensionId;
-import icy.sequence.SequenceEvent.SequenceEventType;
-import icy.system.IcyExceptionHandler;
-import icy.system.thread.SingleProcessor;
-import icy.type.point.Point5D;
-import icy.util.GraphicsUtil;
+import org.bioimageanalysis.icy.common.geom.point.Point5D;
+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_.PluginCanvas;
+import org.bioimageanalysis.icy.gui.GraphicsUtil;
+import org.bioimageanalysis.icy.gui.canvas.IcyCanvas2D;
+import org.bioimageanalysis.icy.gui.canvas.Layer;
+import org.bioimageanalysis.icy.gui.component.button.IcyButton;
+import org.bioimageanalysis.icy.gui.component.icon.IcySVGIcon;
+import org.bioimageanalysis.icy.gui.component.icon.SVGIcon;
+import org.bioimageanalysis.icy.gui.viewer.Viewer;
+import org.bioimageanalysis.icy.model.colormap.IcyColorMap;
+import org.bioimageanalysis.icy.model.colormap.LinearColorMap;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImage;
+import org.bioimageanalysis.icy.model.image.IcyBufferedImageUtil;
+import org.bioimageanalysis.icy.model.lut.LUT;
+import org.bioimageanalysis.icy.model.roi.ROI;
+import org.bioimageanalysis.icy.model.sequence.DimensionId;
+import org.bioimageanalysis.icy.model.sequence.SequenceEvent;
+import org.bioimageanalysis.icy.system.logging.IcyLogger;
+import org.bioimageanalysis.icy.system.preferences.CanvasPreferences;
+import org.bioimageanalysis.icy.system.thread.SingleProcessor;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
 import plugins.adufour.vars.gui.model.IntegerRangeModel;
 import plugins.adufour.vars.gui.swing.SwingVarEditor;
 import plugins.adufour.vars.lang.Var;
@@ -61,18 +63,20 @@ import java.util.List;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
-public class ChannelMontage extends Plugin implements PluginCanvas {
+@IcyPluginName("Channel Montage")
+@IcyPluginIcon(path = "/Channel_Montage.png")
+public class ChannelMontage extends Plugin implements PluginCanvas<ChannelMontage.ChannelMontageCanvas> {
     @Override
     public String getCanvasClassName() {
         return ChannelMontage.class.getName();
     }
 
     @Override
-    public IcyCanvas createCanvas(final Viewer viewer) {
+    public ChannelMontageCanvas createCanvas(final Viewer viewer) {
         return new ChannelMontageCanvas(viewer);
     }
 
-    public class ChannelMontageCanvas extends IcyCanvas2D implements MouseWheelListener {
+    public static class ChannelMontageCanvas extends IcyCanvas2D implements MouseWheelListener {
         final ScrollableFlowLayout layout = new ScrollableFlowLayout(ScrollableFlowLayout.Orientation.VERTICAL, FlowLayout.CENTER, 5, 5);
 
         final JPanel mainPanel = new JPanel(layout);
@@ -163,13 +167,13 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
         }
 
         @Override
-        public void customizeToolbar(final JToolBar toolbar) {
-            final IcyIcon rgbIcon = new IcyIcon(ResourceUtil.ICON_RGB_COLOR, false);
-            final IcyIcon grayIcon = new IcyIcon(ResourceUtil.ICON_GRAY_COLOR, false);
+        public void customizeToolbar(final @NotNull JToolBar toolbar) {
+            final IcySVGIcon rgbIcon = new IcySVGIcon(SVGIcon.RGB_IMAGE);
+            final IcySVGIcon grayIcon = new IcySVGIcon(SVGIcon.GRAYSCALE_IMAGE);
 
             toolbar.addSeparator();
 
-            final IcyButton color = new IcyButton(grayIcon);
+            final IcyButton color = new IcyButton(SVGIcon.GRAYSCALE_IMAGE);
             color.setToolTipText("Switch to grayscale mode");
             color.setFocusable(false);
             color.addActionListener(e -> {
@@ -188,7 +192,6 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
 
             imageSize.setDefaultEditorModel(new IntegerRangeModel(250, 20, 2048, 1));
             imageSize.addListener(new VarListener<>() {
-
                 @Override
                 public void valueChanged(final Var<Integer> source, final Integer oldValue, final Integer newValue) {
                     resizeViews();
@@ -206,7 +209,6 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
 
             margin.setDefaultEditorModel(new IntegerRangeModel(5, 0, 100, 1));
             margin.addListener(new VarListener<>() {
-
                 @Override
                 public void valueChanged(final Var<Integer> source, final Integer oldValue, final Integer newValue) {
                     layout.setHgap(newValue);
@@ -311,7 +313,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
             }
 
             final ChannelView currentView = channelViews.get(channel);
-            final ChannelView globalView = channelViews.get(channelViews.size() - 1);
+            final ChannelView globalView = channelViews.getLast();
 
             currentView.imageCache.updateLUT();
             currentView.imageChanged();
@@ -338,7 +340,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
         }
 
         @Override
-        protected void sequenceROIChanged(final ROI roi, final SequenceEventType type) {
+        protected void sequenceROIChanged(final ROI roi, final SequenceEvent.SequenceEventType type) {
             super.sequenceROIChanged(roi, type);
             repaint();
         }
@@ -405,6 +407,8 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
                     processor.submit(this);
                 }
 
+                @SuppressWarnings("UnstableApiUsage")
+                @Contract(mutates = "this")
                 private void invalidCache() {
                     needRebuild = true;
                 }
@@ -419,7 +423,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
 
                     if (channel != -1) {
                         for (int c = 0; c < getCurrentImage().getSizeC(); c++) {
-                            final LUTChannel lutC = lut.getLutChannel(c);
+                            final LUT.LUTChannel lutC = lut.getLutChannel(c);
                             lutC.setEnabled(c == channel);
                             if (grayscale.getValue()) lutC.setColorMap(grayMap, false);
                         }
@@ -447,7 +451,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
                             result.get();
                         }
                         catch (final Exception e) {
-                            e.printStackTrace();
+                            IcyLogger.error(ChannelMontage.class, e, e.getLocalizedMessage());
                         }
                     }
 
@@ -472,7 +476,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
                             imageCache = IcyBufferedImageUtil.toBufferedImage(img, imageCache, lut);
                         }
                         catch (final InterruptedException e) {
-                            IcyExceptionHandler.showErrorMessage(e, false);
+                            // ignore
                         }
                     }
                     else imageCache = null;
@@ -538,7 +542,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
             }
 
             @Override
-            public void mouseMoved(final MouseEvent e) {
+            public void mouseMoved(final @NotNull MouseEvent e) {
                 final Point2D p2 = canvasToImage(e.getPoint());
                 mousePosition.setX(p2.getX());
                 mousePosition.setY(p2.getY());
@@ -552,7 +556,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
             }
 
             @Override
-            public void mouseDragged(final MouseEvent e) {
+            public void mouseDragged(final @NotNull MouseEvent e) {
                 final Point2D p2 = canvasToImage(e.getPoint());
                 mousePosition.setX(p2.getX());
                 mousePosition.setY(p2.getY());
@@ -564,7 +568,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
             }
 
             @Override
-            public void mouseWheelMoved(final MouseWheelEvent e) {
+            public void mouseWheelMoved(final @NotNull MouseWheelEvent e) {
                 // sizeSlider.setValue(sizeSlider.getValue() + e.getWheelRotation());
                 imageSize.setValue(imageSize.getValue() + e.getWheelRotation());
             }
@@ -742,7 +746,6 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
             public boolean isCacheValid() {
                 return imageCache.isValid();
             }
-
         }
 
         @Override
@@ -790,7 +793,7 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
         }
 
         @Override
-        public void mouseWheelMoved(final MouseWheelEvent e) {
+        public void mouseWheelMoved(final @NotNull MouseWheelEvent e) {
             // sizeSlider.setValue(sizeSlider.getValue() + e.getWheelRotation());
             imageSize.setValue(imageSize.getValue() + e.getWheelRotation());
         }
@@ -840,7 +843,8 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
             return super.preferredLayoutSize(target);
         }
 
-        private static Dimension computeMinSize(final Container target) {
+        @Contract("_ -> new")
+        private static @NotNull Dimension computeMinSize(final @NotNull Container target) {
             synchronized (target.getTreeLock()) {
                 int minx = Integer.MAX_VALUE;
                 //int miny = Integer.MIN_VALUE;
@@ -864,7 +868,8 @@ public class ChannelMontage extends Plugin implements PluginCanvas {
             }
         }
 
-        private Dimension computeSize(final Container target) {
+        @Contract("_ -> new")
+        private @NotNull Dimension computeSize(final @NotNull Container target) {
             synchronized (target.getTreeLock()) {
                 final int hgap = getHgap();
                 final int vgap = getVgap();
diff --git a/src/main/resources/Channel_Montage.png b/src/main/resources/Channel_Montage.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d1dee0f172b3099e13231b08a77c5f145f7c30a
GIT binary patch
literal 15247
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
KDqSmS68t}}QVGid

literal 0
HcmV?d00001

-- 
GitLab