Java tutorial
/* * PS3 Media Server, for streaming any medias to your PS3. * Copyright (C) 2012 Ph.Waeber * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; version 2 * of the License only. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.pms.medialibrary.gui.dialogs; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import net.pms.Messages; import net.pms.medialibrary.commons.dataobjects.DOFileImportTemplate; import net.pms.medialibrary.commons.dataobjects.DOManagedFile; import net.pms.medialibrary.gui.shared.FileImportTemplatePanel; import net.pms.medialibrary.storage.MediaLibraryStorage; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; public class ScanFolderDialog extends JDialog { private static final long serialVersionUID = 4321886059086383731L; private final int MIN_BUTTON_WIDTH = 60; private ScanFolderDialog instance; private JTextField tfFolderPath; private JButton bBrowseFolderPath; private JCheckBox cbScanVideo; private JCheckBox cbScanAudio; private JCheckBox cbScanPictures; private JCheckBox cbScanSubFolders; private JCheckBox cbUseFileImportPlugins; private FileImportTemplatePanel pFileImport; private JButton bImport; private JButton bCancel; private JButton bSave; private boolean doImport = false; public ScanFolderDialog() { this(""); } public void setDoImport(boolean doImport) { this.doImport = doImport; } public ScanFolderDialog(String folderPath) { setIconImage(new ImageIcon(FileImportTemplateDialog.class.getResource("/resources/images/icon-32.png")) .getImage()); setTitle(Messages.getString("ML.ScanFolderDialog.Title")); build(folderPath); instance = this; } public boolean isDoImport() { return doImport; } public DOManagedFile getManagedFolder() { DOManagedFile f = new DOManagedFile(); f.setPath(tfFolderPath.getText()); f.setVideoEnabled(cbScanVideo.isSelected()); f.setAudioEnabled(cbScanAudio.isSelected()); f.setPicturesEnabled(cbScanPictures.isSelected()); f.setSubFoldersEnabled(cbScanSubFolders.isSelected()); f.setFileImportTemplate(pFileImport.getDisplayedTemplate()); f.setFileImportEnabled(cbUseFileImportPlugins.isSelected()); f.setWatchEnabled(false); return f; } private void build(String folderPath) { FormLayout layout = new FormLayout("5px, p, 5px, fill:p:grow, 5px, p, 5px, p, 5px", "p, 2px, p, 5px, p, 2px, p"); PanelBuilder builder = new PanelBuilder(layout); builder.setOpaque(true); CellConstraints cc = new CellConstraints(); // line 1 builder.addLabel(Messages.getString("ML.ScanFolderDialog.lFolderPath"), cc.xy(2, 1, CellConstraints.RIGHT, CellConstraints.DEFAULT)); tfFolderPath = new JTextField(folderPath); tfFolderPath.setMinimumSize(new Dimension(300, tfFolderPath.getPreferredSize().height)); builder.add(tfFolderPath, cc.xy(4, 1)); bBrowseFolderPath = new JButton(Messages.getString("ML.ScanFolderDialog.bBrowse")); bBrowseFolderPath.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { JFileChooser fc = new JFileChooser(bBrowseFolderPath.getText()); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { tfFolderPath.setText(fc.getSelectedFile().getAbsolutePath()); } } }); builder.add(bBrowseFolderPath, cc.xy(6, 1)); cbScanSubFolders = new JCheckBox(Messages.getString("ML.ScanFolderDialog.cbScanSubFolders")); cbScanSubFolders.setSelected(true); builder.add(cbScanSubFolders, cc.xy(8, 1)); // line 2 builder.addLabel(Messages.getString("ML.ScanFolderDialog.lLookFor"), cc.xy(2, 3, CellConstraints.RIGHT, CellConstraints.DEFAULT)); JPanel pFileTypes = new JPanel(new FlowLayout()); cbScanVideo = new JCheckBox(Messages.getString("ML.ScanFolderDialog.cbScanVideo"), true); pFileTypes.add(cbScanVideo); cbScanAudio = new JCheckBox(Messages.getString("ML.ScanFolderDialog.cbScanAudio"), true); pFileTypes.add(cbScanAudio); cbScanPictures = new JCheckBox(Messages.getString("ML.ScanFolderDialog.cbScanPictures"), true); pFileTypes.add(cbScanPictures); builder.add(pFileTypes, cc.xy(4, 3, CellConstraints.LEFT, CellConstraints.DEFAULT)); cbUseFileImportPlugins = new JCheckBox(Messages.getString("ML.ScanFolderDialog.cbUsePlugins")); cbUseFileImportPlugins.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (cbUseFileImportPlugins.isSelected()) { pFileImport.setVisible(true); } else { pFileImport.setVisible(false); } pack(); } }); builder.add(cbUseFileImportPlugins, cc.xy(8, 3, CellConstraints.LEFT, CellConstraints.DEFAULT)); // file import pFileImport = new FileImportTemplatePanel(1); pFileImport.setVisible(false); pFileImport.addRepaintListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { pack(); } }); builder.add(pFileImport, cc.xyw(2, 5, 7)); // buttons bImport = new JButton(Messages.getString("ML.ScanFolderDialog.bImport")); if (bImport.getPreferredSize().width < MIN_BUTTON_WIDTH) bImport.setPreferredSize(new Dimension(MIN_BUTTON_WIDTH, bImport.getPreferredSize().height)); bImport.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { save(); File selectedFolder = new File(tfFolderPath.getText()); if (selectedFolder.isDirectory()) { setDoImport(true); instance.setVisible(false); } else { JOptionPane.showMessageDialog(null, Messages.getString("ML.ScanFolderDialog.InvalidPathMsg"), Messages.getString("ML.ScanFolderDialog.InvalidPathTitle"), JOptionPane.INFORMATION_MESSAGE); } } }); bCancel = new JButton(Messages.getString("ML.ScanFolderDialog.bCancel")); if (bCancel.getPreferredSize().width < MIN_BUTTON_WIDTH) bCancel.setPreferredSize(new Dimension(MIN_BUTTON_WIDTH, bCancel.getPreferredSize().height)); bCancel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { setDoImport(false); instance.setVisible(false); } }); bSave = new JButton(Messages.getString("ML.ScanFolderDialog.bSave")); if (bSave.getPreferredSize().width < MIN_BUTTON_WIDTH) bSave.setPreferredSize(new Dimension(MIN_BUTTON_WIDTH, bSave.getPreferredSize().height)); bSave.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { save(); } }); JPanel bPanel = new JPanel(); bPanel.setAlignmentX(CENTER_ALIGNMENT); bPanel.add(bImport); bPanel.add(bSave); bPanel.add(bCancel); builder.add(bPanel, cc.xyw(2, 7, 7)); getContentPane().add(builder.getPanel()); pack(); } private DOFileImportTemplate save() { DOFileImportTemplate template = pFileImport.getDisplayedTemplate(); if (template.getName() == null || template.getName().equals("")) { JOptionPane.showMessageDialog(this, Messages.getString("ML.FileImportConfigurationPanel.Msg.EnterTemplateName")); return null; } // insert or update into db. A new template has the ID=0 if (template.getId() > 0) { MediaLibraryStorage.getInstance().updateFileImportTemplate(template); } else { MediaLibraryStorage.getInstance().insertFileImportTemplate(template); } pFileImport.templateSaved(template); return template; } }