* allow "unselection" of subtitle options

This commit is contained in:
Reinhard Pointner 2014-04-05 16:25:38 +00:00
parent 9cbef475c6
commit d8c56c637a
1 changed files with 56 additions and 28 deletions

View File

@ -52,6 +52,7 @@ import javax.swing.JTable;
import javax.swing.SwingWorker;
import javax.swing.SwingWorker.StateValue;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
@ -63,6 +64,7 @@ import net.sourceforge.filebot.similarity.MetricCascade;
import net.sourceforge.filebot.similarity.SimilarityMetric;
import net.sourceforge.filebot.subtitle.SubtitleNaming;
import net.sourceforge.filebot.util.ui.AbstractBean;
import net.sourceforge.filebot.util.ui.DashedSeparator;
import net.sourceforge.filebot.util.ui.EmptySelectionModel;
import net.sourceforge.filebot.util.ui.LinkButton;
import net.sourceforge.filebot.util.ui.RoundBorder;
@ -127,7 +129,7 @@ class SubtitleAutoMatchDialog extends JDialog {
table.setFillsViewportHeight(true);
JComboBox editor = new SimpleComboBox();
editor.setRenderer(new SubtitleOptionRenderer());
editor.setRenderer(new SubtitleOptionRenderer(true));
// disable selection
table.setSelectionModel(new EmptySelectionModel());
@ -138,11 +140,13 @@ class SubtitleAutoMatchDialog extends JDialog {
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JComboBox editor = (JComboBox) super.getTableCellEditorComponent(table, value, isSelected, row, column);
SubtitleMapping mapping = (SubtitleMapping) value;
editor.setModel(new DefaultComboBoxModel(mapping.getOptions()));
editor.setSelectedItem(mapping.getSelectedOption());
DefaultComboBoxModel model = new DefaultComboBoxModel(mapping.getOptions());
model.addElement(null); // option to cancel selection
editor.setModel(model);
editor.setSelectedItem(mapping.getSelectedOption());
return editor;
}
});
@ -347,7 +351,7 @@ class SubtitleAutoMatchDialog extends JDialog {
private final JComboBox optionComboBox = new SimpleComboBox();
public SubtitleMappingOptionRenderer() {
optionComboBox.setRenderer(new SubtitleOptionRenderer());
optionComboBox.setRenderer(new SubtitleOptionRenderer(false));
}
@Override
@ -356,7 +360,7 @@ class SubtitleAutoMatchDialog extends JDialog {
SubtitleDescriptorBean subtitleBean = mapping.getSelectedOption();
// render combobox for subtitle options
if (mapping.isEditable()) {
if (mapping.isEditable() && subtitleBean != null) {
optionComboBox.setModel(new DefaultComboBoxModel(new Object[] { subtitleBean }));
return optionComboBox;
}
@ -366,10 +370,17 @@ class SubtitleAutoMatchDialog extends JDialog {
setForeground(table.getForeground());
if (subtitleBean == null) {
// no subtitles found
setText("No subtitles found");
setIcon(null);
setForeground(Color.gray);
if (mapping.getOptions().length == 0) {
// no subtitles found
setText("No subtitles found");
setIcon(null);
setForeground(Color.gray);
} else {
// no subtitles found
setText("No subtitles selected");
setIcon(null);
setForeground(Color.gray);
}
} else if (subtitleBean.getState() == StateValue.PENDING) {
// download in the queue
setText(subtitleBean.getText());
@ -394,6 +405,11 @@ class SubtitleAutoMatchDialog extends JDialog {
private static class SubtitleOptionRenderer extends DefaultListCellRenderer {
private final Border padding = createEmptyBorder(3, 3, 3, 3);
private final boolean isEditor;
public SubtitleOptionRenderer(boolean isEditor) {
this.isEditor = isEditor;
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
@ -401,25 +417,36 @@ class SubtitleAutoMatchDialog extends JDialog {
setBorder(padding);
SubtitleDescriptorBean subtitleBean = (SubtitleDescriptorBean) value;
setText(subtitleBean.getText());
if (subtitleBean.getError() == null) {
setIcon(subtitleBean.getIcon());
setToolTipText(null);
} else {
setIcon(ResourceManager.getIcon("status.warning"));
setToolTipText(subtitleBean.getError().getMessage());
if (isEditor && index == list.getModel().getSize() - 2) {
setBorder(new CompoundBorder(new DashedSeparator(10, 4, Color.lightGray, list.getBackground()), getBorder())); // this element is always the last one
}
if (!isSelected) {
float f = subtitleBean.getMatchProbability();
if (f < 1) {
setOpaque(true);
setBackground(nameMatchColor);
if (value == null) {
setText("Cancel selection");
setIcon(ResourceManager.getIcon("dialog.cancel"));
setToolTipText(null);
} else {
setText(subtitleBean.getText());
if (subtitleBean.getError() == null) {
setIcon(subtitleBean.getIcon());
setToolTipText(null);
} else {
setIcon(ResourceManager.getIcon("status.warning"));
setToolTipText(subtitleBean.getError().getMessage());
}
if (f < 0.9f) {
setOpaque(true);
setBackground(derive(Color.RED, (1 - f) * 0.5f));
if (!isSelected) {
float f = subtitleBean.getMatchProbability();
if (f < 1) {
setOpaque(true);
setBackground(nameMatchColor);
}
if (f < 0.9f) {
setOpaque(true);
setBackground(derive(Color.RED, (1 - f) * 0.5f));
}
}
}
@ -570,7 +597,7 @@ class SubtitleAutoMatchDialog extends JDialog {
}
public boolean isEditable() {
return subtitleFile == null && selectedOption != null && (selectedOption.getState() == null || selectedOption.getError() != null);
return subtitleFile == null && options.size() > 0 && (selectedOption == null || (selectedOption.getState() == null || selectedOption.getError() != null));
}
public SubtitleDescriptorBean getSelectedOption() {
@ -583,8 +610,9 @@ class SubtitleAutoMatchDialog extends JDialog {
}
this.selectedOption = selectedOption;
this.selectedOption.addPropertyChangeListener(selectedOptionListener);
if (this.selectedOption != null) {
this.selectedOption.addPropertyChangeListener(selectedOptionListener);
}
firePropertyChange("selectedOption", null, this.selectedOption);
}