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) {
|
public static boolean containsOnlyTorrentFiles(List<File> files) {
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
if (!file.isFile() || !FileFormat.getExtension(file).equalsIgnoreCase("torrent"))
|
if (!FileFormat.hasExtension(file, "torrent"))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ public class FileBotUtil {
|
|||||||
|
|
||||||
public static boolean containsOnlySfvFiles(List<File> files) {
|
public static boolean containsOnlySfvFiles(List<File> files) {
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
if (!file.isFile() || !FileFormat.getExtension(file).equalsIgnoreCase("sfv"))
|
if (!FileFormat.hasExtension(file, "sfv"))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ public class FileBotUtil {
|
|||||||
|
|
||||||
public static boolean containsOnlyListFiles(List<File> files) {
|
public static boolean containsOnlyListFiles(List<File> files) {
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
if (!isListFile(file))
|
if (!FileFormat.hasExtension(file, "txt", "list", ""))
|
||||||
return false;
|
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) {
|
public static void registerActionForKeystroke(JComponent component, KeyStroke keystroke, Action action) {
|
||||||
Integer key = action.hashCode();
|
Integer key = action.hashCode();
|
||||||
component.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(keystroke, key);
|
component.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(keystroke, key);
|
||||||
|
@ -32,9 +32,6 @@ public class FileFormat {
|
|||||||
|
|
||||||
|
|
||||||
public static String formatName(File file) {
|
public static String formatName(File file) {
|
||||||
if (file == null)
|
|
||||||
return "";
|
|
||||||
|
|
||||||
String name = file.getName();
|
String name = file.getName();
|
||||||
|
|
||||||
if (file.isDirectory())
|
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) {
|
public static String getExtension(File file) {
|
||||||
return getExtension(file, false);
|
return getExtension(file, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static String getExtension(File file, boolean includeDot) {
|
public static String getExtension(File file, boolean includeDot) {
|
||||||
if (!file.isFile())
|
|
||||||
return null;
|
|
||||||
|
|
||||||
String name = file.getName();
|
String name = file.getName();
|
||||||
int dotIndex = name.lastIndexOf(".");
|
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.transfer.TransferablePolicySupport;
|
||||||
import net.sourceforge.filebot.ui.transferablepolicies.NullTransferablePolicy;
|
import net.sourceforge.filebot.ui.transferablepolicies.NullTransferablePolicy;
|
||||||
import net.sourceforge.filebot.ui.transferablepolicies.TransferablePolicy;
|
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;
|
import net.sourceforge.tuned.ui.SimpleListModel;
|
||||||
|
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ public class FileBotList extends JPanel implements Saveable, TransferablePolicyS
|
|||||||
listScrollPane.setBorder(BorderFactory.createEmptyBorder());
|
listScrollPane.setBorder(BorderFactory.createEmptyBorder());
|
||||||
}
|
}
|
||||||
|
|
||||||
list.setCellRenderer(new FancyListCellRenderer());
|
list.setCellRenderer(new DefaultFancyListCellRenderer());
|
||||||
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
||||||
|
|
||||||
add(listScrollPane, BorderLayout.CENTER);
|
add(listScrollPane, BorderLayout.CENTER);
|
||||||
|
@ -3,7 +3,9 @@ package net.sourceforge.filebot.ui;
|
|||||||
|
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
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.Icon;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
@ -18,7 +20,7 @@ import net.sourceforge.filebot.ui.panel.subtitle.SubtitlePanel;
|
|||||||
|
|
||||||
public class FileBotPanel extends JPanel {
|
public class FileBotPanel extends JPanel {
|
||||||
|
|
||||||
private static final LinkedHashSet<FileBotPanel> registry = new LinkedHashSet<FileBotPanel>();
|
private static final List<FileBotPanel> registry = new ArrayList<FileBotPanel>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
registry.add(new ListPanel());
|
registry.add(new ListPanel());
|
||||||
@ -30,8 +32,8 @@ public class FileBotPanel extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Iterable<FileBotPanel> getAvailablePanels() {
|
public static List<FileBotPanel> getAvailablePanels() {
|
||||||
return registry;
|
return Collections.unmodifiableList(registry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
package net.sourceforge.filebot.ui;
|
package net.sourceforge.filebot.ui;
|
||||||
|
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
|
||||||
import java.awt.dnd.DropTarget;
|
import java.awt.dnd.DropTarget;
|
||||||
import java.awt.dnd.DropTargetAdapter;
|
import java.awt.dnd.DropTargetAdapter;
|
||||||
import java.awt.dnd.DropTargetDragEvent;
|
import java.awt.dnd.DropTargetDragEvent;
|
||||||
@ -19,8 +19,7 @@ import javax.swing.SwingUtilities;
|
|||||||
import javax.swing.Timer;
|
import javax.swing.Timer;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
|
|
||||||
import net.sourceforge.tuned.ui.FancyListCellRenderer;
|
import net.sourceforge.tuned.ui.DefaultFancyListCellRenderer;
|
||||||
import net.sourceforge.tuned.ui.GradientStyle;
|
|
||||||
import net.sourceforge.tuned.ui.SimpleListModel;
|
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() {
|
public PanelCellRenderer() {
|
||||||
super(10, Color.decode("#163264"), GradientStyle.TOP_TO_BOTTOM);
|
super(BorderLayout.CENTER, 10, 0, Color.decode("#163264"));
|
||||||
|
|
||||||
|
setHighlightingEnabled(false);
|
||||||
|
|
||||||
setVerticalTextPosition(SwingConstants.BOTTOM);
|
setVerticalTextPosition(SwingConstants.BOTTOM);
|
||||||
setHorizontalTextPosition(SwingConstants.CENTER);
|
setHorizontalTextPosition(SwingConstants.CENTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
public void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
super.configureListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||||
|
|
||||||
FileBotPanel panel = (FileBotPanel) value;
|
FileBotPanel panel = (FileBotPanel) value;
|
||||||
setText(panel.getPanelName());
|
setText(panel.getPanelName());
|
||||||
setIcon(panel.getIcon());
|
setIcon(panel.getIcon());
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package net.sourceforge.filebot.ui;
|
|||||||
|
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Component;
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
@ -27,7 +26,7 @@ import javax.swing.border.EmptyBorder;
|
|||||||
|
|
||||||
import net.sourceforge.filebot.FileBotUtil;
|
import net.sourceforge.filebot.FileBotUtil;
|
||||||
import net.sourceforge.filebot.resources.ResourceManager;
|
import net.sourceforge.filebot.resources.ResourceManager;
|
||||||
import net.sourceforge.tuned.ui.FancyListCellRenderer;
|
import net.sourceforge.tuned.ui.DefaultFancyListCellRenderer;
|
||||||
import net.sourceforge.tuned.ui.SimpleListModel;
|
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() {
|
public SelectListCellRenderer() {
|
||||||
super(4, false);
|
super(4);
|
||||||
|
setHighlightingEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
public void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||||
super.getListCellRendererComponent(list, convertValueToString(value), index, isSelected, cellHasFocus);
|
super.configureListCellRendererComponent(list, convertValueToString(value), index, isSelected, cellHasFocus);
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
|
|
||||||
package net.sourceforge.filebot.ui.panel.rename;
|
package net.sourceforge.filebot.ui.panel.rename;
|
||||||
|
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
|
||||||
import java.awt.Graphics;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
import java.awt.geom.Rectangle2D;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
@ -12,127 +12,54 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
import javax.swing.JList;
|
import javax.swing.JList;
|
||||||
import javax.swing.JTextField;
|
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.DocumentEvent;
|
||||||
import javax.swing.event.DocumentListener;
|
import javax.swing.event.DocumentListener;
|
||||||
import javax.swing.text.BadLocationException;
|
import javax.swing.text.BadLocationException;
|
||||||
import javax.swing.text.Highlighter;
|
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 Pattern pattern;
|
||||||
private Highlighter.HighlightPainter highlightPainter;
|
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) {
|
||||||
|
super(new Insets(padding, padding, padding, padding));
|
||||||
|
|
||||||
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) {
|
|
||||||
this.pattern = pattern;
|
this.pattern = pattern;
|
||||||
this.highlightPainter = highlightPainter;
|
this.highlightPainter = highlightPainter;
|
||||||
|
|
||||||
this.gradientStyle = gradientStyle;
|
textComponent.setBorder(null);
|
||||||
this.margin = margin;
|
textComponent.setOpaque(false);
|
||||||
this.highlightingEnabled = highlighting;
|
|
||||||
|
|
||||||
border = new EmptyBorder(padding);
|
this.add(textComponent, BorderLayout.WEST);
|
||||||
border = new CompoundBorder(new LineBorder(selectedBorderColor, 1), border);
|
|
||||||
border = new CompoundBorder(new EmptyBorder(margin), border);
|
|
||||||
|
|
||||||
setOpaque(false);
|
textComponent.getDocument().addDocumentListener(new HighlightUpdateListener());
|
||||||
|
|
||||||
this.getDocument().addDocumentListener(new HighlightUpdateListener());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
protected void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||||
if (isSelected) {
|
super.configureListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||||
setBackground(list.getSelectionBackground());
|
|
||||||
setForeground(list.getSelectionForeground());
|
|
||||||
} else {
|
|
||||||
setBackground(list.getBackground());
|
|
||||||
setForeground(list.getForeground());
|
|
||||||
}
|
|
||||||
|
|
||||||
setText(value.toString());
|
textComponent.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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected void updateHighlighter() {
|
protected void updateHighlighter() {
|
||||||
getHighlighter().removeAllHighlights();
|
textComponent.getHighlighter().removeAllHighlights();
|
||||||
|
|
||||||
Matcher matcher = pattern.matcher(getText());
|
Matcher matcher = pattern.matcher(textComponent.getText());
|
||||||
|
|
||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
try {
|
try {
|
||||||
getHighlighter().addHighlight(matcher.start(0), matcher.end(0), highlightPainter);
|
textComponent.getHighlighter().addHighlight(matcher.start(0), matcher.end(0), highlightPainter);
|
||||||
} catch (BadLocationException e) {
|
} catch (BadLocationException e) {
|
||||||
//should not happen
|
//should not happen
|
||||||
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e);
|
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) {
|
@Override
|
||||||
this.gradientBeginColor = gradientBeginColor;
|
public void setForeground(Color fg) {
|
||||||
|
super.setForeground(fg);
|
||||||
|
|
||||||
|
// textComponent is null while in super constructor
|
||||||
|
if (textComponent != null) {
|
||||||
|
textComponent.setForeground(fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,16 +3,15 @@ package net.sourceforge.filebot.ui.panel.rename;
|
|||||||
|
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
|
||||||
|
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JList;
|
import javax.swing.JList;
|
||||||
import javax.swing.ListModel;
|
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 names;
|
||||||
private final ListModel files;
|
private final ListModel files;
|
||||||
@ -29,24 +28,22 @@ class RenameListCellRenderer extends FancyListCellRenderer {
|
|||||||
this.add(extension);
|
this.add(extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Color noMatchGradientBeginColor = Color.decode("#B7B7B7");
|
private final Color noMatchGradientBeginColor = Color.decode("#B7B7B7");
|
||||||
private Color noMatchGradientEndColor = Color.decode("#9A9A9A");
|
private final Color noMatchGradientEndColor = Color.decode("#9A9A9A");
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
public void configureListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
super.configureListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||||
|
|
||||||
if (index >= getMinLength())
|
if (index >= getMinLength()) {
|
||||||
if (isSelected) {
|
if (isSelected) {
|
||||||
setForeground(Color.WHITE);
|
setForeground(Color.WHITE);
|
||||||
setGradientBeginColor(noMatchGradientBeginColor);
|
setGradientColors(noMatchGradientBeginColor, noMatchGradientEndColor);
|
||||||
setGradientEndColor(noMatchGradientEndColor);
|
|
||||||
} else {
|
} else {
|
||||||
setForeground(noMatchGradientBeginColor);
|
setForeground(noMatchGradientBeginColor);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ package net.sourceforge.filebot.ui.panel.rename;
|
|||||||
import java.awt.AlphaComposite;
|
import java.awt.AlphaComposite;
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
@ -52,7 +53,7 @@ public class ValidateNamesDialog extends JDialog {
|
|||||||
JList list = new JList(new SimpleListModel(entries));
|
JList list = new JList(new SimpleListModel(entries));
|
||||||
list.setEnabled(false);
|
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:");
|
JLabel label = new JLabel("Some names contain invalid characters:");
|
||||||
|
|
||||||
@ -84,10 +85,11 @@ public class ValidateNamesDialog extends JDialog {
|
|||||||
|
|
||||||
setLocation(FileBotUtil.getPreferredLocation(this));
|
setLocation(FileBotUtil.getPreferredLocation(this));
|
||||||
|
|
||||||
|
setPreferredSize(new Dimension(365, 280));
|
||||||
|
pack();
|
||||||
|
|
||||||
// Shortcut Escape
|
// Shortcut Escape
|
||||||
FileBotUtil.registerActionForKeystroke(c, KeyStroke.getKeyStroke("released ESCAPE"), cancelAction);
|
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 abstract class AbstractFileEntry<T> extends ListEntry<T> {
|
||||||
|
|
||||||
public AbstractFileEntry(T value) {
|
private final long length;
|
||||||
super(value);
|
|
||||||
|
|
||||||
|
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 class FileEntry extends AbstractFileEntry<File> {
|
||||||
|
|
||||||
public FileEntry(File file) {
|
public FileEntry(File file) {
|
||||||
super(file);
|
super(FileFormat.formatName(file), file, file.length());
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName(File value) {
|
|
||||||
return FileFormat.getNameWithoutExtension(getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getLength() {
|
|
||||||
return getValue().length();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,21 +2,18 @@
|
|||||||
package net.sourceforge.filebot.ui.panel.rename.entry;
|
package net.sourceforge.filebot.ui.panel.rename.entry;
|
||||||
|
|
||||||
|
|
||||||
public abstract class ListEntry<T> {
|
public class ListEntry<T> {
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private T value;
|
private T value;
|
||||||
|
|
||||||
|
|
||||||
public ListEntry(T value) {
|
public ListEntry(String name, T value) {
|
||||||
|
this.name = name;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.name = getName(value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected abstract String getName(T value);
|
|
||||||
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,7 @@ package net.sourceforge.filebot.ui.panel.rename.entry;
|
|||||||
public class StringEntry extends ListEntry<String> {
|
public class StringEntry extends ListEntry<String> {
|
||||||
|
|
||||||
public StringEntry(String 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 class TorrentEntry extends AbstractFileEntry<Torrent.Entry> {
|
||||||
|
|
||||||
public TorrentEntry(Entry value) {
|
public TorrentEntry(Entry value) {
|
||||||
super(value);
|
super(FileFormat.getNameWithoutExtension(value.getName()), value, value.getLength());
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName(Torrent.Entry value) {
|
|
||||||
return FileFormat.getNameWithoutExtension(getValue().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getLength() {
|
|
||||||
return getValue().getLength();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ package net.sourceforge.filebot.ui.panel.subtitle;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@ -20,12 +21,12 @@ public class Language {
|
|||||||
public static List<Language> languages = null;
|
public static List<Language> languages = null;
|
||||||
|
|
||||||
|
|
||||||
public static synchronized Iterable<Language> getLanguages() {
|
public static synchronized List<Language> getLanguages() {
|
||||||
if (languages == null) {
|
if (languages == null) {
|
||||||
languages = parseLanguages();
|
languages = parseLanguages();
|
||||||
}
|
}
|
||||||
|
|
||||||
return languages;
|
return Collections.unmodifiableList(languages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ public class Language {
|
|||||||
|
|
||||||
|
|
||||||
private static List<Language> parseLanguages() {
|
private static List<Language> parseLanguages() {
|
||||||
ArrayList<Language> languages = new ArrayList<Language>();
|
List<Language> languages = new ArrayList<Language>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(Language.class.getResourceAsStream("languages.xml"));
|
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.Clipboard;
|
||||||
import java.awt.datatransfer.Transferable;
|
import java.awt.datatransfer.Transferable;
|
||||||
|
|
||||||
|
import javax.swing.Icon;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.TransferHandler;
|
import javax.swing.TransferHandler;
|
||||||
|
|
||||||
|
import net.sourceforge.filebot.resources.ResourceManager;
|
||||||
|
|
||||||
|
|
||||||
public class DefaultTransferHandler extends TransferHandler {
|
public class DefaultTransferHandler extends TransferHandler {
|
||||||
|
|
||||||
|
@ -7,8 +7,5 @@ import net.sourceforge.filebot.ui.transferablepolicies.TransferablePolicy;
|
|||||||
|
|
||||||
public interface TransferablePolicySupport {
|
public interface TransferablePolicySupport {
|
||||||
|
|
||||||
public void setTransferablePolicy(TransferablePolicy transferablePolicy);
|
|
||||||
|
|
||||||
|
|
||||||
public TransferablePolicy getTransferablePolicy();
|
public TransferablePolicy getTransferablePolicy();
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,8 @@ package net.sourceforge.filebot.web;
|
|||||||
|
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
@ -11,7 +12,7 @@ import javax.swing.ImageIcon;
|
|||||||
|
|
||||||
public abstract class EpisodeListClient {
|
public abstract class EpisodeListClient {
|
||||||
|
|
||||||
private static final LinkedHashSet<EpisodeListClient> registry = new LinkedHashSet<EpisodeListClient>();
|
private static final List<EpisodeListClient> registry = new ArrayList<EpisodeListClient>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
registry.add(new TvdotcomClient());
|
registry.add(new TvdotcomClient());
|
||||||
@ -20,8 +21,8 @@ public abstract class EpisodeListClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Iterable<EpisodeListClient> getAvailableEpisodeListClients() {
|
public static List<EpisodeListClient> getAvailableEpisodeListClients() {
|
||||||
return registry;
|
return Collections.unmodifiableList(registry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ public class TemporaryFolder {
|
|||||||
* Delete all temporary folders on shutdown
|
* Delete all temporary folders on shutdown
|
||||||
*/
|
*/
|
||||||
static {
|
static {
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread("TemporaryFolder ShutdownHook") {
|
Runtime.getRuntime().addShutdownHook(new Thread("TemporaryFolder Cleanup") {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
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);
|
Collections.sort(list, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
fireContentsChanged(this, 0, list.size());
|
fireContentsChanged(this, 0, list.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user