fixes bug 0013013 but reveals lack of a 'features retrieved' flag that should be...
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 496a8bb..03c0db9 100755 (executable)
@@ -140,19 +140,30 @@ public class AlignFrame extends Frame implements ActionListener,
 \r
   public void parseFeaturesFile(String file)\r
   {\r
+    String line = null;\r
     try\r
     {\r
-      URL url = new URL(file);\r
+      BufferedReader in = null;\r
+      java.io.InputStream is = getClass().getResourceAsStream("/" + file);\r
+      if (is != null)\r
+      {\r
+        in = new BufferedReader(new java.io.InputStreamReader(is));\r
+      }\r
+      else\r
+      {\r
+        URL url = new URL(file);\r
+        in = new BufferedReader(new InputStreamReader(url.openStream()));\r
+      }\r
 \r
-      BufferedReader in =  new BufferedReader(new InputStreamReader(url.openStream()));\r
       SequenceI seq = null;\r
-      String line, type, desc, token;\r
+      String type, desc, token;\r
 \r
       int index, start, end;\r
       StringTokenizer st;\r
       SequenceFeature sf;\r
       FeatureRenderer fr = alignPanel.seqPanel.seqCanvas.getFeatureRenderer();\r
       int lineNo = 0;\r
+      String featureGroup = null;\r
       while ( (line = in.readLine()) != null)\r
       {\r
         lineNo++;\r
@@ -160,8 +171,22 @@ public class AlignFrame extends Frame implements ActionListener,
         if (st.countTokens() == 2)\r
         {\r
           type = st.nextToken();\r
-          UserColourScheme ucs = new UserColourScheme(st.nextToken());\r
-          fr.setColour(type, ucs.findColour("A"));\r
+          if(type.equalsIgnoreCase("startgroup"))\r
+          {\r
+            featureGroup = st.nextToken();\r
+          }\r
+          else if(type.equalsIgnoreCase("endgroup"))\r
+          {\r
+            //We should check whether this is the current group,\r
+            //but at present theres no way of showing more than 1 group\r
+            st.nextToken();\r
+            featureGroup = null;\r
+          }\r
+          else\r
+          {\r
+            UserColourScheme ucs = new UserColourScheme(st.nextToken());\r
+            fr.setColour(type, ucs.findColour("A"));\r
+          }\r
           continue;\r
         }\r
 \r
@@ -184,8 +209,6 @@ public class AlignFrame extends Frame implements ActionListener,
           end = Integer.parseInt(st.nextToken());\r
 \r
           seq = viewport.alignment.getSequenceAt(index);\r
-          start = seq.findIndex(start) - 1;\r
-          end = seq.findIndex(end) - 1;\r
 \r
           type = st.nextToken();\r
 \r
@@ -197,19 +220,25 @@ public class AlignFrame extends Frame implements ActionListener,
           }\r
 \r
           sf = new SequenceFeature(type, desc, "", start, end);\r
+          sf.setFeatureGroup(featureGroup);\r
 \r
           seq.addSequenceFeature(sf);\r
         }\r
       }\r
 \r
       viewport.showSequenceFeatures = true;\r
+      viewMenu.addSeparator();\r
+      viewMenu.add(sequenceFeatures);\r
+      viewMenu.add(featureSettings);\r
+\r
 \r
       alignPanel.repaint();\r
 \r
     }\r
     catch (Exception ex)\r
     {\r
-      System.out.println("Error parsing groups file: " + ex);\r
+      ex.printStackTrace();\r
+      System.out.println("Error parsing groups file: " + ex +"\n"+line);\r
     }\r
   }\r
 \r
@@ -289,6 +318,10 @@ public void itemStateChanged(ItemEvent evt)
             renderGapsMenuItem_actionPerformed();\r
     else if(evt.getSource()==annotationPanelMenuItem)\r
             annotationPanelMenuItem_actionPerformed();\r
+      else if(evt.getSource()==sequenceFeatures)\r
+       {     viewport.showSequenceFeatures(sequenceFeatures.getState());\r
+            alignPanel.seqPanel.seqCanvas.repaint();\r
+        }\r
       else if(evt.getSource()==conservationMenuItem)\r
             conservationMenuItem_actionPerformed();\r
       else if(evt.getSource()==abovePIDThreshold)\r
@@ -346,6 +379,8 @@ public void itemStateChanged(ItemEvent evt)
             findMenuItem_actionPerformed();\r
     else if(evt.getSource()==font)\r
             font_actionPerformed();\r
+    else if(evt.getSource()==featureSettings)\r
+            featureSettings_actionPerformed();\r
     else if(evt.getSource()==overviewMenuItem)\r
             overviewMenuItem_actionPerformed();\r
     else if(evt.getSource()==noColourmenuItem)\r
@@ -817,6 +852,7 @@ public void itemStateChanged(ItemEvent evt)
     viewport.setSelectionGroup(null);\r
     viewport.getColumnSelection().clear();\r
     viewport.setSelectionGroup(null);\r
+    alignPanel.idPanel.idCanvas.searchResults = null;\r
     alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);\r
     alignPanel.repaint();\r
     PaintRefresher.Refresh(null, viewport.alignment);\r
@@ -1115,6 +1151,11 @@ public void itemStateChanged(ItemEvent evt)
     alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState());\r
   }\r
 \r
+  public void featureSettings_actionPerformed()\r
+  {\r
+    new FeatureSettings(viewport, alignPanel);\r
+  }\r
+\r
   public void overviewMenuItem_actionPerformed()\r
   {\r
     if (alignPanel.overviewPanel != null)\r
@@ -1903,6 +1944,11 @@ public void itemStateChanged(ItemEvent evt)
           seqLimits.setState(true);\r
     seqLimits.setLabel("Show Sequence Limits");\r
     seqLimits.addItemListener(this);\r
+    featureSettings.setLabel("Feature Settings...");\r
+    featureSettings.addActionListener(this);\r
+    sequenceFeatures.setLabel("Sequence Features");\r
+    sequenceFeatures.addItemListener(this);\r
+    sequenceFeatures.setState(true);\r
 \r
     alignFrameMenuBar.add(fileMenu);\r
         alignFrameMenuBar.add(editMenu);\r
@@ -1935,7 +1981,7 @@ public void itemStateChanged(ItemEvent evt)
         searchMenu.add(findMenuItem);\r
         viewMenu.add(font);\r
         viewMenu.addSeparator();\r
-        viewMenu.add(seqLimits);\r
+    viewMenu.add(seqLimits);\r
         viewMenu.addSeparator();\r
     viewMenu.add(wrapMenuItem);\r
         viewMenu.add(scaleAbove);\r
@@ -1947,7 +1993,7 @@ public void itemStateChanged(ItemEvent evt)
         viewMenu.add(colourTextMenuItem);\r
         viewMenu.add(renderGapsMenuItem);\r
         viewMenu.add(annotationPanelMenuItem);\r
-        viewMenu.addSeparator();\r
+    viewMenu.addSeparator();\r
         viewMenu.add(overviewMenuItem);\r
         colourMenu.add(applyToAllGroups);\r
         colourMenu.addSeparator();\r
@@ -2056,6 +2102,8 @@ public void itemStateChanged(ItemEvent evt)
 \r
   PopupMenu filePopup, editPopup, searchPopup,\r
       viewPopup, colourPopup, calculatePopup, helpPopup;\r
+  MenuItem featureSettings = new MenuItem();\r
+  CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem();\r
 \r
   public void mousePressed(MouseEvent evt)\r
   {\r