package view; import java.awt.event.ActionListener; import java.awt.event.MouseListener; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; 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 view.structure.ImagePanel; import view.subview.HelpDialogView; import net.miginfocom.swing.MigLayout; import model.exception.TabInitException; import model.table.StructureTableModel; import model.util.Graphics; import com.cf.mls.MLS; import config.Config; public class FolderCreatorTab extends AbstractTab { /** * */ private static final long serialVersionUID = 7593038380759160032L; /** * 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 addFolderB; private JButton showChangesB; private JButton makeStructureB; private JButton targetFolderOpenB; private JCheckBox recursiveChB; private JLabel structureJL; private JLabel regexJL; private JLabel targetJL; private JPanel regexHelpIP; private JPanel structureHelpIP; private JPanel structureP; private JPanel filesP; private JPanel infoP; private JRadioButton filenameRB; private JRadioButton id3tagRB; private JTable tableT; private JComboBox<String> regexCB; private JComboBox<String> structureCB; private JTextField targetFolderTF; /** * Constructor */ public FolderCreatorTab() { mls = new MLS("view/languageFiles/FolderCreatorTab", Config.getInstance().getCurrentLanguage()); mls.setToolTipDuration(-1); this.tableWidth = new int[] { 170, 170 }; } /* * (non-Javadoc) * * @see view.interfaces.AbstractTab#init() */ @Override public void init() throws TabInitException { try { regexHelpIP = new ImagePanel(Graphics.readImageFromJar("view/images/general/helpSmall.png")); mls.addCustomJPanel(regexHelpIP, "regexHelpIP"); structureHelpIP = new ImagePanel(Graphics.readImageFromJar("view/images/general/helpSmall.png")); mls.addCustomJPanel(structureHelpIP, "structureHelpIP"); structureP = mls.generateTitledBevelPanel("structureP", BevelBorder.LOWERED, true); filesP = mls.generateTitledBevelPanel("filesP", BevelBorder.LOWERED, true); infoP = mls.generateTitledBevelPanel("infoP", BevelBorder.LOWERED, true); addFileB = mls.generateJButton("addFileB", true, null); deleteAllB = mls.generateJButton("deleteAllB", true, null); deleteFileB = mls.generateJButton("deleteFileB", true, null); addFolderB = mls.generateJButton("addFolderB", true, null); showChangesB = mls.generateJButton("showChangesB", true, null); makeStructureB = mls.generateJButton("makeStructureB", true, null); targetFolderOpenB = mls.generateJButton("targetFolderOpenB", true, null); recursiveChB = mls.generateJCheckBox("recursiveChB", true, false, null); structureJL = mls.generateJLabel("structureJL", true); regexJL = mls.generateJLabel("regexJL", true); targetJL = mls.generateJLabel("targetJL", true); filenameRB = mls.generateJRadioButton("filenameRB", true, null); id3tagRB = mls.generateJRadioButton("id3tagRB", true, null); tableT = mls.generateJTable("tableT"); regexCB = mls.generateJComboBox("regexCB", new ArrayList<String>(), -1, true, true, null); structureCB = mls.generateJComboBox("structureCB", new ArrayList<String>(), -1, true, true, null); targetFolderTF = mls.generateJTextField("targetFolderTF", true, false, 10, Config.getInstance().getGeneratorTargetFolder()); ButtonGroup bg = new ButtonGroup(); bg.add(filenameRB); bg.add(id3tagRB); filenameRB.setSelected(Config.getInstance().isGeneratorFilenameSelected()); setRegexEnabled(Config.getInstance().isGeneratorFilenameSelected()); id3tagRB.setSelected(!Config.getInstance().isGeneratorFilenameSelected()); recursiveChB.setSelected(Config.getInstance().isGeneratorRecursiveSelected()); JPanel leftPanel = new JPanel(new MigLayout("insets 0", "[grow]", "[shrink][shrink]")); // Structure Panel structureP.setLayout(new MigLayout("insets 5", "[shrink][grow][shrink]", "[shrink][shrink]")); structureP.add(targetJL); structureP.add(targetFolderTF, "grow, gapleft 10"); int l = (int) targetFolderTF.getPreferredSize().getHeight(); structureP.add(targetFolderOpenB, "wrap 10, gapleft 10"); structureP.add(structureJL); structureP.add(structureCB, "grow, gapleft 10, height " + l + "!"); structureP.add(structureHelpIP, "gapleft 10, right, height " + l + "!, width " + l + "!"); leftPanel.add(structureP, "wrap, grow"); // info Panel infoP.setLayout(new MigLayout("insets 5", "[grow]", "[shrink][shrink]")); JPanel rbP = new JPanel(new MigLayout("insets 0", "[grow]", "[shrink][shrink]")); rbP.add(id3tagRB, "wrap"); rbP.add(filenameRB); infoP.add(rbP, "wrap, gapbottom 7, grow"); JPanel regP = new JPanel(new MigLayout("insets 0", "[shrink][grow][shrink]", "[shrink]")); regP.add(regexJL); regP.add(regexCB, "grow, gapleft 10, height " + l + "!"); regP.add(regexHelpIP, "gapleft 10, height " + l + "!, width " + l + "!"); infoP.add(regP, "grow"); leftPanel.add(infoP, "grow"); JPanel rightPanel = new JPanel(new MigLayout("insets 0", "[grow]", "[grow][shrink]")); // Table Panel filesP.setLayout(new MigLayout("insets 5", "[grow]", "[grow]")); JScrollPane scrollpane = new JScrollPane(); filesP.add(scrollpane, "grow, push"); scrollpane.setViewportView(tableT); rightPanel.add(filesP, "grow, wrap"); // buttons panel JPanel btnPanel = new JPanel(new MigLayout("insets 5", "", "[grow]")); btnPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); btnPanel.add(addFileB); btnPanel.add(addFolderB); btnPanel.add(recursiveChB); btnPanel.add(deleteFileB); btnPanel.add(deleteAllB); btnPanel.add(showChangesB, "push, right, gapleft 150"); btnPanel.add(makeStructureB, "right"); rightPanel.add(btnPanel, "grow"); setLayout(new MigLayout("insets 0", "[shrink][grow]", "[grow]")); add(leftPanel, "grow, width :350:"); add(rightPanel, "grow"); } catch (IOException e) { throw new TabInitException("couldn't find an image."); } } /** * sets an ActionListener * * @param l * the ActionListener */ public void setActionListener(ActionListener l) { showChangesB.addActionListener(l); makeStructureB.addActionListener(l); targetFolderOpenB.addActionListener(l); recursiveChB.addActionListener(l); filenameRB.addActionListener(l); id3tagRB.addActionListener(l); addFileB.addActionListener(l); addFolderB.addActionListener(l); deleteFileB.addActionListener(l); deleteAllB.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 the mouse listener * * @param l * the mouse listener */ public void setMouseListener(MouseListener l) { this.regexHelpIP.addMouseListener(l); this.structureHelpIP.addMouseListener(l); } /* * (non-Javadoc) * * @see view.interfaces.AbstractTab#changeLanguage(java.util.Locale) */ @Override public void changeLanguage(Locale lang) { this.mls.setLocale(lang); this.mls.translate(); } /** * shows the message for the given identifier * * @param identifier * the given identifier */ public void showMessage(String identifier) { JOptionPane.showMessageDialog(this, mls.getMessage(identifier)); } public void setrecursiveChB(boolean b0) { recursiveChB.setSelected(b0); } public void settargetTF(String s0) { targetFolderTF.setText(s0); } public boolean getrecursiveChB() { return recursiveChB.isSelected(); } public String getregexTF() { return (String) regexCB.getSelectedItem(); } public String gettargetTF() { return targetFolderTF.getText(); } public String getstructureTF() { return (String) structureCB.getSelectedItem(); } public boolean getFilenameRB() { return this.filenameRB.isSelected(); } public boolean getID3TagRB() { return this.id3tagRB.isSelected(); } public JPanel getStructureHelpP() { return this.structureHelpIP; } public JPanel getRegexHelpP() { return this.regexHelpIP; } /** * opens a help dialog for the regex help */ public void openRegexHelpDialog() { HelpDialogView h = new HelpDialogView(); h.init(this.mls.getMessage("regexHelp")); h.setVisible(true); } /** * opens a help dialog for the structure help */ public void openStructureHelpDialog() { HelpDialogView h = new HelpDialogView(); h.init(this.mls.getMessage("structureHelp")); h.setVisible(true); } /** * sets the regex label and combobox enabled * * @param en * true for enabled, else false */ public void setRegexEnabled(boolean en) { this.regexJL.setEnabled(en); this.regexCB.setEnabled(en); } /** * sets the table model and sets the table width * * @param model * the table model */ public void setTableModel(StructureTableModel model) { model.setCol1Name(mls.getMessage("Col1")); model.setCol2Name(mls.getMessage("Col2")); this.tableT.setModel(model); this.tableT.getColumnModel().getColumn(0).setPreferredWidth(this.tableWidth[0]); this.tableT.getColumnModel().getColumn(1).setPreferredWidth(this.tableWidth[1]); } /** * saves the current column widths */ public void saveTableWidth() { this.tableWidth[0] = this.tableT.getColumnModel().getColumn(0).getWidth(); this.tableWidth[1] = this.tableT.getColumnModel().getColumn(1).getWidth(); } public int[] getSelectedIndices() { return this.tableT.getSelectedRows(); } /** * sets the masks to regex and structure CB * * @param masks * the masks list */ public void setMasks(List<String> masks) { DefaultComboBoxModel<String> model1 = new DefaultComboBoxModel<>(); DefaultComboBoxModel<String> model2 = new DefaultComboBoxModel<>(); for (String m : masks) { model1.addElement(m); model2.addElement(m); } this.regexCB.setModel(model1); this.regexCB.setSelectedItem(Config.getInstance().getGeneratorRegex()); this.structureCB.setModel(model2); this.structureCB.setSelectedItem(Config.getInstance().getGeneratorStructure()); } /** * sets all buttons enabled * * @param en * true for enabled, else false */ public void setButtonsEnabled(boolean en) { this.recursiveChB.setEnabled(en); this.makeStructureB.setEnabled(en); this.showChangesB.setEnabled(en); this.addFileB.setEnabled(en); this.addFolderB.setEnabled(en); this.deleteFileB.setEnabled(en); this.deleteAllB.setEnabled(en); } }