package view; import java.awt.event.ActionListener; import java.awt.event.FocusListener; import java.util.Locale; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.TransferHandler; import javax.swing.border.BevelBorder; import view.interfaces.AbstractTab; import model.exception.TabInitException; import model.table.GainTableModel; import net.miginfocom.swing.MigLayout; import com.cf.mls.MLS; import config.Config; public class MP3GainTab extends AbstractTab { /** * */ private static final long serialVersionUID = 6923738221946214668L; /** * the logger */ private final Logger logger = Logger.getLogger(this.getClass().getName()); /** * the multi language supporter */ private MLS mls; /** * current width of each table column */ private int[] tableWidth; /* * components */ private JButton addFileB; private JButton deleteAllB; private JButton deleteFileB; private JButton startTrackGainB; private JButton startAnalyseB; private JButton addFolderB; private JCheckBox forceRecalcChB; private JCheckBox recursiveChB; private JLabel targetVolJL; private JLabel dbJL; private JPanel gainTypeP; private JPanel analyseP; private JPanel changeGainP; private JPanel filesP; private JPanel miscP; private JRadioButton analyseAllRB; private JRadioButton analyseSelectedRB; private JRadioButton changeGainSelectedRB; private JRadioButton changeGainAllB; private JRadioButton albumGainRB; private JRadioButton trackGainRB; private JTable tableT; private JTextField targetVolTF; /** * Constructor */ public MP3GainTab() { mls = new MLS("view/languageFiles/MP3GainTab", Config.getInstance().getCurrentLanguage()); mls.setToolTipDuration(-1); this.tableWidth = new int[] { 100, 100, 50, 50, 50, 50 }; } /* * (non-Javadoc) * * @see view.interfaces.AbstractTab#init() */ @Override public void init() throws TabInitException { gainTypeP = mls.generateTitledBevelPanel("gainTypeP", BevelBorder.LOWERED, true); analyseP = mls.generateTitledBevelPanel("analyseP", BevelBorder.LOWERED, true); changeGainP = mls.generateTitledBevelPanel("changeGainP", BevelBorder.LOWERED, true); filesP = mls.generateTitledBevelPanel("filesP", BevelBorder.LOWERED, true); miscP = mls.generateTitledBevelPanel("miscP", BevelBorder.LOWERED, true); addFileB = mls.generateJButton("addFileB", true, null); deleteAllB = mls.generateJButton("deleteAllB", true, null); deleteFileB = mls.generateJButton("deleteFileB", true, null); startTrackGainB = mls.generateJButton("startTrackGainB", true, null); startAnalyseB = mls.generateJButton("startAnalyseB", true, null); addFolderB = mls.generateJButton("addFolderB", true, null); targetVolJL = mls.generateJLabel("targetVolJL", true); dbJL = mls.generateJLabel("dbJL", true); analyseAllRB = mls.generateJRadioButton("analyseAllRB", true, null); analyseSelectedRB = mls.generateJRadioButton("analyseSelectedRB", true, null); changeGainSelectedRB = mls.generateJRadioButton("changeGainSelectedRB", true, null); changeGainAllB = mls.generateJRadioButton("changeGainAllB", true, null); albumGainRB = mls.generateJRadioButton("albumGainRB", true, null); trackGainRB = mls.generateJRadioButton("trackGainRB", true, null); forceRecalcChB = mls.generateJCheckBox("forceRecalcChB", true, false, null); recursiveChB = mls.generateJCheckBox("recursiveChB", true, false, null); tableT = mls.generateJTable("tableT"); targetVolTF = mls.generateJTextField("targetVolTF", true, true, 10, Config.getInstance().getMP3GainTarget()); ButtonGroup b1 = new ButtonGroup(); b1.add(analyseSelectedRB); b1.add(analyseAllRB); analyseSelectedRB.setSelected(Config.getInstance().isMP3gainAnalyseSelected()); analyseAllRB.setSelected(!Config.getInstance().isMP3gainAnalyseSelected()); ButtonGroup b2 = new ButtonGroup(); b2.add(changeGainSelectedRB); b2.add(changeGainAllB); changeGainSelectedRB.setSelected(Config.getInstance().isMP3gainChangeSelected()); changeGainAllB.setSelected(!Config.getInstance().isMP3gainChangeSelected()); ButtonGroup b3 = new ButtonGroup(); b3.add(trackGainRB); b3.add(albumGainRB); trackGainRB.setSelected(Config.getInstance().isMP3GainTrackType()); albumGainRB.setSelected(!Config.getInstance().isMP3GainTrackType()); forceRecalcChB.setSelected(Config.getInstance().isMP3GainForceSelected()); recursiveChB.setSelected(Config.getInstance().isMP3GainRecursiveSelected()); // first row JPanel firstLineP = new JPanel(new MigLayout("insets 0", "[][][][grow]", "")); // analyse Panel analyseP.setLayout(new MigLayout()); analyseP.add(analyseSelectedRB); analyseP.add(startAnalyseB, "span 1 2, wrap"); analyseP.add(analyseAllRB); // Gain Panel changeGainP.setLayout(new MigLayout()); changeGainP.add(changeGainSelectedRB); changeGainP.add(startTrackGainB, "span 1 2, wrap"); changeGainP.add(changeGainAllB); // gain type Panel gainTypeP.setLayout(new MigLayout()); gainTypeP.add(trackGainRB, "wrap"); gainTypeP.add(albumGainRB); // Target Volume miscP.setLayout(new MigLayout("", "[center]", "[center]")); miscP.add(targetVolJL); miscP.add(targetVolTF, "width :50:"); miscP.add(dbJL, "wrap"); miscP.add(forceRecalcChB); firstLineP.add(analyseP, "height :95:"); firstLineP.add(changeGainP, "height :95:"); firstLineP.add(gainTypeP, "height :95:"); firstLineP.add(miscP, "grow"); // Table Panel filesP.setLayout(new MigLayout("insets 5", "[grow]", "[grow]")); JScrollPane scrollpane = new JScrollPane(); filesP.add(scrollpane, "grow"); scrollpane.setViewportView(tableT); // last add row JPanel addP = new JPanel(new MigLayout("insets 5")); addP.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); addP.add(addFileB); addP.add(addFolderB); addP.add(recursiveChB); addP.add(deleteFileB); addP.add(deleteAllB); setLayout(new MigLayout("insets 0", "[grow]", "[shrink][grow][shrink]")); add(firstLineP, "wrap"); add(filesP, "grow, wrap"); add(addP, "grow"); } /** * sets an ActionListener * * @param l * the ActionListener */ public void setActionListener(ActionListener l) { addFileB.addActionListener(l); deleteAllB.addActionListener(l); deleteFileB.addActionListener(l); startTrackGainB.addActionListener(l); startAnalyseB.addActionListener(l); addFolderB.addActionListener(l); } /** * sets the transfer handler to drop files into the table * * @param handler * the given transfer handler */ public void setTableTransferHandler(TransferHandler handler) { tableT.setFillsViewportHeight(true); tableT.setDragEnabled(true); tableT.setTransferHandler(handler); } /** * sets a FocusListener * * @param l * the FocusListener */ public void setFocusListener(FocusListener l) { targetVolTF.addFocusListener(l); ; } /** * shows a given message * * @param identifier * identifier for the mls */ public void showMessage(String identifier) { JOptionPane.showMessageDialog(this, mls.getMessage(identifier)); } /** * shows a given message * * @param identifier * identifier for the mls * @param replacer * the replacement for {0} */ public void showMessage(String identifier, String replacer) { JOptionPane.showMessageDialog(this, mls.getMessage(identifier).replace("{0}", replacer)); } /** * shows a given message and asks for yes or no * * @param identifier * identifier for the translator * * @return the JOPtionPane.YES or NO answer */ public int showConfirmationMessage(String identifier) { return JOptionPane.showConfirmDialog(this, this.mls.getMessage(identifier)); } /* * (non-Javadoc) * * @see view.interfaces.AbstractTab#changeLanguage(java.util.Locale) */ @Override public void changeLanguage(Locale lang) { this.mls.setLocale(lang); this.mls.translate(); } public void setforceRecalcChB(boolean b0) { forceRecalcChB.setSelected(b0); } public void setrecursiveChB(boolean b0) { recursiveChB.setSelected(b0); } public void settargetVolTF(String s0) { targetVolTF.setText(s0); } public boolean getforceRecalcChB() { return forceRecalcChB.isSelected(); } public boolean getrecursiveChB() { return recursiveChB.isSelected(); } public String gettargetVolTF() { return targetVolTF.getText(); } public int getTargetVolume() throws NumberFormatException { return Integer.parseInt(targetVolTF.getText()); } public boolean isAnalyseSelectAll() { return this.analyseAllRB.isSelected(); } public boolean isChangeGainSelectAll() { return this.changeGainAllB.isSelected(); } public boolean isTrackGainSelected() { return this.trackGainRB.isSelected(); } /** * sets the table model and sets the current column width * * @param model * the table model */ public void setTableModel(GainTableModel model) { for (int i = 1; i <= 6; i++) model.setColName(i, mls.getMessage("Col" + i)); this.tableT.setModel(model); for (int i = 0; i < 6; i++) this.tableT.getColumnModel().getColumn(i).setPreferredWidth(this.tableWidth[i]); } /** * saves the column width */ public void saveTableWidth() { this.tableWidth[0] = this.tableT.getColumnModel().getColumn(0).getWidth(); this.tableWidth[1] = this.tableT.getColumnModel().getColumn(1).getWidth(); this.tableWidth[2] = this.tableT.getColumnModel().getColumn(2).getWidth(); this.tableWidth[3] = this.tableT.getColumnModel().getColumn(3).getWidth(); this.tableWidth[4] = this.tableT.getColumnModel().getColumn(4).getWidth(); this.tableWidth[5] = this.tableT.getColumnModel().getColumn(5).getWidth(); logger.log(Level.FINER, "widths: col1=" + this.tableWidth[0] + " col2=" + this.tableWidth[1] + " col3=" + this.tableWidth[2] + " col4=" + this.tableWidth[3] + " col5=" + this.tableWidth[4] + " col6=" + this.tableWidth[5]); } public int[] getSelectedIndices() { return this.tableT.getSelectedRows(); } /** * sets all buttons enabled * * @param en * true for enabled, else false */ public void setButtonsEnabled(boolean en) { this.targetVolTF.setEnabled(en); this.addFileB.setEnabled(en); this.addFolderB.setEnabled(en); this.deleteFileB.setEnabled(en); this.deleteAllB.setEnabled(en); this.recursiveChB.setEnabled(en); this.startAnalyseB.setEnabled(en); this.startTrackGainB.setEnabled(en); } }