package plugins.nherve.toolbox.plugin;
import icy.main.Icy;
import icy.preferences.XMLPreferences;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
import javax.swing.filechooser.FileFilter;
import plugins.nherve.toolbox.image.mask.MaskPersistence;
public class PluginHelper {
public final static String H = "output_height";
public final static String PATH = "currentpath";
public final static String W = "output_width";
// From org.pushingpixels.substance.internal.utils.SubstanceCoreUtilities
public static String clipString(FontMetrics metrics, int availableWidth, String fullText) {
if (metrics.stringWidth(fullText) <= availableWidth)
return fullText;
String ellipses = "...";
int ellipsesWidth = metrics.stringWidth(ellipses);
if (ellipsesWidth > availableWidth)
return "";
String starter = "";
String ender = "";
int w = fullText.length();
int w2 = (w / 2) + (w % 2);
String prevTitle = "";
for (int i = 0; i < w2; i++) {
String newStarter = starter + fullText.charAt(i);
String newEnder = ender;
if ((w - i) > w2)
newEnder = fullText.charAt(w - i - 1) + newEnder;
String newTitle = newStarter + ellipses + newEnder;
if (metrics.stringWidth(newTitle) <= availableWidth) {
starter = newStarter;
ender = newEnder;
prevTitle = newTitle;
continue;
}
return prevTitle;
}
return fullText;
}
public static File fileChooser(FileFilter ff, XMLPreferences preferences, String title, File defaultFile, File defaultDirectory) {
return fileChooserInternal(JFileChooser.FILES_AND_DIRECTORIES, ff, preferences, title, defaultFile, defaultDirectory);
}
public static File fileChooser(final String description, XMLPreferences preferences, String title, File defaultFile, final String... fileExts) {
return fileChooser(getFilter(description, fileExts), preferences, title, defaultFile, null);
}
public static File fileChooser(final String description, XMLPreferences preferences, String title, final String... fileExts) {
return fileChooser(description, preferences, title, null, fileExts);
}
public static File fileChooser(XMLPreferences preferences, MaskPersistence repository, File defaultFile) {
return fileChooser("Segmentation mask (*" + repository.getMaskFileExtension() + ")", preferences, "Choose segmentation file", defaultFile, repository.getMaskFileExtension());
}
private static File fileChooserInternal(int mode, FileFilter ff, XMLPreferences preferences, String title, File defaultFile, File defaultDirectory) {
int width = preferences.getInt(W, 400);
int height = preferences.getInt(H, 400);
JFileChooser fileChooser = new JFileChooser();
fileChooser.setPreferredSize(new Dimension(width, height));
fileChooser.setMultiSelectionEnabled(false);
fileChooser.setFileSelectionMode(mode);
fileChooser.setAcceptAllFileFilterUsed(true);
fileChooser.setDialogTitle(title);
if (ff != null) {
fileChooser.setFileFilter(ff);
}
if (defaultFile != null) {
fileChooser.setSelectedFile(defaultFile);
} else if (defaultDirectory != null) {
File fp = new File(defaultDirectory.getAbsolutePath());
while ((fp != null) && (fp.getAbsolutePath().length() > 0) && (!fp.exists())) {
fp = fp.getParentFile();
}
if ((fp == null) || (!fp.exists())) {
fp = new File(preferences.get(PATH, ""));
}
fileChooser.setCurrentDirectory(fp);
} else {
String path = preferences.get(PATH, "");
fileChooser.setCurrentDirectory(new File(path));
}
int returnValue = fileChooser.showDialog(Icy.getMainInterface().getFrame(), "OK");
if (returnValue == JFileChooser.APPROVE_OPTION) {
preferences.put(PATH, fileChooser.getSelectedFile().getAbsolutePath());
preferences.putInt(W, fileChooser.getWidth());
preferences.putInt(H, fileChooser.getHeight());
File file = fileChooser.getSelectedFile();
return file;
} else {
return null;
}
}
public static void fileChooserTF(int mode, FileFilter ff, XMLPreferences preferences, String title, JTextField tf, File defaultFile) {
File defaultDirectory = null;
String dd = tf.getText();
if ((dd != null) && (dd.length() > 0)) {
defaultDirectory = new File(dd);
}
File f = fileChooserInternal(mode, ff, preferences, title, defaultFile, defaultDirectory);
if (f != null) {
tf.setText(f.getAbsolutePath());
}
}
public static void fileChooserTF(int mode, final String fileExt, final String description, XMLPreferences preferences, String title, JTextField tf, File defaultFile) {
fileChooserTF(mode, getFilter(description, fileExt), preferences, title, tf, defaultFile);
}
private static FileFilter getFilter(final String desc, final String... exts) {
return new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
for (String ext : exts) {
if (f.getName().toUpperCase().endsWith(ext.toUpperCase())) {
return true;
}
}
return false;
}
@Override
public String getDescription() {
return desc;
}
};
}
}