package com.vgi.mafscaling;
import java.awt.datatransfer.DataFlavor;
import java.io.File;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTabbedPane;
import javax.swing.TransferHandler;
import javax.swing.filechooser.FileNameExtensionFilter;
public abstract class FCTabbedPane extends JTabbedPane {
private static final long serialVersionUID = -1927797105079280969L;
protected static final JFileChooser fileChooser = new JFileChooser();
public FCTabbedPane(int tabPlacement) {
super(tabPlacement);
File logsPath = new File(Config.getLastLogFilesPath());
if (logsPath.exists() && logsPath.isDirectory())
fileChooser.setCurrentDirectory(logsPath);
else
fileChooser.setCurrentDirectory(new File("."));
fileChooser.setAcceptAllFileFilterUsed(false);
if (fileChooser.getFileFilter() == null)
fileChooser.setFileFilter(new FileNameExtensionFilter("CSV file", "csv"));
setTransferHandler(new TransferHandler() {
private static final long serialVersionUID = 1L;
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
boolean can = support.isDrop() && (support.getSourceDropActions() & COPY) != 0 && support.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
if (can)
support.setDropAction(COPY);
return can;
}
@SuppressWarnings("unchecked")
@Override
public boolean importData(TransferHandler.TransferSupport info) {
try {
List<File> files = (List<File>)info.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
for (int i = 0; i < files.size(); ++i) {
try {
String fn = files.get(i).getCanonicalPath();
if (!(fn.substring(fn.lastIndexOf(".") + 1).equalsIgnoreCase("csv"))) {
JOptionPane.showMessageDialog(null, "Invalid file type - only CSV file are supported: " + fn, "Invalid file", JOptionPane.ERROR_MESSAGE);
return false;
}
}
catch( java.io.IOException e ) {}
}
onDroppedFiles(files);
return true;
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error on drag'n'drop: " + e.getMessage(), "Invalid file", JOptionPane.ERROR_MESSAGE);
}
return false;
}
});
}
public static String getLogFilesPath() {
return fileChooser.getCurrentDirectory().getAbsolutePath();
}
protected abstract void onDroppedFiles(List<File> files);
}