From 63272a03cf13f596a595af1d85e2543cabfd2296 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Tue, 31 Dec 2024 18:36:29 +0100 Subject: [PATCH] System File Chooser: macOS: - use `optionsSet` and `optionsClear` (as on Windows) - delete local reference after getting Java array item - added "or null" to javadoc --- .../flatlaf/ui/FlatNativeMacLibrary.java | 37 ++++---- ..._formdev_flatlaf_ui_FlatNativeMacLibrary.h | 30 +++---- .../src/main/objcpp/MacFileChooser.mm | 48 +++++----- .../testing/FlatMacOSFileChooserTest.java | 88 ++++++++++--------- .../testing/FlatMacOSFileChooserTest.jfd | 16 ++-- 5 files changed, 109 insertions(+), 110 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeMacLibrary.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeMacLibrary.java index 60343778..5ceb2f61 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeMacLibrary.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeMacLibrary.java @@ -75,18 +75,16 @@ public class FlatNativeMacLibrary // NSOpenPanel FC_canChooseFiles = 1 << 0, // default FC_canChooseDirectories = 1 << 1, - FC_resolvesAliases_NO = 1 << 2, // default + FC_resolvesAliases = 1 << 2, // default FC_allowsMultipleSelection = 1 << 3, // NSSavePanel - FC_showsTagField_YES = 1 << 8, // default for Save - FC_showsTagField_NO = 1 << 9, // default for Open - FC_canCreateDirectories_YES = 1 << 10, // default for Save - FC_canCreateDirectories_NO = 1 << 11, // default for Open - FC_canSelectHiddenExtension = 1 << 12, - FC_showsHiddenFiles = 1 << 14, - FC_extensionHidden = 1 << 16, - FC_allowsOtherFileTypes = 1 << 18, - FC_treatsFilePackagesAsDirectories = 1 << 20; + FC_showsTagField = 1 << 8, // default for Save + FC_canCreateDirectories = 1 << 9, // default for Save + FC_canSelectHiddenExtension = 1 << 10, + FC_showsHiddenFiles = 1 << 11, + FC_extensionHidden = 1 << 12, + FC_allowsOtherFileTypes = 1 << 13, + FC_treatsFilePackagesAsDirectories = 1 << 14; /** * Shows the macOS system file dialogs @@ -98,13 +96,14 @@ public class FlatNativeMacLibrary * to avoid blocking the AWT event dispatching thread. * * @param open if {@code true}, shows the open dialog; if {@code false}, shows the save dialog - * @param title text displayed at top of save dialog (not used in open dialog) - * @param prompt text displayed in default button - * @param message text displayed at top of open/save dialogs - * @param nameFieldLabel text displayed in front of the filename text field in save dialog (not used in open dialog) - * @param nameFieldStringValue user-editable filename currently shown in the name field in save dialog (not used in open dialog) - * @param directoryURL current directory shown in the dialog - * @param options see {@code FC_*} constants + * @param title text displayed at top of save dialog (not used in open dialog); or {@code null} + * @param prompt text displayed in default button; or {@code null} + * @param message text displayed at top of open/save dialogs; or {@code null} + * @param nameFieldLabel text displayed in front of the filename text field in save dialog (not used in open dialog); or {@code null} + * @param nameFieldStringValue user-editable filename currently shown in the name field in save dialog (not used in open dialog); or {@code null} + * @param directoryURL current directory shown in the dialog; or {@code null} + * @param optionsSet options to set; see {@code FC_*} constants + * @param optionsClear options to clear; see {@code FC_*} constants * @param allowedFileTypes allowed filename extensions (e.g. "txt") * @return file path(s) that the user selected, or {@code null} if canceled * @@ -112,6 +111,6 @@ public class FlatNativeMacLibrary */ public native static String[] showFileChooser( boolean open, String title, String prompt, String message, String nameFieldLabel, - String nameFieldStringValue, String directoryURL, int options, - String... allowedFileTypes ); + String nameFieldStringValue, String directoryURL, + int optionsSet, int optionsClear, String... allowedFileTypes ); } diff --git a/flatlaf-natives/flatlaf-natives-macos/src/main/headers/com_formdev_flatlaf_ui_FlatNativeMacLibrary.h b/flatlaf-natives/flatlaf-natives-macos/src/main/headers/com_formdev_flatlaf_ui_FlatNativeMacLibrary.h index 3c991a3c..7d163d7f 100644 --- a/flatlaf-natives/flatlaf-natives-macos/src/main/headers/com_formdev_flatlaf_ui_FlatNativeMacLibrary.h +++ b/flatlaf-natives/flatlaf-natives-macos/src/main/headers/com_formdev_flatlaf_ui_FlatNativeMacLibrary.h @@ -17,28 +17,24 @@ extern "C" { #define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canChooseFiles 1L #undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canChooseDirectories #define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canChooseDirectories 2L -#undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_resolvesAliases_NO -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_resolvesAliases_NO 4L +#undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_resolvesAliases +#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_resolvesAliases 4L #undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_allowsMultipleSelection #define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_allowsMultipleSelection 8L -#undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsTagField_YES -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsTagField_YES 256L -#undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsTagField_NO -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsTagField_NO 512L -#undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canCreateDirectories_YES -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canCreateDirectories_YES 1024L -#undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canCreateDirectories_NO -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canCreateDirectories_NO 2048L +#undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsTagField +#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsTagField 256L +#undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canCreateDirectories +#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canCreateDirectories 512L #undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canSelectHiddenExtension -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canSelectHiddenExtension 4096L +#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_canSelectHiddenExtension 1024L #undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsHiddenFiles -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsHiddenFiles 16384L +#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_showsHiddenFiles 2048L #undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_extensionHidden -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_extensionHidden 65536L +#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_extensionHidden 4096L #undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_allowsOtherFileTypes -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_allowsOtherFileTypes 262144L +#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_allowsOtherFileTypes 8192L #undef com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_treatsFilePackagesAsDirectories -#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_treatsFilePackagesAsDirectories 1048576L +#define com_formdev_flatlaf_ui_FlatNativeMacLibrary_FC_treatsFilePackagesAsDirectories 16384L /* * Class: com_formdev_flatlaf_ui_FlatNativeMacLibrary * Method: setWindowRoundedBorder @@ -82,10 +78,10 @@ JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_togg /* * Class: com_formdev_flatlaf_ui_FlatNativeMacLibrary * Method: showFileChooser - * Signature: (ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I[Ljava/lang/String;)[Ljava/lang/String; + * Signature: (ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_showFileChooser - (JNIEnv *, jclass, jboolean, jstring, jstring, jstring, jstring, jstring, jstring, jint, jobjectArray); + (JNIEnv *, jclass, jboolean, jstring, jstring, jstring, jstring, jstring, jstring, jint, jint, jobjectArray); #ifdef __cplusplus } diff --git a/flatlaf-natives/flatlaf-natives-macos/src/main/objcpp/MacFileChooser.mm b/flatlaf-natives/flatlaf-natives-macos/src/main/objcpp/MacFileChooser.mm index d38ac371..05fd3d67 100644 --- a/flatlaf-natives/flatlaf-natives-macos/src/main/objcpp/MacFileChooser.mm +++ b/flatlaf-natives/flatlaf-natives-macos/src/main/objcpp/MacFileChooser.mm @@ -25,8 +25,9 @@ * @author Karl Tauber */ -#define isOptionSet( option ) ((options & com_formdev_flatlaf_ui_FlatNativeMacLibrary_ ## option) != 0) -#define isYesOrNoOptionSet( option ) isOptionSet( option ## _YES ) || isOptionSet( option ## _NO ) +#define isOptionSet( option ) ((optionsSet & com_formdev_flatlaf_ui_FlatNativeMacLibrary_ ## option) != 0) +#define isOptionClear( option ) ((optionsClear & com_formdev_flatlaf_ui_FlatNativeMacLibrary_ ## option) != 0) +#define isOptionSetOrClear( option ) isOptionSet( option ) || isOptionClear( option ) // declare internal methods NSWindow* getNSWindow( JNIEnv* env, jclass cls, jobject window ); @@ -38,7 +39,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_ ( JNIEnv* env, jclass cls, jboolean open, jstring title, jstring prompt, jstring message, jstring nameFieldLabel, jstring nameFieldStringValue, jstring directoryURL, - jint options, jobjectArray allowedFileTypes ) + jint optionsSet, jint optionsClear, jobjectArray allowedFileTypes ) { JNI_COCOA_ENTER() @@ -56,8 +57,8 @@ JNIEXPORT jobjectArray JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_ NSMutableArray* nsArray = [NSMutableArray arrayWithCapacity:len]; for( int i = 0; i < len; i++ ) { jstring str = (jstring) env->GetObjectArrayElement( allowedFileTypes, i ); - NSString* nsStr = JavaToNSString( env, str ); - nsArray[i] = nsStr; + nsArray[i] = JavaToNSString( env, str ); + env->DeleteLocalRef( str ); } nsAllowedFileTypes = nsArray; } @@ -93,26 +94,27 @@ JNIEXPORT jobjectArray JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_ canChooseFiles = true; openDialog.canChooseFiles = canChooseFiles; openDialog.canChooseDirectories = canChooseDirectories; - if( isOptionSet( FC_resolvesAliases_NO ) ) - openDialog.resolvesAliases = NO; - if( isOptionSet( FC_allowsMultipleSelection ) ) - openDialog.allowsMultipleSelection = YES; + + if( isOptionSetOrClear( FC_resolvesAliases ) ) + openDialog.resolvesAliases = isOptionSet( FC_resolvesAliases ); + if( isOptionSetOrClear( FC_allowsMultipleSelection ) ) + openDialog.allowsMultipleSelection = isOptionSet( FC_allowsMultipleSelection ); } - if( isYesOrNoOptionSet( FC_showsTagField ) ) - dialog.showsTagField = isOptionSet( FC_showsTagField_YES ); - if( isYesOrNoOptionSet( FC_canCreateDirectories ) ) - dialog.canCreateDirectories = isOptionSet( FC_canCreateDirectories_YES ); - if( isOptionSet( FC_canSelectHiddenExtension ) ) - dialog.canSelectHiddenExtension = YES; - if( isOptionSet( FC_showsHiddenFiles) ) - dialog.showsHiddenFiles = YES; - if( isOptionSet( FC_extensionHidden ) ) - dialog.extensionHidden = YES; - if( isOptionSet( FC_allowsOtherFileTypes ) ) - dialog.allowsOtherFileTypes = YES; - if( isOptionSet( FC_treatsFilePackagesAsDirectories ) ) - dialog.treatsFilePackagesAsDirectories = YES; + if( isOptionSetOrClear( FC_showsTagField ) ) + dialog.showsTagField = isOptionSet( FC_showsTagField ); + if( isOptionSetOrClear( FC_canCreateDirectories ) ) + dialog.canCreateDirectories = isOptionSet( FC_canCreateDirectories ); + if( isOptionSetOrClear( FC_canSelectHiddenExtension ) ) + dialog.canSelectHiddenExtension = isOptionSet( FC_canSelectHiddenExtension ); + if( isOptionSetOrClear( FC_showsHiddenFiles) ) + dialog.showsHiddenFiles = isOptionSet( FC_showsHiddenFiles); + if( isOptionSetOrClear( FC_extensionHidden ) ) + dialog.extensionHidden = isOptionSet( FC_extensionHidden ); + if( isOptionSetOrClear( FC_allowsOtherFileTypes ) ) + dialog.allowsOtherFileTypes = isOptionSet( FC_allowsOtherFileTypes ); + if( isOptionSetOrClear( FC_treatsFilePackagesAsDirectories ) ) + dialog.treatsFilePackagesAsDirectories = isOptionSet( FC_treatsFilePackagesAsDirectories ); // use deprecated allowedFileTypes instead of newer allowedContentTypes (since macOS 11+) // to support older macOS versions 10.14+ and because of some problems with allowedContentTypes: diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMacOSFileChooserTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMacOSFileChooserTest.java index 9f15a9da..5d4efd5c 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMacOSFileChooserTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMacOSFileChooserTest.java @@ -26,6 +26,7 @@ import java.awt.event.WindowFocusListener; import java.awt.event.WindowListener; import java.awt.event.WindowStateListener; import java.util.Arrays; +import java.util.concurrent.atomic.AtomicInteger; import javax.swing.*; import com.formdev.flatlaf.extras.components.*; import com.formdev.flatlaf.extras.components.FlatTriStateCheckBox.State; @@ -52,6 +53,11 @@ public class FlatMacOSFileChooserTest } SwingUtilities.invokeLater( () -> { + if( !FlatNativeMacLibrary.isLoaded() ) { + JOptionPane.showMessageDialog( null, "FlatLaf native library not loaded" ); + return; + } + FlatTestFrame frame = FlatTestFrame.create( args, "FlatMacOSFileChooserTest" ); addListeners( frame ); frame.showFrame( FlatMacOSFileChooserTest::new ); @@ -85,37 +91,25 @@ public class FlatMacOSFileChooserTest String nameFieldLabel = n( nameFieldLabelField.getText() ); String nameFieldStringValue = n( nameFieldStringValueField.getText() ); String directoryURL = n( directoryURLField.getText() ); - int options = 0; + AtomicInteger optionsSet = new AtomicInteger(); + AtomicInteger optionsClear = new AtomicInteger(); // NSOpenPanel if( canChooseFilesCheckBox.isSelected() ) - options |= FC_canChooseFiles; + optionsSet.set( optionsSet.get() | FC_canChooseFiles ); if( canChooseDirectoriesCheckBox.isSelected() ) - options |= FC_canChooseDirectories; - if( !resolvesAliasesCheckBox.isSelected() ) - options |= FC_resolvesAliases_NO; - if( allowsMultipleSelectionCheckBox.isSelected() ) - options |= FC_allowsMultipleSelection; + optionsSet.set( optionsSet.get() | FC_canChooseDirectories ); + o( FC_resolvesAliases, resolvesAliasesCheckBox, optionsSet, optionsClear ); + o( FC_allowsMultipleSelection, allowsMultipleSelectionCheckBox, optionsSet, optionsClear ); // NSSavePanel - if( showsTagFieldCheckBox.getState() == State.SELECTED ) - options |= FC_showsTagField_YES; - else if( showsTagFieldCheckBox.getState() == State.UNSELECTED ) - options |= FC_showsTagField_NO; - if( canCreateDirectoriesCheckBox.getState() == State.SELECTED ) - options |= FC_canCreateDirectories_YES; - else if( canCreateDirectoriesCheckBox.getState() == State.UNSELECTED ) - options |= FC_canCreateDirectories_NO; - if( canSelectHiddenExtensionCheckBox.isSelected() ) - options |= FC_canSelectHiddenExtension; - if( showsHiddenFilesCheckBox.isSelected() ) - options |= FC_showsHiddenFiles; - if( extensionHiddenCheckBox.isSelected() ) - options |= FC_extensionHidden; - if( allowsOtherFileTypesCheckBox.isSelected() ) - options |= FC_allowsOtherFileTypes; - if( treatsFilePackagesAsDirectoriesCheckBox.isSelected() ) - options |= FC_treatsFilePackagesAsDirectories; + o( FC_showsTagField, showsTagFieldCheckBox, optionsSet, optionsClear ); + o( FC_canCreateDirectories, canCreateDirectoriesCheckBox, optionsSet, optionsClear ); + o( FC_canSelectHiddenExtension, canSelectHiddenExtensionCheckBox, optionsSet, optionsClear ); + o( FC_showsHiddenFiles, showsHiddenFilesCheckBox, optionsSet, optionsClear ); + o( FC_extensionHidden, extensionHiddenCheckBox, optionsSet, optionsClear ); + o( FC_allowsOtherFileTypes, allowsOtherFileTypesCheckBox, optionsSet, optionsClear ); + o( FC_treatsFilePackagesAsDirectories, treatsFilePackagesAsDirectoriesCheckBox, optionsSet, optionsClear ); String allowedFileTypesStr = n( allowedFileTypesField.getText() ); String[] allowedFileTypes = {}; @@ -124,17 +118,18 @@ public class FlatMacOSFileChooserTest if( direct ) { String[] files = FlatNativeMacLibrary.showFileChooser( open, title, prompt, message, - nameFieldLabel, nameFieldStringValue, directoryURL, options, allowedFileTypes ); + nameFieldLabel, nameFieldStringValue, directoryURL, + optionsSet.get(), optionsClear.get(), allowedFileTypes ); filesField.setText( (files != null) ? Arrays.toString( files ).replace( ',', '\n' ) : "null" ); } else { SecondaryLoop secondaryLoop = Toolkit.getDefaultToolkit().getSystemEventQueue().createSecondaryLoop(); - int options2 = options; String[] allowedFileTypes2 = allowedFileTypes; new Thread( () -> { String[] files = FlatNativeMacLibrary.showFileChooser( open, title, prompt, message, - nameFieldLabel, nameFieldStringValue, directoryURL, options2, allowedFileTypes2 ); + nameFieldLabel, nameFieldStringValue, directoryURL, + optionsSet.get(), optionsClear.get(), allowedFileTypes2 ); System.out.println( " secondaryLoop.exit() returned " + secondaryLoop.exit() ); @@ -152,6 +147,13 @@ public class FlatMacOSFileChooserTest return !s.isEmpty() ? s : null; } + private static void o( int option, FlatTriStateCheckBox checkBox, AtomicInteger optionsSet, AtomicInteger optionsClear ) { + if( checkBox.getState() == State.SELECTED ) + optionsSet.set( optionsSet.get() | option ); + else if( checkBox.getState() == State.UNSELECTED ) + optionsClear.set( optionsClear.get() | option ); + } + private static void addListeners( Window w ) { w.addWindowListener( new WindowListener() { @Override @@ -216,16 +218,16 @@ public class FlatMacOSFileChooserTest options1Label = new JLabel(); canChooseFilesCheckBox = new JCheckBox(); canChooseDirectoriesCheckBox = new JCheckBox(); - resolvesAliasesCheckBox = new JCheckBox(); - allowsMultipleSelectionCheckBox = new JCheckBox(); + resolvesAliasesCheckBox = new FlatTriStateCheckBox(); + allowsMultipleSelectionCheckBox = new FlatTriStateCheckBox(); options2Label = new JLabel(); showsTagFieldCheckBox = new FlatTriStateCheckBox(); canCreateDirectoriesCheckBox = new FlatTriStateCheckBox(); - canSelectHiddenExtensionCheckBox = new JCheckBox(); - showsHiddenFilesCheckBox = new JCheckBox(); - extensionHiddenCheckBox = new JCheckBox(); - allowsOtherFileTypesCheckBox = new JCheckBox(); - treatsFilePackagesAsDirectoriesCheckBox = new JCheckBox(); + canSelectHiddenExtensionCheckBox = new FlatTriStateCheckBox(); + showsHiddenFilesCheckBox = new FlatTriStateCheckBox(); + extensionHiddenCheckBox = new FlatTriStateCheckBox(); + allowsOtherFileTypesCheckBox = new FlatTriStateCheckBox(); + treatsFilePackagesAsDirectoriesCheckBox = new FlatTriStateCheckBox(); promptLabel = new JLabel(); promptField = new JTextField(); messageLabel = new JLabel(); @@ -305,7 +307,7 @@ public class FlatMacOSFileChooserTest //---- resolvesAliasesCheckBox ---- resolvesAliasesCheckBox.setText("resolvesAliases"); - resolvesAliasesCheckBox.setSelected(true); + resolvesAliasesCheckBox.setState(FlatTriStateCheckBox.State.SELECTED); panel1.add(resolvesAliasesCheckBox, "cell 0 3"); //---- allowsMultipleSelectionCheckBox ---- @@ -414,16 +416,16 @@ public class FlatMacOSFileChooserTest private JLabel options1Label; private JCheckBox canChooseFilesCheckBox; private JCheckBox canChooseDirectoriesCheckBox; - private JCheckBox resolvesAliasesCheckBox; - private JCheckBox allowsMultipleSelectionCheckBox; + private FlatTriStateCheckBox resolvesAliasesCheckBox; + private FlatTriStateCheckBox allowsMultipleSelectionCheckBox; private JLabel options2Label; private FlatTriStateCheckBox showsTagFieldCheckBox; private FlatTriStateCheckBox canCreateDirectoriesCheckBox; - private JCheckBox canSelectHiddenExtensionCheckBox; - private JCheckBox showsHiddenFilesCheckBox; - private JCheckBox extensionHiddenCheckBox; - private JCheckBox allowsOtherFileTypesCheckBox; - private JCheckBox treatsFilePackagesAsDirectoriesCheckBox; + private FlatTriStateCheckBox canSelectHiddenExtensionCheckBox; + private FlatTriStateCheckBox showsHiddenFilesCheckBox; + private FlatTriStateCheckBox extensionHiddenCheckBox; + private FlatTriStateCheckBox allowsOtherFileTypesCheckBox; + private FlatTriStateCheckBox treatsFilePackagesAsDirectoriesCheckBox; private JLabel promptLabel; private JTextField promptField; private JLabel messageLabel; diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMacOSFileChooserTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMacOSFileChooserTest.jfd index 0412f9c3..65c30bc1 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMacOSFileChooserTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMacOSFileChooserTest.jfd @@ -45,14 +45,14 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 2" } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTriStateCheckBox" ) { name: "resolvesAliasesCheckBox" "text": "resolvesAliases" - "selected": true + "state": enum com.formdev.flatlaf.extras.components.FlatTriStateCheckBox$State SELECTED }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 3" } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTriStateCheckBox" ) { name: "allowsMultipleSelectionCheckBox" "text": "allowsMultipleSelection" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { @@ -76,31 +76,31 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 7" } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTriStateCheckBox" ) { name: "canSelectHiddenExtensionCheckBox" "text": "canSelectHiddenExtension" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 8" } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTriStateCheckBox" ) { name: "showsHiddenFilesCheckBox" "text": "showsHiddenFiles" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 9" } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTriStateCheckBox" ) { name: "extensionHiddenCheckBox" "text": "extensionHidden" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 10" } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTriStateCheckBox" ) { name: "allowsOtherFileTypesCheckBox" "text": "allowsOtherFileTypes" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 11" } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTriStateCheckBox" ) { name: "treatsFilePackagesAsDirectoriesCheckBox" "text": "treatsFilePackagesAsDirectories" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {