From 7f8cb19d7f6f6888a2716944c4e22a9260163cc0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9line=20=20TREBEAU?= <celine.trebeau@pasteur.fr>
Date: Wed, 20 Apr 2022 18:10:42 +0200
Subject: [PATCH] Feature serialization

---
 pom.xml                                       |   5 +
 .../pasteur/ida/zellige/command/Zellige.java  |   7 +-
 .../zellige/gui/ConstructionController.java   |  10 ++
 .../pasteur/ida/zellige/gui/MainAppFrame.java | 115 +++++++++----
 .../ida/zellige/gui/MainController.java       |  57 ++++++
 .../fr/pasteur/ida/zellige/gui/MainModel.java |  38 ++++
 .../ida/zellige/gui/ParameterSlider.java      |   5 +
 .../ida/zellige/gui/SelectionController.java  |   9 +
 .../ida/zellige/gui/ZelligeParameters.java    | 162 ++++++++++++++++++
 .../Construction.fxml                         |  12 +-
 .../fr.pasteur.ida.zellige.gui.view/Main.fxml |  45 ++++-
 .../Selection.fxml                            |  14 +-
 .../theme2.css                                |   2 +-
 src/main/resources/icons/Zellige_logo.png     | Bin 0 -> 40679 bytes
 src/main/resources/icons/script_add.png       | Bin 0 -> 811 bytes
 src/main/resources/icons/script_save.png      | Bin 0 -> 804 bytes
 16 files changed, 419 insertions(+), 62 deletions(-)
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/MainModel.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/ZelligeParameters.java
 create mode 100644 src/main/resources/icons/Zellige_logo.png
 create mode 100644 src/main/resources/icons/script_add.png
 create mode 100644 src/main/resources/icons/script_save.png

diff --git a/pom.xml b/pom.xml
index c777eaa5..9626ecdf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -234,6 +234,11 @@
             <artifactId>javafx-swing</artifactId>
             <version>18-ea+4</version>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.9.0</version>
+        </dependency>
 
         <!--        <dependency>-->
         <!--            <groupId>org.jacoco</groupId>-->
diff --git a/src/main/java/fr/pasteur/ida/zellige/command/Zellige.java b/src/main/java/fr/pasteur/ida/zellige/command/Zellige.java
index 2d4471f7..d4c9034b 100644
--- a/src/main/java/fr/pasteur/ida/zellige/command/Zellige.java
+++ b/src/main/java/fr/pasteur/ida/zellige/command/Zellige.java
@@ -33,8 +33,6 @@ import fr.pasteur.ida.zellige.gui.MainAppFrame;
 import net.imagej.DatasetService;
 import net.imagej.ImageJ;
 import net.imagej.display.ImageDisplayService;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
 import org.scijava.command.Command;
 import org.scijava.log.LogService;
 import org.scijava.plugin.Parameter;
@@ -45,7 +43,7 @@ import java.io.IOException;
 import java.nio.file.FileSystems;
 
 @Plugin( type = Command.class, menuPath = "Plugins>Zellige>" )
-public class Zellige< T extends RealType< T > & NativeType< T > > implements Command
+public class Zellige implements Command
 {
 
     @Parameter
@@ -90,13 +88,14 @@ public class Zellige< T extends RealType< T > & NativeType< T > > implements Com
         ij.command().run( Zellige.class, true );
     }
 
+
     @Override
     public void run()
     {
 
         // Launch JavaFX interface
         MainAppFrame app = new MainAppFrame( ij, image, logService );
-        app.setTitle( "Zellige" );
+        app.setTitle( "Zellige V1.0.1" );
         app.init();
 
     }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ConstructionController.java b/src/main/java/fr/pasteur/ida/zellige/gui/ConstructionController.java
index 8f9905bc..4421c5e8 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ConstructionController.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ConstructionController.java
@@ -153,4 +153,14 @@ public class ConstructionController< T extends RealType< T > & NativeType< T > >
     {
         return changedParameters;
     }
+
+    public void setParameters( ZelligeParameters parameters )
+    {
+        st1.setValue( parameters.getSt1() );
+        r1.setValue( parameters.getC1() );
+        c1.setValue( parameters.getR1() );
+        st2.setValue( parameters.getSt2() );
+        r2.setValue( parameters.getC2() );
+        c2.setValue( parameters.getR2() );
+    }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/MainAppFrame.java b/src/main/java/fr/pasteur/ida/zellige/gui/MainAppFrame.java
index f7896034..ad564e55 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/MainAppFrame.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/MainAppFrame.java
@@ -46,7 +46,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.swing.*;
+import java.awt.*;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 import java.util.ResourceBundle;
 
 public class MainAppFrame extends JFrame
@@ -60,26 +64,19 @@ public class MainAppFrame extends JFrame
     private JFXPanel fxPanel;
     private Scene scene;
 
-    public MainAppFrame( ImageJ ij, ImageDisplayService image, LogService logService )
-    {
-        this.ij = ij;
-        this.image = image;
-        this.logService = logService;
-    }
+    private static final List< Image > ICONS;
 
-    /**
-     * Create the JFXPanel that make the link between Swing (IJ) and JavaFX
-     * plugin.
-     */
-    public void init()
+    static
     {
-        this.fxPanel = new JFXPanel();
-        this.add( this.fxPanel );
-        this.setVisible( true );
-        setLogStatus();
-        // The call to runLater() avoid a mix between JavaFX thread and Swing
-        // thread.
-        Platform.runLater( this::initFX );
+        ICONS = new ArrayList<>();
+        final int[] sizes = new int[]{ 16, 32, 64, 128, 256 };
+        final ImageIcon imageIcon = new ImageIcon( Objects.requireNonNull( MainAppFrame.class.getClassLoader().getResource( "icons/Zellige_logo.png" ) ) );
+//        final ImageIcon imageIcon = new ImageIcon( "src/main/resources/icons/Zellige_logo.png" );
+        ICONS.add( imageIcon.getImage() );
+        for ( final int size : sizes )
+        {
+            ICONS.add( scaleImage( imageIcon, size, size ).getImage() );
+        }
     }
 
 
@@ -102,6 +99,68 @@ public class MainAppFrame extends JFrame
         logbackLogger.addAppender( appender );
     }
 
+    public MainAppFrame( ImageJ ij, ImageDisplayService image, LogService logService )
+    {
+        this.ij = ij;
+        this.image = image;
+        this.logService = logService;
+        this.setIconImages( ICONS );
+    }
+
+    public static final ImageIcon scaleImage( final ImageIcon icon, final int w, final int h )
+    {
+        int nw = icon.getIconWidth();
+        int nh = icon.getIconHeight();
+
+        if ( icon.getIconWidth() > w )
+        {
+            nw = w;
+            nh = ( nw * icon.getIconHeight() ) / icon.getIconWidth();
+        }
+
+        if ( nh > h )
+        {
+            nh = h;
+            nw = ( icon.getIconWidth() * nh ) / icon.getIconHeight();
+        }
+        return new ImageIcon( icon.getImage().getScaledInstance( nw, nh, Image.SCALE_SMOOTH ) );
+    }
+
+    public LogService getLogService()
+    {
+        return logService;
+    }
+
+    public ImageJ getIj()
+    {
+        return ij;
+    }
+
+    public ImageDisplayService getImage()
+    {
+        return image;
+    }
+
+    public Scene getScene()
+    {
+        return scene;
+    }
+
+    /**
+     * Create the JFXPanel that make the link between Swing (IJ) and JavaFX
+     * plugin.
+     */
+    public void init()
+    {
+
+        this.fxPanel = new JFXPanel();
+        this.add( this.fxPanel );
+        this.setVisible( true );
+        setLogStatus();
+        // The call to runLater() avoid a mix between JavaFX thread and Swing thread.
+        Platform.runLater( this::initFX );
+    }
+
     public < T extends RealType< T > & NativeType< T > > void initFX()
     {
         // Init the root layout
@@ -122,7 +181,7 @@ public class MainAppFrame extends JFrame
             this.fxPanel.setScene( scene );
 
             // Resize the JFrame to the JavaFX scene
-            this.setSize( ( int ) scene.getWidth() + 20, ( int ) scene.getHeight() + 30 );
+            this.setSize( ( int ) scene.getWidth() + 20, ( int ) scene.getHeight() + 50 );
             controller.initExtraction();
         }
         catch ( IOException | DataValidationException e )
@@ -131,23 +190,5 @@ public class MainAppFrame extends JFrame
         }
     }
 
-    public LogService getLogService()
-    {
-        return logService;
-    }
 
-    public ImageJ getIj()
-    {
-        return ij;
-    }
-
-    public ImageDisplayService getImage()
-    {
-        return image;
-    }
-
-    public Scene getScene()
-    {
-        return scene;
-    }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/MainController.java b/src/main/java/fr/pasteur/ida/zellige/gui/MainController.java
index 0e5d11eb..57367c7c 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/MainController.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/MainController.java
@@ -50,6 +50,7 @@ import javafx.scene.control.Alert;
 import javafx.scene.control.Button;
 import javafx.scene.control.ComboBox;
 import javafx.scene.control.Label;
+import javafx.stage.FileChooser;
 import net.imagej.Dataset;
 import net.imagej.ImgPlus;
 import net.imglib2.img.Img;
@@ -59,7 +60,11 @@ import net.imglib2.type.numeric.real.FloatType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.File;
+import java.io.IOException;
 import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.ResourceBundle;
 
 public class MainController< T extends RealType< T > & NativeType< T > > implements Initializable
@@ -86,6 +91,9 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme
     @FXML
     private SelectionController selectionController;
 
+
+    MainModel< T > model;
+
     public static void showError( Exception exception )
     {
         Alert alert = new Alert( Alert.AlertType.ERROR );
@@ -97,6 +105,7 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme
     @Override
     public void initialize( URL url, ResourceBundle resourceBundle )
     {
+        model = new MainModel<>( selectionController.getSelectionModel(), constructionController.getConstructionModel(), projectionController.getModel() );
         /* Control of the files comboBox*/
         activeDatasets.setOnMousePressed( event ->
                 setAndDisplayDatasetChoices() );// Update of the list of opened Fiji images
@@ -360,6 +369,7 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme
             selectionController.getSelectionModel().runPixelSelection();
         }
         LOGGER.debug( "###########################################---NEW RUN---###########################################" );
+//        ZelligeParameters.serialize( new ZelligeParameters( model ) );
     }
 
     private void runPretreatment( Dataset dataset )
@@ -445,6 +455,53 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme
         return ( int ) selectionController.getzBlur().getSlider().getValue();
     }
 
+    @FXML
+    public void saveParameters() throws IOException
+    {
+        SimpleDateFormat dtf = new SimpleDateFormat( "yyyyMMdd_HHmmss" );
+        FileChooser fileChooser = chooseAFile( dtf.format( new Date() ), "Sava Parameters...", "ZelligeParameters", "*.zellige.param.json" );
+        File file = fileChooser.showSaveDialog( null );
+        if ( file != null )
+        {
+            ZelligeParameters.serialize( new ZelligeParameters( model ), file );
+        }
+    }
+
+    @FXML
+    public void loadParameters() throws IOException, ClassNotFoundException
+    {
+        File f = chooseFile();
+        LOGGER.debug( "The file has been choose" );
+        if ( f != null )
+        {
+            ZelligeParameters parameters = ZelligeParameters.deserialize( f );
+            setParameters( parameters );
+        }
+    }
+
+    private File chooseFile()
+    {
+        FileChooser fileChooser = chooseAFile( null, "Select a Zellige parameter file",
+                "ZelligeParameters", "*.json" );
+        return fileChooser.showOpenDialog( null );
+    }
+
+    private FileChooser chooseAFile( String initialFileNme, String title, String description, String extension )
+    {
+        FileChooser fileChooser = new FileChooser();
+        fileChooser.setTitle( title );
+        fileChooser.setInitialFileName( initialFileNme );
+        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter( description, extension );
+        fileChooser.getExtensionFilters().add( extFilter );
+        return fileChooser;
+    }
+
+    private void setParameters( ZelligeParameters parameters )
+    {
+        selectionController.setParameters( parameters );
+        constructionController.setParameters( parameters );
+    }
+
 
 }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/MainModel.java b/src/main/java/fr/pasteur/ida/zellige/gui/MainModel.java
new file mode 100644
index 00000000..b5db1dff
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/MainModel.java
@@ -0,0 +1,38 @@
+package fr.pasteur.ida.zellige.gui;
+
+import net.imglib2.type.NativeType;
+import net.imglib2.type.numeric.RealType;
+
+public class MainModel< T extends RealType< T > & NativeType< T > >
+{
+
+    private final SelectionModel selectionModel;
+    private final ConstructionModel< T > constructionModel;
+    private final ProjectionModel< T > projectionModel;
+
+    public MainModel( SelectionModel selectionModel, ConstructionModel< T > constructionModel, ProjectionModel< T > projectionModel )
+    {
+        this.selectionModel = selectionModel;
+        this.constructionModel = constructionModel;
+        this.projectionModel = projectionModel;
+    }
+
+    public SelectionModel getSelectionModel()
+    {
+        return selectionModel;
+    }
+
+
+    public ConstructionModel< T > getConstructionModel()
+    {
+        return constructionModel;
+    }
+
+
+    public ProjectionModel< T > getProjectionModel()
+    {
+        return projectionModel;
+    }
+
+
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSlider.java b/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSlider.java
index 63cba688..3b59faad 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSlider.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSlider.java
@@ -216,6 +216,11 @@ public abstract class ParameterSlider extends GridPane
     {
         return interval;
     }
+
+    public void setValue( double value )
+    {
+        this.sliderProperty().set( value );
+    }
 }
 
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/SelectionController.java b/src/main/java/fr/pasteur/ida/zellige/gui/SelectionController.java
index 59ad457b..d0620368 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/SelectionController.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/SelectionController.java
@@ -322,4 +322,13 @@ public class SelectionController implements Initializable
     {
         return selectionModel;
     }
+
+    public void setParameters( ZelligeParameters parameters )
+    {
+        amplitude.setValue( parameters.getAmplitude() );
+        otsu.setValue( parameters.getOtsu() );
+        island.setValue( parameters.getIsland() );
+        xyBlur.setValue( parameters.getXyBlur() );
+        zBlur.setValue( parameters.getzBlur() );
+    }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ZelligeParameters.java b/src/main/java/fr/pasteur/ida/zellige/gui/ZelligeParameters.java
new file mode 100644
index 00000000..700881c0
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ZelligeParameters.java
@@ -0,0 +1,162 @@
+package fr.pasteur.ida.zellige.gui;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.stream.Collectors;
+
+public class ZelligeParameters
+{
+
+    //selection
+    private final int amplitude;
+    private final int otsu;
+    private final int island;
+    private final int xyBlur;
+    private final int zBlur;
+    //construction
+    private final double c1;
+    private final int r1;
+    private final double st11;
+    private final double c2;
+    private final int r2;
+    private final double st2;
+    private final double surfaceSize;
+    //projection
+    private final int delta1;
+    private final int delta2;
+    private final String method;
+
+
+    public ZelligeParameters( MainModel model )
+    {
+
+        SelectionModel selectionModel = model.getSelectionModel();
+        ConstructionModel constructionModel = model.getConstructionModel();
+        ProjectionModel projectionModel = model.getProjectionModel();
+        // selection
+        amplitude = selectionModel.amplitudeProperty().intValue();
+        otsu = selectionModel.otsuProperty().intValue();
+        island = selectionModel.islandProperty().intValue();
+        xyBlur = selectionModel.xyBlurProperty().intValue();
+        zBlur = selectionModel.zBlurProperty().intValue();
+        // construction
+        c1 = constructionModel.c1Property().doubleValue();
+        r1 = constructionModel.r1Property().intValue();
+        st11 = constructionModel.st1Property().doubleValue();
+        c2 = constructionModel.c2Property().doubleValue();
+        r2 = constructionModel.r2Property().intValue();
+        st2 = constructionModel.st2Property().doubleValue();
+        surfaceSize = constructionModel.surfaceSizeProperty().doubleValue();
+        // projection
+        delta1 = projectionModel.delta1Property().intValue();
+        delta2 = projectionModel.delta2Property().intValue();
+        method = projectionModel.methodProperty().get();
+    }
+
+    public static void serialize( final ZelligeParameters parameters, final File file ) throws IOException
+    {
+        final Gson gson = new GsonBuilder().setPrettyPrinting().create();
+        final String str = gson.toJson( parameters );
+        System.out.println( str );
+        try ( FileWriter writer = new FileWriter( file ) )
+        {
+            writer.append( str );
+        }
+
+    }
+
+
+    public static ZelligeParameters deserialize( final File file ) throws FileNotFoundException, IOException, ClassNotFoundException
+    {
+        try ( FileReader ignored = new FileReader( file ) )
+        {
+            final String str = Files.lines( Paths.get( file.getAbsolutePath() ) )
+                    .collect( Collectors.joining( System.lineSeparator() ) );
+
+            final Gson gson = new GsonBuilder().setPrettyPrinting().create();
+
+            return ( str == null || str.isEmpty() )
+                    ? null
+                    : gson.fromJson( str, ZelligeParameters.class );
+        }
+    }
+
+    public int getAmplitude()
+    {
+        return amplitude;
+    }
+
+    public int getOtsu()
+    {
+        return otsu;
+    }
+
+    public int getIsland()
+    {
+        return island;
+    }
+
+    public int getXyBlur()
+    {
+        return xyBlur;
+    }
+
+    public int getzBlur()
+    {
+        return zBlur;
+    }
+
+    public double getC1()
+    {
+        return c1;
+    }
+
+    public int getR1()
+    {
+        return r1;
+    }
+
+    public double getSt1()
+    {
+        return st11;
+    }
+
+    public double getC2()
+    {
+        return c2;
+    }
+
+    public int getR2()
+    {
+        return r2;
+    }
+
+    public double getSt2()
+    {
+        return st2;
+    }
+
+    public double getSurfaceSize()
+    {
+        return surfaceSize;
+    }
+
+    public int getDelta1()
+    {
+        return delta1;
+    }
+
+    public int getDelta2()
+    {
+        return delta2;
+    }
+
+    public String getMethod()
+    {
+        return method;
+    }
+}
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Construction.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Construction.fxml
index 5e765d98..ff3bc956 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Construction.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Construction.fxml
@@ -29,14 +29,14 @@
             <VBox alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
                   prefHeight="137.0" prefWidth="379.0" GridPane.columnIndex="1">
                 <children>
-                    <ParameterSliderDouble fx:id="c1" alignment="CENTER" default="0.8" increment="0.1"
-                                           interval="%INTERVAL3" major="0.2" max="1" min="0" minor="1"
-                                           name="Connexity"/>
                     <ParameterSliderDouble fx:id="st1" alignment="CENTER" default="0.7" increment="0.1"
                                            interval="%INTERVAL3" major="0.2" max="1" min="0" minor="1"
                                            name="Starting threshold"/>
+                    <ParameterSliderDouble fx:id="c1" alignment="CENTER" default="0.8" increment="0.1"
+                                           interval="%INTERVAL3" major="0.2" max="1" min="0" minor="1"
+                                           name="Connexity"/>
                     <ParameterSliderInteger fx:id="r1" default="5" increment="0.1" interval="%INTERVAL1" major="10"
-                                            max="50" min="0" minHeight="-Infinity" minWidth="-Infinity" minor="4"
+                                            max="50" min="0" minHeight="-Infinity" minWidth="-Infinity" minor="8"
                                             name="Overlap" prefHeight="27.0" prefWidth="382.0" VBox.vgrow="ALWAYS"/>
                 </children>
             </VBox>
@@ -59,7 +59,7 @@
                                                    major="0.2" max="1" min="0" minor="1" name="Connexity"
                                                    GridPane.rowIndex="1"/>
                             <ParameterSliderInteger fx:id="r2" default="5" increment="0.1" interval="%INTERVAL1"
-                                                    major="10" max="50" min="0" minor="1" name="Overlap"
+                                                    major="10" max="50" min="0" minor="8" name="Overlap"
                                                     GridPane.rowIndex="2"/>
                         </children>
                     </GridPane>
@@ -70,7 +70,7 @@
                   GridPane.rowIndex="2" GridPane.vgrow="ALWAYS">
 
                 <ParameterSliderDouble fx:id="surfaceSize" default="0.7" increment="0.05" interval="%INTERVAL3"
-                                       major="0.2" max="1" min="0" minor="4" name="Surface min size"/>
+                                       major="0.2" max="1" min="0" minor="1" name="Surface min size"/>
 
             </VBox>
             <Label alignment="CENTER" minWidth="-Infinity" prefHeight="14.0" prefWidth="100.0" rotate="-90.0"
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Main.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Main.fxml
index f2457067..901d9de2 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Main.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Main.fxml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <?import javafx.geometry.Insets?>
-<?import javafx.scene.control.Button?>
-<?import javafx.scene.control.ComboBox?>
-<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.image.Image?>
+<?import javafx.scene.image.ImageView?>
 <?import javafx.scene.layout.*?>
+<?import javafx.scene.text.Font?>
 <VBox xmlns:fx="http://javafx.com/fxml" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
       minHeight="-Infinity" minWidth="-Infinity" prefHeight="786.0" prefWidth="866.0" spacing="5.0"
       stylesheets="@theme2.css" xmlns="http://javafx.com/javafx"
@@ -12,13 +13,43 @@
     <padding>
         <Insets left="10.0" right="10.0" top="5.0"/>
     </padding>
-    <HBox prefHeight="26.0" prefWidth="774.0" spacing="5.0" VBox.vgrow="ALWAYS">
+    <HBox alignment="CENTER_LEFT" prefHeight="26.0" prefWidth="774.0" spacing="5.0" VBox.vgrow="ALWAYS">
         <padding>
             <Insets left="10.0"/>
         </padding>
-        <Label text="File : "/>
-        <ComboBox fx:id="activeDatasets" minHeight="-Infinity" minWidth="-Infinity" prefHeight="26.0"
-                  prefWidth="262.0"/>
+        <HBox alignment="CENTER_LEFT" prefHeight="45.0" prefWidth="494.0">
+            <children>
+                <Label prefHeight="12.0" prefWidth="71.0" text="File : ">
+                    <font>
+                        <Font size="14.0"/>
+                    </font>
+                </Label>
+                <ComboBox fx:id="activeDatasets" minHeight="-Infinity" minWidth="-Infinity" prefHeight="26.0"
+                          prefWidth="262.0"/>
+            </children>
+        </HBox>
+        <HBox alignment="CENTER_RIGHT" prefHeight="45.0" prefWidth="333.0" spacing="10.0">
+            <children>
+                <Button fx:id="load" mnemonicParsing="false" onAction="#loadParameters" text="Load parameters">
+                    <graphic>
+                        <ImageView fitHeight="15.0" fitWidth="22.0" pickOnBounds="true" preserveRatio="true">
+                            <image>
+                                <Image url="@/icons/script_add.png"/>
+                            </image>
+                        </ImageView>
+                    </graphic>
+                </Button>
+                <Button fx:id="save" mnemonicParsing="false" onAction="#saveParameters" text="Save Parameters">
+                    <graphic>
+                        <ImageView fitHeight="15.0" fitWidth="26.0" pickOnBounds="true" preserveRatio="true">
+                            <image>
+                                <Image url="@../icons/script_save.png"/>
+                            </image>
+                        </ImageView>
+                    </graphic>
+                </Button>
+            </children>
+        </HBox>
     </HBox>
     <fx:include fx:id="selection" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
                 minHeight="-Infinity" minWidth="-Infinity" source="Selection.fxml" VBox.vgrow="ALWAYS"/>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Selection.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Selection.fxml
index 1eb97384..bb144c82 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Selection.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Selection.fxml
@@ -11,7 +11,7 @@
     <children>
         <HBox alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" prefHeight="293.0" prefWidth="815.0">
             <children>
-                <GridPane alignment="CENTER" gridLinesVisible="false" maxHeight="1.7976931348623157E308"
+                <GridPane alignment="CENTER" maxHeight="1.7976931348623157E308"
                           maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity"
                           prefHeight="265.0" prefWidth="414.0" vgap="5.0" HBox.hgrow="ALWAYS">
                     <columnConstraints>
@@ -37,17 +37,17 @@
                         <ParameterSliderInteger fx:id="amplitude" default="10" increment="1" interval="%INTERVAL1"
                                                 major="10" max="50" min="0" minor="9" name="Amplitude"/>
                         <ParameterSliderInteger fx:id="otsu" default="10" increment="1" interval="%INTERVAL1" major="10"
-                                                max="50" min="0" minor="1" name="Otsu" GridPane.rowIndex="1"/>
+                                                max="50" min="0" minor="9" name="Otsu" GridPane.rowIndex="1"/>
                         <ParameterSliderInteger fx:id="island" default="5" increment="1" interval="%INTERVAL1"
-                                                major="10" max="50" min="0" minor="1" name="Island Search"
+                                                major="10" max="50" min="0" minor="9" name="Island Search"
                                                 GridPane.rowIndex="2"/>
                     </VBox>
                     <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1"
                           GridPane.rowIndex="1">
-                        <ParameterSliderInteger default="1" increment="1" interval="%INTERVAL2" major="5" max="10"
-                                                min="0" minor="4" name="XY Blur " GridPane.rowIndex="1" fx:id="xyBlur"/>
-                        <ParameterSliderInteger fx:id="zBlur" default="2" increment="1" interval="%INTERVAL2" major="5"
-                                                max="10" min="0" minor="4" name="Z Blur " GridPane.rowIndex="1"/>
+                        <ParameterSliderInteger default="1" increment="1" interval="%INTERVAL2" major="2" max="10"
+                                                min="0" minor="1" name="XY Blur " GridPane.rowIndex="1" fx:id="xyBlur"/>
+                        <ParameterSliderInteger fx:id="zBlur" default="2" increment="1" interval="%INTERVAL2" major="2"
+                                                max="10" min="0" minor="1" name="Z Blur " GridPane.rowIndex="1"/>
                     </VBox>
 
                     <padding>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme2.css b/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme2.css
index 039321b6..d1808955 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme2.css
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme2.css
@@ -30,7 +30,7 @@
 .root {
     -fx-base: #ececec;
     -fx-color: -fx-base;
-    -fx-focus-color: #039E22;
+    /*-fx-focus-color: #039E22;*/
     -fx-inner-border: linear-gradient(to bottom,
     ladder(
             -fx-color,
diff --git a/src/main/resources/icons/Zellige_logo.png b/src/main/resources/icons/Zellige_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..39fd95297c7505ebf88a97cad98f6a97cb5fd01d
GIT binary patch
literal 40679
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

literal 0
HcmV?d00001

diff --git a/src/main/resources/icons/script_add.png b/src/main/resources/icons/script_add.png
new file mode 100644
index 0000000000000000000000000000000000000000..d650552d967042327d9b2b49577582cc95253613
GIT binary patch
literal 811
zcmV+`1JwM9P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!y-7qtR2Ufr
z!OM$PWdH#1-}jw!=h2ws_+U)LM-&)jW{_zQDnu}f`UBh;Eo))8(OTM~O`sGlYSALx
z6;uX=1wt=|sKClBNE3}o2gmWw%)N8(Ip;fHzhB5XgTo(R+k=yLuNm9duUq}PRky8`
zrtM-0H<7S_d3=boB|zIWkL=pGYTwZ(HvoWM)lT-Sc5-2mHdi%E!{o}%WnWzC9l((i
zplzDz)gu91yPb4GPzH*U(N45wG%8}$DcHSv+@{HiweSBp`&I-<b-j9`q-j~If^N<2
zA>9Gp0rM-&EhljN^i}(|Pq=@5XF~~)>U!;+BT;WiZ;-?olqd>fK_MstEkar}b9uop
zSG%(%K&q<g$?-yWrO_W|F=j<1rl5!vvZ6pP+*lks_0`{tI9viWRkd|`bw_uQHIOM%
z5Hk{mtjtlHNu8vrn(d#y`q-@qkgDO<jgzB#RTd&e2qGc^AY^i;84jgtn4pA%C%zmn
zi#RgciK>)D8CgaWKtPPtDOv9I8!SQz&9K@qF)=0vTF8Vz6y!_@T)cF~Uzb0()L$?a
z`$c#8#_Jq>ql8oq?<glml#wC^sSV_;MF{-*=SSxIUwiuThizVauX7hZ2{XT6Ke6|f
zO>5#4M^3MAs_Mj^9a~&q%&y!>ZY?Ffij=buvY#%T_TY|PQcQN;bwCQWy*nR;m&;UD
z`|<407yq%aQd%Bnb;^cyP&KV4wU)a7>4a6Dx$h-#bpLzK{Pr$B8!J;?KlH*=4~)Nd
zXfFUrnL1@v!}G_xF3kSm{Oos*9r(bTXJ0f{jKZMUxbxsWQ<D?V%`eri&h^YK4lMR-
zb(0k_8tDWn4Sn;+8QZ3}x!M0$w>Rhe^WR#$Jv<e5A3C`nN3a#^untq0!sOUUr!zLz
p5k}5gNi*6!K<Ja-o_S~X*#FNiQ;YQcyv6_k002ovPDHLkV1kQ!cx?ax

literal 0
HcmV?d00001

diff --git a/src/main/resources/icons/script_save.png b/src/main/resources/icons/script_save.png
new file mode 100644
index 0000000000000000000000000000000000000000..36216d8276dd679934346c30ace3006e1d76bbd1
GIT binary patch
literal 804
zcmV+<1Ka$GP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!wn;=mR2Ufr
z!A*#iWdH!+=Y79#W_D-S-BH)pQd|w9f=CqF@(@K51O-A@FJ2<N37!gqz>W!a4mwm4
z9lAtNv=ALSSd<+NDwVaw^{3sLb!X=Ld%vD1v~3H{e06ITmmVL?oETThxJs&&OzJem
zHtwUrCLZ83e4hiPx_<uX{`nK<U)l!%cFMFkF4N-Xv^iK-Y!{82_aFN9@10k1E(b_;
zy}Zy3;MP{76M{UD<@7qyp<a~5sFQK*;H<|M=k|R3%k7I1psA{bxtuz&T?WI7t%Bi{
z;gkmx?mle5JD1m;I5Ov%rOv(_psA`oySmX%!OpZ1V~``uh#8q63nYYQ<jVC;SJ#KP
zbAYBSmltO<!%1yiv|?;!k=O)TB-6?=w3&@j;iI*`MmUoL)MdG{ywEY6wrYI6_NQGv
z#$|2yeAn%}6CpC+&pg`i+8j+5e)#?0VGhug#mfH0o@*P85SfgpURiz8spIp$x$=+q
zPCpF*KK=2Yl)}#uUc2z!tfubvI#JmWwZ=u|zwH{V{kj2QS~DuRw^a%uiBK2izFr^(
z612n^WGz*bTs(VRO06cfGD$yAilQ*uDdo_VML(bG$|G3}niR}*qG?h2;LDq0pl*`X
zBrV#urKR6V@)yrtUc!adrw+L@YTevu%*{}zR?*b5*g-33gb=i;)wW4pSIV-MH)VMe
zum5)KhRsRtVbQ9Z*7ms43AwXx>{6!^k(M?jGkMpCU#xpD+L1R^b^O%J&(6Mk`UL>+
z=KDX%bR-j>Tz%V8|BxWMH@@Yq=Prq6jEhp<RMm|;_lG`TyJj#yYp^h5FxQjknZx^8
zp5J!z=&C{Y0FkZf0guep`d#u6gkz^KE#Vwiuoru=JNAzpeqv=$XV4p%$rseA5>gV{
iMhatptY3F`RQVr(hfH%Uc-uk%0000<MNUMnLSTaY@`UFA

literal 0
HcmV?d00001

-- 
GitLab