package view.subview.id3; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.ButtonGroup; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.border.BevelBorder; import model.structure.ConvertElement; import net.miginfocom.swing.MigLayout; import com.cf.mls.MLS; import config.Config; public class FieldReplacerView extends JFrame { /** * */ private static final long serialVersionUID = 1146029435288109999L; /** * the multi language supporter */ private MLS mls; private JPanel contentPane; private JButton deleteB; private JButton startB; private JButton cancelB; private JButton addB; private JCheckBox origArtistChB; private JCheckBox albumArtistChB; private JCheckBox albumChB; private JCheckBox composerChB; private JCheckBox artistChB; private JCheckBox copyrightChB; private JCheckBox yearChB; private JCheckBox cdChB; private JCheckBox commentChB; private JCheckBox urlChB; private JCheckBox trackChB; private JCheckBox titleChB; private JCheckBox selectAllChB; private JCheckBox maxCDChB; private JCheckBox encoderChB; private JCheckBox maxTrackChB; private JCheckBox lyricsChB; private JCheckBox genreChB; private JLabel toJL; private JList<ConvertElement> listL; private JPanel processP; private JPanel fieldsP; private JRadioButton removeSpaceRB; private JRadioButton firstUppercaseRB; private JRadioButton allUppercaseRB; private JRadioButton spaceToUnderscoreRB; private JRadioButton convertRB; private JRadioButton underscoreToSpaceRB; private JRadioButton allLowercaseRB; private JRadioButton replaceAllRB; private JRadioButton replaceSelectedRB; private JTextField convertToTF; private JTextField convertFromTF; /** * Constructor */ public FieldReplacerView() { mls = new MLS("view/languageFiles/FieldReplacerView", Config.getInstance().getCurrentLanguage()); mls.setToolTipDuration(-1); } /** * inits the window */ public void init() { mls.addJFrame("window", this); processP = mls.generateTitledBevelPanel("processP", BevelBorder.LOWERED); fieldsP = mls.generateTitledBevelPanel("fieldsP", BevelBorder.LOWERED); deleteB = mls.generateJButton("deleteB", true, null); startB = mls.generateJButton("startB", true, null); cancelB = mls.generateJButton("cancelB", true, null); addB = mls.generateJButton("addB", true, null); origArtistChB = mls.generateJCheckBox("origArtistChB", true, false, null); albumArtistChB = mls.generateJCheckBox("albumArtistChB", true, false, null); albumChB = mls.generateJCheckBox("albumChB", true, false, null); composerChB = mls.generateJCheckBox("composerChB", true, false, null); artistChB = mls.generateJCheckBox("artistChB", true, false, null); copyrightChB = mls.generateJCheckBox("copyrightChB", true, false, null); yearChB = mls.generateJCheckBox("yearChB", true, false, null); cdChB = mls.generateJCheckBox("cdChB", true, false, null); commentChB = mls.generateJCheckBox("commentChB", true, false, null); urlChB = mls.generateJCheckBox("urlChB", true, false, null); trackChB = mls.generateJCheckBox("trackChB", true, false, null); titleChB = mls.generateJCheckBox("titleChB", true, false, null); selectAllChB = mls.generateJCheckBox("selectAllChB", true, false, null); maxCDChB = mls.generateJCheckBox("maxCDChB", true, false, null); encoderChB = mls.generateJCheckBox("encoderChB", true, false, null); maxTrackChB = mls.generateJCheckBox("maxTrackChB", true, false, null); lyricsChB = mls.generateJCheckBox("lyricsChB", true, false, null); genreChB = mls.generateJCheckBox("genreChB", true, false, null); toJL = mls.generateJLabel("toJL", true); listL = mls.generateJList("listL", new ConvertElement[] {}, -1, true, ListSelectionModel.SINGLE_SELECTION); removeSpaceRB = mls.generateJRadioButton("removeSpaceRB", true, null); firstUppercaseRB = mls.generateJRadioButton("firstUppercaseRB", true, null); allUppercaseRB = mls.generateJRadioButton("allUppercaseRB", true, null); spaceToUnderscoreRB = mls.generateJRadioButton("spaceToUnderscoreRB", true, null); convertRB = mls.generateJRadioButton("convertRB", true, null); underscoreToSpaceRB = mls.generateJRadioButton("underscoreToSpaceRB", true, null); allLowercaseRB = mls.generateJRadioButton("allLowercaseRB", true, null); replaceAllRB = mls.generateJRadioButton("replaceAllRB", true, null); replaceSelectedRB = mls.generateJRadioButton("replaceSelectedRB", true, null); convertToTF = mls.generateJTextField("convertToTF", true, true, 10, ""); convertFromTF = mls.generateJTextField("convertFromTF", true, true, 10, ""); ButtonGroup bg = new ButtonGroup(); bg.add(removeSpaceRB); bg.add(spaceToUnderscoreRB); bg.add(underscoreToSpaceRB); ButtonGroup bg1 = new ButtonGroup(); bg1.add(allUppercaseRB); bg1.add(allLowercaseRB); bg1.add(firstUppercaseRB); ButtonGroup bg2 = new ButtonGroup(); bg2.add(replaceAllRB); bg2.add(replaceSelectedRB); replaceSelectedRB.setSelected(true); contentPane = new JPanel(); fieldsP.setLayout(new MigLayout("insets 5", "[shrink][shrink][shrink]", "[shrink][shrink][shrink][shrink][shrink][shrink][shrink]")); processP.setLayout(new MigLayout("insets 5", "[shrink][shrink][shrink][shrink]", "[shrink][shrink][shrink][shrink][shrink][shrink][shrink][shrink]")); JScrollPane scrollPane = new JScrollPane(); scrollPane.setViewportView(listL); contentPane.setLayout(new MigLayout("insets 4", "[grow]", "[grow]")); setContentPane(contentPane); fieldsP.add(titleChB); fieldsP.add(artistChB); fieldsP.add(albumArtistChB, "wrap"); fieldsP.add(albumChB); fieldsP.add(yearChB); fieldsP.add(trackChB, "wrap"); fieldsP.add(maxTrackChB); fieldsP.add(cdChB); fieldsP.add(maxCDChB, "wrap"); fieldsP.add(genreChB); fieldsP.add(commentChB); fieldsP.add(composerChB, "wrap"); fieldsP.add(origArtistChB); fieldsP.add(copyrightChB); fieldsP.add(urlChB, "wrap"); fieldsP.add(encoderChB); fieldsP.add(lyricsChB, "wrap"); fieldsP.add(selectAllChB, "gaptop 10"); processP.add(spaceToUnderscoreRB, "span 4, wrap"); processP.add(underscoreToSpaceRB, "span 4, wrap"); processP.add(removeSpaceRB, "span 4, wrap"); processP.add(allUppercaseRB, "span 4, wrap"); processP.add(allLowercaseRB, "span 4, wrap"); processP.add(firstUppercaseRB, "span 4, wrap"); processP.add(convertRB); processP.add(convertFromTF, "width :100:, grow"); processP.add(toJL); processP.add(convertToTF, "width :100:, grow, wrap"); JPanel listP = new JPanel(new MigLayout("insets 0", "[shrink][grow]", "[grow]")); JPanel btnP = new JPanel(new MigLayout("insets 0", "[shrink]", "[shrink][shrink]")); btnP.add(addB, "wrap, grow"); btnP.add(deleteB); listP.add(btnP, "grow"); listP.add(scrollPane, " width :230:, grow"); processP.add(listP, "span 4, grow"); JPanel bottomP = new JPanel(new MigLayout("insets 0")); JPanel replaceP = new JPanel(new MigLayout("insets 0")); replaceP.add(replaceSelectedRB, "wrap"); replaceP.add(replaceAllRB); bottomP.add(replaceP, "right, push"); bottomP.add(cancelB, "push, right"); bottomP.add(startB); contentPane.add(fieldsP, "wrap, grow"); contentPane.add(processP, "grow, wrap"); contentPane.add(bottomP, "grow"); pack(); } /** * sets an ActionListener * * @param l * the ActionListener */ public void setActionListener(ActionListener l) { this.startB.addActionListener(l); this.cancelB.addActionListener(l); this.selectAllChB.addActionListener(l); this.addB.addActionListener(l); this.deleteB.addActionListener(l); } /** * sets the checkboxes selectec * * @param en * true if all selected, else false */ public void setCheckBoxes(boolean en) { titleChB.setSelected(en); artistChB.setSelected(en); albumArtistChB.setSelected(en); albumChB.setSelected(en); yearChB.setSelected(en); trackChB.setSelected(en); maxTrackChB.setSelected(en); cdChB.setSelected(en); maxCDChB.setSelected(en); genreChB.setSelected(en); commentChB.setSelected(en); composerChB.setSelected(en); origArtistChB.setSelected(en); copyrightChB.setSelected(en); urlChB.setSelected(en); encoderChB.setSelected(en); lyricsChB.setSelected(en); selectAllChB.setSelected(en); } public boolean isAllSelected() { return this.selectAllChB.isSelected(); } public int getSelectedIndex() { return this.listL.getSelectedIndex(); } /** * adds a convert element to the list */ public void addConvertElement() { if (this.convertFromTF.getText().length() == 0 && this.convertToTF.getText().length() == 0) return; int size = this.listL.getModel().getSize(); DefaultListModel<ConvertElement> model = new DefaultListModel<>(); for (int i = 0; i < size; i++) model.addElement(this.listL.getModel().getElementAt(i)); model.addElement(new ConvertElement(this.convertFromTF.getText(), this.convertToTF.getText())); this.listL.setModel(model); } /** * deletes the convert element with the given index * * @param index * the given index */ public void deleteConvertElement(int index) { int size = this.listL.getModel().getSize(); DefaultListModel<ConvertElement> model = new DefaultListModel<>(); for (int i = 0; i < size; i++) if (i != index) model.addElement(this.listL.getModel().getElementAt(i)); this.listL.setModel(model); } /** * refreshs the list */ public void refreshList() { int size = this.listL.getModel().getSize(); DefaultListModel<ConvertElement> model = new DefaultListModel<>(); ConvertElement ele; for (int i = 0; i < size; i++) { ele = this.listL.getModel().getElementAt(i); ele.setConvert(mls.getMessage("convert")); ele.setTo(mls.getMessage("to")); model.addElement(ele); } this.listL.setModel(model); } /** * gets all checked fields (unchecked will be false) * * @return the checked array */ public boolean[] getCheckedFields() { return new boolean[] { this.titleChB.isSelected(), this.artistChB.isSelected(), this.albumArtistChB.isSelected(), this.albumChB.isSelected(), this.yearChB.isSelected(), this.trackChB.isSelected(), this.maxTrackChB.isSelected(), this.cdChB.isSelected(), this.maxCDChB.isSelected(), this.genreChB.isSelected(), this.commentChB.isSelected(), this.composerChB.isSelected(), this.origArtistChB.isSelected(), this.copyrightChB.isSelected(), this.urlChB.isSelected(), this.encoderChB.isSelected(), this.lyricsChB.isSelected() }; } /** * gets the checked process aray * * @return the process array */ public boolean[] getCheckedProcesses() { return new boolean[] { spaceToUnderscoreRB.isSelected(), underscoreToSpaceRB.isSelected(), removeSpaceRB.isSelected(), allUppercaseRB.isSelected(), allLowercaseRB.isSelected(), firstUppercaseRB.isSelected(), convertRB.isSelected() }; } /** * gets a list with all convert elements * * @return the convert elements */ public List<ConvertElement> getConverts() { List<ConvertElement> result = new ArrayList<ConvertElement>(); int size = this.listL.getModel().getSize(); for (int i = 0; i < size; i++) result.add(this.listL.getModel().getElementAt(i)); return result; } public boolean replaceAllSelected() { return this.replaceAllRB.isSelected(); } }