From 6d2ff4dfe45e0a353a0a33a7a874b1f946a90530 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Sat, 22 Mar 2008 21:12:34 +0000 Subject: [PATCH] * improved dnd behavour * refactoring --- .../net/sourceforge/filebot/FileBotUtil.java | 19 +- .../net/sourceforge/filebot/FileFormat.java | 21 +- .../sourceforge/filebot/ui/FileBotList.java | 4 +- .../sourceforge/filebot/ui/FileBotPanel.java | 10 +- .../filebot/ui/FileBotPanelSelectionList.java | 19 +- .../sourceforge/filebot/ui/SelectDialog.java | 14 +- .../rename/HighlightListCellRenderer.java | 157 ++------- .../panel/rename/RenameListCellRenderer.java | 21 +- .../ui/panel/rename/ValidateNamesDialog.java | 8 +- .../panel/rename/entry/AbstractFileEntry.java | 12 +- .../ui/panel/rename/entry/FileEntry.java | 14 +- .../ui/panel/rename/entry/ListEntry.java | 9 +- .../ui/panel/rename/entry/StringEntry.java | 7 +- .../ui/panel/rename/entry/TorrentEntry.java | 14 +- .../filebot/ui/panel/subtitle/Language.java | 7 +- .../ui/transfer/DefaultTransferHandler.java | 3 + .../transfer/TransferablePolicySupport.java | 3 - .../filebot/web/EpisodeListClient.java | 9 +- .../sourceforge/tuned/TemporaryFolder.java | 2 +- .../ui/AbstractFancyListCellRenderer.java | 313 ++++++++++++++++++ .../ui/DefaultFancyListCellRenderer.java | 81 +++++ .../tuned/ui/FancyListCellRenderer.java | 147 -------- .../sourceforge/tuned/ui/SimpleListModel.java | 2 +- 23 files changed, 509 insertions(+), 387 deletions(-) create mode 100644 source/net/sourceforge/tuned/ui/AbstractFancyListCellRenderer.java create mode 100644 source/net/sourceforge/tuned/ui/DefaultFancyListCellRenderer.java delete mode 100644 source/net/sourceforge/tuned/ui/FancyListCellRenderer.java diff --git a/source/net/sourceforge/filebot/FileBotUtil.java b/source/net/sourceforge/filebot/FileBotUtil.java index 9445c672..c203c0d4 100644 --- a/source/net/sourceforge/filebot/FileBotUtil.java +++ b/source/net/sourceforge/filebot/FileBotUtil.java @@ -66,7 +66,7 @@ public class FileBotUtil { public static boolean containsOnlyTorrentFiles(List 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 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 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); diff --git a/source/net/sourceforge/filebot/FileFormat.java b/source/net/sourceforge/filebot/FileFormat.java index c3e0f11a..41da5a98 100644 --- a/source/net/sourceforge/filebot/FileFormat.java +++ b/source/net/sourceforge/filebot/FileFormat.java @@ -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("."); diff --git a/source/net/sourceforge/filebot/ui/FileBotList.java b/source/net/sourceforge/filebot/ui/FileBotList.java index 654167bb..9c9aa40d 100644 --- a/source/net/sourceforge/filebot/ui/FileBotList.java +++ b/source/net/sourceforge/filebot/ui/FileBotList.java @@ -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); diff --git a/source/net/sourceforge/filebot/ui/FileBotPanel.java b/source/net/sourceforge/filebot/ui/FileBotPanel.java index f9ad27ac..8d462dd5 100644 --- a/source/net/sourceforge/filebot/ui/FileBotPanel.java +++ b/source/net/sourceforge/filebot/ui/FileBotPanel.java @@ -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 registry = new LinkedHashSet(); + private static final List registry = new ArrayList(); static { registry.add(new ListPanel()); @@ -30,8 +32,8 @@ public class FileBotPanel extends JPanel { } - public static Iterable getAvailablePanels() { - return registry; + public static List getAvailablePanels() { + return Collections.unmodifiableList(registry); } diff --git a/source/net/sourceforge/filebot/ui/FileBotPanelSelectionList.java b/source/net/sourceforge/filebot/ui/FileBotPanelSelectionList.java index 5f74c213..4285764e 100644 --- a/source/net/sourceforge/filebot/ui/FileBotPanelSelectionList.java +++ b/source/net/sourceforge/filebot/ui/FileBotPanelSelectionList.java @@ -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; } + } diff --git a/source/net/sourceforge/filebot/ui/SelectDialog.java b/source/net/sourceforge/filebot/ui/SelectDialog.java index 35e5e2ea..b01d277a 100644 --- a/source/net/sourceforge/filebot/ui/SelectDialog.java +++ b/source/net/sourceforge/filebot/ui/SelectDialog.java @@ -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 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); } }; diff --git a/source/net/sourceforge/filebot/ui/panel/rename/HighlightListCellRenderer.java b/source/net/sourceforge/filebot/ui/panel/rename/HighlightListCellRenderer.java index a055fca4..d8467c19 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/HighlightListCellRenderer.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/HighlightListCellRenderer.java @@ -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); + } } diff --git a/source/net/sourceforge/filebot/ui/panel/rename/RenameListCellRenderer.java b/source/net/sourceforge/filebot/ui/panel/rename/RenameListCellRenderer.java index 3831e80a..b72be468 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/RenameListCellRenderer.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/RenameListCellRenderer.java @@ -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; + } } diff --git a/source/net/sourceforge/filebot/ui/panel/rename/ValidateNamesDialog.java b/source/net/sourceforge/filebot/ui/panel/rename/ValidateNamesDialog.java index 7fe84618..83c94e2c 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/ValidateNamesDialog.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/ValidateNamesDialog.java @@ -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(); } diff --git a/source/net/sourceforge/filebot/ui/panel/rename/entry/AbstractFileEntry.java b/source/net/sourceforge/filebot/ui/panel/rename/entry/AbstractFileEntry.java index 09a1451b..49a96982 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/entry/AbstractFileEntry.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/entry/AbstractFileEntry.java @@ -4,11 +4,17 @@ package net.sourceforge.filebot.ui.panel.rename.entry; public abstract class AbstractFileEntry extends ListEntry { - 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; + } } diff --git a/source/net/sourceforge/filebot/ui/panel/rename/entry/FileEntry.java b/source/net/sourceforge/filebot/ui/panel/rename/entry/FileEntry.java index d94a615c..b3e47f3c 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/entry/FileEntry.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/entry/FileEntry.java @@ -10,19 +10,7 @@ import net.sourceforge.filebot.FileFormat; public class FileEntry extends AbstractFileEntry { 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()); } } diff --git a/source/net/sourceforge/filebot/ui/panel/rename/entry/ListEntry.java b/source/net/sourceforge/filebot/ui/panel/rename/entry/ListEntry.java index 28cef676..095f7086 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/entry/ListEntry.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/entry/ListEntry.java @@ -2,21 +2,18 @@ package net.sourceforge.filebot.ui.panel.rename.entry; -public abstract class ListEntry { +public class ListEntry { 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; } diff --git a/source/net/sourceforge/filebot/ui/panel/rename/entry/StringEntry.java b/source/net/sourceforge/filebot/ui/panel/rename/entry/StringEntry.java index e3b92ae1..e8d6ea4c 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/entry/StringEntry.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/entry/StringEntry.java @@ -5,12 +5,7 @@ package net.sourceforge.filebot.ui.panel.rename.entry; public class StringEntry extends ListEntry { public StringEntry(String string) { - super(string); + super(string, string); } - - @Override - protected String getName(String value) { - return value; - } } diff --git a/source/net/sourceforge/filebot/ui/panel/rename/entry/TorrentEntry.java b/source/net/sourceforge/filebot/ui/panel/rename/entry/TorrentEntry.java index d776ad54..8a8ed54d 100644 --- a/source/net/sourceforge/filebot/ui/panel/rename/entry/TorrentEntry.java +++ b/source/net/sourceforge/filebot/ui/panel/rename/entry/TorrentEntry.java @@ -10,19 +10,7 @@ import net.sourceforge.filebot.torrent.Torrent.Entry; public class TorrentEntry extends AbstractFileEntry { 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()); } } diff --git a/source/net/sourceforge/filebot/ui/panel/subtitle/Language.java b/source/net/sourceforge/filebot/ui/panel/subtitle/Language.java index bb406ef7..c16ccfd5 100644 --- a/source/net/sourceforge/filebot/ui/panel/subtitle/Language.java +++ b/source/net/sourceforge/filebot/ui/panel/subtitle/Language.java @@ -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 languages = null; - public static synchronized Iterable getLanguages() { + public static synchronized List getLanguages() { if (languages == null) { languages = parseLanguages(); } - return languages; + return Collections.unmodifiableList(languages); } @@ -52,7 +53,7 @@ public class Language { private static List parseLanguages() { - ArrayList languages = new ArrayList(); + List languages = new ArrayList(); try { Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(Language.class.getResourceAsStream("languages.xml")); diff --git a/source/net/sourceforge/filebot/ui/transfer/DefaultTransferHandler.java b/source/net/sourceforge/filebot/ui/transfer/DefaultTransferHandler.java index 947fc75c..4c7682ad 100644 --- a/source/net/sourceforge/filebot/ui/transfer/DefaultTransferHandler.java +++ b/source/net/sourceforge/filebot/ui/transfer/DefaultTransferHandler.java @@ -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 { diff --git a/source/net/sourceforge/filebot/ui/transfer/TransferablePolicySupport.java b/source/net/sourceforge/filebot/ui/transfer/TransferablePolicySupport.java index 59dde109..cef54644 100644 --- a/source/net/sourceforge/filebot/ui/transfer/TransferablePolicySupport.java +++ b/source/net/sourceforge/filebot/ui/transfer/TransferablePolicySupport.java @@ -7,8 +7,5 @@ import net.sourceforge.filebot.ui.transferablepolicies.TransferablePolicy; public interface TransferablePolicySupport { - public void setTransferablePolicy(TransferablePolicy transferablePolicy); - - public TransferablePolicy getTransferablePolicy(); } diff --git a/source/net/sourceforge/filebot/web/EpisodeListClient.java b/source/net/sourceforge/filebot/web/EpisodeListClient.java index 6adf5de2..93e39f3e 100644 --- a/source/net/sourceforge/filebot/web/EpisodeListClient.java +++ b/source/net/sourceforge/filebot/web/EpisodeListClient.java @@ -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 registry = new LinkedHashSet(); + private static final List registry = new ArrayList(); static { registry.add(new TvdotcomClient()); @@ -20,8 +21,8 @@ public abstract class EpisodeListClient { } - public static Iterable getAvailableEpisodeListClients() { - return registry; + public static List getAvailableEpisodeListClients() { + return Collections.unmodifiableList(registry); } diff --git a/source/net/sourceforge/tuned/TemporaryFolder.java b/source/net/sourceforge/tuned/TemporaryFolder.java index acaf5491..27da10b7 100644 --- a/source/net/sourceforge/tuned/TemporaryFolder.java +++ b/source/net/sourceforge/tuned/TemporaryFolder.java @@ -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() { diff --git a/source/net/sourceforge/tuned/ui/AbstractFancyListCellRenderer.java b/source/net/sourceforge/tuned/ui/AbstractFancyListCellRenderer.java new file mode 100644 index 00000000..1839d93b --- /dev/null +++ b/source/net/sourceforge/tuned/ui/AbstractFancyListCellRenderer.java @@ -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) { + } + +} diff --git a/source/net/sourceforge/tuned/ui/DefaultFancyListCellRenderer.java b/source/net/sourceforge/tuned/ui/DefaultFancyListCellRenderer.java new file mode 100644 index 00000000..e6138b72 --- /dev/null +++ b/source/net/sourceforge/tuned/ui/DefaultFancyListCellRenderer.java @@ -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); + } + } + +} diff --git a/source/net/sourceforge/tuned/ui/FancyListCellRenderer.java b/source/net/sourceforge/tuned/ui/FancyListCellRenderer.java deleted file mode 100644 index 46b757de..00000000 --- a/source/net/sourceforge/tuned/ui/FancyListCellRenderer.java +++ /dev/null @@ -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; - } -} diff --git a/source/net/sourceforge/tuned/ui/SimpleListModel.java b/source/net/sourceforge/tuned/ui/SimpleListModel.java index b0942212..bf416141 100644 --- a/source/net/sourceforge/tuned/ui/SimpleListModel.java +++ b/source/net/sourceforge/tuned/ui/SimpleListModel.java @@ -112,7 +112,7 @@ public class SimpleListModel extends AbstractListModel { Collections.sort(list, null); } - fireContentsChanged(this, 0, list.size()); + fireContentsChanged(this, 0, list.size() - 1); }