package org.lodder.subtools.multisubdownloader.gui.panels;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import net.miginfocom.swing.MigLayout;
import org.lodder.subtools.multisubdownloader.Messages;
import org.lodder.subtools.multisubdownloader.gui.extra.ArrowButton;
import org.lodder.subtools.multisubdownloader.gui.extra.MyComboBoxEditor;
import org.lodder.subtools.multisubdownloader.gui.extra.MyComboBoxRenderer;
import org.lodder.subtools.sublibrary.control.VideoPatterns;
public class DefaultSelectionPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 2925926997236198235L;
private JTable defaultSelectionTable;
private VideoPatterns videoPatterns = new VideoPatterns();
public DefaultSelectionPanel() {
initialize_ui();
initializeTable();
}
private void initialize_ui() {
this.setLayout(new MigLayout("", "[grow][]", "[][][][][][grow]"));
JScrollPane scrollPane = new JScrollPane();
defaultSelectionTable = new JTable();
scrollPane.setViewportView(defaultSelectionTable);
this.add(scrollPane, "cell 0 0 1 6,grow");
JButton btnAdd = new JButton(Messages.getString("DefaultSelectionPanel.Add")); //$NON-NLS-1$
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
addRuleRow("");
}
});
this.add(btnAdd, "cell 1 1");
JButton btnDelete = new JButton(Messages.getString("DefaultSelectionPanel.Delete")); //$NON-NLS-1$
btnDelete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
removeRuleRow();
}
});
this.add(btnDelete, "cell 1 2");
JButton btnUp = new ArrowButton(SwingConstants.NORTH, 1, 10);
btnUp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
moveRuleRowUp();
}
});
this.add(btnUp, "cell 1 3");
JButton btnDown = new ArrowButton(SwingConstants.SOUTH, 1, 10);
btnDown.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
moveRuleRowUp();
}
});
this.add(btnDown, "cell 1 4");
}
private void initializeTable() {
DefaultTableModel model = (DefaultTableModel) defaultSelectionTable.getModel();
// Add some columns
model.addColumn(Messages.getString("DefaultSelectionPanel.RuleNumber"));
model.addColumn(Messages.getString("DefaultSelectionPanel.Quality"));
}
private void addRuleRow(String q) {
DefaultTableModel model = (DefaultTableModel) defaultSelectionTable.getModel();
model.addRow(new Object[] {model.getRowCount() + 1, q});
// These are the combobox values
List<String> both = new ArrayList<String>();
Collections.addAll(both, Messages.getString("DefaultSelectionPanel.Select"));
both.addAll(videoPatterns.getQualityKeywords());
String[] values = both.toArray(new String[both.size()]);
// Set the combobox editor on the 1st visible column
int vColIndex = 1;
TableColumn col = defaultSelectionTable.getColumnModel().getColumn(vColIndex);
col.setCellEditor(new MyComboBoxEditor(values));
// If the cell should appear like a combobox in its
// non-editing state, also set the combobox renderer
col.setCellRenderer(new MyComboBoxRenderer(values));
}
private void removeRuleRow() {
DefaultTableModel model = (DefaultTableModel) defaultSelectionTable.getModel();
if (defaultSelectionTable.getSelectedRow() >= 0) {
model.removeRow(defaultSelectionTable.getSelectedRow());
}
}
protected void moveRuleRowDown() {
DefaultTableModel model = (DefaultTableModel) defaultSelectionTable.getModel();
if (defaultSelectionTable.getSelectedRow() >= 0
&& defaultSelectionTable.getSelectedRow() < model.getRowCount()) {
Object oSelected = model.getValueAt(defaultSelectionTable.getSelectedRow(), 1);
Object oDown = model.getValueAt(defaultSelectionTable.getSelectedRow() + 1, 1);
model.setValueAt(oSelected, defaultSelectionTable.getSelectedRow() + 1, 1);
model.setValueAt(oDown, defaultSelectionTable.getSelectedRow(), 1);
}
}
protected void moveRuleRowUp() {
DefaultTableModel model = (DefaultTableModel) defaultSelectionTable.getModel();
if (defaultSelectionTable.getSelectedRow() >= 0) {
Object oSelected = model.getValueAt(defaultSelectionTable.getSelectedRow(), 1);
Object oUp = model.getValueAt(defaultSelectionTable.getSelectedRow() - 1, 1);
model.setValueAt(oSelected, defaultSelectionTable.getSelectedRow() - 1, 1);
model.setValueAt(oUp, defaultSelectionTable.getSelectedRow(), 1);
}
}
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
for (Component c : this.getComponents()) {
c.setEnabled(enabled);
}
}
public List<String> getDefaultSelectionList() {
List<String> list = new ArrayList<String>();
DefaultTableModel model = (DefaultTableModel) defaultSelectionTable.getModel();
for (int i = 0; i < model.getRowCount(); i++) {
list.add((String) model.getValueAt(i, 1));
}
return list;
}
public void setDefaultSelectionList(List<String> optionsDefaultSelectionQualityList) {
for (String item : optionsDefaultSelectionQualityList){
addRuleRow(item);
}
}
}