OSDN Git Service

ディレクトリdnd, 削除ボタンイベント処理実装
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / DirectoryRegisterPanel.java
1 package yukihane.inqubus.gui;
2
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;
8 import java.io.File;
9 import java.io.IOException;
10 import java.util.List;
11 import java.util.logging.Level;
12 import java.util.logging.Logger;
13 import javax.swing.DefaultListModel;
14 import javax.swing.GroupLayout;
15 import javax.swing.JButton;
16 import javax.swing.JList;
17 import javax.swing.JPanel;
18 import javax.swing.JScrollPane;
19 import javax.swing.LayoutStyle.ComponentPlacement;
20 import javax.swing.TransferHandler;
21
22 /**
23  *
24  * @author yuki
25  */
26 class DirectoryRegisterPanel extends JPanel {
27
28     private static final long serialVersionUID = 1L;
29     private final DefaultListModel<String> mdlSearchVideo = new DefaultListModel<>();
30     private final JList<String> lstSearchVideo = new JList<>(mdlSearchVideo);
31     private final JButton btnSearchVideoAdd = new JButton("追加...");
32     private final JButton btnSearchVideoDel = new JButton("削除");
33
34     DirectoryRegisterPanel() {
35         lstSearchVideo.setTransferHandler(new DirectoryTransferHandler(mdlSearchVideo));
36         btnSearchVideoDel.addActionListener(new DelActionListener());
37
38         final JScrollPane srcSearchVideo = new JScrollPane();
39         srcSearchVideo.setViewportView(lstSearchVideo);
40
41         GroupLayout gl_pnlSearchVideo = new GroupLayout(this);
42         setLayout(gl_pnlSearchVideo);
43         gl_pnlSearchVideo.setHorizontalGroup(
44             gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
45             .addComponent(srcSearchVideo, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
46             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchVideo.createSequentialGroup()
47                 .addContainerGap(269, Short.MAX_VALUE)
48                 .addComponent(btnSearchVideoAdd)
49                 .addGap(18, 18, 18)
50                 .addComponent(btnSearchVideoDel)
51                 .addContainerGap())
52         );
53         gl_pnlSearchVideo.setVerticalGroup(
54             gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
55             .addGroup(gl_pnlSearchVideo.createSequentialGroup()
56                 .addComponent(srcSearchVideo, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
57                 .addPreferredGap(ComponentPlacement.RELATED)
58                 .addGroup(gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
59                     .addComponent(btnSearchVideoDel)
60                     .addComponent(btnSearchVideoAdd))
61                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
62         );
63     }
64
65     private class DelActionListener implements ActionListener {
66
67         @Override
68         public void actionPerformed(ActionEvent e) {
69             final int idx = lstSearchVideo.getSelectedIndex();
70             mdlSearchVideo.removeElementAt(idx);
71         }
72     }
73 }
74
75 class DirectoryTransferHandler extends TransferHandler {
76
77     private static final long serialVersionUID = 1L;
78     private static final Logger logger = Logger.getLogger(DirectoryTransferHandler.class.getName());
79     private final DefaultListModel<String> model;
80
81     DirectoryTransferHandler(DefaultListModel<String> model) {
82         this.model = model;
83     }
84
85     @Override
86     public boolean canImport(TransferHandler.TransferSupport support) {
87         Transferable transferable = support.getTransferable();
88         if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
89             return true;
90         }
91         return false;
92     }
93
94     @Override
95     public boolean importData(TransferHandler.TransferSupport support) {
96         boolean res = false;
97         try {
98             Transferable transferable = support.getTransferable();
99             if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
100                 @SuppressWarnings("unchecked")
101                 final List<File> data = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
102                 for (File f : data) {
103                     if (f.isDirectory()) {
104                         model.addElement(f.getPath());
105                         res = true;
106                     }
107                 }
108             }
109             return res;
110         } catch (UnsupportedFlavorException | IOException e) {
111             logger.log(Level.SEVERE, null, e);
112             return res;
113         }
114     }
115 }