1 package yukihane.inqubus.gui;
3 import java.awt.datatransfer.DataFlavor;
4 import java.awt.datatransfer.Transferable;
5 import java.awt.datatransfer.UnsupportedFlavorException;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
9 import java.io.IOException;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.logging.Level;
13 import java.util.logging.Logger;
14 import javax.swing.DefaultListModel;
15 import javax.swing.GroupLayout;
16 import javax.swing.JButton;
17 import javax.swing.JFileChooser;
18 import javax.swing.JList;
19 import javax.swing.JPanel;
20 import javax.swing.JScrollPane;
21 import javax.swing.LayoutStyle.ComponentPlacement;
22 import javax.swing.TransferHandler;
28 class DirectoryRegisterPanel extends JPanel {
30 private static final long serialVersionUID = 1L;
31 private final DefaultListModel<String> mdlSearchVideo = new DefaultListModel<>();
32 private final JList<String> lstSearchVideo = new JList<>(mdlSearchVideo);
33 private final JButton btnSearchVideoAdd = new JButton("追加...");
34 private final JButton btnSearchVideoDel = new JButton("削除");
36 List<String> getAllElements() {
37 List<String> res = new ArrayList<>(mdlSearchVideo.getSize());
38 for (int i = 0; i < mdlSearchVideo.getSize(); i++) {
39 res.add(mdlSearchVideo.get(i));
44 void init(List<String> dirs) {
45 mdlSearchVideo.clear();
46 for (String s : dirs) {
47 mdlSearchVideo.addElement(s);
51 DirectoryRegisterPanel() {
52 lstSearchVideo.setTransferHandler(new DirectoryTransferHandler(mdlSearchVideo));
53 btnSearchVideoAdd.addActionListener(new AddActionListener());
54 btnSearchVideoDel.addActionListener(new DelActionListener());
56 final JScrollPane srcSearchVideo = new JScrollPane();
57 srcSearchVideo.setViewportView(lstSearchVideo);
59 GroupLayout gl_pnlSearchVideo = new GroupLayout(this);
60 setLayout(gl_pnlSearchVideo);
61 gl_pnlSearchVideo.setHorizontalGroup(
62 gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
63 .addComponent(srcSearchVideo, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
64 .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchVideo.createSequentialGroup()
65 .addContainerGap(269, Short.MAX_VALUE)
66 .addComponent(btnSearchVideoAdd)
68 .addComponent(btnSearchVideoDel)
71 gl_pnlSearchVideo.setVerticalGroup(
72 gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
73 .addGroup(gl_pnlSearchVideo.createSequentialGroup()
74 .addComponent(srcSearchVideo, GroupLayout.PREFERRED_SIZE, 100, Short.MAX_VALUE)
75 .addPreferredGap(ComponentPlacement.RELATED)
76 .addGroup(gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
77 .addComponent(btnSearchVideoDel)
78 .addComponent(btnSearchVideoAdd))
83 private class AddActionListener implements ActionListener {
86 public void actionPerformed(ActionEvent e) {
87 final JFileChooser ch = new JFileChooser();
88 ch.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
89 final int selected = ch.showOpenDialog(DirectoryRegisterPanel.this);
90 if (selected == JFileChooser.APPROVE_OPTION) {
91 final File dir = ch.getSelectedFile();
92 mdlSearchVideo.addElement(dir.getPath());
97 private class DelActionListener implements ActionListener {
100 public void actionPerformed(ActionEvent e) {
101 final int idx = lstSearchVideo.getSelectedIndex();
102 mdlSearchVideo.removeElementAt(idx);
107 class DirectoryTransferHandler extends TransferHandler {
109 private static final long serialVersionUID = 1L;
110 private static final Logger logger = Logger.getLogger(DirectoryTransferHandler.class.getName());
111 private final DefaultListModel<String> model;
113 DirectoryTransferHandler(DefaultListModel<String> model) {
118 public boolean canImport(TransferHandler.TransferSupport support) {
119 Transferable transferable = support.getTransferable();
120 if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
127 public boolean importData(TransferHandler.TransferSupport support) {
130 Transferable transferable = support.getTransferable();
131 if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
132 @SuppressWarnings("unchecked")
133 final List<File> data = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
134 for (File f : data) {
135 if (f.isDirectory()) {
136 model.addElement(f.getPath());
142 } catch (UnsupportedFlavorException | IOException e) {
143 logger.log(Level.SEVERE, null, e);