* improved ui performance

* proper class visibility
This commit is contained in:
Reinhard Pointner 2008-03-16 18:23:12 +00:00
parent 0f102d4eb6
commit 4b4ca4fc68
41 changed files with 180 additions and 178 deletions

View File

@ -46,8 +46,8 @@ public class FileBotList extends JPanel implements Saveable, TransferablePolicyS
private TransferablePolicy transferablePolicy = new NullTransferablePolicy();
public FileBotList(boolean enableDrop, boolean enableDrag, boolean initRemoveAction) {
this(enableDrop, enableDrag, initRemoveAction, true);
public FileBotList(boolean enableDrop, boolean enableDrag, boolean enableRemoveAction) {
this(enableDrop, enableDrag, enableRemoveAction, true);
}
@ -65,6 +65,7 @@ public class FileBotList extends JPanel implements Saveable, TransferablePolicyS
list.setCellRenderer(new FancyListCellRenderer());
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
add(listScrollPane, BorderLayout.CENTER);
ImportHandler importHander = null;

View File

@ -32,7 +32,7 @@ import net.sourceforge.tuned.ui.GradientStyle;
import net.sourceforge.tuned.ui.SimpleListModel;
public class FileBotPanelSelectionList extends JList {
class FileBotPanelSelectionList extends JList {
private static final int SELECTDELAY_ON_DRAG_OVER = 300;

View File

@ -49,8 +49,11 @@ public class FileBotTree extends JTree implements TransferablePolicySupport {
public void clear() {
DefaultMutableTreeNode root = (DefaultMutableTreeNode) getModel().getRoot();
DefaultTreeModel model = (DefaultTreeModel) getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
root.removeAllChildren();
model.reload(root);
}
@ -194,7 +197,7 @@ public class FileBotTree extends JTree implements TransferablePolicySupport {
Desktop.getDesktop().open(file);
} catch (Exception e) {
MessageManager.showWarning(e.getMessage());
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e);
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.WARNING, e.getMessage());
}
}
}

View File

@ -69,7 +69,9 @@ public class FileBotWindow extends JFrame implements ListSelectionListener {
cardLayout.show(pagePanel, currentPanel.getTitle());
JComponent c = (JComponent) getContentPane();
c.updateUI();
c.revalidate();
c.repaint();
Settings.getSettings().putInt(Settings.SELECTED_PANEL, selectionListPanel.getSelectedIndex());
}

View File

@ -20,7 +20,7 @@ import net.sourceforge.tuned.ui.notification.SeparatorBorder;
import net.sourceforge.tuned.ui.notification.SeparatorBorder.Position;
public class HeaderPanel extends JPanel {
class HeaderPanel extends JPanel {
private JLabel titleLabel = new JLabel();

View File

@ -5,12 +5,15 @@ package net.sourceforge.filebot.ui.panel.analyze;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingWorker;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import net.sourceforge.filebot.ui.FileBotTree;
@ -19,7 +22,7 @@ import net.sourceforge.filebot.ui.transfer.FileTransferable;
import net.sourceforge.filebot.ui.transfer.TransferablePolicyImportHandler;
public class FileTree extends FileBotTree {
class FileTree extends FileBotTree {
public static final String LOADING_PROPERTY = "loading";
public static final String CONTENT_PROPERTY = "content";
@ -28,7 +31,7 @@ public class FileTree extends FileBotTree {
public FileTree() {
FileTreeTransferPolicy transferPolicy = new FileTreeTransferPolicy((DefaultMutableTreeNode) getModel().getRoot());
FileTreeTransferPolicy transferPolicy = new FileTreeTransferPolicy(this);
transferPolicy.addPropertyChangeListener(LOADING_PROPERTY, new LoadingPropertyChangeListener());
setTransferablePolicy(transferPolicy);
@ -37,15 +40,24 @@ public class FileTree extends FileBotTree {
public void removeTreeItems(TreePath paths[]) {
firePropertyChange(LOADING_PROPERTY, null, true);
List<TreeNode> changedNodes = new ArrayList<TreeNode>(paths.length);
for (TreePath element : paths) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) (element.getLastPathComponent());
node.removeFromParent();
if (!node.isRoot()) {
changedNodes.add(node.getParent());
node.removeFromParent();
}
}
DefaultTreeModel model = (DefaultTreeModel) getModel();
for (TreeNode treeNode : changedNodes) {
model.reload(treeNode);
}
contentChanged();
firePropertyChange(LOADING_PROPERTY, null, false);
}
@ -68,14 +80,11 @@ public class FileTree extends FileBotTree {
super.clear();
if (!loading) {
contentChanged();
}
// else, contentChanged() will be called after when loading is finished
contentChanged();
}
private void contentChanged() {
void contentChanged() {
synchronized (this) {
if (postProcessor != null)
postProcessor.cancel(false);
@ -92,9 +101,10 @@ public class FileTree extends FileBotTree {
public void propertyChange(PropertyChangeEvent evt) {
Boolean loading = (Boolean) evt.getNewValue();
if (loading) {
firePropertyChange(FileTree.LOADING_PROPERTY, null, true);
} else {
firePropertyChange(FileTree.LOADING_PROPERTY, null, loading);
if (!loading) {
((DefaultTreeModel) getModel()).reload();
contentChanged();
}
}
@ -120,9 +130,6 @@ public class FileTree extends FileBotTree {
} catch (Exception e) {
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e);
}
FileTree.this.firePropertyChange(FileTree.LOADING_PROPERTY, null, false);
updateUI();
}
}

View File

@ -22,7 +22,7 @@ import net.sourceforge.filebot.ui.transfer.LoadAction;
import net.sourceforge.tuned.ui.LoadingOverlayPanel;
public class FileTreePanel extends JPanel {
class FileTreePanel extends JPanel {
private FileTree fileTree = new FileTree();
@ -58,7 +58,7 @@ public class FileTreePanel extends JPanel {
Boolean loading = (Boolean) evt.getNewValue();
loadingOverlay.setOverlayVisible(loading);
loadingOverlay.updateOverlayUI();
loadingOverlay.updateOverlay();
}
};
@ -85,7 +85,6 @@ public class FileTreePanel extends JPanel {
int row = fileTree.getMinSelectionRow();
fileTree.removeTreeItems(fileTree.getSelectionPaths());
fileTree.updateUI();
int maxRow = fileTree.getRowCount() - 1;

View File

@ -12,11 +12,11 @@ import net.sourceforge.filebot.ui.transferablepolicies.BackgroundFileTransferabl
class FileTreeTransferPolicy extends BackgroundFileTransferablePolicy<DefaultMutableTreeNode> {
DefaultMutableTreeNode root;
private FileTree tree;
public FileTreeTransferPolicy(DefaultMutableTreeNode root) {
this.root = root;
public FileTreeTransferPolicy(FileTree tree) {
this.tree = tree;
}
@ -28,12 +28,14 @@ class FileTreeTransferPolicy extends BackgroundFileTransferablePolicy<DefaultMut
@Override
protected void clear() {
root.removeAllChildren();
tree.clear();
}
@Override
protected void process(List<DefaultMutableTreeNode> chunks) {
DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
for (DefaultMutableTreeNode node : chunks) {
root.add(node);
}

View File

@ -16,7 +16,7 @@ import net.sourceforge.filebot.ui.transfer.ExportHandler;
import net.sourceforge.filebot.ui.transfer.FileTransferable;
public class FileTreeExportHandler implements ExportHandler {
class FileTreeExportHandler implements ExportHandler {
@Override
public Transferable createTransferable(JComponent c) {

View File

@ -46,7 +46,7 @@ public abstract class ToolPanel extends JComponent {
return;
loadingOverlay.setOverlayVisible(loading);
loadingOverlay.updateOverlayUI();
loadingOverlay.updateOverlay();
}
};

View File

@ -7,7 +7,7 @@ import java.util.List;
import net.sourceforge.filebot.ui.panel.rename.entry.FileEntry;
public class FilesRenameList extends RenameList {
class FilesRenameList extends RenameList {
public FilesRenameList() {
setTitle("Files");

View File

@ -16,17 +16,18 @@ import net.sourceforge.filebot.ui.panel.rename.match.Match;
import net.sourceforge.filebot.ui.panel.rename.match.Matcher;
import net.sourceforge.filebot.ui.panel.rename.similarity.LengthEqualsMetric;
import net.sourceforge.filebot.ui.panel.rename.similarity.MultiSimilarityMetric;
import net.sourceforge.filebot.ui.panel.rename.similarity.SimilarityMetric;
import net.sourceforge.filebot.ui.panel.rename.similarity.StringEqualsMetric;
import net.sourceforge.filebot.ui.panel.rename.similarity.StringSimilarityMetric;
public class MatchAction extends AbstractAction {
class MatchAction extends AbstractAction {
private NamesRenameList namesList;
private FilesRenameList filesList;
private Matcher matcher;
private SimilarityMetric metric;
private MultiSimilarityMetric metrics;
private Matcher matcher = new Matcher();
private boolean matchName2File;
@ -40,15 +41,8 @@ public class MatchAction extends AbstractAction {
this.namesList = namesList;
this.filesList = filesList;
MultiSimilarityMetric multiMetric = new MultiSimilarityMetric();
multiMetric.addMetric(new StringSimilarityMetric());
multiMetric.addMetric(new StringEqualsMetric());
// length similarity will only effect torrent <-> file matches
multiMetric.addMetric(new LengthEqualsMetric());
matcher = new Matcher();
metric = multiMetric;
metrics = new MultiSimilarityMetric(new StringSimilarityMetric(), new StringEqualsMetric(), new LengthEqualsMetric());
setMatchName2File(true);
}
@ -67,8 +61,8 @@ public class MatchAction extends AbstractAction {
}
public SimilarityMetric getMetric() {
return metric;
public MultiSimilarityMetric getMetrics() {
return metrics;
}
@ -90,7 +84,7 @@ public class MatchAction extends AbstractAction {
listA = filesList.getListEntries();
}
List<Match> matches = matcher.match(listA, listB, metric);
List<Match> matches = matcher.match(listA, listB, metrics);
List<ListEntry<?>> names = new ArrayList<ListEntry<?>>();
List<ListEntry<?>> files = new ArrayList<ListEntry<?>>();

View File

@ -6,11 +6,13 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sourceforge.filebot.FileFormat;
import net.sourceforge.filebot.torrent.Torrent;
import net.sourceforge.filebot.ui.panel.rename.entry.ListEntry;
import net.sourceforge.filebot.ui.panel.rename.entry.StringEntry;
import net.sourceforge.filebot.ui.panel.rename.entry.TorrentEntry;
import net.sourceforge.filebot.ui.transferablepolicies.FileTransferablePolicy;
@ -31,6 +33,11 @@ class NamesListTransferablePolicy extends MultiTransferablePolicy {
addPolicy(new TextPolicy());
}
private void submit(Collection<ListEntry<?>> entries) {
this.listModel.addAll(entries);
}
private class FilePolicy extends FileTransferablePolicy {

View File

@ -7,7 +7,7 @@ import java.util.List;
import net.sourceforge.filebot.ui.panel.rename.entry.ListEntry;
public class NamesRenameList extends RenameList {
class NamesRenameList extends RenameList {
public NamesRenameList() {
setTitle("Names");

View File

@ -20,7 +20,7 @@ import net.sourceforge.filebot.ui.FileBotList;
import net.sourceforge.filebot.ui.transfer.LoadAction;
public abstract class RenameList extends FileBotList {
abstract class RenameList extends FileBotList {
public RenameList() {
super(true, false, true);

View File

@ -60,7 +60,7 @@ public class RenamePanel extends FileBotPanel {
similarityPanel = new SimilarityPanel(list1, list2);
similarityPanel.setVisible(false);
similarityPanel.setMetrics(matchAction.getMetric());
similarityPanel.setMetrics(matchAction.getMetrics());
Box box = new Box(BoxLayout.X_AXIS);
@ -215,6 +215,7 @@ public class RenamePanel extends FileBotPanel {
private class MatchPopupListener extends MouseAdapter {
@Override
public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
MatcherSelectPopup popup = new MatcherSelectPopup();

View File

@ -7,7 +7,7 @@ import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class SelectionSynchroniser {
class SelectionSynchroniser {
private JList list1;
private JList list2;

View File

@ -6,6 +6,7 @@ import java.awt.Color;
import java.awt.GridLayout;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.Box;
@ -23,7 +24,7 @@ import net.sourceforge.filebot.ui.panel.rename.similarity.SimilarityMetric;
import net.sourceforge.tuned.ui.notification.SeparatorBorder;
public class SimilarityPanel extends Box {
class SimilarityPanel extends Box {
private JPanel grid = new JPanel(new GridLayout(0, 2, 25, 1));
@ -35,7 +36,7 @@ public class SimilarityPanel extends Box {
private NumberFormat numberFormat = NumberFormat.getNumberInstance();
private ArrayList<MetricUpdater> updaterList = new ArrayList<MetricUpdater>();
private List<MetricUpdater> updaterList = new ArrayList<MetricUpdater>();
private Border labelMarginBorder = BorderFactory.createEmptyBorder(0, 3, 0, 0);
@ -69,44 +70,36 @@ public class SimilarityPanel extends Box {
}
public void setMetrics(SimilarityMetric similarityMetric) {
public void setMetrics(MultiSimilarityMetric metrics) {
grid.removeAll();
updaterList.clear();
if (similarityMetric instanceof MultiSimilarityMetric) {
MultiSimilarityMetric multiSimilarityMetric = (MultiSimilarityMetric) similarityMetric;
for (SimilarityMetric metric : metrics) {
JLabel name = new JLabel(metric.getName());
name.setToolTipText(metric.getDescription());
for (SimilarityMetric metric : multiSimilarityMetric.getSimilarityMetrics()) {
JLabel name = new JLabel(metric.getName());
name.setToolTipText(metric.getDescription());
JLabel value = new JLabel();
name.setBorder(labelMarginBorder);
value.setBorder(labelMarginBorder);
MetricUpdater updater = new MetricUpdater(value, metric);
updaterList.add(updater);
grid.add(name);
grid.add(value);
}
JLabel value = new JLabel();
name.setBorder(labelMarginBorder);
value.setBorder(labelMarginBorder);
MetricUpdater updater = new MetricUpdater(value, metric);
updaterList.add(updater);
grid.add(name);
grid.add(value);
}
JLabel name = new JLabel(similarityMetric.getName());
name.setToolTipText(similarityMetric.getDescription());
JLabel name = new JLabel(metrics.getName());
JLabel value = new JLabel();
MetricUpdater updater = new MetricUpdater(value, similarityMetric);
MetricUpdater updater = new MetricUpdater(value, metrics);
updaterList.add(updater);
if (similarityMetric instanceof MultiSimilarityMetric) {
Border border = BorderFactory.createCompoundBorder(separatorBorder, labelMarginBorder);
name.setBorder(border);
value.setBorder(border);
}
Border border = BorderFactory.createCompoundBorder(separatorBorder, labelMarginBorder);
name.setBorder(border);
value.setBorder(border);
grid.add(name);
grid.add(value);
@ -134,7 +127,7 @@ public class SimilarityPanel extends Box {
ListEntry<?> a = (ListEntry<?>) nameList.getSelectedValue();
ListEntry<?> b = (ListEntry<?>) fileList.getSelectedValue();
if (a == lastListEntryA && b == lastListEntryB)
if ((a == lastListEntryA) && (b == lastListEntryB))
return;
lastListEntryA = a;

View File

@ -9,7 +9,7 @@ import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ViewPortSynchroniser {
class ViewPortSynchroniser {
private JViewport viewport1;
private JViewport viewport2;

View File

@ -9,14 +9,6 @@ public abstract class AbstractFileEntry<T> extends ListEntry<T> {
}
@Override
public String toString() {
return getName();
}
public abstract long getLength();
public abstract String getName();
}

View File

@ -15,7 +15,7 @@ public class FileEntry extends AbstractFileEntry<File> {
@Override
public String getName() {
public String getName(File value) {
return FileFormat.getNameWithoutSuffix(getValue());
}

View File

@ -4,11 +4,26 @@ package net.sourceforge.filebot.ui.panel.rename.entry;
public abstract class ListEntry<T> {
private String name;
private T value;
public ListEntry(T value) {
this.value = value;
this.name = getName(value);
}
protected abstract String getName(T value);
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ -18,6 +33,7 @@ public abstract class ListEntry<T> {
@Override
public abstract String toString();
public String toString() {
return getName();
}
}

View File

@ -10,8 +10,7 @@ public class StringEntry extends ListEntry<String> {
@Override
public String toString() {
return getValue();
protected String getName(String value) {
return value;
}
}

View File

@ -15,7 +15,7 @@ public class TorrentEntry extends AbstractFileEntry<Torrent.Entry> {
@Override
public String getName() {
public String getName(Torrent.Entry value) {
return FileFormat.getNameWithoutSuffix(getValue().getName());
}

View File

@ -12,7 +12,7 @@ import net.sourceforge.filebot.ui.panel.rename.similarity.SimilarityMetric;
public class Matcher {
public List<Match> match(List<? extends ListEntry<?>> listA, List<? extends ListEntry<?>> listB, SimilarityMetric similarityMetric) {
ArrayList<Match> matches = new ArrayList<Match>();
List<Match> matches = new ArrayList<Match>();
for (ListEntry<?> entryA : listA) {
float maxSimilarity = -1;

View File

@ -2,39 +2,32 @@
package net.sourceforge.filebot.ui.panel.rename.similarity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import net.sourceforge.filebot.ui.panel.rename.entry.ListEntry;
public class MultiSimilarityMetric extends SimilarityMetric {
public class MultiSimilarityMetric extends SimilarityMetric implements Iterable<SimilarityMetric> {
private ArrayList<SimilarityMetric> similarityMetrics = new ArrayList<SimilarityMetric>();
private List<SimilarityMetric> similarityMetrics;
public MultiSimilarityMetric(SimilarityMetric... metrics) {
similarityMetrics = Arrays.asList(metrics);
}
@Override
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
if (similarityMetrics.size() < 1)
return 0;
float similarity = 0;
for (SimilarityMetric metric : similarityMetrics) {
similarity += metric.getSimilarity(a, b);
similarity += metric.getSimilarity(a, b) / similarityMetrics.size();
}
return similarity / similarityMetrics.size();
}
public void addMetric(SimilarityMetric similarityMetric) {
similarityMetrics.add(similarityMetric);
}
public List<SimilarityMetric> getSimilarityMetrics() {
return similarityMetrics;
return similarity;
}
@ -49,4 +42,10 @@ public class MultiSimilarityMetric extends SimilarityMetric {
return "Average";
}
@Override
public Iterator<SimilarityMetric> iterator() {
return similarityMetrics.iterator();
}
}

View File

@ -9,7 +9,7 @@ public class StringEqualsMetric extends SimilarityMetric {
@Override
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
if (a.toString().equalsIgnoreCase(b.toString())) {
if (a.getName().equalsIgnoreCase(b.getName())) {
return 1;
}

View File

@ -25,7 +25,7 @@ public class StringSimilarityMetric extends SimilarityMetric {
@Override
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
return metric.getSimilarity(a.toString(), b.toString());
return metric.getSimilarity(a.getName(), b.getName());
}

View File

@ -8,7 +8,7 @@ import net.sourceforge.filebot.resources.ResourceManager;
import net.sourceforge.filebot.ui.FileBotList;
public class EpisodeListPanel extends FileBotList {
class EpisodeListPanel extends FileBotList {
private TabComponentWithClose tabComponent;
private ImageIcon icon;

View File

@ -10,7 +10,7 @@ import net.sourceforge.filebot.web.Episode;
import net.sourceforge.filebot.web.EpisodeListClient;
public class FetchEpisodesTask extends SwingWorker<List<Episode>, Object> {
class FetchEpisodesTask extends SwingWorker<List<Episode>, Object> {
private String showName;
private EpisodeListClient searchEngine;

View File

@ -16,8 +16,10 @@ import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
import net.sourceforge.tuned.ui.HyperlinkLabel;
public class HistoryPanel extends JPanel {
class HistoryPanel extends JPanel {
private JPanel grid = new JPanel(new GridLayout(0, 3, 15, 10));

View File

@ -16,7 +16,7 @@ import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SeasonSpinnerEditor extends JPanel implements ChangeListener {
class SeasonSpinnerEditor extends JPanel implements ChangeListener {
public static final int ALL_SEASONS = 0;

View File

@ -19,7 +19,7 @@ import javax.swing.SwingUtilities;
import net.sourceforge.filebot.resources.ResourceManager;
public class TabComponentWithClose extends JPanel {
class TabComponentWithClose extends JPanel {
private JLabel label;

View File

@ -77,7 +77,6 @@ public class SfvPanel extends FileBotPanel {
@Override
protected String getDefaultFileName() {
System.out.println(name);
return name;
}

View File

@ -34,7 +34,7 @@ import net.sourceforge.filebot.ui.transferablepolicies.NullTransferablePolicy;
import net.sourceforge.filebot.ui.transferablepolicies.TransferablePolicy;
public class SfvTable extends JTable implements TransferablePolicySupport, Saveable {
class SfvTable extends JTable implements TransferablePolicySupport, Saveable {
private TransferablePolicy transferablePolicy = new NullTransferablePolicy();

View File

@ -10,22 +10,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.swing.table.AbstractTableModel;
import net.sourceforge.filebot.FileFormat;
public class SfvTableModel extends AbstractTableModel {
class SfvTableModel extends AbstractTableModel {
private ArrayList<ChecksumRow> rows = new ArrayList<ChecksumRow>();
private List<ChecksumRow> rows = new ArrayList<ChecksumRow>();
/**
* Used for Name->Checksum mapping (for performance reasons)
*/
private HashMap<String, ChecksumRow> rowMap = new HashMap<String, ChecksumRow>();
private Map<String, ChecksumRow> rowMap = new HashMap<String, ChecksumRow>();
private ArrayList<File> checksumColumnRoots = new ArrayList<File>();
private List<File> checksumColumnRoots = new ArrayList<File>();
private int checksumColumnsOffset = 2;

View File

@ -15,7 +15,7 @@ import javax.swing.Timer;
import javax.swing.border.Border;
public class TotalProgressPanel extends Box {
class TotalProgressPanel extends Box {
private JProgressBar progressBar = new JProgressBar(0, 0);

View File

@ -33,6 +33,11 @@ public class FancyListCellRenderer extends DefaultListCellRenderer {
}
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);
}

View File

@ -1,5 +1,5 @@
package net.sourceforge.filebot.ui.panel.search;
package net.sourceforge.tuned.ui;
import java.awt.Color;

View File

@ -82,8 +82,9 @@ public class LoadingOverlayPanel extends JPanel {
}
public void updateOverlayUI() {
loadingLabel.updateUI();
public void updateOverlay() {
revalidate();
repaint();
}
}

View File

@ -11,13 +11,10 @@ import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Collection;
import java.util.Map;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
@ -27,40 +24,30 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
public class SelectDialog<T> extends JDialog {
private Collection<T> options;
private JLabel label = new JLabel();
private Map<T, ? extends Icon> iconMap;
private JList list = new JList();
private T selectedValue = null;
public SelectDialog(Window owner, Collection<T> options, Map<T, ? extends Icon> icons) {
this(owner);
this.options = options;
this.iconMap = icons;
initialize();
}
public SelectDialog(Window owner, Collection<T> options) {
this(owner, options, null);
}
private SelectDialog(Window owner) {
super(owner, "Select", ModalityType.DOCUMENT_MODAL);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
list.setCellRenderer(cellRenderer);
list.setCellRenderer(new SelectListCellRenderer());
list.addMouseListener(mouseListener);
label.setText("Select:");
setText("Select:");
JComponent c = (JComponent) getContentPane();
int border = 5;
c.setBorder(BorderFactory.createEmptyBorder(border, border, border, border));
c.setLayout(new BorderLayout(border, border));
@ -82,8 +69,14 @@ public class SelectDialog<T> extends JDialog {
c.add(listPanel, BorderLayout.CENTER);
c.add(buttonBox, BorderLayout.SOUTH);
// bounds and location
setMinimumSize(new Dimension(175, 175));
setSize(new Dimension(200, 190));
setLocation(getDefaultLocation());
// default selection
list.setModel(new SimpleListModel(options));
list.setSelectedIndex(0);
// Shortcut Enter
Integer actionMapKey = new Integer(selectAction.hashCode());
@ -97,29 +90,16 @@ public class SelectDialog<T> extends JDialog {
}
public void setDefaultLocation() {
public Point getDefaultLocation() {
Point p = getOwner().getLocation();
Dimension d = getOwner().getSize();
Point offset = new Point(d.width / 4, d.height / 7);
setLocation(p.x + offset.x, p.y + offset.y);
return new Point(p.x + offset.x, p.y + offset.y);
}
private void initialize() {
list.setModel(new SimpleListModel(options));
list.setSelectedIndex(0);
setDefaultLocation();
}
private JLabel label = new JLabel();
private JList list = new JList();
private T selectedValue = null;
public void setText(String s) {
label.setText(s);
}
@ -159,18 +139,17 @@ public class SelectDialog<T> extends JDialog {
return value.toString();
}
private DefaultListCellRenderer cellRenderer = new DefaultListCellRenderer() {
private Border border = BorderFactory.createEmptyBorder(4, 4, 4, 4);
private class SelectListCellRenderer extends FancyListCellRenderer {
public SelectListCellRenderer() {
super(4, false);
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, convertValueToString(value), index, isSelected, cellHasFocus);
setBorder(border);
if (iconMap != null)
setIcon(iconMap.get(value));
return this;
}