From d0138196428974df93d70df3e3b9629f6d27b776 Mon Sep 17 00:00:00 2001 From: Christian Tischer Date: Thu, 27 Jun 2024 23:31:04 +0200 Subject: [PATCH] Implement FileWidget.FILE_AND_DIRECTORY_STYLE Signed-off-by: Curtis Rueden --- pom.xml | 5 ++ .../org/scijava/ui/swing/AbstractSwingUI.java | 2 + .../ui/swing/widget/SwingFileWidget.java | 13 ++-- .../FileAndDirectoryChooserCommandDemo.java | 59 +++++++++++++++++++ 4 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 src/test/java/org/scijava/ui/swing/command/FileAndDirectoryChooserCommandDemo.java diff --git a/pom.xml b/pom.xml index 51430a5..3058a4d 100644 --- a/pom.xml +++ b/pom.xml @@ -74,6 +74,11 @@ https://imagej.net/people/NicoKiaru NicoKiaru + + Christian Tischer + https://imagej.net/people/tischi + tischi + diff --git a/src/main/java/org/scijava/ui/swing/AbstractSwingUI.java b/src/main/java/org/scijava/ui/swing/AbstractSwingUI.java index 477f063..e0bb6a7 100644 --- a/src/main/java/org/scijava/ui/swing/AbstractSwingUI.java +++ b/src/main/java/org/scijava/ui/swing/AbstractSwingUI.java @@ -159,6 +159,8 @@ public File chooseFile(final Component owner, final File file, final JFileChooser chooser = new JFileChooser(file); if (FileWidget.DIRECTORY_STYLE.equals(style)) { chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + } else if (FileWidget.FILE_AND_DIRECTORY_STYLE.equals(style)) { + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); } final int rval; if (FileWidget.SAVE_STYLE.equals(style)) { diff --git a/src/main/java/org/scijava/ui/swing/widget/SwingFileWidget.java b/src/main/java/org/scijava/ui/swing/widget/SwingFileWidget.java index 04ba064..a8850c3 100644 --- a/src/main/java/org/scijava/ui/swing/widget/SwingFileWidget.java +++ b/src/main/java/org/scijava/ui/swing/widget/SwingFileWidget.java @@ -132,11 +132,11 @@ public void actionPerformed(final ActionEvent e) { final String style; if (model.isStyle(FileWidget.DIRECTORY_STYLE)) { style = FileWidget.DIRECTORY_STYLE; - } - else if (model.isStyle(FileWidget.SAVE_STYLE)) { + } else if (model.isStyle(FileWidget.FILE_AND_DIRECTORY_STYLE)) { + style = FileWidget.FILE_AND_DIRECTORY_STYLE; + } else if (model.isStyle(FileWidget.SAVE_STYLE)) { style = FileWidget.SAVE_STYLE; - } - else { + } else { style = FileWidget.OPEN_STYLE; } file = chooseFile(file, style); @@ -185,8 +185,9 @@ public void doRefresh() { *
    *
  • {@link FileWidget#OPEN_STYLE}
  • *
  • {@link FileWidget#SAVE_STYLE}
  • - *
  • {@link FileListWidget#FILES_ONLY}
  • *
  • {@link FileWidget#DIRECTORY_STYLE}
  • + *
  • {@link FileWidget#FILE_AND_DIRECTORY_STYLE}
  • + *
  • {@link FileListWidget#FILES_ONLY}
  • *
  • {@link FileListWidget#DIRECTORIES_ONLY}
  • *
  • {@link FileListWidget#FILES_AND_DIRECTORIES}
  • *
@@ -204,7 +205,7 @@ public static FileFilter createFileFilter(final String widgetStyle) { FileWidget.DIRECTORY_STYLE, FileListWidget.DIRECTORIES_ONLY ); final List filesAndDirsStyles = Arrays.asList( - FileListWidget.FILES_AND_DIRECTORIES + FileWidget.FILE_AND_DIRECTORY_STYLE, FileListWidget.FILES_AND_DIRECTORIES ); final List exts = new ArrayList<>(); diff --git a/src/test/java/org/scijava/ui/swing/command/FileAndDirectoryChooserCommandDemo.java b/src/test/java/org/scijava/ui/swing/command/FileAndDirectoryChooserCommandDemo.java new file mode 100644 index 0000000..4cef765 --- /dev/null +++ b/src/test/java/org/scijava/ui/swing/command/FileAndDirectoryChooserCommandDemo.java @@ -0,0 +1,59 @@ +/*- + * #%L + * SciJava UI components for Java Swing. + * %% + * Copyright (C) 2010 - 2026 SciJava developers. + * %% + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * #L% + */ +package org.scijava.ui.swing.command; + +import org.scijava.Context; +import org.scijava.command.Command; +import org.scijava.command.CommandService; +import org.scijava.command.InteractiveCommand; +import org.scijava.plugin.Parameter; +import org.scijava.plugin.Plugin; +import org.scijava.ui.UIService; + +import java.io.File; + +@Plugin(type = Command.class, menuPath = "Test>File and Directory Chooser Command") +public class FileAndDirectoryChooserCommandDemo implements Command { + + @Parameter (style = "both") + File file; + + @Override + public void run() { + System.out.println("You chose: " + file.toString()); + } + + public static void main(String... args) throws Exception { + + Context context = new Context(); + context.service(UIService.class).showUI(); + context.service(CommandService.class).run( FileAndDirectoryChooserCommandDemo.class, true); + + } +}