+\r
+/**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param String DOCUMENT ME!\r
+ */\r
+public boolean parseFeaturesFile(String file, String type)\r
+{\r
+ boolean featuresFile = false;\r
+ try{\r
+ featuresFile = new FeaturesFile(file, type).parse(viewport.alignment.getDataset(),\r
+ alignPanel.seqPanel.seqCanvas.\r
+ getFeatureRenderer().featureColours,\r
+ false);\r
+ }\r
+ catch(Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ if(featuresFile)\r
+ {\r
+ viewport.showSequenceFeatures = true;\r
+ showSeqFeatures.setSelected(true);\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ return featuresFile;\r
+}\r
+\r
+public void dragEnter(DropTargetDragEvent evt)\r
+{}\r
+\r
+public void dragExit(DropTargetEvent evt)\r
+{}\r
+\r
+public void dragOver(DropTargetDragEvent evt)\r
+{}\r
+\r
+public void dropActionChanged(DropTargetDragEvent evt)\r
+{}\r
+\r
+public void drop(DropTargetDropEvent evt)\r
+{\r
+ Transferable t = evt.getTransferable();\r
+ java.util.List files = null;\r
+\r
+ try\r
+ {\r
+ DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String");\r
+ if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))\r
+ {\r
+ //Works on Windows and MacOSX\r
+ evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);\r
+ files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor);\r
+ }\r
+ else if (t.isDataFlavorSupported(uriListFlavor))\r
+ {\r
+ // This is used by Unix drag system\r
+ evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);\r
+ String data = (String) t.getTransferData(uriListFlavor);\r
+ files = new java.util.ArrayList(1);\r
+ for (java.util.StringTokenizer st = new java.util.StringTokenizer(\r
+ data,\r
+ "\r\n");\r
+ st.hasMoreTokens(); )\r
+ {\r
+ String s = st.nextToken();\r
+ if (s.startsWith("#"))\r
+ {\r
+ // the line is a comment (as per the RFC 2483)\r
+ continue;\r
+ }\r
+\r
+ java.net.URI uri = new java.net.URI(s);\r
+ java.io.File file = new java.io.File(uri);\r
+ files.add(file);\r
+ }\r
+ }\r
+ }\r
+ catch (Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+ if (files != null)\r
+ {\r
+ try\r
+ {\r
+\r
+ for (int i = 0; i < files.size(); i++)\r
+ {\r
+ loadJalviewDataFile(files.get(i).toString());\r
+ }\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
+ }\r
+}\r
+\r
+ // This method will attempt to load a "dropped" file first by testing\r
+ // whether its and Annotation file, then features file. If both are\r
+ // false then the user may have dropped an alignment file onto this\r
+ // AlignFrame\r
+ public void loadJalviewDataFile(String file)\r
+ {\r
+ try{\r
+ boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.\r
+ alignment, file);\r
+\r
+ if (!isAnnotation)\r
+ {\r
+ boolean isGroupsFile = parseFeaturesFile(file,\r
+ AppletFormatAdapter.FILE);\r
+ if (!isGroupsFile)\r
+ {\r
+ String format = new IdentifyFile().Identify(file, FormatAdapter.FILE);\r
+ new FileLoader().LoadFile(viewport, file, FormatAdapter.FILE, format);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ // (isAnnotation)\r
+ alignPanel.adjustAnnotationHeight();\r
+ }\r
+\r
+ }catch(Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
+ }\r