mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
* improved dnd behavour
* refactoring
This commit is contained in:
parent
824c29fd36
commit
6d2ff4dfe4
@ -66,7 +66,7 @@ public class FileBotUtil {
|
||||
|
||||
public static boolean containsOnlyTorrentFiles(List<File> files) {
|
||||
for (File file : files) {
|
||||
if (!file.isFile() || !FileFormat.getExtension(file).equalsIgnoreCase("torrent"))
|
||||
if (!FileFormat.hasExtension(file, "torrent"))
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@ public class FileBotUtil {
|
||||
|
||||
public static boolean containsOnlySfvFiles(List<File> files) {
|
||||
for (File file : files) {
|
||||
if (!file.isFile() || !FileFormat.getExtension(file).equalsIgnoreCase("sfv"))
|
||||
if (!FileFormat.hasExtension(file, "sfv"))
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -86,7 +86,7 @@ public class FileBotUtil {
|
||||
|
||||
public static boolean containsOnlyListFiles(List<File> files) {
|
||||
for (File file : files) {
|
||||
if (!isListFile(file))
|
||||
if (!FileFormat.hasExtension(file, "txt", "list", ""))
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -94,19 +94,6 @@ public class FileBotUtil {
|
||||
}
|
||||
|
||||
|
||||
public static boolean isListFile(File file) {
|
||||
if (!file.isFile())
|
||||
return false;
|
||||
|
||||
String extension = FileFormat.getExtension(file).toLowerCase();
|
||||
|
||||
if (extension.equals("txt") || extension.equals("list") || extension.isEmpty())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static void registerActionForKeystroke(JComponent component, KeyStroke keystroke, Action action) {
|
||||
Integer key = action.hashCode();
|
||||
component.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(keystroke, key);
|
||||
|
@ -32,9 +32,6 @@ public class FileFormat {
|
||||
|
||||
|
||||
public static String formatName(File file) {
|
||||
if (file == null)
|
||||
return "";
|
||||
|
||||
String name = file.getName();
|
||||
|
||||
if (file.isDirectory())
|
||||
@ -52,15 +49,27 @@ public class FileFormat {
|
||||
}
|
||||
|
||||
|
||||
public static boolean hasExtension(File file, String... extensions) {
|
||||
if (!file.isFile())
|
||||
return false;
|
||||
|
||||
String extension = getExtension(file);
|
||||
|
||||
for (String ext : extensions) {
|
||||
if (ext.equalsIgnoreCase(extension))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static String getExtension(File file) {
|
||||
return getExtension(file, false);
|
||||
}
|
||||
|
||||
|
||||
public static String getExtension(File file, boolean includeDot) {
|
||||
if (!file.isFile())
|
||||
return null;
|
||||
|
||||
String name = file.getName();
|
||||
int dotIndex = name.lastIndexOf(".");
|
||||
|
||||
|
@ -30,7 +30,7 @@ import net.sourceforge.filebot.ui.transfer.TransferablePolicyImportHandler;
|
||||
import net.sourceforge.filebot.ui.transfer.TransferablePolicySupport;
|
||||
import net.sourceforge.filebot.ui.transferablepolicies.NullTransferablePolicy;
|
||||
import net.sourceforge.filebot.ui.transferablepolicies.TransferablePolicy;
|
||||
import net.sourceforge.tuned.ui.FancyListCellRenderer;
|
||||
import net.sourceforge.tuned.ui.DefaultFancyListCellRenderer;
|
||||
import net.sourceforge.tuned.ui.SimpleListModel;
|
||||
|
||||
|
||||
@ -62,7 +62,7 @@ public class FileBotList extends JPanel implements Saveable, TransferablePolicyS
|
||||
listScrollPane.setBorder(BorderFactory.createEmptyBorder());
|
||||
}
|
||||
|
||||
list.setCellRenderer(new FancyListCellRenderer());
|
||||
list.setCellRenderer(new DefaultFancyListCellRenderer());
|
||||
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
||||
|
||||
add(listScrollPane, BorderLayout.CENTER);
|
||||
|
@ -3,7 +3,9 @@ package net.sourceforge.filebot.ui;
|
||||
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JPanel;
|
||||
@ -18,7 +20,7 @@ import net.sourceforge.filebot.ui.panel.subtitle.SubtitlePanel;
|
||||
|
||||
public class FileBotPanel extends JPanel {
|
||||
|
||||
private static final LinkedHashSet<FileBotPanel> registry = new LinkedHashSet<FileBotPanel>();
|
||||
private static final List<FileBotPanel> registry = new ArrayList<FileBotPanel>();
|
||||
|
||||
static {
|
||||
registry.add(new ListPanel());
|
||||
@ -30,8 +32,8 @@ public class FileBotPanel extends JPanel {
|
||||
}
|
||||
|
||||
|
||||
public static Iterable<FileBotPanel> getAvailablePanels() {
|
||||
return registry;
|
||||
public static List<FileBotPanel> getAvailablePanels() {
|
||||
return Collections.unmodifiableList(registry);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
package net.sourceforge.filebot.ui;
|
||||
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.dnd.DropTarget;
|
||||
import java.awt.dnd.DropTargetAdapter;
|
||||
import java.awt.dnd.DropTargetDragEvent;
|
||||
@ -19,8 +19,7 @@ import javax.swing.SwingUtilities;
|
||||
import javax.swing.Timer;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
|
||||
import net.sourceforge.tuned.ui.FancyListCellRenderer;
|
||||
import net.sourceforge.tuned.ui.GradientStyle;
|
||||
import net.sourceforge.tuned.ui.DefaultFancyListCellRenderer;
|
||||
import net.sourceforge.tuned.ui.SimpleListModel;
|
||||
|
||||
|
||||
@ -47,25 +46,27 @@ class FileBotPanelSelectionList extends JList {
|
||||
}
|
||||
|
||||
|
||||
private class PanelCellRenderer extends FancyListCellRenderer {
|
||||
private class PanelCellRenderer extends DefaultFancyListCellRenderer {
|
||||
|
||||
public PanelCellRenderer() {
|
||||
super(10, Color.decode("#163264"), GradientStyle.TOP_TO_BOTTOM);
|
||||
super(BorderLayout.CENTER, 10, 0, Color.decode("#163264"));
|
||||
|
||||
setHighlightingEnabled(false);
|
||||
|
||||
setVerticalTextPosition(SwingConstants.BOTTOM);
|
||||
setHorizontalTextPosition(SwingConstants.CENTER);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
public void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.configureListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
|
||||
FileBotPanel panel = (FileBotPanel) value;
|
||||
setText(panel.getPanelName());
|
||||
setIcon(panel.getIcon());
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -3,7 +3,6 @@ package net.sourceforge.filebot.ui;
|
||||
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Window;
|
||||
import java.awt.event.ActionEvent;
|
||||
@ -27,7 +26,7 @@ import javax.swing.border.EmptyBorder;
|
||||
|
||||
import net.sourceforge.filebot.FileBotUtil;
|
||||
import net.sourceforge.filebot.resources.ResourceManager;
|
||||
import net.sourceforge.tuned.ui.FancyListCellRenderer;
|
||||
import net.sourceforge.tuned.ui.DefaultFancyListCellRenderer;
|
||||
import net.sourceforge.tuned.ui.SimpleListModel;
|
||||
|
||||
|
||||
@ -134,18 +133,17 @@ public class SelectDialog<T> extends JDialog {
|
||||
}
|
||||
|
||||
|
||||
private class SelectListCellRenderer extends FancyListCellRenderer {
|
||||
private class SelectListCellRenderer extends DefaultFancyListCellRenderer {
|
||||
|
||||
public SelectListCellRenderer() {
|
||||
super(4, false);
|
||||
super(4);
|
||||
setHighlightingEnabled(false);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.getListCellRendererComponent(list, convertValueToString(value), index, isSelected, cellHasFocus);
|
||||
|
||||
return this;
|
||||
public void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.configureListCellRendererComponent(list, convertValueToString(value), index, isSelected, cellHasFocus);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
|
||||
package net.sourceforge.filebot.ui.panel.rename;
|
||||
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
@ -12,127 +12,54 @@ import java.util.regex.Pattern;
|
||||
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.ListCellRenderer;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.border.LineBorder;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.Highlighter;
|
||||
import javax.swing.text.JTextComponent;
|
||||
|
||||
import net.sourceforge.tuned.ui.GradientStyle;
|
||||
import net.sourceforge.tuned.ui.AbstractFancyListCellRenderer;
|
||||
|
||||
|
||||
public class HighlightListCellRenderer extends JTextField implements ListCellRenderer {
|
||||
public class HighlightListCellRenderer extends AbstractFancyListCellRenderer {
|
||||
|
||||
private final JTextComponent textComponent = new JTextField();
|
||||
|
||||
private Pattern pattern;
|
||||
private Highlighter.HighlightPainter highlightPainter;
|
||||
|
||||
private Color gradientBeginColor;
|
||||
private Color gradientEndColor;
|
||||
private GradientStyle gradientStyle;
|
||||
private Insets margin;
|
||||
private boolean highlightingEnabled;
|
||||
private boolean selected;
|
||||
private Border border;
|
||||
|
||||
|
||||
public HighlightListCellRenderer(Pattern pattern, Highlighter.HighlightPainter highlightPainter, int padding, boolean highlighting) {
|
||||
this(pattern, highlightPainter, GradientStyle.TOP_TO_BOTTOM, highlighting, new Insets(padding, padding, padding, padding), new Insets(1, 1, 0, 1), null);
|
||||
}
|
||||
|
||||
|
||||
public HighlightListCellRenderer(Pattern pattern, Highlighter.HighlightPainter highlightPainter, GradientStyle gradientStyle, boolean highlighting, Insets padding, Insets margin, Color selectedBorderColor) {
|
||||
public HighlightListCellRenderer(Pattern pattern, Highlighter.HighlightPainter highlightPainter, int padding) {
|
||||
super(new Insets(padding, padding, padding, padding));
|
||||
|
||||
this.pattern = pattern;
|
||||
this.highlightPainter = highlightPainter;
|
||||
|
||||
this.gradientStyle = gradientStyle;
|
||||
this.margin = margin;
|
||||
this.highlightingEnabled = highlighting;
|
||||
textComponent.setBorder(null);
|
||||
textComponent.setOpaque(false);
|
||||
|
||||
border = new EmptyBorder(padding);
|
||||
border = new CompoundBorder(new LineBorder(selectedBorderColor, 1), border);
|
||||
border = new CompoundBorder(new EmptyBorder(margin), border);
|
||||
this.add(textComponent, BorderLayout.WEST);
|
||||
|
||||
setOpaque(false);
|
||||
|
||||
this.getDocument().addDocumentListener(new HighlightUpdateListener());
|
||||
textComponent.getDocument().addDocumentListener(new HighlightUpdateListener());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
if (isSelected) {
|
||||
setBackground(list.getSelectionBackground());
|
||||
setForeground(list.getSelectionForeground());
|
||||
} else {
|
||||
setBackground(list.getBackground());
|
||||
setForeground(list.getForeground());
|
||||
}
|
||||
protected void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.configureListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
|
||||
setText(value.toString());
|
||||
|
||||
setSelected(isSelected);
|
||||
setBorder(border);
|
||||
|
||||
Color sc = list.getSelectionBackground();
|
||||
|
||||
if (highlightingEnabled) {
|
||||
Color normalBg = list.getBackground();
|
||||
Color highlightBg = new Color(sc.getRed(), sc.getGreen(), sc.getBlue(), 8);
|
||||
|
||||
if ((index % 2) == 0)
|
||||
setBackground(highlightBg);
|
||||
else
|
||||
setBackground(normalBg);
|
||||
}
|
||||
|
||||
if (isSelected) {
|
||||
setGradientBeginColor(sc.brighter());
|
||||
setGradientEndColor(sc);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void paintBorder(Graphics g) {
|
||||
if (selected) {
|
||||
super.paintBorder(g);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
Graphics2D g2d = (Graphics2D) g;
|
||||
Rectangle2D shape = new Rectangle2D.Double(margin.left, margin.top, getWidth() - (margin.left + margin.right), getHeight() - (margin.top + margin.bottom));
|
||||
|
||||
if (highlightingEnabled) {
|
||||
g2d.setPaint(getBackground());
|
||||
g2d.fill(shape);
|
||||
}
|
||||
|
||||
if (selected) {
|
||||
g2d.setPaint(gradientStyle.getGradientPaint(shape, gradientBeginColor, gradientEndColor));
|
||||
g2d.fill(shape);
|
||||
}
|
||||
|
||||
super.paintComponent(g);
|
||||
textComponent.setText(value.toString());
|
||||
}
|
||||
|
||||
|
||||
protected void updateHighlighter() {
|
||||
getHighlighter().removeAllHighlights();
|
||||
textComponent.getHighlighter().removeAllHighlights();
|
||||
|
||||
Matcher matcher = pattern.matcher(getText());
|
||||
Matcher matcher = pattern.matcher(textComponent.getText());
|
||||
|
||||
while (matcher.find()) {
|
||||
try {
|
||||
getHighlighter().addHighlight(matcher.start(0), matcher.end(0), highlightPainter);
|
||||
textComponent.getHighlighter().addHighlight(matcher.start(0), matcher.end(0), highlightPainter);
|
||||
} catch (BadLocationException e) {
|
||||
//should not happen
|
||||
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e);
|
||||
@ -141,38 +68,14 @@ public class HighlightListCellRenderer extends JTextField implements ListCellRen
|
||||
}
|
||||
|
||||
|
||||
public void setGradientBeginColor(Color gradientBeginColor) {
|
||||
this.gradientBeginColor = gradientBeginColor;
|
||||
}
|
||||
|
||||
|
||||
public void setGradientEndColor(Color gradientEndColor) {
|
||||
this.gradientEndColor = gradientEndColor;
|
||||
}
|
||||
|
||||
|
||||
public void setGradientStyle(GradientStyle gradientStyle) {
|
||||
this.gradientStyle = gradientStyle;
|
||||
}
|
||||
|
||||
|
||||
public boolean isHighlightingEnabled() {
|
||||
return highlightingEnabled;
|
||||
}
|
||||
|
||||
|
||||
public void setHighlightingEnabled(boolean highlightingEnabled) {
|
||||
this.highlightingEnabled = highlightingEnabled;
|
||||
}
|
||||
|
||||
|
||||
public void setSelected(boolean selected) {
|
||||
this.selected = selected;
|
||||
}
|
||||
|
||||
|
||||
public boolean isSelected() {
|
||||
return selected;
|
||||
@Override
|
||||
public void setForeground(Color fg) {
|
||||
super.setForeground(fg);
|
||||
|
||||
// textComponent is null while in super constructor
|
||||
if (textComponent != null) {
|
||||
textComponent.setForeground(fg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -3,16 +3,15 @@ package net.sourceforge.filebot.ui.panel.rename;
|
||||
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.ListModel;
|
||||
|
||||
import net.sourceforge.tuned.ui.FancyListCellRenderer;
|
||||
import net.sourceforge.tuned.ui.DefaultFancyListCellRenderer;
|
||||
|
||||
|
||||
class RenameListCellRenderer extends FancyListCellRenderer {
|
||||
class RenameListCellRenderer extends DefaultFancyListCellRenderer {
|
||||
|
||||
private final ListModel names;
|
||||
private final ListModel files;
|
||||
@ -29,24 +28,22 @@ class RenameListCellRenderer extends FancyListCellRenderer {
|
||||
this.add(extension);
|
||||
}
|
||||
|
||||
private Color noMatchGradientBeginColor = Color.decode("#B7B7B7");
|
||||
private Color noMatchGradientEndColor = Color.decode("#9A9A9A");
|
||||
private final Color noMatchGradientBeginColor = Color.decode("#B7B7B7");
|
||||
private final Color noMatchGradientEndColor = Color.decode("#9A9A9A");
|
||||
|
||||
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
public void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.configureListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
|
||||
if (index >= getMinLength())
|
||||
if (index >= getMinLength()) {
|
||||
if (isSelected) {
|
||||
setForeground(Color.WHITE);
|
||||
setGradientBeginColor(noMatchGradientBeginColor);
|
||||
setGradientEndColor(noMatchGradientEndColor);
|
||||
setGradientColors(noMatchGradientBeginColor, noMatchGradientEndColor);
|
||||
} else {
|
||||
setForeground(noMatchGradientBeginColor);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,6 +5,7 @@ package net.sourceforge.filebot.ui.panel.rename;
|
||||
import java.awt.AlphaComposite;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Window;
|
||||
@ -52,7 +53,7 @@ public class ValidateNamesDialog extends JDialog {
|
||||
JList list = new JList(new SimpleListModel(entries));
|
||||
list.setEnabled(false);
|
||||
|
||||
list.setCellRenderer(new HighlightListCellRenderer(FileBotUtil.INVALID_CHARACTERS_PATTERN, new CharacterHighlightPainter(Color.decode("#FF4200"), Color.decode("#FF1200")), 4, true));
|
||||
list.setCellRenderer(new HighlightListCellRenderer(FileBotUtil.INVALID_CHARACTERS_PATTERN, new CharacterHighlightPainter(Color.decode("#FF4200"), Color.decode("#FF1200")), 4));
|
||||
|
||||
JLabel label = new JLabel("Some names contain invalid characters:");
|
||||
|
||||
@ -84,10 +85,11 @@ public class ValidateNamesDialog extends JDialog {
|
||||
|
||||
setLocation(FileBotUtil.getPreferredLocation(this));
|
||||
|
||||
setPreferredSize(new Dimension(365, 280));
|
||||
pack();
|
||||
|
||||
// Shortcut Escape
|
||||
FileBotUtil.registerActionForKeystroke(c, KeyStroke.getKeyStroke("released ESCAPE"), cancelAction);
|
||||
|
||||
pack();
|
||||
}
|
||||
|
||||
|
||||
|
@ -4,11 +4,17 @@ package net.sourceforge.filebot.ui.panel.rename.entry;
|
||||
|
||||
public abstract class AbstractFileEntry<T> extends ListEntry<T> {
|
||||
|
||||
public AbstractFileEntry(T value) {
|
||||
super(value);
|
||||
private final long length;
|
||||
|
||||
|
||||
public AbstractFileEntry(String name, T value, long length) {
|
||||
super(name, value);
|
||||
this.length = length;
|
||||
}
|
||||
|
||||
|
||||
public abstract long getLength();
|
||||
public long getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,19 +10,7 @@ import net.sourceforge.filebot.FileFormat;
|
||||
public class FileEntry extends AbstractFileEntry<File> {
|
||||
|
||||
public FileEntry(File file) {
|
||||
super(file);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getName(File value) {
|
||||
return FileFormat.getNameWithoutExtension(getValue());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public long getLength() {
|
||||
return getValue().length();
|
||||
super(FileFormat.formatName(file), file, file.length());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,21 +2,18 @@
|
||||
package net.sourceforge.filebot.ui.panel.rename.entry;
|
||||
|
||||
|
||||
public abstract class ListEntry<T> {
|
||||
public class ListEntry<T> {
|
||||
|
||||
private String name;
|
||||
private T value;
|
||||
|
||||
|
||||
public ListEntry(T value) {
|
||||
public ListEntry(String name, T value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
this.name = getName(value);
|
||||
}
|
||||
|
||||
|
||||
protected abstract String getName(T value);
|
||||
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
@ -5,12 +5,7 @@ package net.sourceforge.filebot.ui.panel.rename.entry;
|
||||
public class StringEntry extends ListEntry<String> {
|
||||
|
||||
public StringEntry(String string) {
|
||||
super(string);
|
||||
super(string, string);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected String getName(String value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
@ -10,19 +10,7 @@ import net.sourceforge.filebot.torrent.Torrent.Entry;
|
||||
public class TorrentEntry extends AbstractFileEntry<Torrent.Entry> {
|
||||
|
||||
public TorrentEntry(Entry value) {
|
||||
super(value);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getName(Torrent.Entry value) {
|
||||
return FileFormat.getNameWithoutExtension(getValue().getName());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public long getLength() {
|
||||
return getValue().getLength();
|
||||
super(FileFormat.getNameWithoutExtension(value.getName()), value, value.getLength());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ package net.sourceforge.filebot.ui.panel.subtitle;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@ -20,12 +21,12 @@ public class Language {
|
||||
public static List<Language> languages = null;
|
||||
|
||||
|
||||
public static synchronized Iterable<Language> getLanguages() {
|
||||
public static synchronized List<Language> getLanguages() {
|
||||
if (languages == null) {
|
||||
languages = parseLanguages();
|
||||
}
|
||||
|
||||
return languages;
|
||||
return Collections.unmodifiableList(languages);
|
||||
}
|
||||
|
||||
|
||||
@ -52,7 +53,7 @@ public class Language {
|
||||
|
||||
|
||||
private static List<Language> parseLanguages() {
|
||||
ArrayList<Language> languages = new ArrayList<Language>();
|
||||
List<Language> languages = new ArrayList<Language>();
|
||||
|
||||
try {
|
||||
Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(Language.class.getResourceAsStream("languages.xml"));
|
||||
|
@ -5,9 +5,12 @@ package net.sourceforge.filebot.ui.transfer;
|
||||
import java.awt.datatransfer.Clipboard;
|
||||
import java.awt.datatransfer.Transferable;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.TransferHandler;
|
||||
|
||||
import net.sourceforge.filebot.resources.ResourceManager;
|
||||
|
||||
|
||||
public class DefaultTransferHandler extends TransferHandler {
|
||||
|
||||
|
@ -7,8 +7,5 @@ import net.sourceforge.filebot.ui.transferablepolicies.TransferablePolicy;
|
||||
|
||||
public interface TransferablePolicySupport {
|
||||
|
||||
public void setTransferablePolicy(TransferablePolicy transferablePolicy);
|
||||
|
||||
|
||||
public TransferablePolicy getTransferablePolicy();
|
||||
}
|
||||
|
@ -3,7 +3,8 @@ package net.sourceforge.filebot.web;
|
||||
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
@ -11,7 +12,7 @@ import javax.swing.ImageIcon;
|
||||
|
||||
public abstract class EpisodeListClient {
|
||||
|
||||
private static final LinkedHashSet<EpisodeListClient> registry = new LinkedHashSet<EpisodeListClient>();
|
||||
private static final List<EpisodeListClient> registry = new ArrayList<EpisodeListClient>();
|
||||
|
||||
static {
|
||||
registry.add(new TvdotcomClient());
|
||||
@ -20,8 +21,8 @@ public abstract class EpisodeListClient {
|
||||
}
|
||||
|
||||
|
||||
public static Iterable<EpisodeListClient> getAvailableEpisodeListClients() {
|
||||
return registry;
|
||||
public static List<EpisodeListClient> getAvailableEpisodeListClients() {
|
||||
return Collections.unmodifiableList(registry);
|
||||
}
|
||||
|
||||
|
||||
|
@ -32,7 +32,7 @@ public class TemporaryFolder {
|
||||
* Delete all temporary folders on shutdown
|
||||
*/
|
||||
static {
|
||||
Runtime.getRuntime().addShutdownHook(new Thread("TemporaryFolder ShutdownHook") {
|
||||
Runtime.getRuntime().addShutdownHook(new Thread("TemporaryFolder Cleanup") {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
@ -0,0 +1,313 @@
|
||||
|
||||
package net.sourceforge.tuned.ui;
|
||||
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.ListCellRenderer;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.border.LineBorder;
|
||||
|
||||
|
||||
public abstract class AbstractFancyListCellRenderer extends JComponent implements ListCellRenderer {
|
||||
|
||||
private Color gradientBeginColor;
|
||||
private Color gradientEndColor;
|
||||
|
||||
private Color highlightColor;
|
||||
|
||||
private boolean borderPainted = false;
|
||||
private boolean gradientPainted = false;
|
||||
|
||||
private GradientStyle gradientStyle = GradientStyle.TOP_TO_BOTTOM;
|
||||
private boolean highlightingEnabled = true;
|
||||
|
||||
private final Insets margin;
|
||||
|
||||
private static final Insets DEFAULT_PADDING = new Insets(7, 7, 7, 7);
|
||||
private static final Insets DEFAULT_MARGIN = new Insets(1, 1, 0, 1);
|
||||
|
||||
|
||||
public AbstractFancyListCellRenderer() {
|
||||
this(DEFAULT_PADDING, DEFAULT_MARGIN, null);
|
||||
}
|
||||
|
||||
|
||||
public AbstractFancyListCellRenderer(Insets padding) {
|
||||
this(padding, DEFAULT_MARGIN, null);
|
||||
}
|
||||
|
||||
|
||||
public AbstractFancyListCellRenderer(Insets padding, Insets margin) {
|
||||
this(padding, margin, null);
|
||||
}
|
||||
|
||||
|
||||
public AbstractFancyListCellRenderer(Insets padding, Insets margin, Color borderColor) {
|
||||
this.setLayout(new BorderLayout());
|
||||
|
||||
this.margin = margin;
|
||||
|
||||
Border border = null;
|
||||
|
||||
if (padding != null)
|
||||
border = new EmptyBorder(padding);
|
||||
|
||||
if (borderColor != null)
|
||||
border = new CompoundBorder(new LineBorder(borderColor, 1), border);
|
||||
|
||||
if (margin != null)
|
||||
border = new CompoundBorder(new EmptyBorder(margin), border);
|
||||
|
||||
setBorder(border);
|
||||
setOpaque(false);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void paintBorder(Graphics g) {
|
||||
if (borderPainted) {
|
||||
super.paintBorder(g);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
Graphics2D g2d = (Graphics2D) g;
|
||||
Rectangle2D shape = new Rectangle2D.Double(margin.left, margin.top, getWidth() - (margin.left + margin.right), getHeight() - (margin.top + margin.bottom));
|
||||
|
||||
if (isOpaque()) {
|
||||
g2d.setPaint(getBackground());
|
||||
g2d.fill(shape);
|
||||
}
|
||||
|
||||
if (highlightingEnabled && (highlightColor != null)) {
|
||||
g2d.setPaint(highlightColor);
|
||||
g2d.fill(shape);
|
||||
}
|
||||
|
||||
if (gradientPainted) {
|
||||
g2d.setPaint(gradientStyle.getGradientPaint(shape, gradientBeginColor, gradientEndColor));
|
||||
g2d.fill(shape);
|
||||
}
|
||||
|
||||
super.paintComponent(g);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
|
||||
configureListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
|
||||
validate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
protected void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
|
||||
setBackground(list.getBackground());
|
||||
|
||||
setGradientPainted(isSelected);
|
||||
setBorderPainted(isSelected);
|
||||
|
||||
Color sc = list.getSelectionBackground();
|
||||
|
||||
if (isSelected) {
|
||||
setGradientColors(sc.brighter(), sc);
|
||||
}
|
||||
|
||||
if (highlightingEnabled && ((index % 2) == 0)) {
|
||||
setHighlightColor(new Color(sc.getRed(), sc.getGreen(), sc.getBlue(), 28));
|
||||
} else {
|
||||
setHighlightColor(null);
|
||||
}
|
||||
|
||||
if (isSelected) {
|
||||
setBackground(list.getSelectionBackground());
|
||||
setForeground(list.getSelectionForeground());
|
||||
} else {
|
||||
setBackground(list.getBackground());
|
||||
setForeground(list.getForeground());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setGradientColors(Color gradientBeginColor, Color gradientEndColor) {
|
||||
this.gradientBeginColor = gradientBeginColor;
|
||||
this.gradientEndColor = gradientEndColor;
|
||||
}
|
||||
|
||||
|
||||
public Color getGradientBeginColor() {
|
||||
return gradientBeginColor;
|
||||
}
|
||||
|
||||
|
||||
public Color getGradientEndColor() {
|
||||
return gradientEndColor;
|
||||
}
|
||||
|
||||
|
||||
public void setHighlightColor(Color highlightColor) {
|
||||
this.highlightColor = highlightColor;
|
||||
}
|
||||
|
||||
|
||||
public void setGradientStyle(GradientStyle gradientStyle) {
|
||||
this.gradientStyle = gradientStyle;
|
||||
}
|
||||
|
||||
|
||||
public void setHighlightingEnabled(boolean highlightingEnabled) {
|
||||
this.highlightingEnabled = highlightingEnabled;
|
||||
}
|
||||
|
||||
|
||||
public void setBorderPainted(boolean borderPainted) {
|
||||
this.borderPainted = borderPainted;
|
||||
}
|
||||
|
||||
|
||||
public void setGradientPainted(boolean gradientPainted) {
|
||||
this.gradientPainted = gradientPainted;
|
||||
}
|
||||
|
||||
|
||||
public Color getHighlightColor() {
|
||||
return highlightColor;
|
||||
}
|
||||
|
||||
|
||||
public boolean isBorderPainted() {
|
||||
return borderPainted;
|
||||
}
|
||||
|
||||
|
||||
public GradientStyle getGradientStyle() {
|
||||
return gradientStyle;
|
||||
}
|
||||
|
||||
|
||||
public boolean isHighlightingEnabled() {
|
||||
return highlightingEnabled;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void validate() {
|
||||
// validate children, yet avoid flickering of the mouse cursor
|
||||
validateTree();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void repaint() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void repaint(long tm, int x, int y, int width, int height) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void repaint(Rectangle r) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void firePropertyChange(String propertyName, byte oldValue, byte newValue) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void firePropertyChange(String propertyName, char oldValue, char newValue) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void firePropertyChange(String propertyName, short oldValue, short newValue) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void firePropertyChange(String propertyName, int oldValue, int newValue) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void firePropertyChange(String propertyName, long oldValue, long newValue) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void firePropertyChange(String propertyName, float oldValue, float newValue) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void firePropertyChange(String propertyName, double oldValue, double newValue) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overridden for performance reasons.
|
||||
*/
|
||||
@Override
|
||||
public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
|
||||
package net.sourceforge.tuned.ui;
|
||||
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Insets;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
|
||||
|
||||
public class DefaultFancyListCellRenderer extends AbstractFancyListCellRenderer {
|
||||
|
||||
private final JLabel label = new JLabel();
|
||||
|
||||
|
||||
public DefaultFancyListCellRenderer() {
|
||||
this.add(label, BorderLayout.WEST);
|
||||
initializeLabel(BorderLayout.WEST);
|
||||
}
|
||||
|
||||
|
||||
public DefaultFancyListCellRenderer(int padding) {
|
||||
super(new Insets(padding, padding, padding, padding));
|
||||
initializeLabel(BorderLayout.WEST);
|
||||
}
|
||||
|
||||
|
||||
protected DefaultFancyListCellRenderer(Object constraint, int padding, int margin, Color selectedBorderColor) {
|
||||
super(new Insets(padding, padding, padding, padding), new Insets(margin, margin, margin, margin), selectedBorderColor);
|
||||
initializeLabel(constraint);
|
||||
}
|
||||
|
||||
|
||||
private void initializeLabel(Object constraint) {
|
||||
label.setOpaque(false);
|
||||
add(label, constraint);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.configureListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
|
||||
setText(value.toString());
|
||||
}
|
||||
|
||||
|
||||
public void setIcon(Icon icon) {
|
||||
label.setIcon(icon);
|
||||
}
|
||||
|
||||
|
||||
public void setText(String text) {
|
||||
label.setText(text);
|
||||
}
|
||||
|
||||
|
||||
public void setHorizontalTextPosition(int textPosition) {
|
||||
label.setHorizontalTextPosition(textPosition);
|
||||
}
|
||||
|
||||
|
||||
public void setVerticalTextPosition(int textPosition) {
|
||||
label.setVerticalTextPosition(textPosition);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setForeground(Color fg) {
|
||||
super.setForeground(fg);
|
||||
|
||||
// label is null while in super constructor
|
||||
if (label != null) {
|
||||
label.setForeground(fg);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,147 +0,0 @@
|
||||
|
||||
package net.sourceforge.tuned.ui;
|
||||
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
import javax.swing.DefaultListCellRenderer;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.border.LineBorder;
|
||||
|
||||
|
||||
public class FancyListCellRenderer extends DefaultListCellRenderer {
|
||||
|
||||
private Color gradientBeginColor;
|
||||
private Color gradientEndColor;
|
||||
private GradientStyle gradientStyle;
|
||||
private Insets margin;
|
||||
private boolean highlightingEnabled;
|
||||
private boolean selected;
|
||||
private Border border;
|
||||
|
||||
|
||||
public FancyListCellRenderer() {
|
||||
this(GradientStyle.TOP_TO_BOTTOM, true, new Insets(7, 7, 7, 7), new Insets(1, 1, 0, 1), null);
|
||||
}
|
||||
|
||||
|
||||
public FancyListCellRenderer(int padding, boolean highlighting) {
|
||||
this(GradientStyle.TOP_TO_BOTTOM, highlighting, new Insets(padding, padding, padding, padding), new Insets(1, 1, 0, 1), null);
|
||||
}
|
||||
|
||||
|
||||
public FancyListCellRenderer(int padding, Color selectedBorderColor, GradientStyle gradientStyle) {
|
||||
this(gradientStyle, false, new Insets(padding, padding, padding, padding), new Insets(0, 0, 0, 0), selectedBorderColor);
|
||||
}
|
||||
|
||||
|
||||
public FancyListCellRenderer(GradientStyle gradientStyle, boolean highlighting, Insets padding, Insets margin, Color selectedBorderColor) {
|
||||
this.gradientStyle = gradientStyle;
|
||||
this.margin = margin;
|
||||
this.highlightingEnabled = highlighting;
|
||||
|
||||
border = new EmptyBorder(padding);
|
||||
border = new CompoundBorder(new LineBorder(selectedBorderColor, 1), border);
|
||||
border = new CompoundBorder(new EmptyBorder(margin), border);
|
||||
|
||||
setOpaque(false);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void paintBorder(Graphics g) {
|
||||
if (selected) {
|
||||
super.paintBorder(g);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
Graphics2D g2d = (Graphics2D) g;
|
||||
Rectangle2D shape = new Rectangle2D.Double(margin.left, margin.top, getWidth() - (margin.left + margin.right), getHeight() - (margin.top + margin.bottom));
|
||||
|
||||
if (highlightingEnabled) {
|
||||
g2d.setPaint(getBackground());
|
||||
g2d.fill(shape);
|
||||
}
|
||||
|
||||
if (selected) {
|
||||
g2d.setPaint(gradientStyle.getGradientPaint(shape, gradientBeginColor, gradientEndColor));
|
||||
g2d.fill(shape);
|
||||
}
|
||||
|
||||
super.paintComponent(g);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
|
||||
setSelected(isSelected);
|
||||
setBorder(border);
|
||||
|
||||
Color sc = list.getSelectionBackground();
|
||||
|
||||
if (highlightingEnabled) {
|
||||
Color normalBg = list.getBackground();
|
||||
Color highlightBg = new Color(sc.getRed(), sc.getGreen(), sc.getBlue(), 28);
|
||||
|
||||
if ((index % 2) == 0)
|
||||
setBackground(highlightBg);
|
||||
else
|
||||
setBackground(normalBg);
|
||||
}
|
||||
|
||||
if (isSelected) {
|
||||
setGradientBeginColor(sc.brighter());
|
||||
setGradientEndColor(sc);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public void setGradientBeginColor(Color gradientBeginColor) {
|
||||
this.gradientBeginColor = gradientBeginColor;
|
||||
}
|
||||
|
||||
|
||||
public void setGradientEndColor(Color gradientEndColor) {
|
||||
this.gradientEndColor = gradientEndColor;
|
||||
}
|
||||
|
||||
|
||||
public void setGradientStyle(GradientStyle gradientStyle) {
|
||||
this.gradientStyle = gradientStyle;
|
||||
}
|
||||
|
||||
|
||||
public boolean isHighlightingEnabled() {
|
||||
return highlightingEnabled;
|
||||
}
|
||||
|
||||
|
||||
public void setHighlightingEnabled(boolean highlightingEnabled) {
|
||||
this.highlightingEnabled = highlightingEnabled;
|
||||
}
|
||||
|
||||
|
||||
public void setSelected(boolean selected) {
|
||||
this.selected = selected;
|
||||
}
|
||||
|
||||
|
||||
public boolean isSelected() {
|
||||
return selected;
|
||||
}
|
||||
}
|
@ -112,7 +112,7 @@ public class SimpleListModel extends AbstractListModel {
|
||||
Collections.sort(list, null);
|
||||
}
|
||||
|
||||
fireContentsChanged(this, 0, list.size());
|
||||
fireContentsChanged(this, 0, list.size() - 1);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user