mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
* improved ui performance
* proper class visibility
This commit is contained in:
parent
0f102d4eb6
commit
4b4ca4fc68
@ -46,8 +46,8 @@ public class FileBotList extends JPanel implements Saveable, TransferablePolicyS
|
|||||||
private TransferablePolicy transferablePolicy = new NullTransferablePolicy();
|
private TransferablePolicy transferablePolicy = new NullTransferablePolicy();
|
||||||
|
|
||||||
|
|
||||||
public FileBotList(boolean enableDrop, boolean enableDrag, boolean initRemoveAction) {
|
public FileBotList(boolean enableDrop, boolean enableDrag, boolean enableRemoveAction) {
|
||||||
this(enableDrop, enableDrag, initRemoveAction, true);
|
this(enableDrop, enableDrag, enableRemoveAction, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -65,6 +65,7 @@ public class FileBotList extends JPanel implements Saveable, TransferablePolicyS
|
|||||||
|
|
||||||
list.setCellRenderer(new FancyListCellRenderer());
|
list.setCellRenderer(new FancyListCellRenderer());
|
||||||
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
||||||
|
|
||||||
add(listScrollPane, BorderLayout.CENTER);
|
add(listScrollPane, BorderLayout.CENTER);
|
||||||
|
|
||||||
ImportHandler importHander = null;
|
ImportHandler importHander = null;
|
||||||
|
@ -32,7 +32,7 @@ import net.sourceforge.tuned.ui.GradientStyle;
|
|||||||
import net.sourceforge.tuned.ui.SimpleListModel;
|
import net.sourceforge.tuned.ui.SimpleListModel;
|
||||||
|
|
||||||
|
|
||||||
public class FileBotPanelSelectionList extends JList {
|
class FileBotPanelSelectionList extends JList {
|
||||||
|
|
||||||
private static final int SELECTDELAY_ON_DRAG_OVER = 300;
|
private static final int SELECTDELAY_ON_DRAG_OVER = 300;
|
||||||
|
|
||||||
|
@ -49,8 +49,11 @@ public class FileBotTree extends JTree implements TransferablePolicySupport {
|
|||||||
|
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
DefaultMutableTreeNode root = (DefaultMutableTreeNode) getModel().getRoot();
|
DefaultTreeModel model = (DefaultTreeModel) getModel();
|
||||||
|
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
|
||||||
|
|
||||||
root.removeAllChildren();
|
root.removeAllChildren();
|
||||||
|
model.reload(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -194,7 +197,7 @@ public class FileBotTree extends JTree implements TransferablePolicySupport {
|
|||||||
Desktop.getDesktop().open(file);
|
Desktop.getDesktop().open(file);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
MessageManager.showWarning(e.getMessage());
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,9 @@ public class FileBotWindow extends JFrame implements ListSelectionListener {
|
|||||||
cardLayout.show(pagePanel, currentPanel.getTitle());
|
cardLayout.show(pagePanel, currentPanel.getTitle());
|
||||||
|
|
||||||
JComponent c = (JComponent) getContentPane();
|
JComponent c = (JComponent) getContentPane();
|
||||||
c.updateUI();
|
|
||||||
|
c.revalidate();
|
||||||
|
c.repaint();
|
||||||
|
|
||||||
Settings.getSettings().putInt(Settings.SELECTED_PANEL, selectionListPanel.getSelectedIndex());
|
Settings.getSettings().putInt(Settings.SELECTED_PANEL, selectionListPanel.getSelectedIndex());
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ import net.sourceforge.tuned.ui.notification.SeparatorBorder;
|
|||||||
import net.sourceforge.tuned.ui.notification.SeparatorBorder.Position;
|
import net.sourceforge.tuned.ui.notification.SeparatorBorder.Position;
|
||||||
|
|
||||||
|
|
||||||
public class HeaderPanel extends JPanel {
|
class HeaderPanel extends JPanel {
|
||||||
|
|
||||||
private JLabel titleLabel = new JLabel();
|
private JLabel titleLabel = new JLabel();
|
||||||
|
|
||||||
|
@ -5,12 +5,15 @@ package net.sourceforge.filebot.ui.panel.analyze;
|
|||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
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;
|
||||||
|
|
||||||
import javax.swing.SwingWorker;
|
import javax.swing.SwingWorker;
|
||||||
import javax.swing.tree.DefaultMutableTreeNode;
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
|
import javax.swing.tree.DefaultTreeModel;
|
||||||
|
import javax.swing.tree.TreeNode;
|
||||||
import javax.swing.tree.TreePath;
|
import javax.swing.tree.TreePath;
|
||||||
|
|
||||||
import net.sourceforge.filebot.ui.FileBotTree;
|
import net.sourceforge.filebot.ui.FileBotTree;
|
||||||
@ -19,7 +22,7 @@ import net.sourceforge.filebot.ui.transfer.FileTransferable;
|
|||||||
import net.sourceforge.filebot.ui.transfer.TransferablePolicyImportHandler;
|
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 LOADING_PROPERTY = "loading";
|
||||||
public static final String CONTENT_PROPERTY = "content";
|
public static final String CONTENT_PROPERTY = "content";
|
||||||
@ -28,7 +31,7 @@ public class FileTree extends FileBotTree {
|
|||||||
|
|
||||||
|
|
||||||
public FileTree() {
|
public FileTree() {
|
||||||
FileTreeTransferPolicy transferPolicy = new FileTreeTransferPolicy((DefaultMutableTreeNode) getModel().getRoot());
|
FileTreeTransferPolicy transferPolicy = new FileTreeTransferPolicy(this);
|
||||||
transferPolicy.addPropertyChangeListener(LOADING_PROPERTY, new LoadingPropertyChangeListener());
|
transferPolicy.addPropertyChangeListener(LOADING_PROPERTY, new LoadingPropertyChangeListener());
|
||||||
|
|
||||||
setTransferablePolicy(transferPolicy);
|
setTransferablePolicy(transferPolicy);
|
||||||
@ -37,15 +40,24 @@ public class FileTree extends FileBotTree {
|
|||||||
|
|
||||||
|
|
||||||
public void removeTreeItems(TreePath paths[]) {
|
public void removeTreeItems(TreePath paths[]) {
|
||||||
firePropertyChange(LOADING_PROPERTY, null, true);
|
List<TreeNode> changedNodes = new ArrayList<TreeNode>(paths.length);
|
||||||
|
|
||||||
for (TreePath element : paths) {
|
for (TreePath element : paths) {
|
||||||
DefaultMutableTreeNode node = (DefaultMutableTreeNode) (element.getLastPathComponent());
|
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();
|
contentChanged();
|
||||||
firePropertyChange(LOADING_PROPERTY, null, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -68,14 +80,11 @@ public class FileTree extends FileBotTree {
|
|||||||
|
|
||||||
super.clear();
|
super.clear();
|
||||||
|
|
||||||
if (!loading) {
|
contentChanged();
|
||||||
contentChanged();
|
|
||||||
}
|
|
||||||
// else, contentChanged() will be called after when loading is finished
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void contentChanged() {
|
void contentChanged() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (postProcessor != null)
|
if (postProcessor != null)
|
||||||
postProcessor.cancel(false);
|
postProcessor.cancel(false);
|
||||||
@ -92,9 +101,10 @@ public class FileTree extends FileBotTree {
|
|||||||
public void propertyChange(PropertyChangeEvent evt) {
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
Boolean loading = (Boolean) evt.getNewValue();
|
Boolean loading = (Boolean) evt.getNewValue();
|
||||||
|
|
||||||
if (loading) {
|
firePropertyChange(FileTree.LOADING_PROPERTY, null, loading);
|
||||||
firePropertyChange(FileTree.LOADING_PROPERTY, null, true);
|
|
||||||
} else {
|
if (!loading) {
|
||||||
|
((DefaultTreeModel) getModel()).reload();
|
||||||
contentChanged();
|
contentChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,9 +130,6 @@ public class FileTree extends FileBotTree {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e);
|
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
FileTree.this.firePropertyChange(FileTree.LOADING_PROPERTY, null, false);
|
|
||||||
updateUI();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ import net.sourceforge.filebot.ui.transfer.LoadAction;
|
|||||||
import net.sourceforge.tuned.ui.LoadingOverlayPanel;
|
import net.sourceforge.tuned.ui.LoadingOverlayPanel;
|
||||||
|
|
||||||
|
|
||||||
public class FileTreePanel extends JPanel {
|
class FileTreePanel extends JPanel {
|
||||||
|
|
||||||
private FileTree fileTree = new FileTree();
|
private FileTree fileTree = new FileTree();
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ public class FileTreePanel extends JPanel {
|
|||||||
Boolean loading = (Boolean) evt.getNewValue();
|
Boolean loading = (Boolean) evt.getNewValue();
|
||||||
|
|
||||||
loadingOverlay.setOverlayVisible(loading);
|
loadingOverlay.setOverlayVisible(loading);
|
||||||
loadingOverlay.updateOverlayUI();
|
loadingOverlay.updateOverlay();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -85,7 +85,6 @@ public class FileTreePanel extends JPanel {
|
|||||||
int row = fileTree.getMinSelectionRow();
|
int row = fileTree.getMinSelectionRow();
|
||||||
|
|
||||||
fileTree.removeTreeItems(fileTree.getSelectionPaths());
|
fileTree.removeTreeItems(fileTree.getSelectionPaths());
|
||||||
fileTree.updateUI();
|
|
||||||
|
|
||||||
int maxRow = fileTree.getRowCount() - 1;
|
int maxRow = fileTree.getRowCount() - 1;
|
||||||
|
|
||||||
|
@ -12,11 +12,11 @@ import net.sourceforge.filebot.ui.transferablepolicies.BackgroundFileTransferabl
|
|||||||
|
|
||||||
class FileTreeTransferPolicy extends BackgroundFileTransferablePolicy<DefaultMutableTreeNode> {
|
class FileTreeTransferPolicy extends BackgroundFileTransferablePolicy<DefaultMutableTreeNode> {
|
||||||
|
|
||||||
DefaultMutableTreeNode root;
|
private FileTree tree;
|
||||||
|
|
||||||
|
|
||||||
public FileTreeTransferPolicy(DefaultMutableTreeNode root) {
|
public FileTreeTransferPolicy(FileTree tree) {
|
||||||
this.root = root;
|
this.tree = tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -28,12 +28,14 @@ class FileTreeTransferPolicy extends BackgroundFileTransferablePolicy<DefaultMut
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void clear() {
|
protected void clear() {
|
||||||
root.removeAllChildren();
|
tree.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void process(List<DefaultMutableTreeNode> chunks) {
|
protected void process(List<DefaultMutableTreeNode> chunks) {
|
||||||
|
DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
|
||||||
|
|
||||||
for (DefaultMutableTreeNode node : chunks) {
|
for (DefaultMutableTreeNode node : chunks) {
|
||||||
root.add(node);
|
root.add(node);
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ import net.sourceforge.filebot.ui.transfer.ExportHandler;
|
|||||||
import net.sourceforge.filebot.ui.transfer.FileTransferable;
|
import net.sourceforge.filebot.ui.transfer.FileTransferable;
|
||||||
|
|
||||||
|
|
||||||
public class FileTreeExportHandler implements ExportHandler {
|
class FileTreeExportHandler implements ExportHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Transferable createTransferable(JComponent c) {
|
public Transferable createTransferable(JComponent c) {
|
||||||
|
@ -46,7 +46,7 @@ public abstract class ToolPanel extends JComponent {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
loadingOverlay.setOverlayVisible(loading);
|
loadingOverlay.setOverlayVisible(loading);
|
||||||
loadingOverlay.updateOverlayUI();
|
loadingOverlay.updateOverlay();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.filebot.ui.panel.rename.entry.FileEntry;
|
import net.sourceforge.filebot.ui.panel.rename.entry.FileEntry;
|
||||||
|
|
||||||
|
|
||||||
public class FilesRenameList extends RenameList {
|
class FilesRenameList extends RenameList {
|
||||||
|
|
||||||
public FilesRenameList() {
|
public FilesRenameList() {
|
||||||
setTitle("Files");
|
setTitle("Files");
|
||||||
|
@ -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.match.Matcher;
|
||||||
import net.sourceforge.filebot.ui.panel.rename.similarity.LengthEqualsMetric;
|
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.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.StringEqualsMetric;
|
||||||
import net.sourceforge.filebot.ui.panel.rename.similarity.StringSimilarityMetric;
|
import net.sourceforge.filebot.ui.panel.rename.similarity.StringSimilarityMetric;
|
||||||
|
|
||||||
|
|
||||||
public class MatchAction extends AbstractAction {
|
class MatchAction extends AbstractAction {
|
||||||
|
|
||||||
private NamesRenameList namesList;
|
private NamesRenameList namesList;
|
||||||
private FilesRenameList filesList;
|
private FilesRenameList filesList;
|
||||||
private Matcher matcher;
|
|
||||||
private SimilarityMetric metric;
|
private MultiSimilarityMetric metrics;
|
||||||
|
|
||||||
|
private Matcher matcher = new Matcher();
|
||||||
|
|
||||||
private boolean matchName2File;
|
private boolean matchName2File;
|
||||||
|
|
||||||
@ -40,15 +41,8 @@ public class MatchAction extends AbstractAction {
|
|||||||
this.namesList = namesList;
|
this.namesList = namesList;
|
||||||
this.filesList = filesList;
|
this.filesList = filesList;
|
||||||
|
|
||||||
MultiSimilarityMetric multiMetric = new MultiSimilarityMetric();
|
|
||||||
multiMetric.addMetric(new StringSimilarityMetric());
|
|
||||||
multiMetric.addMetric(new StringEqualsMetric());
|
|
||||||
|
|
||||||
// length similarity will only effect torrent <-> file matches
|
// length similarity will only effect torrent <-> file matches
|
||||||
multiMetric.addMetric(new LengthEqualsMetric());
|
metrics = new MultiSimilarityMetric(new StringSimilarityMetric(), new StringEqualsMetric(), new LengthEqualsMetric());
|
||||||
|
|
||||||
matcher = new Matcher();
|
|
||||||
metric = multiMetric;
|
|
||||||
|
|
||||||
setMatchName2File(true);
|
setMatchName2File(true);
|
||||||
}
|
}
|
||||||
@ -67,8 +61,8 @@ public class MatchAction extends AbstractAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public SimilarityMetric getMetric() {
|
public MultiSimilarityMetric getMetrics() {
|
||||||
return metric;
|
return metrics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -90,7 +84,7 @@ public class MatchAction extends AbstractAction {
|
|||||||
listA = filesList.getListEntries();
|
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<?>> names = new ArrayList<ListEntry<?>>();
|
||||||
List<ListEntry<?>> files = new ArrayList<ListEntry<?>>();
|
List<ListEntry<?>> files = new ArrayList<ListEntry<?>>();
|
||||||
|
@ -6,11 +6,13 @@ import java.io.BufferedReader;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import net.sourceforge.filebot.FileFormat;
|
import net.sourceforge.filebot.FileFormat;
|
||||||
import net.sourceforge.filebot.torrent.Torrent;
|
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.StringEntry;
|
||||||
import net.sourceforge.filebot.ui.panel.rename.entry.TorrentEntry;
|
import net.sourceforge.filebot.ui.panel.rename.entry.TorrentEntry;
|
||||||
import net.sourceforge.filebot.ui.transferablepolicies.FileTransferablePolicy;
|
import net.sourceforge.filebot.ui.transferablepolicies.FileTransferablePolicy;
|
||||||
@ -31,6 +33,11 @@ class NamesListTransferablePolicy extends MultiTransferablePolicy {
|
|||||||
addPolicy(new TextPolicy());
|
addPolicy(new TextPolicy());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void submit(Collection<ListEntry<?>> entries) {
|
||||||
|
this.listModel.addAll(entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private class FilePolicy extends FileTransferablePolicy {
|
private class FilePolicy extends FileTransferablePolicy {
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.filebot.ui.panel.rename.entry.ListEntry;
|
import net.sourceforge.filebot.ui.panel.rename.entry.ListEntry;
|
||||||
|
|
||||||
|
|
||||||
public class NamesRenameList extends RenameList {
|
class NamesRenameList extends RenameList {
|
||||||
|
|
||||||
public NamesRenameList() {
|
public NamesRenameList() {
|
||||||
setTitle("Names");
|
setTitle("Names");
|
||||||
|
@ -20,7 +20,7 @@ import net.sourceforge.filebot.ui.FileBotList;
|
|||||||
import net.sourceforge.filebot.ui.transfer.LoadAction;
|
import net.sourceforge.filebot.ui.transfer.LoadAction;
|
||||||
|
|
||||||
|
|
||||||
public abstract class RenameList extends FileBotList {
|
abstract class RenameList extends FileBotList {
|
||||||
|
|
||||||
public RenameList() {
|
public RenameList() {
|
||||||
super(true, false, true);
|
super(true, false, true);
|
||||||
|
@ -60,7 +60,7 @@ public class RenamePanel extends FileBotPanel {
|
|||||||
similarityPanel = new SimilarityPanel(list1, list2);
|
similarityPanel = new SimilarityPanel(list1, list2);
|
||||||
|
|
||||||
similarityPanel.setVisible(false);
|
similarityPanel.setVisible(false);
|
||||||
similarityPanel.setMetrics(matchAction.getMetric());
|
similarityPanel.setMetrics(matchAction.getMetrics());
|
||||||
|
|
||||||
Box box = new Box(BoxLayout.X_AXIS);
|
Box box = new Box(BoxLayout.X_AXIS);
|
||||||
|
|
||||||
@ -215,6 +215,7 @@ public class RenamePanel extends FileBotPanel {
|
|||||||
|
|
||||||
private class MatchPopupListener extends MouseAdapter {
|
private class MatchPopupListener extends MouseAdapter {
|
||||||
|
|
||||||
|
@Override
|
||||||
public void mouseReleased(MouseEvent e) {
|
public void mouseReleased(MouseEvent e) {
|
||||||
if (SwingUtilities.isRightMouseButton(e)) {
|
if (SwingUtilities.isRightMouseButton(e)) {
|
||||||
MatcherSelectPopup popup = new MatcherSelectPopup();
|
MatcherSelectPopup popup = new MatcherSelectPopup();
|
||||||
|
@ -7,7 +7,7 @@ import javax.swing.event.ListSelectionEvent;
|
|||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
|
||||||
|
|
||||||
public class SelectionSynchroniser {
|
class SelectionSynchroniser {
|
||||||
|
|
||||||
private JList list1;
|
private JList list1;
|
||||||
private JList list2;
|
private JList list2;
|
||||||
|
@ -6,6 +6,7 @@ import java.awt.Color;
|
|||||||
import java.awt.GridLayout;
|
import java.awt.GridLayout;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.Box;
|
import javax.swing.Box;
|
||||||
@ -23,7 +24,7 @@ import net.sourceforge.filebot.ui.panel.rename.similarity.SimilarityMetric;
|
|||||||
import net.sourceforge.tuned.ui.notification.SeparatorBorder;
|
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));
|
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 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);
|
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();
|
grid.removeAll();
|
||||||
updaterList.clear();
|
updaterList.clear();
|
||||||
|
|
||||||
if (similarityMetric instanceof MultiSimilarityMetric) {
|
for (SimilarityMetric metric : metrics) {
|
||||||
MultiSimilarityMetric multiSimilarityMetric = (MultiSimilarityMetric) similarityMetric;
|
JLabel name = new JLabel(metric.getName());
|
||||||
|
name.setToolTipText(metric.getDescription());
|
||||||
|
|
||||||
for (SimilarityMetric metric : multiSimilarityMetric.getSimilarityMetrics()) {
|
JLabel value = new JLabel();
|
||||||
JLabel name = new JLabel(metric.getName());
|
|
||||||
name.setToolTipText(metric.getDescription());
|
name.setBorder(labelMarginBorder);
|
||||||
|
value.setBorder(labelMarginBorder);
|
||||||
JLabel value = new JLabel();
|
|
||||||
|
MetricUpdater updater = new MetricUpdater(value, metric);
|
||||||
name.setBorder(labelMarginBorder);
|
updaterList.add(updater);
|
||||||
value.setBorder(labelMarginBorder);
|
|
||||||
|
grid.add(name);
|
||||||
MetricUpdater updater = new MetricUpdater(value, metric);
|
grid.add(value);
|
||||||
updaterList.add(updater);
|
|
||||||
|
|
||||||
grid.add(name);
|
|
||||||
grid.add(value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JLabel name = new JLabel(similarityMetric.getName());
|
JLabel name = new JLabel(metrics.getName());
|
||||||
name.setToolTipText(similarityMetric.getDescription());
|
|
||||||
|
|
||||||
JLabel value = new JLabel();
|
JLabel value = new JLabel();
|
||||||
|
|
||||||
MetricUpdater updater = new MetricUpdater(value, similarityMetric);
|
MetricUpdater updater = new MetricUpdater(value, metrics);
|
||||||
updaterList.add(updater);
|
updaterList.add(updater);
|
||||||
|
|
||||||
if (similarityMetric instanceof MultiSimilarityMetric) {
|
Border border = BorderFactory.createCompoundBorder(separatorBorder, labelMarginBorder);
|
||||||
Border border = BorderFactory.createCompoundBorder(separatorBorder, labelMarginBorder);
|
name.setBorder(border);
|
||||||
|
value.setBorder(border);
|
||||||
name.setBorder(border);
|
|
||||||
value.setBorder(border);
|
|
||||||
}
|
|
||||||
|
|
||||||
grid.add(name);
|
grid.add(name);
|
||||||
grid.add(value);
|
grid.add(value);
|
||||||
@ -134,7 +127,7 @@ public class SimilarityPanel extends Box {
|
|||||||
ListEntry<?> a = (ListEntry<?>) nameList.getSelectedValue();
|
ListEntry<?> a = (ListEntry<?>) nameList.getSelectedValue();
|
||||||
ListEntry<?> b = (ListEntry<?>) fileList.getSelectedValue();
|
ListEntry<?> b = (ListEntry<?>) fileList.getSelectedValue();
|
||||||
|
|
||||||
if (a == lastListEntryA && b == lastListEntryB)
|
if ((a == lastListEntryA) && (b == lastListEntryB))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
lastListEntryA = a;
|
lastListEntryA = a;
|
||||||
|
@ -9,7 +9,7 @@ import javax.swing.event.ChangeEvent;
|
|||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
|
|
||||||
public class ViewPortSynchroniser {
|
class ViewPortSynchroniser {
|
||||||
|
|
||||||
private JViewport viewport1;
|
private JViewport viewport1;
|
||||||
private JViewport viewport2;
|
private JViewport viewport2;
|
||||||
|
@ -9,14 +9,6 @@ public abstract class AbstractFileEntry<T> extends ListEntry<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public abstract long getLength();
|
public abstract long getLength();
|
||||||
|
|
||||||
|
|
||||||
public abstract String getName();
|
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ public class FileEntry extends AbstractFileEntry<File> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName(File value) {
|
||||||
return FileFormat.getNameWithoutSuffix(getValue());
|
return FileFormat.getNameWithoutSuffix(getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,11 +4,26 @@ package net.sourceforge.filebot.ui.panel.rename.entry;
|
|||||||
|
|
||||||
public abstract class ListEntry<T> {
|
public abstract class ListEntry<T> {
|
||||||
|
|
||||||
|
private String name;
|
||||||
private T value;
|
private T value;
|
||||||
|
|
||||||
|
|
||||||
public ListEntry(T value) {
|
public ListEntry(T value) {
|
||||||
this.value = 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
|
@Override
|
||||||
public abstract String toString();
|
public String toString() {
|
||||||
|
return getName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,7 @@ public class StringEntry extends ListEntry<String> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
protected String getName(String value) {
|
||||||
return getValue();
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ public class TorrentEntry extends AbstractFileEntry<Torrent.Entry> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName(Torrent.Entry value) {
|
||||||
return FileFormat.getNameWithoutSuffix(getValue().getName());
|
return FileFormat.getNameWithoutSuffix(getValue().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ import net.sourceforge.filebot.ui.panel.rename.similarity.SimilarityMetric;
|
|||||||
public class Matcher {
|
public class Matcher {
|
||||||
|
|
||||||
public List<Match> match(List<? extends ListEntry<?>> listA, List<? extends ListEntry<?>> listB, SimilarityMetric similarityMetric) {
|
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) {
|
for (ListEntry<?> entryA : listA) {
|
||||||
float maxSimilarity = -1;
|
float maxSimilarity = -1;
|
||||||
|
@ -2,39 +2,32 @@
|
|||||||
package net.sourceforge.filebot.ui.panel.rename.similarity;
|
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 java.util.List;
|
||||||
|
|
||||||
import net.sourceforge.filebot.ui.panel.rename.entry.ListEntry;
|
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
|
@Override
|
||||||
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
|
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
|
||||||
if (similarityMetrics.size() < 1)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
float similarity = 0;
|
float similarity = 0;
|
||||||
|
|
||||||
for (SimilarityMetric metric : similarityMetrics) {
|
for (SimilarityMetric metric : similarityMetrics) {
|
||||||
similarity += metric.getSimilarity(a, b);
|
similarity += metric.getSimilarity(a, b) / similarityMetrics.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
return similarity / similarityMetrics.size();
|
return similarity;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void addMetric(SimilarityMetric similarityMetric) {
|
|
||||||
similarityMetrics.add(similarityMetric);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<SimilarityMetric> getSimilarityMetrics() {
|
|
||||||
return similarityMetrics;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -49,4 +42,10 @@ public class MultiSimilarityMetric extends SimilarityMetric {
|
|||||||
return "Average";
|
return "Average";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<SimilarityMetric> iterator() {
|
||||||
|
return similarityMetrics.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ public class StringEqualsMetric extends SimilarityMetric {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
|
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
|
||||||
if (a.toString().equalsIgnoreCase(b.toString())) {
|
if (a.getName().equalsIgnoreCase(b.getName())) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ public class StringSimilarityMetric extends SimilarityMetric {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
|
public float getSimilarity(ListEntry<?> a, ListEntry<?> b) {
|
||||||
return metric.getSimilarity(a.toString(), b.toString());
|
return metric.getSimilarity(a.getName(), b.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import net.sourceforge.filebot.resources.ResourceManager;
|
|||||||
import net.sourceforge.filebot.ui.FileBotList;
|
import net.sourceforge.filebot.ui.FileBotList;
|
||||||
|
|
||||||
|
|
||||||
public class EpisodeListPanel extends FileBotList {
|
class EpisodeListPanel extends FileBotList {
|
||||||
|
|
||||||
private TabComponentWithClose tabComponent;
|
private TabComponentWithClose tabComponent;
|
||||||
private ImageIcon icon;
|
private ImageIcon icon;
|
||||||
|
@ -10,7 +10,7 @@ import net.sourceforge.filebot.web.Episode;
|
|||||||
import net.sourceforge.filebot.web.EpisodeListClient;
|
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 String showName;
|
||||||
private EpisodeListClient searchEngine;
|
private EpisodeListClient searchEngine;
|
||||||
|
@ -16,8 +16,10 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
import javax.swing.border.Border;
|
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));
|
private JPanel grid = new JPanel(new GridLayout(0, 3, 15, 10));
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ import javax.swing.event.ChangeEvent;
|
|||||||
import javax.swing.event.ChangeListener;
|
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;
|
public static final int ALL_SEASONS = 0;
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ import javax.swing.SwingUtilities;
|
|||||||
import net.sourceforge.filebot.resources.ResourceManager;
|
import net.sourceforge.filebot.resources.ResourceManager;
|
||||||
|
|
||||||
|
|
||||||
public class TabComponentWithClose extends JPanel {
|
class TabComponentWithClose extends JPanel {
|
||||||
|
|
||||||
private JLabel label;
|
private JLabel label;
|
||||||
|
|
||||||
|
@ -77,7 +77,6 @@ public class SfvPanel extends FileBotPanel {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getDefaultFileName() {
|
protected String getDefaultFileName() {
|
||||||
System.out.println(name);
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ import net.sourceforge.filebot.ui.transferablepolicies.NullTransferablePolicy;
|
|||||||
import net.sourceforge.filebot.ui.transferablepolicies.TransferablePolicy;
|
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();
|
private TransferablePolicy transferablePolicy = new NullTransferablePolicy();
|
||||||
|
|
||||||
|
@ -10,22 +10,23 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.swing.table.AbstractTableModel;
|
import javax.swing.table.AbstractTableModel;
|
||||||
|
|
||||||
import net.sourceforge.filebot.FileFormat;
|
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)
|
* 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;
|
private int checksumColumnsOffset = 2;
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ import javax.swing.Timer;
|
|||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
|
|
||||||
|
|
||||||
public class TotalProgressPanel extends Box {
|
class TotalProgressPanel extends Box {
|
||||||
|
|
||||||
private JProgressBar progressBar = new JProgressBar(0, 0);
|
private JProgressBar progressBar = new JProgressBar(0, 0);
|
||||||
|
|
||||||
|
@ -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) {
|
public FancyListCellRenderer(int padding, Color selectedBorderColor, GradientStyle gradientStyle) {
|
||||||
this(gradientStyle, false, new Insets(padding, padding, padding, padding), new Insets(0, 0, 0, 0), selectedBorderColor);
|
this(gradientStyle, false, new Insets(padding, padding, padding, padding), new Insets(0, 0, 0, 0), selectedBorderColor);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
package net.sourceforge.filebot.ui.panel.search;
|
package net.sourceforge.tuned.ui;
|
||||||
|
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
@ -82,8 +82,9 @@ public class LoadingOverlayPanel extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void updateOverlayUI() {
|
public void updateOverlay() {
|
||||||
loadingLabel.updateUI();
|
revalidate();
|
||||||
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,13 +11,10 @@ import java.awt.event.ActionEvent;
|
|||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.Box;
|
import javax.swing.Box;
|
||||||
import javax.swing.DefaultListCellRenderer;
|
|
||||||
import javax.swing.Icon;
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
@ -27,40 +24,30 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.KeyStroke;
|
import javax.swing.KeyStroke;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.border.Border;
|
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
|
|
||||||
|
|
||||||
public class SelectDialog<T> extends JDialog {
|
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) {
|
public SelectDialog(Window owner, Collection<T> options) {
|
||||||
this(owner, options, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private SelectDialog(Window owner) {
|
|
||||||
super(owner, "Select", ModalityType.DOCUMENT_MODAL);
|
super(owner, "Select", ModalityType.DOCUMENT_MODAL);
|
||||||
|
|
||||||
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||||
|
|
||||||
list.setCellRenderer(cellRenderer);
|
list.setCellRenderer(new SelectListCellRenderer());
|
||||||
list.addMouseListener(mouseListener);
|
list.addMouseListener(mouseListener);
|
||||||
|
|
||||||
label.setText("Select:");
|
setText("Select:");
|
||||||
|
|
||||||
JComponent c = (JComponent) getContentPane();
|
JComponent c = (JComponent) getContentPane();
|
||||||
|
|
||||||
int border = 5;
|
int border = 5;
|
||||||
c.setBorder(BorderFactory.createEmptyBorder(border, border, border, border));
|
c.setBorder(BorderFactory.createEmptyBorder(border, border, border, border));
|
||||||
c.setLayout(new BorderLayout(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(listPanel, BorderLayout.CENTER);
|
||||||
c.add(buttonBox, BorderLayout.SOUTH);
|
c.add(buttonBox, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
// bounds and location
|
||||||
setMinimumSize(new Dimension(175, 175));
|
setMinimumSize(new Dimension(175, 175));
|
||||||
setSize(new Dimension(200, 190));
|
setSize(new Dimension(200, 190));
|
||||||
|
setLocation(getDefaultLocation());
|
||||||
|
|
||||||
|
// default selection
|
||||||
|
list.setModel(new SimpleListModel(options));
|
||||||
|
list.setSelectedIndex(0);
|
||||||
|
|
||||||
// Shortcut Enter
|
// Shortcut Enter
|
||||||
Integer actionMapKey = new Integer(selectAction.hashCode());
|
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();
|
Point p = getOwner().getLocation();
|
||||||
Dimension d = getOwner().getSize();
|
Dimension d = getOwner().getSize();
|
||||||
|
|
||||||
Point offset = new Point(d.width / 4, d.height / 7);
|
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) {
|
public void setText(String s) {
|
||||||
label.setText(s);
|
label.setText(s);
|
||||||
}
|
}
|
||||||
@ -159,18 +139,17 @@ public class SelectDialog<T> extends JDialog {
|
|||||||
return value.toString();
|
return value.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private DefaultListCellRenderer cellRenderer = new DefaultListCellRenderer() {
|
|
||||||
|
private class SelectListCellRenderer extends FancyListCellRenderer {
|
||||||
private Border border = BorderFactory.createEmptyBorder(4, 4, 4, 4);
|
|
||||||
|
|
||||||
|
public SelectListCellRenderer() {
|
||||||
|
super(4, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||||
super.getListCellRendererComponent(list, convertValueToString(value), index, isSelected, cellHasFocus);
|
super.getListCellRendererComponent(list, convertValueToString(value), index, isSelected, cellHasFocus);
|
||||||
setBorder(border);
|
|
||||||
|
|
||||||
if (iconMap != null)
|
|
||||||
setIcon(iconMap.get(value));
|
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user