package view.subview; 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.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.border.BevelBorder; import manager.CollectorManager; import net.miginfocom.swing.MigLayout; import com.cf.mls.MLS; import config.Config; public class PreferencesView extends JFrame { /** * */ private static final long serialVersionUID = -3745753667177169713L; /** * the multi language supporter */ private MLS mls; /** * the contentPane */ private JPanel contentPane; private JTabbedPane tabP; private JPanel miscP; private JPanel audioPlayerP; private JPanel id3TagsP; private JPanel collectorsP; private JPanel id3dataCollectorsP; private JPanel confirmMsgP; private JPanel coverCollectorsP; private JPanel lyricsCollectorsP; private JPanel masksP; private JLabel maskJL; private JRadioButton defaultPlayerRB; private JRadioButton customPlayerRB; private JCheckBox maxImageLengthChB; private JCheckBox deleteId3v1TagChB; private JCheckBox setId3v1TagChB; private JCheckBox writeTagsChB; private JCheckBox renameFilesChB; private JCheckBox generateFolderChB; private JCheckBox changeGainChB; private JTextField playerCmdTF; private JTextField maxImageLengthTF; private JTextField maskTF; private JList<String> trackListL; private JList<String> albumListL; private JList<String> lyricsListL; private JList<String> masksL; private JButton openPlayerB; private JButton id3dataUpB; private JButton id3dataDownB; private JButton id3dataEnableB; private JButton coverUpB; private JButton coverDownB; private JButton coverEnableB; private JButton lyricsUpB; private JButton lyricsDownB; private JButton lyricsEnableB; private JButton addMaskB; private JButton deleteMaskB; private JButton cancelB; private JButton okB; /** * Constructor */ public PreferencesView() { mls = new MLS("view/languageFiles/PreferencesView", Config.getInstance().getCurrentLanguage()); mls.setToolTipDuration(-1); } /** * inits the window */ public void init() { contentPane = new JPanel(); tabP = mls.generateJTabbedPane("tabP", true); miscP = mls.generateJPanel("miscP"); audioPlayerP = mls.generateTitledBevelPanel("audioPlayerP", BevelBorder.LOWERED); id3TagsP = mls.generateTitledBevelPanel("id3TagsP" , BevelBorder.LOWERED); confirmMsgP = mls.generateTitledBevelPanel("confirmMsgP" , BevelBorder.LOWERED); collectorsP = mls.generateJPanel("collectorsP"); id3dataCollectorsP = mls.generateTitledBevelPanel("id3dataCollectorsP", BevelBorder.LOWERED); coverCollectorsP = mls.generateTitledBevelPanel("coverCollectorsP", BevelBorder.LOWERED); lyricsCollectorsP = mls.generateTitledBevelPanel("lyricsCollectorsP", BevelBorder.LOWERED); masksP = mls.generateTitledBevelPanel("masksP", BevelBorder.LOWERED); maskJL = mls.generateJLabel("maskJL"); defaultPlayerRB = mls.generateJRadioButton("defaultPlayerRB", true, null); customPlayerRB = mls.generateJRadioButton("customPlayerRB", true, null); maxImageLengthChB = mls.generateJCheckBox("maxImageLengthChB", Config.getInstance().isUseMaxImageLength()); deleteId3v1TagChB = mls.generateJCheckBox("deleteId3v1TagChB", Config.getInstance().isDeleteID3v1Tag()); setId3v1TagChB = mls.generateJCheckBox("setId3v1TagChB", Config.getInstance().isSetID3v1Tag()); writeTagsChB = mls.generateJCheckBox("writeTagsChB", Config.getInstance().isConfirmWriteTags()); changeGainChB = mls.generateJCheckBox("changeGainChB", Config.getInstance().isConfirmChangeGain()); renameFilesChB = mls.generateJCheckBox("renameFilesChB", Config.getInstance().isConfirmRenameFiles()); generateFolderChB = mls.generateJCheckBox("generateFolderChB", Config.getInstance().isConfirmFolderGeneration()); playerCmdTF = mls.generateJTextField("playerCmdTF", true, true, 10, Config.getInstance().getCustomPlayerCmd()); maxImageLengthTF = mls.generateJTextField("maxImageLengthTF", true, true, 10, Integer.toString(Config.getInstance().getMaxImageLength())); maskTF = mls.generateJTextField("maskTF"); trackListL = mls.generateJList("trackListL", new ArrayList<String>(), -1, true, ListSelectionModel.SINGLE_SELECTION); albumListL = mls.generateJList("albumListL", new ArrayList<String>(), -1, true, ListSelectionModel.SINGLE_SELECTION); lyricsListL = mls.generateJList("lyricsListL", new ArrayList<String>(), -1, true, ListSelectionModel.SINGLE_SELECTION); masksL = mls.generateJList("masksL", new ArrayList<String>(), -1, true, ListSelectionModel.SINGLE_SELECTION); openPlayerB = mls.generateJButton("openPlayerB"); id3dataUpB = mls.generateJButton("id3dataUpB"); id3dataDownB = mls.generateJButton("id3dataDownB"); id3dataEnableB = mls.generateJButton("id3dataEnableB"); coverUpB = mls.generateJButton("coverUpB"); coverDownB = mls.generateJButton("coverDownB"); coverEnableB = mls.generateJButton("coverEnableB"); lyricsUpB = mls.generateJButton("lyricsUpB"); lyricsDownB = mls.generateJButton("lyricsDownB"); lyricsEnableB = mls.generateJButton("lyricsEnableB"); addMaskB = mls.generateJButton("addMaskB"); deleteMaskB = mls.generateJButton("deleteMaskB"); cancelB = mls.generateJButton("cancelB"); okB = mls.generateJButton("okB"); // set button groups ButtonGroup bg = new ButtonGroup(); bg.add(defaultPlayerRB); bg.add(customPlayerRB); defaultPlayerRB.setSelected(!Config.getInstance().isUseCustomPlayer()); customPlayerRB.setSelected(Config.getInstance().isUseCustomPlayer()); setContentPane(contentPane); // Misc Panel miscP.setLayout(new MigLayout("insets 5", "[grow]", "[shrink][shrink][grow]")); // // audio panel audioPlayerP.setLayout(new MigLayout("insets 5", "[shrink][grow][shrink]", "[shrink][shrink]")); audioPlayerP.add(defaultPlayerRB, "span 3, wrap"); audioPlayerP.add(customPlayerRB); audioPlayerP.add(playerCmdTF, "grow"); audioPlayerP.add(openPlayerB); // // id3tags panel id3TagsP.setLayout(new MigLayout("insets 5", "[shrink][grow]", "[shrink][shrink][shrink]")); id3TagsP.add(maxImageLengthChB); id3TagsP.add(maxImageLengthTF, "grow, wrap"); id3TagsP.add(deleteId3v1TagChB, "wrap, span 2"); id3TagsP.add(setId3v1TagChB, "span 2"); // // confirmation messages confirmMsgP.setLayout(new MigLayout("insets 5", "[grow]", "[shrink][shrink][shrink][shrink]")); confirmMsgP.add(writeTagsChB, "wrap"); confirmMsgP.add(renameFilesChB, "wrap"); confirmMsgP.add(generateFolderChB, "wrap"); confirmMsgP.add(changeGainChB); miscP.add(audioPlayerP, "wrap, grow"); miscP.add(id3TagsP, "grow, wrap"); miscP.add(confirmMsgP, "grow"); // Collectors collectorsP.setLayout(new MigLayout("insets 0", "[grow]", "[grow][grow][grow]")); // // track collector id3dataCollectorsP.setLayout(new MigLayout("insets 5", "[grow][shrink]", "[grow]")); JScrollPane sp = new JScrollPane(); sp.setViewportView(trackListL); JPanel trackBtnP = new JPanel(new MigLayout("insets 0", "[shrink]", "[shrink][shrink][shrink]")); trackBtnP.add(id3dataUpB, "wrap"); trackBtnP.add(id3dataDownB, "wrap"); trackBtnP.add(id3dataEnableB); id3dataCollectorsP.add(sp, "grow, height :70:"); id3dataCollectorsP.add(trackBtnP, "grow"); // // album collector coverCollectorsP.setLayout(new MigLayout("insets 5", "[grow][shrink]", "[grow]")); JScrollPane sp2 = new JScrollPane(); sp2.setViewportView(albumListL); JPanel albumBtnP = new JPanel(new MigLayout("insets 0", "[shrink]", "[shrink][shrink][shrink]")); albumBtnP.add(coverUpB, "wrap"); albumBtnP.add(coverDownB, "wrap"); albumBtnP.add(coverEnableB); coverCollectorsP.add(sp2, "grow, height :70:"); coverCollectorsP.add(albumBtnP, "grow"); // // lyrics collector lyricsCollectorsP.setLayout(new MigLayout("insets 5", "[grow][shrink]", "[grow]")); JScrollPane sp3 = new JScrollPane(); sp3.setViewportView(lyricsListL); JPanel lyricsBtnP = new JPanel(new MigLayout("insets 0", "[shrink]", "[shrink][shrink][shrink]")); lyricsBtnP.add(lyricsUpB, "wrap"); lyricsBtnP.add(lyricsDownB, "wrap"); lyricsBtnP.add(lyricsEnableB); lyricsCollectorsP.add(sp3, "grow, height :70:"); lyricsCollectorsP.add(lyricsBtnP, "grow"); collectorsP.add(id3dataCollectorsP, "grow, wrap"); collectorsP.add(coverCollectorsP, "grow, wrap"); collectorsP.add(lyricsCollectorsP, "grow"); // Masks // // Masks masksP.setLayout(new MigLayout("insets 5", "[shrink][grow]", "[grow]")); JPanel maskInputP = new JPanel(new MigLayout("insets 0", "[shrink][grow]", "[shrink][shrink][shrink]")); maskInputP.add(maskJL); maskInputP.add(maskTF, "grow, wrap"); maskInputP.add(new JLabel()); maskInputP.add(addMaskB, "wrap, grow"); maskInputP.add(new JLabel()); maskInputP.add(deleteMaskB, "grow"); JScrollPane sp4 = new JScrollPane(); sp4.setViewportView(masksL); masksP.add(maskInputP, "grow"); masksP.add(sp4, "grow"); // ok and cancel btn JPanel btnP = new JPanel(new MigLayout("insets 0", "[shrink][shrink]", "[shrink]")); btnP.add(cancelB, "push, right"); btnP.add(okB, "right"); mls.addTab(tabP, miscP, "miscTab"); mls.addTab(tabP, collectorsP, "collectorsTab"); mls.addTab(tabP, masksP, "masksTab"); contentPane.setLayout(new MigLayout("insets 5", "[grow]", "[grow][shrink]")); contentPane.add(tabP, "grow, wrap"); contentPane.add(btnP, "grow"); pack(); } /** * shows a given message * * @param identifier * identifier for the translator */ public void showMessage(String identifier) { JOptionPane.showMessageDialog(this, mls.getMessage(identifier)); } /** * sets an ActionListener * * @param l * the ActionListener */ public void setActionListener(ActionListener l) { openPlayerB.addActionListener(l); id3dataUpB.addActionListener(l); id3dataDownB.addActionListener(l); id3dataEnableB.addActionListener(l); coverUpB.addActionListener(l); coverDownB.addActionListener(l); coverEnableB.addActionListener(l); lyricsUpB.addActionListener(l); lyricsDownB.addActionListener(l); lyricsEnableB.addActionListener(l); addMaskB.addActionListener(l); deleteMaskB.addActionListener(l); cancelB.addActionListener(l); okB.addActionListener(l); setId3v1TagChB.addActionListener(l); deleteId3v1TagChB.addActionListener(l); } /** * saves the made settings */ public void saveConfig() { Config.getInstance().setUseCustomPlayer(customPlayerRB.isSelected()); Config.getInstance().setCustomPlayerCmd(playerCmdTF.getText()); Config.getInstance().setUseMaxImageLength(maxImageLengthChB.isSelected()); Config.getInstance().setMaxImageLength(maxImageLengthTF.getText()); Config.getInstance().setDeleteID3v1Tag(deleteId3v1TagChB.isSelected()); Config.getInstance().setSetID3v1Tag(setId3v1TagChB.isSelected()); Config.getInstance().setConfirmWriteTags(writeTagsChB.isSelected()); Config.getInstance().setConfirmRenameFiles(renameFilesChB.isSelected()); Config.getInstance().setConfirmFolderGeneration(generateFolderChB.isSelected()); Config.getInstance().setConfirmChangeGain(changeGainChB.isSelected()); } public boolean isDeleteId3v1Tag() { return this.deleteId3v1TagChB.isSelected(); } public void setDeleteId3v1Tag(boolean set) { this.deleteId3v1TagChB.setSelected(set); } public boolean isSetId3v1Tag() { return this.setId3v1TagChB.isSelected(); } public void setSetId3v1Tag(boolean set) { this.setId3v1TagChB.setSelected(set); } public void setPlayerCmd(String cmd) { this.playerCmdTF.setText(cmd); } /** * sets the collectors * * @param collectors * the collectors * @param type * the collector ID */ public void setCollectors(List<String> collectors, int type) { DefaultListModel<String> model = new DefaultListModel<>(); for (String e : collectors) model.addElement(e); if (type == CollectorManager.ID3DATA_COLLECTOR) this.trackListL.setModel(model); else if (type == CollectorManager.COVER_COLLECTOR) this.albumListL.setModel(model); else if (type == CollectorManager.LYRICS_COLLECTOR) this.lyricsListL.setModel(model); } /** * gets the selected collector * * @param type * collector ID * * @return the selected collector Index */ public int getSelectedCollectorIndex(int type) { if (type == CollectorManager.ID3DATA_COLLECTOR) return this.trackListL.getSelectedIndex(); else if (type == CollectorManager.COVER_COLLECTOR) return this.albumListL.getSelectedIndex(); else if (type == CollectorManager.LYRICS_COLLECTOR) return this.lyricsListL.getSelectedIndex(); return -1; } /** * sets the selectec collector * * @param index * the selected index * @param type * the collector ID */ public void setSelectedCollectorIndex(int index, int type) { if (type == CollectorManager.ID3DATA_COLLECTOR) this.trackListL.setSelectedIndex(index); else if (type == CollectorManager.COVER_COLLECTOR) this.albumListL.setSelectedIndex(index); else if (type == CollectorManager.LYRICS_COLLECTOR) this.lyricsListL.setSelectedIndex(index); } /** * sets the masks * * @param masks * the masks */ public void setMasks(List<String> masks) { DefaultListModel<String> model = new DefaultListModel<>(); for (String m : masks) model.addElement(m); this.masksL.setModel(model); } public int getSelectedMaskIndex() { return this.masksL.getSelectedIndex(); } public String getMaskTF() { return this.maskTF.getText(); } public void setMaskTF(String txt) { this.maskTF.setText(txt); } }