mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-12 15:07:11 -06:00
System File Chooser: support "approve" callback and system message dialog on Windows and Linux (not yet used in SystemFileChooser
This commit is contained in:
@@ -24,6 +24,7 @@ import java.awt.event.MouseEvent;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JOptionPane;
|
||||
import com.formdev.flatlaf.util.SystemInfo;
|
||||
|
||||
/**
|
||||
@@ -131,7 +132,7 @@ public class FlatNativeLinuxLibrary
|
||||
FC_create_folders = 1 << 5; // default for Save
|
||||
|
||||
/**
|
||||
* Shows the Linux system file dialog
|
||||
* Shows the Linux/GTK system file dialog
|
||||
* <a href="https://docs.gtk.org/gtk3/class.FileChooserDialog.html">GtkFileChooserDialog</a>.
|
||||
* <p>
|
||||
* Uses {@code GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER} if {@link #FC_select_folder} is set in parameter {@code optionsSet}.
|
||||
@@ -151,6 +152,7 @@ public class FlatNativeLinuxLibrary
|
||||
* @param currentFolder current directory shown in the dialog; or {@code null}
|
||||
* @param optionsSet options to set; see {@code FOS_*} constants
|
||||
* @param optionsClear options to clear; see {@code FOS_*} constants
|
||||
* @param callback approve callback; or {@code null}
|
||||
* @param fileTypeIndex the file type that appears as selected (zero-based)
|
||||
* @param fileTypes file types that the dialog can open or save.
|
||||
* Two or more strings and {@code null} are required for each filter.
|
||||
@@ -164,5 +166,34 @@ public class FlatNativeLinuxLibrary
|
||||
*/
|
||||
public native static String[] showFileChooser( Window owner, boolean open,
|
||||
String title, String okButtonLabel, String currentName, String currentFolder,
|
||||
int optionsSet, int optionsClear, int fileTypeIndex, String... fileTypes );
|
||||
int optionsSet, int optionsClear, FileChooserCallback callback,
|
||||
int fileTypeIndex, String... fileTypes );
|
||||
|
||||
/** @since 3.6 */
|
||||
public interface FileChooserCallback {
|
||||
boolean approve( String[] files, long hwndFileDialog );
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows a GTK message box
|
||||
* <a href="https://docs.gtk.org/gtk3/class.MessageDialog.html">GtkMessageDialog</a>.
|
||||
* <p>
|
||||
* For use in {@link FileChooserCallback} only.
|
||||
*
|
||||
* @param hwndParent the parent of the message box
|
||||
* @param messageType type of message being displayed:
|
||||
* {@link JOptionPane#ERROR_MESSAGE}, {@link JOptionPane#INFORMATION_MESSAGE},
|
||||
* {@link JOptionPane#WARNING_MESSAGE}, {@link JOptionPane#QUESTION_MESSAGE} or
|
||||
* {@link JOptionPane#PLAIN_MESSAGE}
|
||||
* @param primaryText primary text; if the dialog has a secondary text,
|
||||
* this will appear as title in a larger bold font
|
||||
* @param secondaryText secondary text; shown below of primary text; or {@code null}
|
||||
* @param defaultButton index of the default button, which can be pressed using ENTER key
|
||||
* @param buttons texts of the buttons; if no buttons given the a default "OK" button is shown
|
||||
* @return index of pressed button; or -1 for ESC key
|
||||
*
|
||||
* @since 3.6
|
||||
*/
|
||||
public native static int showMessageDialog( long hwndParent, int messageType,
|
||||
String primaryText, String secondaryText, int defaultButton, String... buttons );
|
||||
}
|
||||
|
||||
@@ -218,6 +218,7 @@ public class FlatNativeWindowsLibrary
|
||||
* @param defaultExtension default extension to be added to file name in save dialog; or {@code null}
|
||||
* @param optionsSet options to set; see {@code FOS_*} constants
|
||||
* @param optionsClear options to clear; see {@code FOS_*} constants
|
||||
* @param callback approve callback; or {@code null}
|
||||
* @param fileTypeIndex the file type that appears as selected (zero-based)
|
||||
* @param fileTypes file types that the dialog can open or save.
|
||||
* Pairs of strings are required for each filter.
|
||||
@@ -231,5 +232,29 @@ public class FlatNativeWindowsLibrary
|
||||
public native static String[] showFileChooser( Window owner, boolean open,
|
||||
String title, String okButtonLabel, String fileNameLabel, String fileName,
|
||||
String folder, String saveAsItem, String defaultFolder, String defaultExtension,
|
||||
int optionsSet, int optionsClear, int fileTypeIndex, String... fileTypes );
|
||||
int optionsSet, int optionsClear, FileChooserCallback callback,
|
||||
int fileTypeIndex, String... fileTypes );
|
||||
|
||||
/** @since 3.6 */
|
||||
public interface FileChooserCallback {
|
||||
boolean approve( String[] files, long hwndFileDialog );
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows a Windows message box
|
||||
* <a href="https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox">MessageBox</a>.
|
||||
* <p>
|
||||
* For use in {@link FileChooserCallback} only.
|
||||
*
|
||||
* @param hwndParent the parent of the message box
|
||||
* @param text message to be displayed
|
||||
* @param caption dialog box title
|
||||
* @param type see <a href="https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox#parameters">MessageBox parameter uType</a>
|
||||
* @return see <a href="https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox#return-value">MessageBox Return value</a>
|
||||
* @return index of pressed button; or -1 for ESC key
|
||||
*
|
||||
* @since 3.6
|
||||
*/
|
||||
public native static int showMessageDialog( long hwndParent,
|
||||
String text, String caption, int type );
|
||||
}
|
||||
|
||||
@@ -450,7 +450,7 @@ public class SystemFileChooser
|
||||
new Thread( () -> {
|
||||
filenamesRef.set( showSystemDialog( owner, fc ) );
|
||||
secondaryLoop.exit();
|
||||
} ).start();
|
||||
}, "FlatLaf SystemFileChooser" ).start();
|
||||
secondaryLoop.enter();
|
||||
|
||||
String[] filenames = filenamesRef.get();
|
||||
@@ -552,7 +552,7 @@ public class SystemFileChooser
|
||||
// show system file dialog
|
||||
return FlatNativeWindowsLibrary.showFileChooser( owner, open,
|
||||
fc.getDialogTitle(), approveButtonText, null, fileName,
|
||||
folder, saveAsItem, null, null, optionsSet, optionsClear,
|
||||
folder, saveAsItem, null, null, optionsSet, optionsClear, null,
|
||||
fileTypeIndex, fileTypes.toArray( new String[fileTypes.size()] ) );
|
||||
}
|
||||
}
|
||||
@@ -693,7 +693,7 @@ public class SystemFileChooser
|
||||
// show system file dialog
|
||||
return FlatNativeLinuxLibrary.showFileChooser( owner, open,
|
||||
fc.getDialogTitle(), approveButtonText, currentName, currentFolder,
|
||||
optionsSet, optionsClear, fileTypeIndex, fileTypes.toArray( new String[fileTypes.size()] ) );
|
||||
optionsSet, optionsClear, null, fileTypeIndex, fileTypes.toArray( new String[fileTypes.size()] ) );
|
||||
}
|
||||
|
||||
private String caseInsensitiveGlobPattern( String ext ) {
|
||||
|
||||
Reference in New Issue
Block a user