package forge; import forge.properties.ForgeProps; import forge.properties.NewConstants; import javax.swing.*; import java.awt.Color; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import java.util.List; /** * <p>GUI_ImportPicture class.</p> * * @author Forge * @version $Id: $ */ public class GUI_ImportPicture extends JDialog implements NewConstants { /** Constant <code>serialVersionUID=-4191539152208389089L</code> */ private static final long serialVersionUID = -4191539152208389089L; private JPanel jContentPane = null; private JLabel jLabel = null; private JLabel jLabel1 = null; private JLabel jLabelSource = null; private JButton jButtonSource = null; private JPanel jPanel = null; private JCheckBox jCheckBox = null; private JButton jButtonStart = null; GUI_ImportPicture frame; private JLabel jLabelHDDFree = null; private JLabel jLabelNeedSpace = null; public JLabel jLabelTotalFiles = null; private List<File> listFiles; private ArrayList<File> fileCopyList; private long freeSpaceM; private int filesForCopy; private String oldText; private JProgressBar jProgressBar = null; /** * <p>Constructor for GUI_ImportPicture.</p> * * @param owner a {@link javax.swing.JFrame} object. */ public GUI_ImportPicture(JFrame owner) { super(owner); frame = this; initialize(); } /** * This method initializes this */ private void initialize() { Dimension screen = getToolkit().getScreenSize(); Rectangle bounds = getBounds(); bounds.width = 400; bounds.height = 295; this.setSize(new Dimension(400, 295)); this.setResizable(false); bounds.x = (screen.width - bounds.width) / 2; bounds.y = (screen.height - bounds.height) / 2; setBounds(bounds); this.setModal(true); this.setTitle("Import Picture"); this.setContentPane(getJContentPane()); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jLabelTotalFiles = new JLabel(); jLabelTotalFiles.setBounds(new Rectangle(15, 180, 248, 16)); jLabelTotalFiles.setText("Total files for copying: Unknown."); jLabelNeedSpace = new JLabel(); jLabelNeedSpace.setBounds(new Rectangle(15, 150, 177, 16)); jLabelNeedSpace.setText("HDD Need Space: Unknown."); jLabelHDDFree = new JLabel(); jLabelHDDFree.setBounds(new Rectangle(15, 119, 177, 16)); File file = ForgeProps.getFile(IMAGE_BASE); long freeSpace = file.getFreeSpace(); freeSpaceM = freeSpace / 1024 / 1024; // MiB here is not a typo; it is the unit for megabytes calculated // by powers of 1024 instead of 1000. jLabelHDDFree.setText("HDD Free Space: " + freeSpaceM + " MiB"); jLabelSource = new JLabel(); jLabelSource.setBounds(new Rectangle(63, 45, 267, 17)); jLabelSource.setBorder(BorderFactory.createLineBorder(Color.black, 1)); jLabelSource.setText(""); jLabel1 = new JLabel(); jLabel1.setBounds(new Rectangle(16, 45, 48, 17)); jLabel1.setText("Source:"); jLabel = new JLabel(); jLabel.setBounds(new Rectangle(15, 15, 360, 19)); jLabel.setText("Please select source directory:"); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(jLabel, null); jContentPane.add(jLabel1, null); jContentPane.add(jLabelSource, null); jContentPane.add(getJButtonSource(), null); jContentPane.add(getJPanel(), null); jContentPane.add(getJButtonStart(), null); jContentPane.add(jLabelHDDFree, null); jContentPane.add(jLabelNeedSpace, null); jContentPane.add(jLabelTotalFiles, null); jContentPane.add(getJProgressBar(), null); } return jContentPane; } /** * This method initializes jButtonSource * * @return javax.swing.JButton */ private JButton getJButtonSource() { if (jButtonSource == null) { jButtonSource = new JButton(); jButtonSource.setBounds(new Rectangle(329, 45, 47, 17)); jButtonSource.setText("..."); jButtonSource.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent e) { JFileChooser chooser; String choosertitle; choosertitle = "Select source directory."; chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setDialogTitle(choosertitle); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setAcceptAllFileFilterUsed(false); oldText = jLabelSource.getText(); jLabelSource.setText("Please wait..."); if (chooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) { FileFinder ff = new FileFinder(); try { listFiles = ff.findFiles(chooser.getSelectedFile().toString(), ".+\\.jpg"); } catch (Exception e2) { e2.printStackTrace(); } jLabelSource.setText(chooser.getSelectedFile().toString()); if (jCheckBox.isSelected()) { filesForCopy = ff.getFilesNumber(); jLabelTotalFiles.setText("Total files for copying: " + filesForCopy); jLabelNeedSpace.setText("HDD Need Space: " + ff.getDirectorySize() / 1024 / 1024 + " MB"); jProgressBar.setValue(0); if ((freeSpaceM > (ff.getDirectorySize() / 1024 / 1024)) && (filesForCopy > 0)) { jButtonStart.setEnabled(true); } } else { String fName; int start; long filesToCopySize; filesForCopy = 0; filesToCopySize = 0; fileCopyList = new ArrayList<File>(); for (int i = 0; i < listFiles.size(); i++) { fName = listFiles.get(i).getName(); start = fName.indexOf("full"); fName = fName.substring(0, start - 1) + fName.substring(start + 4, fName.length() - 4); fName = GuiDisplayUtil.cleanString(fName) + ".jpg"; File file = new File(ForgeProps.getFile(IMAGE_BASE), fName); if (!file.exists()) { filesForCopy = filesForCopy + 1; filesToCopySize = filesToCopySize + listFiles.get(i).length(); fileCopyList.add(listFiles.get(i)); } } jLabelTotalFiles.setText("Total files for copying: " + filesForCopy); jLabelNeedSpace.setText("HDD Need Space: " + filesToCopySize / 1024 / 1024 + " MB"); jProgressBar.setValue(0); if ((freeSpaceM > (filesToCopySize / 1024 / 1024)) && (filesForCopy > 0)) { jButtonStart.setEnabled(true); } } } else { if (oldText.equals("")) { jLabelSource.setText(""); } else { jLabelSource.setText(oldText); } } } }); } return jButtonSource; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.insets = new Insets(0, 0, 0, 120); gridBagConstraints.gridy = 0; jPanel = new JPanel(); jPanel.setLayout(new GridBagLayout()); jPanel.setBounds(new Rectangle(15, 74, 362, 31)); jPanel.setBorder(BorderFactory.createLineBorder(Color.black, 1)); jPanel.add(getJCheckBox(), gridBagConstraints); } return jPanel; } /** * This method initializes jCheckBox * * @return javax.swing.JCheckBox */ private JCheckBox getJCheckBox() { if (jCheckBox == null) { jCheckBox = new JCheckBox(); jCheckBox.setSelected(false); jCheckBox.setText("Overwriting picture in resource folder"); jCheckBox.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent e) { jButtonStart.setEnabled(false); if (jLabelSource.getText() != "") { FileFinder ff = new FileFinder(); try { listFiles = ff.findFiles(jLabelSource.getText().toString(), ".+\\.jpg"); } catch (Exception e2) { e2.printStackTrace(); } if (jCheckBox.isSelected()) { filesForCopy = ff.getFilesNumber(); jLabelTotalFiles.setText("Total files for copying: " + filesForCopy); jLabelNeedSpace.setText("HDD Need Space: " + ff.getDirectorySize() / 1024 / 1024 + " MB"); jProgressBar.setValue(0); if ((freeSpaceM > (ff.getDirectorySize() / 1024 / 1024)) && (filesForCopy > 0)) { jButtonStart.setEnabled(true); } } else { String fName; int start; long filesToCopySize; filesForCopy = 0; filesToCopySize = 0; fileCopyList = new ArrayList<File>(); for (int i = 0; i < listFiles.size(); i++) { fName = listFiles.get(i).getName(); start = fName.indexOf("full"); fName = fName.substring(0, start - 1) + fName.substring(start + 4, fName.length() - 4); fName = GuiDisplayUtil.cleanString(fName) + ".jpg"; File file = new File(ForgeProps.getFile(IMAGE_BASE), fName); if (!file.exists()) { filesForCopy = filesForCopy + 1; filesToCopySize = filesToCopySize + listFiles.get(i).length(); fileCopyList.add(listFiles.get(i)); } } jLabelTotalFiles.setText("Total files for copying: " + filesForCopy); jLabelNeedSpace.setText("HDD Need Space: " + filesToCopySize / 1024 / 1024 + " MB"); jProgressBar.setValue(0); if ((freeSpaceM > (filesToCopySize / 1024 / 1024)) && (filesForCopy > 0)) { jButtonStart.setEnabled(true); } } } } }); } return jCheckBox; } /** * This method initializes jButtonStart * * @return javax.swing.JButton */ private JButton getJButtonStart() { if (jButtonStart == null) { jButtonStart = new JButton(); jButtonStart.setEnabled(false); jButtonStart.setBounds(new Rectangle(136, 239, 123, 17)); jButtonStart.setText("Import"); jButtonStart.addMouseListener(new CustomListener()); } return jButtonStart; } /** * This method initializes jProgressBar * * @return javax.swing.JProgressBar */ private JProgressBar getJProgressBar() { if (jProgressBar == null) { jProgressBar = new JProgressBar(); jProgressBar.setBounds(new Rectangle(15, 210, 363, 18)); jProgressBar.setMinimum(0); jProgressBar.setMaximum(100); } return jProgressBar; } public class CustomListener extends MouseAdapter { @Override public void mouseClicked(MouseEvent e) { if (jButtonStart.isEnabled()) { jLabelTotalFiles.setText("Please wait while all files are copying."); if (jCheckBox.isSelected()) { jButtonStart.setEnabled(false); jCheckBox.setEnabled(false); jButtonSource.setEnabled(false); CopyFiles cFiles = new CopyFiles(listFiles, jLabelTotalFiles, jProgressBar, jCheckBox, jButtonSource); cFiles.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if ("progress".equals(evt.getPropertyName())) { jProgressBar.setValue((Integer) evt.getNewValue()); } } }); cFiles.execute(); } else { jButtonStart.setEnabled(false); jCheckBox.setEnabled(false); jButtonSource.setEnabled(false); CopyFiles cFiles = new CopyFiles(fileCopyList, jLabelTotalFiles, jProgressBar, jCheckBox, jButtonSource); cFiles.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if ("progress".equals(evt.getPropertyName())) { jProgressBar.setValue((Integer) evt.getNewValue()); } } }); cFiles.execute(); } } } } } // @jve:decl-index=0:visual-constraint="10,10"