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.RenameTableModel; import model.util.Graphics; import com.cf.mls.MLS; import config.Config; public class RenameToolTab extends AbstractTab { /** * */ private static final long serialVersionUID = 4775366450281001645L; /** * 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 renameFilesB; private JButton showChangesB; private JCheckBox replaceUnderscoreChB; private JCheckBox trimChB; private JCheckBox replaceSpaceChB; private JCheckBox recursiveChB; private JCheckBox replaceChB; private JLabel sourceJL; private JLabel targetJL; private JLabel extensionJL; private JLabel withJL; private JPanel regexP; private JPanel helpIP; private JPanel filesP; private JPanel miscP; private JRadioButton lowerCaseRB; private JRadioButton upperCaseRB; private JRadioButton unchangedRB; private JRadioButton filenameRB; private JRadioButton id3tagRB; private JTable foundT; private JComboBox<String> sourceCB; private JComboBox<String> targetCB; private JTextField replaceWithTF; private JTextField replaceTF; /** * Constructor */ public RenameToolTab() { mls = new MLS("view/languageFiles/RenameToolTab", 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 { regexP = mls.generateTitledBevelPanel("getInfoP", BevelBorder.LOWERED, true); helpIP = new ImagePanel(Graphics.readImageFromJar("view/images/general/help.png")); mls.addCustomJPanel(helpIP, "helpIP"); filesP = mls.generateTitledBevelPanel("filesP", BevelBorder.LOWERED, true); miscP = mls.generateTitledBevelPanel("miscP", BevelBorder.LOWERED, true); renameFilesB = mls.generateJButton("renameFilesB", true, null); 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); replaceUnderscoreChB = mls.generateJCheckBox("replaceUnderscoreChB", true, false, null); trimChB = mls.generateJCheckBox("trimChB", true, false, null); replaceSpaceChB = mls.generateJCheckBox("replaceSpaceChB", true, false, null); recursiveChB = mls.generateJCheckBox("recursiveChB", true, false, null); replaceChB = mls.generateJCheckBox("replaceChB", true, false, null); sourceJL = mls.generateJLabel("sourceJL", true); targetJL = mls.generateJLabel("targetJL", true); extensionJL = mls.generateJLabel("extensionJL", true); withJL = mls.generateJLabel("withJL", true); lowerCaseRB = mls.generateJRadioButton("lowerCaseChB", true, null); upperCaseRB = mls.generateJRadioButton("upperCaseChB", true, null); unchangedRB = mls.generateJRadioButton("unchangedChB", true, null); filenameRB = mls.generateJRadioButton("filenameRB", true, null); id3tagRB = mls.generateJRadioButton("id3tagRB", true, null); foundT = mls.generateJTable("foundT"); foundT.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); sourceCB = mls.generateJComboBox("sourceCB", new ArrayList<String>(), -1, true, true, null); targetCB = mls.generateJComboBox("targetCB", new ArrayList<String>(), -1, true, true, null); replaceWithTF = mls.generateJTextField("replaceWithTF", true, true, 10, Config.getInstance().getRenameReplaceWith()); replaceTF = mls.generateJTextField("replaceTF", true, true, 10, Config.getInstance().getRenameReplace()); ButtonGroup bg = new ButtonGroup(); bg.add(lowerCaseRB); bg.add(upperCaseRB); bg.add(unchangedRB); lowerCaseRB.setSelected(Config.getInstance().isRenameExtensionLowercaseSelected()); upperCaseRB.setSelected(Config.getInstance().isRenameExtensionUppercaseSelected()); unchangedRB.setSelected(!Config.getInstance().isRenameExtensionLowercaseSelected() && !Config.getInstance().isRenameExtensionUppercaseSelected()); ButtonGroup bg2 = new ButtonGroup(); bg2.add(filenameRB); bg2.add(id3tagRB); filenameRB.setSelected(Config.getInstance().isRenameFilenameSelected()); id3tagRB.setSelected(!Config.getInstance().isRenameFilenameSelected()); setSourceRegexEnabled(Config.getInstance().isRenameFilenameSelected()); replaceSpaceChB.setSelected(Config.getInstance().isRenameSpaceWithUnderscoreSelected()); replaceUnderscoreChB.setSelected(Config.getInstance().isRenameUnderscoreWithSpaceSelected()); trimChB.setSelected(Config.getInstance().isRenameTrimFilenameSelected()); recursiveChB.setSelected(Config.getInstance().isRenameRecursiveSelected()); JPanel leftPanel = new JPanel(new MigLayout("insets 0", "[shrink]", "[][]")); // Regex Panel regexP.setLayout(new MigLayout("insets 5", "[shrink][shrink][shrink]", "[shrink][shrink][shrink][shrink]")); regexP.add(id3tagRB, "wrap, span 3"); regexP.add(filenameRB, "wrap 7, span 3"); regexP.add(sourceJL); regexP.add(sourceCB, "grow, push, gapleft 10"); int l = (int) (sourceCB.getPreferredSize().getHeight() + sourceCB.getPreferredSize().getHeight()); regexP.add(helpIP, "span 1 2, gapleft 10, width " + l + "!, height " + l + "!, wrap"); regexP.add(targetJL); regexP.add(targetCB, "grow, push, gapleft 10"); leftPanel.add(regexP, "grow, wrap"); // Misc Panel miscP.setLayout(new MigLayout("insets 5", "[shrink]", "[shrink][shrink][shrink][shrink][shrink]")); JPanel repP = new JPanel(new MigLayout("insets 0")); repP.add(replaceSpaceChB, "wrap"); repP.add(replaceUnderscoreChB); miscP.add(repP, "wrap"); miscP.add(extensionJL, "wrap, gaptop 8"); JPanel extP = new JPanel(new MigLayout("insets 0")); extP.add(lowerCaseRB); extP.add(upperCaseRB); extP.add(unchangedRB); miscP.add(extP, "wrap"); miscP.add(trimChB, "wrap, gaptop 8"); JPanel rep2P = new JPanel(new MigLayout("insets 0", "[shrink][grow][shrink][grow]", "[shrink][shrink]")); rep2P.add(replaceChB); rep2P.add(replaceTF, "grow"); rep2P.add(withJL); rep2P.add(replaceWithTF, "grow"); miscP.add(rep2P, "gaptop 8, grow"); leftPanel.add(miscP, "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(foundT); rightPanel.add(filesP, "grow, wrap"); 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(renameFilesB, "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) { renameFilesB.addActionListener(l); showChangesB.addActionListener(l); addFileB.addActionListener(l); addFolderB.addActionListener(l); deleteFileB.addActionListener(l); deleteAllB.addActionListener(l); id3tagRB.addActionListener(l); filenameRB.addActionListener(l); replaceSpaceChB.addActionListener(l); replaceUnderscoreChB.addActionListener(l); } /** * sets the transfer handler to drop files into the table * * @param handler * the given transfer handler */ public void setTableTransferHandler(TransferHandler handler) { foundT.setFillsViewportHeight(true); foundT.setDragEnabled(true); foundT.setTransferHandler(handler); } /* * (non-Javadoc) * * @see view.interfaces.AbstractTab#changeLanguage(java.util.Locale) */ @Override public void changeLanguage(Locale lang) { this.mls.setLocale(lang); this.mls.translate(); } /** * sets the mouse listener * * @param l * the mouse listener */ public void setMouseListener(MouseListener l) { this.helpIP.addMouseListener(l); } /** * shows a given message * * @param identifier * identifier for the mls */ public void showMessage(String identifier) { JOptionPane.showMessageDialog(this, mls.getMessage(identifier)); } /** * sets the table model and sets the current column widths * * @param model * the table model */ public void setTableModel(RenameTableModel model) { model.setCol1Name(mls.getMessage("Col1")); model.setCol2Name(mls.getMessage("Col2")); this.foundT.setModel(model); this.foundT.getColumnModel().getColumn(0).setPreferredWidth(this.tableWidth[0]); this.foundT.getColumnModel().getColumn(1).setPreferredWidth(this.tableWidth[1]); } /** * saves the current column widths */ public void saveTableWidth() { this.tableWidth[0] = this.foundT.getColumnModel().getColumn(0).getWidth(); this.tableWidth[1] = this.foundT.getColumnModel().getColumn(1).getWidth(); } public void setreplaceUnderscoreChB(boolean b0) { replaceUnderscoreChB.setSelected(b0); } public void settrimChB(boolean b0) { trimChB.setSelected(b0); } public void setreplaceSpaceChB(boolean b0) { replaceSpaceChB.setSelected(b0); } public void setrecursiveChB(boolean b0) { recursiveChB.setSelected(b0); } public boolean getreplaceUnderscoreChB() { return replaceUnderscoreChB.isSelected(); } public boolean gettrimChB() { return trimChB.isSelected(); } public boolean getreplaceSpaceChB() { return replaceSpaceChB.isSelected(); } public boolean getrecursiveChB() { return recursiveChB.isSelected(); } public boolean getUnchangedChB() { return this.unchangedRB.isSelected(); } public boolean getLowerCaseRB() { return this.lowerCaseRB.isSelected(); } public boolean getUpperCaseRB() { return this.upperCaseRB.isSelected(); } public boolean getreplaceChB() { return replaceChB.isSelected(); } public String getsourceTF() { return (String) sourceCB.getSelectedItem(); } public String gettargetTF() { return (String) targetCB.getSelectedItem(); } public String getreplaceWithTF() { return replaceWithTF.getText(); } public String getreplaceTF() { return replaceTF.getText(); } public boolean getID3TagRB() { return this.id3tagRB.isSelected(); } /** * sets the masks to the source and target CB * * @param masks * the given masks */ 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.sourceCB.setModel(model1); this.sourceCB.setSelectedItem(Config.getInstance().getRenameSource()); this.targetCB.setModel(model2); this.targetCB.setSelectedItem(Config.getInstance().getRenameTarget()); } /** * opens the help dialog */ public void openHelpDialog() { HelpDialogView h = new HelpDialogView(); h.init(this.mls.getMessage("help")); h.setVisible(true); } public int[] getSelectedIndices() { return this.foundT.getSelectedRows(); } /** * sets the buttons enabled * * @param en * true for enabled, else false */ public void setButtonsEnabled(boolean en) { this.recursiveChB.setEnabled(en); this.showChangesB.setEnabled(en); this.renameFilesB.setEnabled(en); this.addFileB.setEnabled(en); this.addFolderB.setEnabled(en); this.deleteFileB.setEnabled(en); this.deleteAllB.setEnabled(en); } /** * sets the source regex label and combobox enabled * * @param en * true for enabled, else false */ public void setSourceRegexEnabled(boolean en) { this.sourceJL.setEnabled(en); this.sourceCB.setEnabled(en); } }