OSDN Git Service

dnd仮実装
[coroid/inqubus.git] / frontend / src / yukihane / inqubuss / gui / MainFrame.java
index f37a8a5..f09598a 100644 (file)
  */
 package yukihane.inqubuss.gui;
 
-import yukihane.inqubuss.model.ListData;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.swing.TransferHandler;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
 import yukihane.inqubuss.model.SourceTypeComboBoxModel;
+import yukihane.inqubuss.model.Target;
 import yukihane.inqubuss.model.TargetsTableModel;
 
 /**
@@ -20,10 +30,13 @@ import yukihane.inqubuss.model.TargetsTableModel;
  */
 public class MainFrame extends javax.swing.JFrame {
 
-    private final TargetsTableModel targets = new TargetsTableModel(new ListData());
+    private final TargetsTableModel targetModel = new TargetsTableModel();
+
     /** Creates new form MainFrame */
     public MainFrame() {
         initComponents();
+        jPanel1.setTransferHandler(new DownloadListTransferHandler());
+        jTable1.setTransferHandler(new TableTransferHandler());
     }
 
     /** This method is called from within the constructor to
@@ -63,7 +76,8 @@ public class MainFrame extends javax.swing.JFrame {
 
         jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
 
-        jTable1.setModel(targets);
+        jTable1.setModel(targetModel);
+        jTable1.setDropMode(javax.swing.DropMode.INSERT_ROWS);
         jScrollPane1.setViewportView(jTable1);
 
         jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
@@ -234,6 +248,19 @@ public class MainFrame extends javax.swing.JFrame {
      * @param args the command line arguments
      */
     public static void main(String args[]) {
+        try {
+            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
+                if ("Nimbus".equals(info.getName())) {
+                    UIManager.setLookAndFeel(info.getClassName());
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            try {
+                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+            } catch (Exception ex) {
+            }
+        }
         java.awt.EventQueue.invokeLater(new Runnable() {
 
             public void run() {
@@ -266,4 +293,61 @@ public class MainFrame extends javax.swing.JFrame {
     private javax.swing.JTextField jTextField2;
     private javax.swing.JTextField jTextField3;
     // End of variables declaration//GEN-END:variables
+
+    private class DownloadListTransferHandler extends TransferHandler {
+
+        private final Pattern pattern = Pattern.compile("(\\w\\w\\d+)");
+
+        @Override
+        public boolean canImport(TransferHandler.TransferSupport support) {
+            
+            // TODO ファイル, URLはインポート可能とする.
+            DataFlavor[] flavors = support.getDataFlavors();
+            System.out.println("fl start");
+            for (DataFlavor f : flavors) {
+                System.out.println(f.getPrimaryType() + ", " + f.getMimeType() + ", " + f.getSubType() + ", " + f.
+                        getHumanPresentableName());
+            }
+            System.out.println("fl end");
+            return true;
+        }
+
+        @Override
+        public boolean importData(TransferHandler.TransferSupport support) {
+            try {
+                Transferable transferable = support.getTransferable();
+                if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+                    List<File> data = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
+                    Collection<Target> targets = Target.from(data);
+                    targetModel.addTarget(targets);
+                } else {
+                    String data = (String) transferable.getTransferData(DataFlavor.stringFlavor);
+                    Matcher matcher = pattern.matcher(data);
+                    if (matcher.find()) {
+                        System.out.println("matched" + matcher.group(1));
+                    } else {
+                        return false;
+                    }
+
+                }
+                return true;
+            } catch (Exception e) {
+                e.printStackTrace();
+                return false;
+            }
+        }
+    }
+
+    private class TableTransferHandler extends DownloadListTransferHandler {
+
+        @Override
+        public boolean canImport(TransferHandler.TransferSupport support) {
+            return super.canImport(support);
+        }
+
+        @Override
+        public boolean importData(TransferHandler.TransferSupport support) {
+            return super.importData(support);
+        }
+    }
 }