package net.filebot.ui.subtitle;
import static java.nio.charset.StandardCharsets.*;
import static java.util.Collections.*;
import java.nio.charset.Charset;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import net.filebot.subtitle.SubtitleFormat;
import net.miginfocom.swing.MigLayout;
public class SubtitleFileChooser extends JFileChooser {
protected final JComboBox format = new JComboBox();
protected final JComboBox encoding = new JComboBox();
protected final JSpinner offset = new JSpinner(new SpinnerNumberModel(0, -14400000, 14400000, 100));
public SubtitleFileChooser() {
setAccessory(createAcessory());
setDefaultOptions();
}
protected void setDefaultOptions() {
setFormatOptions(singleton(SubtitleFormat.SubRip));
Set<Charset> encodings = new LinkedHashSet<Charset>(2);
encodings.add(UTF_8); // UTF-8 as default charset
encodings.add(Charset.defaultCharset()); // allow default system encoding to be used as well
setEncodingOptions(encodings);
}
protected JComponent createAcessory() {
JPanel acessory = new JPanel(new MigLayout("nogrid"));
acessory.add(new JLabel("Encoding:"), "wrap rel");
acessory.add(encoding, "sg w, wrap para");
acessory.add(new JLabel("Format:"), "wrap rel");
acessory.add(format, "sg w, wrap para");
acessory.add(new JLabel("Timing Offset:"), "wrap rel");
acessory.add(offset, "wmax 50px");
acessory.add(new JLabel("ms"));
return acessory;
}
public void setEncodingOptions(Set<Charset> options) {
encoding.setModel(new DefaultComboBoxModel(options.toArray()));
}
public Charset getSelectedEncoding() {
return (Charset) encoding.getSelectedItem();
}
public void setFormatOptions(Set<SubtitleFormat> options) {
format.setModel(new DefaultComboBoxModel(options.toArray()));
}
public SubtitleFormat getSelectedFormat() {
return (SubtitleFormat) format.getSelectedItem();
}
public long getTimingOffset() {
return (Integer) offset.getValue();
}
}