package org.lodder.subtools.multisubdownloader.gui.dialog; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.RowSorter; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; import net.miginfocom.swing.MigLayout; import org.lodder.subtools.multisubdownloader.Messages; import org.lodder.subtools.multisubdownloader.settings.SettingsControl; import org.lodder.subtools.multisubdownloader.settings.model.Settings; import org.lodder.subtools.sublibrary.settings.model.MappingTvdbScene; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MappingEpisodeNameDialog extends MultiSubDialog { /** * */ private static final long serialVersionUID = 1L; private final JPanel contentPanel = new JPanel(); private JTable table; private final SettingsControl prefCtrl; private final Settings pref; private JCheckBox chkAutoUpdateMapping; private static final Logger LOGGER = LoggerFactory.getLogger(MappingEpisodeNameDialog.class); /** * Create the dialog. */ public MappingEpisodeNameDialog(JFrame frame, final SettingsControl prefCtrl) { super(frame, Messages.getString("MappingEpisodeNameDialog.Title"), true); this.prefCtrl = prefCtrl; pref = prefCtrl.getSettings(); initialize(); loadMappingTable(); repaint(); } private void loadMappingTable() { DefaultTableModel model = (DefaultTableModel) table.getModel(); while (model.getRowCount() > 0) { model.removeRow(0); } for (int i = 0; i < pref.getMappingSettings().getMappingList().size(); i++) { String tvdbId = ""; if (pref.getMappingSettings().getMappingList().get(i).getTvdbId() > 0) tvdbId = Integer.toString(pref.getMappingSettings().getMappingList().get(i).getTvdbId()); model.addRow(new String[] {pref.getMappingSettings().getMappingList().get(i).getSceneName(), tvdbId}); } chkAutoUpdateMapping.setSelected(pref.isAutoUpdateMapping()); } private void initialize() { setResizable(false); setBounds(100, 100, 450, 300); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); GridBagLayout gbl_contentPanel = new GridBagLayout(); gbl_contentPanel.columnWidths = new int[] {0, 0}; gbl_contentPanel.rowHeights = new int[] {0, 40, 0}; gbl_contentPanel.columnWeights = new double[] {1.0, Double.MIN_VALUE}; gbl_contentPanel.rowWeights = new double[] {0.0, 1.0, Double.MIN_VALUE}; contentPanel.setLayout(gbl_contentPanel); { JPanel pnlButtons = new JPanel(); GridBagConstraints gbc_pnlButtons = new GridBagConstraints(); gbc_pnlButtons.insets = new Insets(0, 0, 5, 0); gbc_pnlButtons.fill = GridBagConstraints.BOTH; gbc_pnlButtons.gridx = 0; gbc_pnlButtons.gridy = 0; contentPanel.add(pnlButtons, gbc_pnlButtons); { JButton btnAdd = new JButton(Messages.getString("MappingEpisodeNameDialog.AddRow")); btnAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String scene = JOptionPane.showInputDialog(Messages .getString("MappingEpisodeNameDialog.EnterSceneShowName")); if (!scene.equals("")) { String tvdbId = JOptionPane.showInputDialog(Messages .getString("MappingEpisodeNameDialog.EnterTvdbId")); if (!tvdbId.equals("")) { DefaultTableModel model = (DefaultTableModel) table.getModel(); model.addRow(new Object[] {scene, tvdbId}); } } } }); pnlButtons.add(btnAdd); } { JButton btnDeleteSelectedRow = new JButton(Messages.getString("MappingEpisodeNameDialog.DeleteRow")); btnDeleteSelectedRow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { int row = table.getSelectedRow(); DefaultTableModel model = (DefaultTableModel) table.getModel(); model.removeRow(row); } }); pnlButtons.add(btnDeleteSelectedRow); } } { JScrollPane scrollPane = new JScrollPane(); GridBagConstraints gbc_scrollPane = new GridBagConstraints(); gbc_scrollPane.fill = GridBagConstraints.BOTH; gbc_scrollPane.gridx = 0; gbc_scrollPane.gridy = 1; contentPanel.add(scrollPane, gbc_scrollPane); { table = new JTable(); table.setModel(new DefaultTableModel(new Object[][] {}, new String[] { Messages.getString("MappingEpisodeNameDialog.SceneShowName"), Messages.getString("MappingEpisodeNameDialog.TvdbId")}) { /** * */ private static final long serialVersionUID = 1L; @SuppressWarnings("rawtypes") Class[] columnTypes = new Class[] {String.class, String.class, String.class}; @SuppressWarnings({"unchecked", "rawtypes"}) public Class getColumnClass(int columnIndex) { return columnTypes[columnIndex]; } boolean[] columnEditables = new boolean[] {true, true, true}; public boolean isCellEditable(int row, int column) { return columnEditables[column]; } }); RowSorter<TableModel> sorter; sorter = new TableRowSorter<TableModel>(table.getModel()); table.setRowSorter(sorter); scrollPane.setViewportView(table); } } { JPanel buttonPane = new JPanel(); getContentPane().add(buttonPane, BorderLayout.SOUTH); { JButton okButton = new JButton(Messages.getString("MappingEpisodeNameDialog.OK")); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { setVisible(false); storeMappingTable(); } }); buttonPane.setLayout(new MigLayout("", "[117px][grow,fill][62px,trailing]", "[][25px,grow,fill]")); { JButton btnUpdateMapping = new JButton(Messages.getString("MappingEpisodeNameDialog.UpdateWithOnlineMapping")); btnUpdateMapping.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { storeMappingTable(); prefCtrl.updateMappingFromOnline(); loadMappingTable(); } catch (Throwable e) { LOGGER.error("btnUpdateMapping", e); } } }); { chkAutoUpdateMapping = new JCheckBox(Messages.getString("MappingEpisodeNameDialog.UpdateMappingOnStart")); buttonPane.add(chkAutoUpdateMapping, "cell 0 0 2 1"); } buttonPane.add(btnUpdateMapping, "cell 0 1,alignx left,aligny top"); } okButton.setActionCommand(Messages.getString("MappingEpisodeNameDialog.OK")); buttonPane.add(okButton, "cell 2 1,alignx right,aligny top"); getRootPane().setDefaultButton(okButton); } } } private void storeMappingTable() { List<MappingTvdbScene> list = new ArrayList<MappingTvdbScene>(); DefaultTableModel model = (DefaultTableModel) table.getModel(); MappingTvdbScene item; for (int i = 0; i < model.getRowCount(); i++) { int tvdbid = 0; if (model.getValueAt(i, 1) != null && ((String) model.getValueAt(i, 1)).length() != 0) { tvdbid = Integer.parseInt((String) model.getValueAt(i, 1)); } String scene = (String) model.getValueAt(i, 0); item = new MappingTvdbScene(scene, tvdbid); list.add(item); } pref.getMappingSettings().setMappingList(list); pref.setAutoUpdateMapping(chkAutoUpdateMapping.isSelected()); } }