From 7096e8632b79718554e7624a48a06178a96ad1dc Mon Sep 17 00:00:00 2001
From: Amandine Tournay <amandine.tournay@pasteur.fr>
Date: Tue, 9 Mar 2021 17:29:56 +0100
Subject: [PATCH] Added project

---
 .gitignore                                    |   6 +
 pom.xml                                       |  90 +++
 .../MicroscopeRemotePlugin.java               |  52 ++
 .../Microscopy/gui/InverterCheckBox.java      |  78 ++
 .../Microscopy/gui/MemoryButton.java          | 157 ++++
 .../Microscopy/gui/PanelMoverXY.java          | 246 +++++++
 .../tprovoost/Microscopy/gui/PanelMoverZ.java | 202 ++++++
 .../tprovoost/Microscopy/gui/RemoteFrame.java | 370 ++++++++++
 .../Microscopy/images/RemoteFull_2.png        | Bin 0 -> 13331 bytes
 .../tprovoost/Microscopy/images/btnRound.png  | Bin 0 -> 5615 bytes
 .../Microscopy/images/btnRound_off.png        | Bin 0 -> 4985 bytes
 .../Microscopy/images/btn_switchOff.png       | Bin 0 -> 3341 bytes
 .../Microscopy/images/btn_switchOn.png        | Bin 0 -> 3318 bytes
 .../tprovoost/Microscopy/images/knob.png      | Bin 0 -> 2882 bytes
 .../tprovoost/Microscopy/images/memoryOff.png | Bin 0 -> 3019 bytes
 .../tprovoost/Microscopy/images/memoryOn.png  | Bin 0 -> 3183 bytes
 .../Microscopy/images/remote_backgroundXY.png | Bin 0 -> 34780 bytes
 .../Microscopy/images/remote_backgroundZ.png  | Bin 0 -> 7948 bytes
 .../Microscopy/images/singleBarZ.png          | Bin 0 -> 3500 bytes
 src/main/resources/LICENSE                    | 674 ++++++++++++++++++
 20 files changed, 1875 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 pom.xml
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/MicroscopeRemote/MicroscopeRemotePlugin.java
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/gui/InverterCheckBox.java
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/gui/MemoryButton.java
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/gui/PanelMoverXY.java
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/gui/PanelMoverZ.java
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/gui/RemoteFrame.java
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/RemoteFull_2.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/btnRound.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/btnRound_off.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/btn_switchOff.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/btn_switchOn.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/knob.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/memoryOff.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/memoryOn.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/remote_backgroundXY.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/remote_backgroundZ.png
 create mode 100644 src/main/java/plugins/tprovoost/Microscopy/images/singleBarZ.png
 create mode 100644 src/main/resources/LICENSE

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3d47f98
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+.idea/
+target/
+.settings/
+*.iml
+.project
+.classpath
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..0f57dc0
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <!-- Inherited Icy Parent POM -->
+    <parent>
+        <groupId>org.bioimageanalysis.icy</groupId>
+        <artifactId>parent-pom-plugin</artifactId>
+        <version>1.0.3</version>
+    </parent>
+
+    <!-- Project Information -->
+    <artifactId>microscope-remote</artifactId>
+    <version>2.3.1</version>
+
+    <packaging>jar</packaging>
+
+    <name>Microscope Remote</name>
+    <description>Move your XY Stage and Focus Device with your mouse. </description>
+    <url>http://icy.bioimageanalysis.org/plugin/microscope-remote/</url>
+    <inceptionYear>2020</inceptionYear>
+
+    <organization>
+        <name>Institut Pasteur</name>
+        <url>https://pasteur.fr</url>
+    </organization>
+
+    <licenses>
+        <license>
+            <name>GNU GPLv3</name>
+            <url>https://www.gnu.org/licenses/gpl-3.0.en.html</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <developers>
+        <developer>
+            <id>sdallongeville</id>
+            <name>Stéphane Dallongeville</name>
+            <url>https://research.pasteur.fr/fr/member/stephane-dallongeville/</url>
+            <roles>
+                <role>founder</role>
+                <role>lead</role>
+                <role>architect</role>
+                <role>developer</role>
+                <role>debugger</role>
+                <role>tester</role>
+                <role>maintainer</role>
+                <role>support</role>
+            </roles>
+        </developer>
+    </developers>
+
+    <!-- Project properties -->
+    <properties>
+
+    </properties>
+
+    <!-- Project build configuration -->
+    <build>
+
+    </build>
+
+    <!-- List of project's dependencies -->
+    <dependencies>
+        <!-- The core of Icy -->
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>icy-kernel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.bioimageanalysis.icy</groupId>
+            <artifactId>micromanager</artifactId>
+            <version>1.9.0</version>
+        </dependency>
+
+    </dependencies>
+
+    <!-- Icy Maven repository (to find parent POM) -->
+    <repositories>
+        <repository>
+            <id>icy</id>
+            <name>Icy's Nexus</name>
+            <url>https://icy-nexus.pasteur.fr/repository/Icy/</url>
+        </repository>
+    </repositories>
+</project>
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/Microscopy/MicroscopeRemote/MicroscopeRemotePlugin.java b/src/main/java/plugins/tprovoost/Microscopy/MicroscopeRemote/MicroscopeRemotePlugin.java
new file mode 100644
index 0000000..601ac96
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/Microscopy/MicroscopeRemote/MicroscopeRemotePlugin.java
@@ -0,0 +1,52 @@
+package plugins.tprovoost.Microscopy.MicroscopeRemote;
+
+import icy.gui.frame.IcyFrameAdapter;
+import icy.gui.frame.IcyFrameEvent;
+import plugins.tprovoost.Microscopy.MicroManagerForIcy.MicroscopePlugin;
+import plugins.tprovoost.Microscopy.gui.RemoteFrame;
+
+/**
+ * @author Irsath Nguyen
+ */
+public class MicroscopeRemotePlugin extends MicroscopePlugin
+{
+    // static instance
+    static RemoteFrame instance = null;
+
+    public MicroscopeRemotePlugin()
+    {
+        if (instance == null)
+        {
+            // Creation of the frame.
+            instance = new RemoteFrame(this);
+
+            // Add a listener on the frame : when the frame is closed
+            // the plugin is removed from the GUI plugin
+            instance.addFrameListener(new IcyFrameAdapter()
+            {
+                @Override
+                public void icyFrameClosed(IcyFrameEvent e)
+                {
+                    shutdown();
+                }
+            });
+        }
+    }
+
+    @Override
+    public void start()
+    {
+        if (instance != null)
+            instance.toFront();
+    }
+
+    @Override
+    public void shutdown()
+    {
+        super.shutdown();
+
+        if (instance != null)
+            instance.dispose();
+        instance = null;
+    }
+}
diff --git a/src/main/java/plugins/tprovoost/Microscopy/gui/InverterCheckBox.java b/src/main/java/plugins/tprovoost/Microscopy/gui/InverterCheckBox.java
new file mode 100644
index 0000000..417b1b3
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/Microscopy/gui/InverterCheckBox.java
@@ -0,0 +1,78 @@
+package plugins.tprovoost.Microscopy.gui;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+
+import javax.swing.JCheckBox;
+
+public class InverterCheckBox extends JCheckBox {
+
+	/** */
+	private static final long serialVersionUID = 4893333197103321565L;
+
+	private static int knobLength = 40;
+	private static int knobHeight = 20;
+	private static int buttonSize = 20;
+
+	// IMAGES
+	private BufferedImage imgBtnInvertOn;
+	private BufferedImage imgBtnInvertOff;
+	private BufferedImage imgLightOn;
+	private BufferedImage imgLightOff;
+
+	public InverterCheckBox(String string) {
+		super(string);
+	}
+
+	public void setImages(BufferedImage imgBtnInvertOn,
+			BufferedImage imgBtnInvertOff, BufferedImage imgLightOn,
+			BufferedImage imgLightOff) {
+		this.imgBtnInvertOn = imgBtnInvertOn;
+		this.imgBtnInvertOff = imgBtnInvertOff;
+		this.imgLightOn = imgLightOn;
+		this.imgLightOff = imgLightOff;
+	}
+
+	@Override
+	protected void paintComponent(Graphics g) {
+		super.paintComponent(g);
+		boolean selected = isSelected();
+		String text = getText();
+		Font f = new Font("Arial", Font.BOLD, 16);
+		int actualWidthIdx = 30;
+		int height = getHeight();
+
+		Graphics2D g2 = (Graphics2D) g.create();
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
+		g2.setFont(f);
+		FontMetrics fm = g2.getFontMetrics();
+		g2.setColor(new Color(39, 39, 39, 255));
+		g2.fillRect(0, 0, getWidth(), height);
+		g2.setColor(Color.lightGray);
+
+		// Draw the knob
+		if (selected) {
+			g2.drawImage(imgBtnInvertOn, actualWidthIdx - 20, height / 2- knobHeight / 2, knobLength, knobHeight, null);
+		} else {
+			g2.drawImage(imgBtnInvertOff, actualWidthIdx - 20, height / 2- knobHeight / 2, knobLength, knobHeight, null);
+		}
+		actualWidthIdx += 20;
+
+		// draw the text
+		g2.drawString(text, actualWidthIdx += 20, height / 2 + fm.getHeight()/ 2);
+		actualWidthIdx += 120;
+
+		// draw the light
+		if (selected) {
+			g2.drawImage(imgLightOn, actualWidthIdx + 20, height / 2- buttonSize / 2, buttonSize, buttonSize, null);
+		} else {
+			g2.drawImage(imgLightOff, actualWidthIdx + 20, height / 2- buttonSize / 2, buttonSize, buttonSize, null);
+		}
+		g2.dispose();
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/Microscopy/gui/MemoryButton.java b/src/main/java/plugins/tprovoost/Microscopy/gui/MemoryButton.java
new file mode 100644
index 0000000..75d0325
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/Microscopy/gui/MemoryButton.java
@@ -0,0 +1,157 @@
+package plugins.tprovoost.Microscopy.gui;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.image.BufferedImage;
+
+import javax.swing.JButton;
+
+import icy.gui.frame.progress.AnnounceFrame;
+import icy.gui.frame.progress.FailedAnnounceFrame;
+import icy.type.point.Point3D;
+import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
+
+public class MemoryButton extends JButton implements MouseListener
+{
+
+    /** Default serial UID */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * When the button is pressed, the {@link System#nanoTime()} is stored in
+     * this variable.
+     */
+    long datePressed = 0;
+
+    // IMAGES FOR DRAWING
+    private BufferedImage imgMemBtnOn = null;
+    private BufferedImage imgMemBtnOff = null;
+
+    /** This variable contains the value of the 3D point in this memory button. */
+    private Point3D.Double memoryButtonPoint;
+
+    public MemoryButton(String string, BufferedImage imgMemBtnOn, BufferedImage imgMemBtnOff)
+    {
+        super(string);
+
+        this.imgMemBtnOn = imgMemBtnOn;
+        this.imgMemBtnOff = imgMemBtnOff;
+        setOpaque(true);
+        addMouseListener(this);
+    }
+
+    private void forgetPoint()
+    {
+        memoryButtonPoint = null;
+        setSelected(false);
+    }
+
+    private void rememberPoint() throws Exception
+    {
+        Point3D.Double xyz = StageMover.getXYZ();
+        if (memoryButtonPoint == null)
+            memoryButtonPoint = xyz;
+        else
+            memoryButtonPoint.setLocation(xyz);
+        setSelected(true);
+    }
+
+    private void gotoPoint() throws Exception
+    {
+        if (memoryButtonPoint != null)
+        {
+            StageMover.moveXYAbsolute(memoryButtonPoint.x, memoryButtonPoint.y);
+            StageMover.moveZAbsolute(memoryButtonPoint.z);
+        }
+    }
+
+    @Override
+    public void mouseEntered(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mouseExited(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mouseClicked(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e)
+    {
+        if (e.isControlDown())
+            forgetPoint();
+        else
+            datePressed = System.nanoTime();
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent e)
+    {
+        // quick press ?
+        if (System.nanoTime() - datePressed < 1500000000L)
+        {
+            try
+            {
+                gotoPoint();
+            }
+            catch (Exception e1)
+            {
+                new AnnounceFrame("Error while going to the saved point.");
+            }
+        }
+        else
+        {
+            // long press
+            try
+            {
+                rememberPoint();
+            }
+            catch (Exception e1)
+            {
+                new FailedAnnounceFrame("Failed to save position, please try again", 3);
+            }
+        }
+    }
+
+    @Override
+    public void paint(Graphics g)
+    {
+        super.paint(g);
+        boolean selected = isSelected();
+        int width = getWidth();
+        int height = getHeight();
+        Graphics2D g2 = (Graphics2D) g.create();
+        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+
+        if (selected)
+        {
+            g2.drawImage(imgMemBtnOn, 0, 0, width, height, null);
+            g2.setColor(Color.black);
+
+        }
+        else
+        {
+            g2.drawImage(imgMemBtnOff, 0, 0, width, height, null);
+            g2.setColor(Color.LIGHT_GRAY);
+
+        }
+
+        g2.setFont(new Font("Arial", Font.BOLD, 20));
+        FontMetrics fm = g2.getFontMetrics();
+        String toDisplay = getText();
+        g2.drawString(toDisplay, width / 2 - fm.charsWidth(toDisplay.toCharArray(), 0, toDisplay.length()) / 2,
+                height / 2 + fm.getHeight() / 3);
+        g2.dispose();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/Microscopy/gui/PanelMoverXY.java b/src/main/java/plugins/tprovoost/Microscopy/gui/PanelMoverXY.java
new file mode 100644
index 0000000..5a1d2f3
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/Microscopy/gui/PanelMoverXY.java
@@ -0,0 +1,246 @@
+package plugins.tprovoost.Microscopy.gui;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GradientPaint;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.MultipleGradientPaint.CycleMethod;
+import java.awt.Paint;
+import java.awt.RadialGradientPaint;
+import java.awt.RenderingHints;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+
+import javax.swing.JPanel;
+
+import plugins.tprovoost.Microscopy.MicroManager.MicroManager;
+import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
+
+/**
+ * @author Irsath Nguyen
+ */
+public class PanelMoverXY extends JPanel implements MouseListener, MouseMotionListener, Runnable
+{
+   
+    /**
+     * Generated serial UID
+     */
+    private static final long serialVersionUID = -5025582239086787935L;
+
+    private BufferedImage imgXYBg = null;
+    private static final int SIZE_PANEL_MOVER = 200;
+
+    /** Movement Vector */
+    private Point2D vector;
+    private RemoteFrame frame;
+    private Thread moveThread;
+
+    public PanelMoverXY(RemoteFrame frame)
+    {
+        super();
+
+        this.frame = frame;
+        vector = new Point2D.Double(0, 0);
+        setOpaque(true);
+        setDoubleBuffered(true);
+        setSize(new Dimension(SIZE_PANEL_MOVER, SIZE_PANEL_MOVER));
+        setPreferredSize(new Dimension(SIZE_PANEL_MOVER, SIZE_PANEL_MOVER));
+        addMouseListener(this);
+        addMouseMotionListener(this);
+
+        imgXYBg = frame.plugin.getImageResource(RemoteFrame.currentPath + "remote_backgroundXY.png");
+        moveThread = new Thread(this, "Remote XY mover");
+        moveThread.start();
+    }
+
+    @Override
+    public void paintComponent(Graphics g)
+    {
+        super.paintComponent(g);
+        int w = getWidth();
+        int h = getHeight();
+        AffineTransform at;
+        Graphics2D g2 = (Graphics2D) g.create();
+        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2.setColor(new Color(39, 39, 39));
+        g2.fillRect(0, 0, w, h);
+
+        if (imgXYBg != null)
+        {
+            g2.drawImage(imgXYBg, 0, 0, w, h, null);
+            int stickBallDiameter = w / 5;
+            Point2D centerBall = new Point2D.Double(w / 2d + vector.getX(), h / 2d + vector.getY());
+            g2.setColor(Color.darkGray);
+            double normVector = norm(vector);
+            if (vector.getX() != 0 || vector.getY() != 0)
+            {
+                g2.setColor(Color.blue);
+                // ----------
+                // draw stick
+                // ----------
+                Graphics2D g3 = (Graphics2D) g2.create();
+                at = AffineTransform.getTranslateInstance(centerBall.getX(), centerBall.getY());
+                at.rotate(-vector.getX(), -vector.getY());
+                at.translate(0, -stickBallDiameter / 4);
+                g3.transform(at);
+                g3.setPaint(new GradientPaint(new Point2D.Double(0, 0), Color.BLACK, new Point2D.Double(0,
+                        (getWidth() / 5) / 4), Color.LIGHT_GRAY, true));
+                g3.fillRoundRect(0, 0, (int) normVector, stickBallDiameter / 2, stickBallDiameter / 2,
+                        stickBallDiameter / 2);
+                g3.dispose();
+            }
+            // ---------
+            // draw ball
+            // ---------
+            Paint defaultPaint = g2.getPaint();
+            Point2D centerGradient = new Point2D.Double(centerBall.getX(), centerBall.getY());
+            float radiusGradient = stickBallDiameter / 2;
+            Point2D focusSpotLightGradient;
+            if (Math.abs(vector.getX()) <= 1 && Math.abs(vector.getY()) <= 1)
+            {
+                focusSpotLightGradient = new Point2D.Double(centerBall.getX(), centerBall.getY());
+            }
+            else
+            {
+                focusSpotLightGradient = new Point2D.Double(centerBall.getX() + vector.getX() * (radiusGradient - 5)
+                        / normVector, centerBall.getY() + vector.getY() / normVector * (radiusGradient - 5));
+            }
+            float[] dist = {0.1f, 0.3f, 1.0f};
+            Color[] colors = {new Color(0.9f, 0.9f, 0.9f), Color.LIGHT_GRAY, Color.DARK_GRAY};
+            RadialGradientPaint p = new RadialGradientPaint(centerGradient, radiusGradient, focusSpotLightGradient,
+                    dist, colors, CycleMethod.NO_CYCLE);
+            g2.setPaint(p);
+            g2.fillOval((int) centerBall.getX() - stickBallDiameter / 2, (int) centerBall.getY() - stickBallDiameter
+                    / 2, stickBallDiameter, stickBallDiameter);
+            g2.setPaint(defaultPaint);
+            g2.setColor(Color.BLACK);
+            g2.drawOval((int) centerBall.getX() - stickBallDiameter / 2, (int) centerBall.getY() - stickBallDiameter
+                    / 2, stickBallDiameter, stickBallDiameter);
+        }
+        g2.dispose();
+    }
+
+    public void applyMovementXY() throws Exception
+    {
+        double vx = vector.getX();
+        double vy = vector.getY();
+        if (vx == 0 && vy == 0)// no movement, do not send a signal
+            return;
+        
+        double normV = norm(vector);
+        double x = vx / normV;
+        double y = vy / normV;
+        
+        double movementX;
+        double movementY;
+        double percent = norm(vector) * frame._sliderSpeed.getValue();
+        double pxSize = MicroManager.getPixelSize();
+        
+        if (pxSize == 0d)
+        {
+            movementX = x * 0.001 * percent * percent;
+            movementY = y * 0.001 * percent * percent;
+        }
+        else
+        {
+            movementX = x * 0.001 * pxSize * percent * percent;
+            movementY = y * 0.001 * pxSize * percent * percent;
+        }
+
+        StageMover.moveXYRelative(movementX, movementY, true);
+    }
+
+    private double norm(Point2D vector)
+    {
+        double x = vector.getX();
+        double y = vector.getY();
+        return Math.sqrt(x * x + y * y);
+    }
+
+    @Override
+    public void mouseDragged(MouseEvent e)
+    {
+        int x = e.getX();
+        int y = e.getY();
+        int width = getWidth();
+        int height = getHeight();
+
+        if (x < 0)
+            x = 0;
+        if (x > width)
+            x = width;
+
+        if (y < 0)
+            y = 0;
+        if (y > height)
+            y = height;
+        vector.setLocation(x - width / 2, y - height / 2);
+        repaint();
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e)
+    {
+        vector.setLocation(e.getX() - (getWidth() / 2), e.getY() - (getHeight() / 2));
+        repaint();
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent e)
+    {
+        vector.setLocation(0, 0);
+        repaint();
+    }
+
+    @Override
+    public void mouseMoved(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mouseClicked(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mouseEntered(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mouseExited(MouseEvent e)
+    {
+    }
+    
+    @Override
+    public void run()
+    {
+        while (!moveThread.isInterrupted())
+        {
+            try
+            {
+                applyMovementXY();
+                Thread.sleep(1);
+            }
+            catch (InterruptedException e)
+            {
+                moveThread.interrupt();
+            }
+            catch (Exception e)
+            {
+                System.err.println(e.getMessage());
+            }
+        }
+    }
+
+    public void shutdown()
+    {
+        // end process
+        moveThread.interrupt();
+    }
+}
diff --git a/src/main/java/plugins/tprovoost/Microscopy/gui/PanelMoverZ.java b/src/main/java/plugins/tprovoost/Microscopy/gui/PanelMoverZ.java
new file mode 100644
index 0000000..f6dabc5
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/Microscopy/gui/PanelMoverZ.java
@@ -0,0 +1,202 @@
+package plugins.tprovoost.Microscopy.gui;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.image.BufferedImage;
+
+import javax.swing.JPanel;
+
+import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
+
+/**
+ * @author Irsath Nguyen
+ */
+public class PanelMoverZ extends JPanel implements MouseListener, MouseMotionListener, Runnable
+{
+    /**
+     * Generated serial UID
+     */
+    private static final long serialVersionUID = -5025582239086787935L;
+
+    // CONSTANTS
+    private static final int SIZE_PANEL_MOVERZ_W = 50;
+    private static final int SIZE_PANEL_MOVERZ_H = 200;
+
+    private static final double BARS_NUMBER = 200;
+
+    private BufferedImage imgZBg = null;
+    private BufferedImage imgZBar = null;
+
+    /** Movement Vector */
+    int oldY;
+
+    private int startPos = 0;
+    private RemoteFrame frame;
+    private Thread moveThread;
+    private double offZ = 0d;
+
+    public PanelMoverZ(RemoteFrame frame)
+    {
+        super();
+
+        this.frame = frame;
+        setOpaque(true);
+        setDoubleBuffered(true);
+        setSize(new Dimension(SIZE_PANEL_MOVERZ_W, SIZE_PANEL_MOVERZ_H));
+        setPreferredSize(new Dimension(SIZE_PANEL_MOVERZ_W, SIZE_PANEL_MOVERZ_H));
+        addMouseListener(this);
+        addMouseMotionListener(this);
+
+        imgZBg = frame.plugin.getImageResource(RemoteFrame.currentPath + "remote_backgroundZ.png");
+        imgZBar = frame.plugin.getImageResource(RemoteFrame.currentPath + "singleBarZ.png");
+        moveThread = new Thread(this, "Remote Z mover");
+        moveThread.start();
+    }
+
+    @Override
+    public void paintComponent(Graphics g)
+    {
+        super.paintComponent(g);
+        int w = getWidth();
+        int h = getHeight();
+        Graphics2D g2 = (Graphics2D) g.create();
+        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2.setColor(new Color(39, 39, 39));
+        g2.fillRect(0, 0, w, h);
+
+        if (imgZBg != null && imgZBar != null)
+        {
+            // draw the background + joystick
+            g2.drawImage(imgZBg, 0, 0, w, h, null);
+            double ecartNormal = (double) h / 8d;
+            double lastPos = h / 2d + startPos;
+            for (int i = 0; i < BARS_NUMBER; ++i)
+            {
+                g2.drawImage(imgZBar, 0, (int) lastPos, w, imgZBar.getHeight(null) * w / imgZBar.getWidth(null), null);
+                lastPos = lastPos + ecartNormal / (1d + 0.1 * i * i);
+                if (lastPos > h)
+                    break;
+            }
+            lastPos = h / 2d + startPos;
+            for (int i = 0; i < BARS_NUMBER; ++i)
+            {
+                g2.drawImage(imgZBar, 0, (int) lastPos, w, imgZBar.getHeight(null) * w / imgZBar.getWidth(null), null);
+                lastPos = lastPos - ecartNormal / (1d + 0.1 * i * i);
+                if (lastPos < 0)
+                    break;
+            }
+        }
+        g2.dispose();
+    }
+
+    @Override
+    public void mouseDragged(MouseEvent e)
+    {
+        final int movY = e.getY() - oldY;
+        if (movY == 0)
+            return;
+
+        oldY = e.getY();
+        double ecartNormal = getHeight() / 8d / 2d;
+        if (movY > 0)
+        {
+            ++startPos;
+            if (startPos > ecartNormal)
+                startPos = (int) -ecartNormal;
+        }
+        else
+        {
+            --startPos;
+            if (startPos < -ecartNormal)
+                startPos = (int) ecartNormal;
+        }
+        final int percent = frame._sliderSpeed.getValue();
+
+        synchronized (this)
+        {
+            offZ += movY * 0.1 * percent * percent;
+        }
+
+        repaint();
+    }
+
+    @Override
+    public void mouseMoved(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mouseClicked(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mouseEntered(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mouseExited(MouseEvent e)
+    {
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e)
+    {
+        oldY = e.getY();
+        setCursor(new Cursor(Cursor.N_RESIZE_CURSOR | Cursor.S_RESIZE_CURSOR));
+        repaint();
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent e)
+    {
+        setCursor(Cursor.getDefaultCursor());
+        repaint();
+    }
+
+    @Override
+    public void run()
+    {
+        while (!moveThread.isInterrupted())
+        {
+            final double off;
+
+            synchronized (this)
+            {
+                off = offZ;
+                offZ = 0d;
+            }
+
+            if (off != 0d)
+            {
+                try
+                {
+                    StageMover.moveZRelative(off, false);
+                    Thread.sleep(1);
+                }
+                catch (InterruptedException e)
+                {
+                    moveThread.interrupt();
+                }
+                catch (Exception e)
+                {
+                    System.err.println(e.getMessage());
+                }
+            }
+        }
+    }
+
+    public void shutdown()
+    {
+        // end process
+        moveThread.interrupt();
+    }
+}
diff --git a/src/main/java/plugins/tprovoost/Microscopy/gui/RemoteFrame.java b/src/main/java/plugins/tprovoost/Microscopy/gui/RemoteFrame.java
new file mode 100644
index 0000000..3627cff
--- /dev/null
+++ b/src/main/java/plugins/tprovoost/Microscopy/gui/RemoteFrame.java
@@ -0,0 +1,370 @@
+package plugins.tprovoost.Microscopy.gui;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GridLayout;
+import java.awt.RenderingHints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.image.BufferedImage;
+import java.util.prefs.Preferences;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.SwingConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import icy.gui.frame.IcyFrame;
+import icy.gui.util.GuiUtil;
+import icy.image.ImageUtil;
+import icy.network.NetworkUtil;
+import icy.resource.icon.IcyIcon;
+import icy.type.point.Point3D;
+import icy.util.StringUtil;
+import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover;
+import plugins.tprovoost.Microscopy.MicroManager.tools.StageMover.StageListener;
+import plugins.tprovoost.Microscopy.MicroManagerForIcy.MicroscopePlugin;
+import plugins.tprovoost.Microscopy.MicroscopeRemote.MicroscopeRemotePlugin;
+
+/**
+ * This class is the core of the Remote Plugin. Three different threads are
+ * running while using this class:
+ * <ul>
+ * <li>Refreshing the coordinates.</li>
+ * <li>Moving the XY Stage</li>
+ * <li>Moving the Z Stage.</li>
+ * </ul>
+ * 
+ * @author Thomas Provoost
+ */
+public class RemoteFrame extends IcyFrame implements StageListener
+{
+    // -------
+    // GUI
+    // -------
+    MicroscopePlugin plugin;
+    public JSlider _sliderSpeed;
+    private JLabel _lblX;
+    private JLabel _lblY;
+    private JLabel _lblZ;
+    private InverterCheckBox _cbInvertX;
+    private InverterCheckBox _cbInvertY;
+    private InverterCheckBox _cbInvertZ;
+
+    // --------
+    // IMAGES
+    // --------
+    public Color transparentColor = new Color(255, 255, 255, 0);
+    private BufferedImage imgRemoteBg = null;
+    private BufferedImage imgSliderKnob = null;
+    private BufferedImage imgMemBtnOn = null;
+    private BufferedImage imgMemBtnOff = null;
+    private BufferedImage imgInvertSwitchOn = null;
+    private BufferedImage imgInvertSwitchOff = null;
+    private BufferedImage imgInvertLightOn = null;
+    private BufferedImage imgInvertLightOff = null;
+
+    // CONSTANTS
+    public final static String currentPath = "plugins/tprovoost/Microscopy/images/";
+
+    // -----------
+    // PREFERENCES
+    // -----------
+    private Preferences _prefs;
+    private PanelMoverXY panelMoverXY;
+    private PanelMoverZ panelMoverZ;
+    private static final String REMOTE = "prefs_remote";
+    private static final String SPEED = "speed";
+
+    public RemoteFrame(MicroscopeRemotePlugin plugin)
+    {
+        super("Remote", false, true, false, true);
+
+        this.plugin = plugin;
+
+        // LOAD ALL IMAGES
+        imgRemoteBg = plugin.getImageResource(currentPath + "RemoteFull_2.png");
+        imgMemBtnOn = plugin.getImageResource(currentPath + "memoryOn.png");
+        imgMemBtnOff = plugin.getImageResource(currentPath + "memoryOff.png");
+        imgInvertSwitchOn = plugin.getImageResource(currentPath + "btn_switchOn.png");
+        imgInvertSwitchOff = plugin.getImageResource(currentPath + "btn_switchOff.png");
+        imgInvertLightOn = plugin.getImageResource(currentPath + "btnRound.png");
+        imgInvertLightOff = plugin.getImageResource(currentPath + "btnRound_off.png");
+        imgSliderKnob = plugin.getImageResource(currentPath + "knob.png");
+
+        initializeGui();
+        setVisible(true);
+        addToDesktopPane();
+        requestFocus();
+        loadPreferences();
+        StageMover.addListener(this);
+    }
+
+    private void initializeGui()
+    {
+        // -------------
+        // MOUSE MOVER
+        // ------------
+        panelMoverXY = new PanelMoverXY(RemoteFrame.this);
+        panelMoverZ = new PanelMoverZ(RemoteFrame.this);
+
+        JPanel panelMover = GuiUtil.generatePanel();
+        panelMover.setLayout(new BoxLayout(panelMover, BoxLayout.X_AXIS));
+        panelMover.add(panelMoverXY);
+        panelMover.add(Box.createRigidArea(new Dimension(20, 10)));
+        panelMover.add(panelMoverZ);
+        panelMover.setOpaque(false);
+        panelMover.setBackground(transparentColor);
+
+        // ---------
+        // SPEED
+        // ---------
+        JPanel panel_speed = GuiUtil.generatePanel();
+        panel_speed.setLayout(new BoxLayout(panel_speed, BoxLayout.X_AXIS));
+        panel_speed.setOpaque(false);
+
+        _sliderSpeed = new JSlider(1, 10, 1)
+        {
+            private static final long serialVersionUID = 1L;
+            private BufferedImage toDraw;
+            int heightKnob;
+
+            {
+                heightKnob = (int) (imgSliderKnob.getHeight(null) / 1.5);
+                toDraw = ImageUtil.scale(imgSliderKnob, heightKnob * 2, heightKnob);
+            }
+
+            @Override
+            protected void paintComponent(Graphics g)
+            {
+                ((Graphics2D) g).drawImage(toDraw, null, (int) ((getValue() - 1) * (getWidth() / getMaximum())),
+                        getHeight() / 2 - heightKnob / 2);
+            }
+        };
+        _sliderSpeed.setOpaque(false);
+        final JLabel lbl_value = new JLabel(" " + _sliderSpeed.getValue());
+
+        _sliderSpeed.addChangeListener(new ChangeListener()
+        {
+            @Override
+            public void stateChanged(ChangeEvent changeevent)
+            {
+                lbl_value.setText("" + _sliderSpeed.getValue());
+            }
+        });
+
+        panel_speed.add(_sliderSpeed);
+        panel_speed.add(Box.createHorizontalGlue());
+        panel_speed.add(lbl_value);
+        panel_speed.add(Box.createHorizontalGlue());
+
+        // -------------------
+        // INVERT CHEBKBOXES
+        // -------------------
+        _cbInvertX = new InverterCheckBox("Invert X-Axis");
+        _cbInvertX.setImages(imgInvertSwitchOn, imgInvertSwitchOff, imgInvertLightOn, imgInvertLightOff);
+        _cbInvertX.addActionListener(new ActionListener()
+        {
+            @Override
+            public void actionPerformed(ActionEvent arg0)
+            {
+                StageMover.setInvertX(_cbInvertX.isSelected());
+            }
+        });
+
+        _cbInvertY = new InverterCheckBox("Invert Y-Axis");
+        _cbInvertY.setImages(imgInvertSwitchOn, imgInvertSwitchOff, imgInvertLightOn, imgInvertLightOff);
+        _cbInvertY.addActionListener(new ActionListener()
+        {
+            @Override
+            public void actionPerformed(ActionEvent arg0)
+            {
+                StageMover.setInvertY(_cbInvertY.isSelected());
+            }
+        });
+
+        _cbInvertZ = new InverterCheckBox("Invert Z-Axis");
+        _cbInvertZ.setImages(imgInvertSwitchOn, imgInvertSwitchOff, imgInvertLightOn, imgInvertLightOff);
+        _cbInvertZ.addActionListener(new ActionListener()
+        {
+            @Override
+            public void actionPerformed(ActionEvent arg0)
+            {
+                StageMover.setInvertZ(_cbInvertZ.isSelected());
+            }
+        });
+
+        JPanel panelInvert = GuiUtil.generatePanel();
+        panelInvert.setOpaque(false);
+        panelInvert.setLayout(new GridLayout(3, 1));
+        panelInvert.setMaximumSize(new Dimension(Integer.MAX_VALUE, 60));
+        panelInvert.add(_cbInvertX);
+        panelInvert.add(_cbInvertY);
+        panelInvert.add(_cbInvertZ);
+
+        // MEMORY BUTTONS
+        MemoryButton btnM1 = new MemoryButton("M1", imgMemBtnOn, imgMemBtnOff);
+        MemoryButton btnM2 = new MemoryButton("M2", imgMemBtnOn, imgMemBtnOff);
+        MemoryButton btnM3 = new MemoryButton("M3", imgMemBtnOn, imgMemBtnOff);
+        MemoryButton btnM4 = new MemoryButton("M4", imgMemBtnOn, imgMemBtnOff);
+
+        JButton btnHelp = new JButton(new IcyIcon(imgMemBtnOff))
+        {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public void paint(Graphics g)
+            {
+                int w = getWidth();
+                int h = getHeight();
+                Graphics2D g2 = (Graphics2D) g;
+                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+                g2.drawImage(imgMemBtnOff, 0, 0, w, h, null);
+                g2.setFont(new Font("Arial", Font.BOLD, 16));
+                FontMetrics fm = g2.getFontMetrics();
+                g2.setColor(Color.LIGHT_GRAY);
+                g2.drawString("?", getWidth() / 2 - fm.charWidth('?') / 2, getHeight() / 2 + fm.getHeight() / 3);
+            }
+        };
+        btnHelp.addActionListener(new ActionListener()
+        {
+            @Override
+            public void actionPerformed(ActionEvent actionevent)
+            {
+                NetworkUtil.openBrowser(plugin.getDescriptor().getWeb());
+            }
+        });
+
+        JPanel panelMemoryButtons = new JPanel(new GridLayout(1, 4));
+        panelMemoryButtons.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        panelMemoryButtons.setOpaque(false);
+        panelMemoryButtons.setPreferredSize(new Dimension(60, 40));
+        panelMemoryButtons.add(btnM1);
+        panelMemoryButtons.add(btnM2);
+        panelMemoryButtons.add(btnM3);
+        panelMemoryButtons.add(btnM4);
+        panelMemoryButtons.add(btnHelp);
+
+        // -----------
+        // COORDINATES
+        // ----------
+        Point3D.Double pos;
+        try
+        {
+            pos = StageMover.getXYZ();
+        }
+        catch (Exception e)
+        {
+            pos = new Point3D.Double();
+        }
+
+        _lblX = new JLabel("X: " + StringUtil.toString(pos.x, 2) + " &micro;m");
+        _lblY = new JLabel("Y: " + StringUtil.toString(pos.y, 2) + " &micro;m");
+        _lblZ = new JLabel("Z: " + StringUtil.toString(pos.z, 2) + " &micro;m");
+        _lblX.setHorizontalAlignment(SwingConstants.CENTER);
+        _lblY.setHorizontalAlignment(SwingConstants.CENTER);
+        _lblZ.setHorizontalAlignment(SwingConstants.CENTER);
+
+        JPanel panelCoords = new JPanel(new GridLayout(3, 1));
+        panelCoords.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        panelCoords.setOpaque(false);
+        panelCoords.setBackground(transparentColor);
+        panelCoords.add(_lblX);
+        panelCoords.add(_lblY);
+        panelCoords.add(Box.createVerticalGlue());
+        panelCoords.add(_lblZ);
+
+        JPanel panelAll = new JPanel()
+        {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            protected void paintComponent(Graphics g)
+            {
+                checkInverts();
+                g.drawImage(imgRemoteBg, 0, 0, getWidth(), getHeight(), null);
+            }
+        };
+        panelAll.setLayout(new BoxLayout(panelAll, BoxLayout.Y_AXIS));
+        panelAll.setBackground(Color.BLACK);
+        panelAll.add(panelMover);
+        panelAll.add(panel_speed);
+        panelAll.add(panelMemoryButtons);
+        panelAll.add(panelInvert);
+        panelAll.add(Box.createVerticalGlue());
+        panelAll.add(panelCoords);
+
+        add(panelAll);
+
+        pack();
+        validate();
+        center();
+    }
+
+    /**
+     * Load preferences : speed, invertX and invertY.
+     */
+    private void loadPreferences()
+    {
+        Preferences root = Preferences.userNodeForPackage(getClass());
+        _prefs = root.node(root.absolutePath() + "/" + REMOTE);
+        _sliderSpeed.setValue(_prefs.getInt(SPEED, 1));
+        checkInverts();
+    }
+
+    @Override
+    public void stateChanged()
+    {
+        super.stateChanged();
+        pack();
+    }
+
+    @Override
+    public void onClosed()
+    {
+        panelMoverXY.shutdown();
+        panelMoverZ.shutdown();
+        _prefs.putInt(SPEED, _sliderSpeed.getValue());
+        StageMover.removeListener(this);
+    }
+
+    private void checkInverts()
+    {
+        _cbInvertX.setSelected(StageMover.isInvertX());
+        _cbInvertY.setSelected(StageMover.isInvertY());
+        _cbInvertZ.setSelected(StageMover.isInvertZ());
+    }
+
+    @Override
+    public void onStagePositionChanged(String s, double z)
+    {
+        _lblZ.setText("Z: " + StringUtil.toString(z, 2) + " �m");
+    }
+
+    @Override
+    public void onXYStagePositionChanged(String s, double x, double y)
+    {
+        _lblX.setText("X: " + StringUtil.toString(x, 2) + " �m");
+        _lblY.setText("Y: " + StringUtil.toString(y, 2) + " �m");
+    }
+
+    @Override
+    public void onXYStagePositionChangedRelative(String s, double d, double d1)
+    {
+    }
+
+    @Override
+    public void onStagePositionChangedRelative(String s, double d)
+    {
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/RemoteFull_2.png b/src/main/java/plugins/tprovoost/Microscopy/images/RemoteFull_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c21f1f4af31dc8a2b8d6aa0e496c90ee63c9af2
GIT binary patch
literal 13331
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
G{`!A(UwtS5

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/btnRound.png b/src/main/java/plugins/tprovoost/Microscopy/images/btnRound.png
new file mode 100644
index 0000000000000000000000000000000000000000..a21ec0420a29d08d813797f335db55625ec2c025
GIT binary patch
literal 5615
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
JPDHLkV1kNNzu^D?

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/btnRound_off.png b/src/main/java/plugins/tprovoost/Microscopy/images/btnRound_off.png
new file mode 100644
index 0000000000000000000000000000000000000000..66b47aec151605f0694ef0730d5006b4e0be954f
GIT binary patch
literal 4985
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
D$TnmF

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/btn_switchOff.png b/src/main/java/plugins/tprovoost/Microscopy/images/btn_switchOff.png
new file mode 100644
index 0000000000000000000000000000000000000000..0efab3d048bfa4eecfae6a02dbcd24e11450eb91
GIT binary patch
literal 3341
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
XU-y(nX6=!d00000NkvXXu0mjfeOEy|

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/btn_switchOn.png b/src/main/java/plugins/tprovoost/Microscopy/images/btn_switchOn.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6eb44aaab3e786ead3dad5472bdfb3eb625f349
GIT binary patch
literal 3318
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
AnE(I)

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/knob.png b/src/main/java/plugins/tprovoost/Microscopy/images/knob.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6c0a0a1e676fc6c0cbce4e0c8020927ac4cbaf2
GIT binary patch
literal 2882
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

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/memoryOff.png b/src/main/java/plugins/tprovoost/Microscopy/images/memoryOff.png
new file mode 100644
index 0000000000000000000000000000000000000000..039bb30baa45b36521799a0fb20c3379f497119a
GIT binary patch
literal 3019
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
N002ovPDHLkV1mEaok{=z

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/memoryOn.png b/src/main/java/plugins/tprovoost/Microscopy/images/memoryOn.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5645c2de0749aa66460a3a9f659f57eae0a3c1e
GIT binary patch
literal 3183
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
V`R8kzRD=Kk002ovPDHLkV1j-o@4^58

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/remote_backgroundXY.png b/src/main/java/plugins/tprovoost/Microscopy/images/remote_backgroundXY.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce0908c49d7fcf9e9a5d696ad93913d83b04a0c5
GIT binary patch
literal 34780
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

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/remote_backgroundZ.png b/src/main/java/plugins/tprovoost/Microscopy/images/remote_backgroundZ.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac02bb544c65054d7ae99bd231397bc31ca55264
GIT binary patch
literal 7948
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

literal 0
HcmV?d00001

diff --git a/src/main/java/plugins/tprovoost/Microscopy/images/singleBarZ.png b/src/main/java/plugins/tprovoost/Microscopy/images/singleBarZ.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d38152321978360b7127d5d42bad31567157e94
GIT binary patch
literal 3500
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
a{{sLAZEw@BacwyO0000<MNUMnLSTZIcaL`f

literal 0
HcmV?d00001

diff --git a/src/main/resources/LICENSE b/src/main/resources/LICENSE
new file mode 100644
index 0000000..9cecc1d
--- /dev/null
+++ b/src/main/resources/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {one line to give the program's name and a brief idea of what it does.}
+    Copyright (C) {year}  {name of author}
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    {project}  Copyright (C) {year}  {fullname}
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-- 
GitLab