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