2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
package net.sourceforge.filebot.ui.panel.list;
|
|
|
|
|
|
|
|
|
|
|
|
import java.awt.BorderLayout;
|
2008-03-02 12:02:37 -05:00
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.text.NumberFormat;
|
|
|
|
import java.util.ArrayList;
|
2008-12-28 15:04:13 -05:00
|
|
|
import java.util.logging.Logger;
|
2008-03-02 12:02:37 -05:00
|
|
|
import java.util.regex.Matcher;
|
|
|
|
import java.util.regex.Pattern;
|
2007-12-23 14:28:04 -05:00
|
|
|
|
2008-03-02 12:02:37 -05:00
|
|
|
import javax.swing.AbstractAction;
|
|
|
|
import javax.swing.JButton;
|
|
|
|
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;
|
|
|
|
import javax.swing.JTextField;
|
|
|
|
import javax.swing.KeyStroke;
|
|
|
|
import javax.swing.SpinnerNumberModel;
|
|
|
|
|
2008-10-19 14:51:45 -04:00
|
|
|
import net.miginfocom.swing.MigLayout;
|
2008-10-10 14:59:01 -04:00
|
|
|
import net.sourceforge.filebot.ResourceManager;
|
2008-03-02 12:02:37 -05:00
|
|
|
import net.sourceforge.filebot.ui.FileBotList;
|
2008-07-30 18:37:01 -04:00
|
|
|
import net.sourceforge.filebot.ui.FileBotListExportHandler;
|
2007-12-23 14:28:04 -05:00
|
|
|
import net.sourceforge.filebot.ui.FileBotPanel;
|
2008-03-19 18:14:38 -04:00
|
|
|
import net.sourceforge.filebot.ui.FileTransferableMessageHandler;
|
2008-03-02 12:02:37 -05:00
|
|
|
import net.sourceforge.filebot.ui.transfer.LoadAction;
|
|
|
|
import net.sourceforge.filebot.ui.transfer.SaveAction;
|
2008-10-22 18:07:02 -04:00
|
|
|
import net.sourceforge.tuned.MessageHandler;
|
2008-04-20 12:03:19 -04:00
|
|
|
import net.sourceforge.tuned.ui.TunedUtil;
|
2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
|
|
|
|
public class ListPanel extends FileBotPanel {
|
|
|
|
|
2008-03-02 12:02:37 -05:00
|
|
|
private static final String INDEX_VARIABLE = "<i>";
|
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
private FileBotList<String> list = new FileBotList<String>();
|
2008-03-02 12:02:37 -05:00
|
|
|
|
|
|
|
private JTextField textField = new JTextField(String.format("Name - %s", INDEX_VARIABLE), 25);
|
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);
|
2007-12-23 14:28:04 -05:00
|
|
|
|
2008-10-22 18:07:02 -04:00
|
|
|
private final MessageHandler messageHandler = new FileTransferableMessageHandler(this, list.getTransferablePolicy());
|
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
public ListPanel() {
|
|
|
|
super("List", ResourceManager.getIcon("panel.list"));
|
2008-03-02 12:02:37 -05:00
|
|
|
|
2008-10-06 15:13:58 -04:00
|
|
|
list.setTitle("Title");
|
|
|
|
|
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));
|
|
|
|
|
|
|
|
list.getRemoveAction().setEnabled(true);
|
2008-03-02 12:02:37 -05:00
|
|
|
|
|
|
|
JSpinner fromSpinner = new JSpinner(fromSpinnerModel);
|
|
|
|
JSpinner toSpinner = new JSpinner(toSpinnerModel);
|
|
|
|
|
|
|
|
fromSpinner.setEditor(new JSpinner.NumberEditor(fromSpinner, "#"));
|
|
|
|
toSpinner.setEditor(new JSpinner.NumberEditor(toSpinner, "#"));
|
|
|
|
|
2009-01-01 17:27:53 -05:00
|
|
|
setLayout(new MigLayout("nogrid, fill, insets 6px 2px 6px 2px", "align center"));
|
2008-03-02 12:02:37 -05:00
|
|
|
|
2008-10-19 14:51:45 -04:00
|
|
|
add(new JLabel("Pattern:"), "gapbefore indent");
|
|
|
|
add(textField, "gap related, wmin 2cm");
|
|
|
|
add(new JLabel("From:"), "gap 5mm");
|
|
|
|
add(fromSpinner, "gap related, wmax 12mm, sizegroup spinner");
|
|
|
|
add(new JLabel("To:"), "gap 5mm");
|
|
|
|
add(toSpinner, "gap related, wmax 12mm, sizegroup spinner");
|
|
|
|
add(new JButton(createAction), "gap 7mm, gapafter indent, wrap paragraph");
|
2008-03-02 12:02:37 -05:00
|
|
|
|
2008-10-19 14:51:45 -04:00
|
|
|
add(list, "grow");
|
2008-03-02 12:02:37 -05: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");
|
2008-10-19 14:51:45 -04:00
|
|
|
|
|
|
|
list.add(buttonPanel, BorderLayout.SOUTH);
|
2008-03-02 12:02:37 -05:00
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
TunedUtil.putActionForKeystroke(this, KeyStroke.getKeyStroke("ENTER"), createAction);
|
2008-10-22 18:07:02 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MessageHandler getMessageHandler() {
|
|
|
|
return messageHandler;
|
2008-03-02 12:02:37 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
private AbstractAction createAction = new AbstractAction("Create") {
|
|
|
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
resetList();
|
|
|
|
|
|
|
|
int from = fromSpinnerModel.getNumber().intValue();
|
|
|
|
int to = toSpinnerModel.getNumber().intValue();
|
|
|
|
|
|
|
|
String pattern = textField.getText();
|
|
|
|
|
|
|
|
if (!pattern.contains(INDEX_VARIABLE)) {
|
2009-01-11 16:23:03 -05:00
|
|
|
Logger.getLogger("ui").warning(String.format("Pattern must contain index variable %s.", INDEX_VARIABLE));
|
2008-03-02 12:02:37 -05:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
NumberFormat format = NumberFormat.getInstance();
|
|
|
|
format.setGroupingUsed(false);
|
|
|
|
|
|
|
|
format.setMinimumIntegerDigits(Math.max(Integer.toString(to).length(), 2));
|
|
|
|
|
|
|
|
Matcher titleMatcher = Pattern.compile("^([\\w\\s]+).*(\\s+\\w*" + Pattern.quote(INDEX_VARIABLE) + ").*").matcher(pattern);
|
|
|
|
|
|
|
|
if (titleMatcher.matches()) {
|
2008-03-20 16:11:08 -04:00
|
|
|
list.setTitle(titleMatcher.group(1).trim());
|
2008-03-02 12:02:37 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
ArrayList<String> entries = new ArrayList<String>();
|
|
|
|
|
|
|
|
int increment = (int) Math.signum(to - from);
|
|
|
|
int index = from;
|
|
|
|
|
|
|
|
do {
|
|
|
|
String entry = pattern.replaceAll(Pattern.quote(INDEX_VARIABLE), format.format(index));
|
|
|
|
entries.add(entry);
|
|
|
|
|
|
|
|
index += increment;
|
|
|
|
} while (index != (to + increment));
|
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
list.getModel().clear();
|
|
|
|
list.getModel().addAll(entries);
|
2008-03-02 12:02:37 -05:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
private void resetList() {
|
|
|
|
list.setTitle("List");
|
|
|
|
list.getModel().clear();
|
2007-12-23 14:28:04 -05:00
|
|
|
}
|
|
|
|
}
|