2014-04-19 02:30:29 -04:00
|
|
|
package net.filebot.ui.list;
|
2007-12-23 14:28:04 -05:00
|
|
|
|
2009-05-17 13:22:44 -04:00
|
|
|
import static java.awt.Font.*;
|
|
|
|
import static java.lang.Math.*;
|
2014-04-19 02:30:29 -04:00
|
|
|
import static net.filebot.ui.NotificationLogging.*;
|
2009-02-26 04:43:16 -05:00
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
import java.awt.BorderLayout;
|
2009-05-13 14:18:58 -04:00
|
|
|
import java.awt.Font;
|
2008-03-02 12:02:37 -05:00
|
|
|
import java.awt.event.ActionEvent;
|
2012-10-27 23:36:36 -04:00
|
|
|
import java.awt.event.KeyEvent;
|
2008-03-02 12:02:37 -05:00
|
|
|
import java.text.NumberFormat;
|
|
|
|
import java.util.ArrayList;
|
2009-02-26 04:43:16 -05:00
|
|
|
import java.util.Collection;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
2009-05-13 14:18:58 -04:00
|
|
|
import java.util.logging.Level;
|
2007-12-23 14:28:04 -05:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
import javax.script.Bindings;
|
|
|
|
import javax.script.SimpleBindings;
|
2008-03-02 12:02:37 -05:00
|
|
|
import javax.swing.AbstractAction;
|
|
|
|
import javax.swing.JButton;
|
2009-03-13 20:30:24 -04:00
|
|
|
import javax.swing.JComponent;
|
2008-03-02 12:02:37 -05:00
|
|
|
import javax.swing.JLabel;
|
2008-10-19 14:51:45 -04:00
|
|
|
import javax.swing.JPanel;
|
2008-03-02 12:02:37 -05:00
|
|
|
import javax.swing.JSpinner;
|
2013-09-11 13:22:00 -04:00
|
|
|
import javax.swing.JSpinner.NumberEditor;
|
2008-03-02 12:02:37 -05:00
|
|
|
import javax.swing.JTextField;
|
|
|
|
import javax.swing.KeyStroke;
|
|
|
|
import javax.swing.SpinnerNumberModel;
|
|
|
|
|
2014-04-19 02:30:29 -04:00
|
|
|
import net.filebot.format.ExpressionFormat;
|
|
|
|
import net.filebot.similarity.SeriesNameMatcher;
|
|
|
|
import net.filebot.ui.FileBotList;
|
|
|
|
import net.filebot.ui.FileBotListExportHandler;
|
|
|
|
import net.filebot.ui.transfer.LoadAction;
|
|
|
|
import net.filebot.ui.transfer.SaveAction;
|
|
|
|
import net.filebot.util.ExceptionUtilities;
|
2014-07-29 02:45:15 -04:00
|
|
|
import net.filebot.util.ui.SwingUI;
|
2014-06-28 02:07:45 -04:00
|
|
|
import net.miginfocom.swing.MigLayout;
|
2007-12-23 14:28:04 -05:00
|
|
|
|
2009-03-13 20:30:24 -04:00
|
|
|
public class ListPanel extends JComponent {
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
private FileBotList<String> list = new FileBotList<String>();
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-24 14:38:12 -04:00
|
|
|
private JTextField textField = new JTextField("Name - {i}", 30);
|
2008-03-15 21:05:06 -04:00
|
|
|
private SpinnerNumberModel fromSpinnerModel = new SpinnerNumberModel(1, 0, Integer.MAX_VALUE, 1);
|
|
|
|
private SpinnerNumberModel toSpinnerModel = new SpinnerNumberModel(20, 0, Integer.MAX_VALUE, 1);
|
2009-06-13 05:53:48 -04:00
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
public ListPanel() {
|
2008-10-06 15:13:58 -04:00
|
|
|
list.setTitle("Title");
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
textField.setFont(new Font(MONOSPACED, PLAIN, 11));
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-03-02 12:02:37 -05:00
|
|
|
list.setTransferablePolicy(new FileListTransferablePolicy(list));
|
2008-07-30 18:37:01 -04:00
|
|
|
list.setExportHandler(new FileBotListExportHandler(list));
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
list.getRemoveAction().setEnabled(true);
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-03-02 12:02:37 -05:00
|
|
|
JSpinner fromSpinner = new JSpinner(fromSpinnerModel);
|
|
|
|
JSpinner toSpinner = new JSpinner(toSpinnerModel);
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-01-17 06:03:09 -05:00
|
|
|
fromSpinner.setEditor(new NumberEditor(fromSpinner, "#"));
|
|
|
|
toSpinner.setEditor(new NumberEditor(toSpinner, "#"));
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
setLayout(new MigLayout("nogrid, fill, insets dialog", "align center", "[pref!, center][fill]"));
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-10-19 14:51:45 -04:00
|
|
|
add(new JLabel("Pattern:"), "gapbefore indent");
|
2009-05-13 14:18:58 -04:00
|
|
|
add(textField, "gap related, wmin 2cm, sizegroupy editor");
|
2008-10-19 14:51:45 -04:00
|
|
|
add(new JLabel("From:"), "gap 5mm");
|
2009-05-13 14:18:58 -04:00
|
|
|
add(fromSpinner, "gap related, wmax 14mm, sizegroup spinner, sizegroupy editor");
|
2008-10-19 14:51:45 -04:00
|
|
|
add(new JLabel("To:"), "gap 5mm");
|
2009-05-13 14:18:58 -04:00
|
|
|
add(toSpinner, "gap related, wmax 14mm, sizegroup spinner, sizegroupy editor");
|
2008-10-19 14:51:45 -04:00
|
|
|
add(new JButton(createAction), "gap 7mm, gapafter indent, wrap paragraph");
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-10-19 14:51:45 -04:00
|
|
|
add(list, "grow");
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-10-19 14:51:45 -04:00
|
|
|
// panel with buttons that will be added inside the list component
|
2008-10-20 14:42:52 -04:00
|
|
|
JPanel buttonPanel = new JPanel(new MigLayout("insets 1.2mm, nogrid, fill", "align center"));
|
2008-10-19 14:51:45 -04:00
|
|
|
buttonPanel.add(new JButton(new LoadAction(list.getTransferablePolicy())));
|
2008-10-20 14:42:52 -04:00
|
|
|
buttonPanel.add(new JButton(new SaveAction(list.getExportHandler())), "gap related");
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-10-19 14:51:45 -04:00
|
|
|
list.add(buttonPanel, BorderLayout.SOUTH);
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2014-07-29 02:45:15 -04:00
|
|
|
SwingUI.installAction(this, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), createAction);
|
2008-10-22 18:07:02 -04:00
|
|
|
}
|
2009-06-13 05:53:48 -04:00
|
|
|
|
2008-03-02 12:02:37 -05:00
|
|
|
private AbstractAction createAction = new AbstractAction("Create") {
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2012-10-27 23:36:36 -04:00
|
|
|
@Override
|
2009-05-13 14:18:58 -04:00
|
|
|
public void actionPerformed(ActionEvent evt) {
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-23 14:27:35 -04:00
|
|
|
// clear selection
|
|
|
|
list.getListComponent().clearSelection();
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2008-03-02 12:02:37 -05:00
|
|
|
int from = fromSpinnerModel.getNumber().intValue();
|
|
|
|
int to = toSpinnerModel.getNumber().intValue();
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
try {
|
|
|
|
ExpressionFormat format = new ExpressionFormat(textField.getText());
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
// pad episode numbers with zeros (e.g. %02d) so all numbers have the same number of digits
|
|
|
|
NumberFormat numberFormat = NumberFormat.getIntegerInstance();
|
|
|
|
numberFormat.setMinimumIntegerDigits(max(2, Integer.toString(max(from, to)).length()));
|
|
|
|
numberFormat.setGroupingUsed(false);
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
List<String> names = new ArrayList<String>();
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
int min = min(from, to);
|
|
|
|
int max = max(from, to);
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
for (int i = min; i <= max; i++) {
|
|
|
|
Bindings bindings = new SimpleBindings();
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
// strings
|
|
|
|
bindings.put("i", numberFormat.format(i));
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
// numbers
|
|
|
|
bindings.put("index", i);
|
2009-06-13 05:53:48 -04:00
|
|
|
bindings.put("from", from);
|
|
|
|
bindings.put("to", to);
|
2014-06-28 02:07:45 -04:00
|
|
|
|
|
|
|
names.add(format.format(bindings));
|
2009-05-13 14:18:58 -04:00
|
|
|
}
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
if (signum(to - from) < 0) {
|
|
|
|
Collections.reverse(names);
|
|
|
|
}
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
// try to match title from the first five names
|
|
|
|
Collection<String> title = new SeriesNameMatcher().matchAll((names.size() < 5 ? names : names.subList(0, 4)).toArray(new String[0]));
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
list.setTitle(title.isEmpty() ? "List" : title.iterator().next());
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2009-05-13 14:18:58 -04:00
|
|
|
list.getModel().clear();
|
|
|
|
list.getModel().addAll(names);
|
|
|
|
} catch (Exception e) {
|
2011-08-10 14:46:19 -04:00
|
|
|
UILogger.log(Level.WARNING, ExceptionUtilities.getMessage(e), e);
|
2009-02-26 04:43:16 -05:00
|
|
|
}
|
2008-03-02 12:02:37 -05:00
|
|
|
}
|
|
|
|
};
|
2014-06-28 02:07:45 -04:00
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
}
|