OSDN Git Service

remove CurrentDirectoryHolder class
authortama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Wed, 27 Jun 2007 08:58:40 +0000 (08:58 +0000)
committertama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Wed, 27 Jun 2007 08:58:40 +0000 (08:58 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@137 acee48c3-7b26-0410-bdac-b3d0e5314bbc

src/main/java/jp/naist/se/stigmata/ui/swing/CurrentDirectoryHolder.java [deleted file]
src/main/java/jp/naist/se/stigmata/ui/swing/FileIOManager.java
src/main/java/jp/naist/se/stigmata/ui/swing/StigmataFrame.java
src/main/java/jp/naist/se/stigmata/ui/swing/TargetSelectionPane.java

diff --git a/src/main/java/jp/naist/se/stigmata/ui/swing/CurrentDirectoryHolder.java b/src/main/java/jp/naist/se/stigmata/ui/swing/CurrentDirectoryHolder.java
deleted file mode 100644 (file)
index 164f97d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-package jp.naist.se.stigmata.ui.swing;\r
-\r
-/*\r
- * $Id$\r
- */\r
-\r
-import java.io.File;\r
-\r
-/**\r
- * This interface has current directory.\r
- *\r
- * @author Haruaki Tamada\r
- * @version $Revision$ $Date$\r
- */\r
-public interface CurrentDirectoryHolder {\r
-    public File getCurrentDirectory();\r
-\r
-    public void setCurrentDirectory(File file);\r
-}\r
index 6c6c2b8..c2b2f86 100644 (file)
@@ -41,6 +41,28 @@ public class FileIOManager{
         return findFile(open, new String[0], "");\r
     }\r
 \r
+    public File[] openFiles(FileFilter[] filters, boolean multi, boolean directory){\r
+        JFileChooser chooser = new JFileChooser(getCurrentDirectory());\r
+        if(filters != null){\r
+            for(int i = 0; i < filters.length; i++){\r
+                chooser.addChoosableFileFilter(filters[0]);\r
+            }\r
+        }\r
+        chooser.setMultiSelectionEnabled(multi);\r
+        if(directory){\r
+            chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
+        }\r
+        else{\r
+            chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);\r
+        }\r
+        int returnValue = chooser.showOpenDialog(SwingUtilities.getRootPane(parent));\r
+        if(returnValue == JFileChooser.APPROVE_OPTION){\r
+            setCurrentDirectory(chooser.getCurrentDirectory());\r
+            return chooser.getSelectedFiles();\r
+        }\r
+        return new File[0];\r
+    }\r
+\r
     public File findFile(boolean open, String[] exts, String desc){\r
         JFileChooser chooser = new JFileChooser(getCurrentDirectory());\r
         if(exts != null){\r
index 2b37ac6..b882a92 100644 (file)
@@ -33,6 +33,7 @@ import javax.swing.UIManager;
 import javax.swing.WindowConstants;\r
 import javax.swing.event.ChangeEvent;\r
 import javax.swing.event.ChangeListener;\r
+import javax.swing.filechooser.FileFilter;\r
 \r
 import jp.naist.se.stigmata.BirthmarkContext;\r
 import jp.naist.se.stigmata.BirthmarkElementClassNotFoundException;\r
@@ -56,7 +57,7 @@ import jp.naist.se.stigmata.ui.swing.tab.EditableTabbedPane;
  * @author Haruaki TAMADA\r
  * @version $Revision$ $Date$\r
  */\r
-public class StigmataFrame extends JFrame implements CurrentDirectoryHolder{\r
+public class StigmataFrame extends JFrame{\r
     private static final long serialVersionUID = 92345543665342134L;\r
 \r
     private JTabbedPane tabPane;\r
@@ -115,6 +116,10 @@ public class StigmataFrame extends JFrame implements CurrentDirectoryHolder{
         }\r
     }\r
 \r
+    public File[] openFiles(FileFilter[] filters, boolean multipleSelectable, boolean directorySelectable){\r
+        return fileio.openFiles(filters, multipleSelectable, directorySelectable);\r
+    }\r
+\r
     /**\r
      * Find file to open it.\r
      */\r
index 6cfb010..875d354 100644 (file)
@@ -9,6 +9,12 @@ import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;\r
 import java.awt.datatransfer.UnsupportedFlavorException;\r
 import java.awt.dnd.DnDConstants;\r
+import java.awt.dnd.DragGestureEvent;\r
+import java.awt.dnd.DragGestureListener;\r
+import java.awt.dnd.DragSource;\r
+import java.awt.dnd.DragSourceAdapter;\r
+import java.awt.dnd.DragSourceDropEvent;\r
+import java.awt.dnd.DragSourceListener;\r
 import java.awt.dnd.DropTarget;\r
 import java.awt.dnd.DropTargetDragEvent;\r
 import java.awt.dnd.DropTargetDropEvent;\r
@@ -25,12 +31,10 @@ import javax.swing.Box;
 import javax.swing.DefaultListModel;\r
 import javax.swing.JButton;\r
 import javax.swing.JComponent;\r
-import javax.swing.JFileChooser;\r
 import javax.swing.JList;\r
 import javax.swing.JOptionPane;\r
 import javax.swing.JPanel;\r
 import javax.swing.JScrollPane;\r
-import javax.swing.SwingUtilities;\r
 import javax.swing.event.ListSelectionEvent;\r
 import javax.swing.event.ListSelectionListener;\r
 import javax.swing.filechooser.FileFilter;\r
@@ -43,7 +47,7 @@ import javax.swing.filechooser.FileFilter;
 public class TargetSelectionPane extends JPanel{\r
     private static final long serialVersionUID = 3209435745432235432L;\r
 \r
-    private CurrentDirectoryHolder currentDirectoryHolder;\r
+    private StigmataFrame stigmata;\r
 \r
     private FileFilter[] filters;\r
 \r
@@ -65,13 +69,17 @@ public class TargetSelectionPane extends JPanel{
 \r
     private JButton removeButton;\r
 \r
-    public TargetSelectionPane(CurrentDirectoryHolder cdh){\r
-        this.currentDirectoryHolder = cdh;\r
+    public TargetSelectionPane(StigmataFrame stigmata){\r
+        this.stigmata = stigmata;\r
         initComponents();\r
         list.setModel(model);\r
 \r
         DropTarget dropTarget = new TargetSelectionDropTarget();\r
         list.setDropTarget(dropTarget);\r
+        DragSource dragSource = DragSource.getDefaultDragSource();\r
+        dragSource.createDefaultDragGestureRecognizer(\r
+            list, DnDConstants.ACTION_MOVE, new TargetDragGestureListener(list, model)\r
+        );\r
     }\r
 \r
     public void addDataChangeListener(DataChangeListener listener){\r
@@ -254,25 +262,76 @@ public class TargetSelectionPane extends JPanel{
     }\r
 \r
     private void addButtonActionPerformed(ActionEvent evt){\r
-        JFileChooser chooser = new JFileChooser(currentDirectoryHolder.getCurrentDirectory());\r
-        FileFilter[] filters = getFileFilters();\r
+        File[] files = stigmata.openFiles(getFileFilters(), true, true);\r
+        for(File file : files){\r
+            addValue(file.getPath());\r
+        }\r
+    }\r
+\r
+    private class TargetDragGestureListener implements DragGestureListener{\r
+        private JList list;\r
 \r
-        for(FileFilter filter: filters){\r
-            chooser.addChoosableFileFilter(filter);\r
+        public TargetDragGestureListener(JList list, DefaultListModel model){\r
+            this.list = list;\r
         }\r
-        chooser.setMultiSelectionEnabled(isMultipleSelectable());\r
-        if(isDirectorySelectable()){\r
-            chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
+\r
+        public void dragGestureRecognized(DragGestureEvent dge){\r
+            int[] indeces = list.getSelectedIndices();\r
+            if(indeces.length > 0){\r
+                String[] strings = new String[indeces.length];\r
+                for(int i = 0; i < strings.length; i++){\r
+                    strings[i] = (String)model.getElementAt(indeces[i]);\r
+                }\r
+                Transferable transferable = new TargetTransferable(strings);\r
+                DragSourceListener listener = new DataRemoveWhenDragSuccessfulAdapter(model, indeces);\r
+                \r
+                dge.startDrag(DragSource.DefaultMoveDrop, transferable, listener);\r
+            }\r
+        }\r
+    };\r
+\r
+    private class DataRemoveWhenDragSuccessfulAdapter extends DragSourceAdapter{\r
+        private DefaultListModel model;\r
+        private int[] indeces;\r
+\r
+        public DataRemoveWhenDragSuccessfulAdapter(DefaultListModel model, int[] indeces){\r
+            this.model = model;\r
+            this.indeces = indeces;\r
         }\r
-        int returnCode = chooser.showOpenDialog(SwingUtilities.getRootPane(this));\r
-        if(returnCode == JFileChooser.APPROVE_OPTION){\r
-            currentDirectoryHolder.setCurrentDirectory(chooser.getCurrentDirectory());\r
-            File[] files = chooser.getSelectedFiles();\r
-            for(File file : files){\r
-                addValue(file.getPath());\r
+\r
+        @Override\r
+        public void dragDropEnd(DragSourceDropEvent dsde){\r
+            for(int i = indeces.length - 1; i >= 0; i--){\r
+                model.removeElementAt(indeces[i]);\r
             }\r
+            fireEvent();\r
+            super.dragDropEnd(dsde);\r
         }\r
-    }\r
+    };\r
+\r
+    private class TargetTransferable implements Transferable{\r
+        private String[] strings;\r
+\r
+        public TargetTransferable(String[] strings){\r
+            this.strings = strings;\r
+        }\r
+\r
+        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException{\r
+            List<File> list = new ArrayList<File>();\r
+            for(int i = 0; i < strings.length; i++){\r
+                list.add(new File(strings[i]));\r
+            }\r
+            return list;\r
+        }\r
+\r
+        public DataFlavor[] getTransferDataFlavors(){\r
+            return new DataFlavor[] { DataFlavor.javaFileListFlavor, };\r
+        }\r
+\r
+        public boolean isDataFlavorSupported(DataFlavor flavor){\r
+            return flavor.equals(DataFlavor.javaFileListFlavor);\r
+        }\r
+    };\r
 \r
     private class TargetSelectionDropTarget extends DropTarget{\r
         private static final long serialVersionUID = 3204457621345L;\r
@@ -295,34 +354,9 @@ public class TargetSelectionPane extends JPanel{
             try{\r
                 if(trans.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){\r
                     List list = (List)trans.getTransferData(DataFlavor.javaFileListFlavor);\r
-                    filters = getFileFilters();\r
-                    List<String> errorList = new ArrayList<String>();\r
-                    for(int i = 0; i < list.size(); i++){\r
-                        File file = (File)list.get(i);\r
-                        boolean neverAddedFlag = true;\r
-                        for(FileFilter filter: filters){\r
-                            if(filter.accept(file)){\r
-                                addValue(file.getPath());\r
-                                neverAddedFlag = false;\r
-                            }\r
-                        }\r
-                        if(neverAddedFlag){\r
-                            errorList.add(file.getName());\r
-                        }\r
-                    }\r
+                    List<String> errorList = checkAndAddDroppedFile(list);\r
                     if(errorList.size() > 0){\r
-                        StringBuilder builder = new StringBuilder("<html><body>");\r
-                        builder.append(Messages.getString("unsupportedfiletype.dialog.message"));\r
-                        builder.append("<ul>");\r
-                        for(int i = 0; i < errorList.size(); i++){\r
-                            builder.append("<li>").append(errorList.get(i)).append("</li>");\r
-                        }\r
-                        builder.append("</ul></body></html>");\r
-                        JOptionPane.showMessageDialog(\r
-                            TargetSelectionPane.this, new String(builder),\r
-                            Messages.getString("unsupportedfiletype.dialog.title"),\r
-                            JOptionPane.ERROR_MESSAGE\r
-                        );\r
+                        showError(errorList);\r
                     }\r
                 }\r
             }\r
@@ -331,5 +365,40 @@ public class TargetSelectionPane extends JPanel{
             catch(IOException e){\r
             }\r
         }\r
+\r
+        private List<String> checkAndAddDroppedFile(List list){\r
+            List<String> errorList = new ArrayList<String>();\r
+\r
+            FileFilter[] filters = getFileFilters();\r
+            for(int i = 0; i < list.size(); i++){\r
+                File file = (File)list.get(i);\r
+                boolean neverAddedFlag = true;\r
+                for(FileFilter filter: filters){\r
+                    if(filter.accept(file)){\r
+                        addValue(file.getPath());\r
+                        neverAddedFlag = false;\r
+                    }\r
+                }\r
+                if(neverAddedFlag){\r
+                    errorList.add(file.getName());\r
+                }\r
+            }\r
+            return errorList;\r
+        }\r
+\r
+        private void showError(List<String> errorList){\r
+            StringBuilder builder = new StringBuilder("<html><body>");\r
+            builder.append(Messages.getString("unsupportedfiletype.dialog.message"));\r
+            builder.append("<ul>");\r
+            for(int i = 0; i < errorList.size(); i++){\r
+                builder.append("<li>").append(errorList.get(i)).append("</li>");\r
+            }\r
+            builder.append("</ul></body></html>");\r
+            JOptionPane.showMessageDialog(\r
+                TargetSelectionPane.this, new String(builder),\r
+                Messages.getString("unsupportedfiletype.dialog.title"),\r
+                JOptionPane.ERROR_MESSAGE\r
+            );\r
+        }\r
     }\r
 }\r