X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=03c0db9d20c8814eaa106c75ce7c4fb57bc987ef;hb=4944c2f33bb34b4f262fd2f3ae40dcdc2a825557;hp=bd49198c38175d83fe6f964794faa1b42ec40a25;hpb=df1c58f9669c477db082016aa919d6c6cc9da071;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index bd49198..03c0db9 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -140,19 +140,30 @@ public class AlignFrame extends Frame implements ActionListener, public void parseFeaturesFile(String file) { + String line = null; try { - URL url = new URL(file); + BufferedReader in = null; + java.io.InputStream is = getClass().getResourceAsStream("/" + file); + if (is != null) + { + in = new BufferedReader(new java.io.InputStreamReader(is)); + } + else + { + URL url = new URL(file); + in = new BufferedReader(new InputStreamReader(url.openStream())); + } - BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); SequenceI seq = null; - String line, type, desc, token; + String type, desc, token; int index, start, end; StringTokenizer st; SequenceFeature sf; FeatureRenderer fr = alignPanel.seqPanel.seqCanvas.getFeatureRenderer(); int lineNo = 0; + String featureGroup = null; while ( (line = in.readLine()) != null) { lineNo++; @@ -160,8 +171,22 @@ public class AlignFrame extends Frame implements ActionListener, if (st.countTokens() == 2) { type = st.nextToken(); - UserColourScheme ucs = new UserColourScheme(st.nextToken()); - fr.setColour(type, ucs.findColour("A")); + if(type.equalsIgnoreCase("startgroup")) + { + featureGroup = st.nextToken(); + } + else if(type.equalsIgnoreCase("endgroup")) + { + //We should check whether this is the current group, + //but at present theres no way of showing more than 1 group + st.nextToken(); + featureGroup = null; + } + else + { + UserColourScheme ucs = new UserColourScheme(st.nextToken()); + fr.setColour(type, ucs.findColour("A")); + } continue; } @@ -184,8 +209,6 @@ public class AlignFrame extends Frame implements ActionListener, end = Integer.parseInt(st.nextToken()); seq = viewport.alignment.getSequenceAt(index); - start = seq.findIndex(start) - 1; - end = seq.findIndex(end) - 1; type = st.nextToken(); @@ -197,19 +220,25 @@ public class AlignFrame extends Frame implements ActionListener, } sf = new SequenceFeature(type, desc, "", start, end); + sf.setFeatureGroup(featureGroup); seq.addSequenceFeature(sf); } } viewport.showSequenceFeatures = true; + viewMenu.addSeparator(); + viewMenu.add(sequenceFeatures); + viewMenu.add(featureSettings); + alignPanel.repaint(); } catch (Exception ex) { - System.out.println("Error parsing groups file: " + ex); + ex.printStackTrace(); + System.out.println("Error parsing groups file: " + ex +"\n"+line); } } @@ -289,6 +318,10 @@ public void itemStateChanged(ItemEvent evt) renderGapsMenuItem_actionPerformed(); else if(evt.getSource()==annotationPanelMenuItem) annotationPanelMenuItem_actionPerformed(); + else if(evt.getSource()==sequenceFeatures) + { viewport.showSequenceFeatures(sequenceFeatures.getState()); + alignPanel.seqPanel.seqCanvas.repaint(); + } else if(evt.getSource()==conservationMenuItem) conservationMenuItem_actionPerformed(); else if(evt.getSource()==abovePIDThreshold) @@ -346,6 +379,8 @@ public void itemStateChanged(ItemEvent evt) findMenuItem_actionPerformed(); else if(evt.getSource()==font) font_actionPerformed(); + else if(evt.getSource()==featureSettings) + featureSettings_actionPerformed(); else if(evt.getSource()==overviewMenuItem) overviewMenuItem_actionPerformed(); else if(evt.getSource()==noColourmenuItem) @@ -1116,6 +1151,11 @@ public void itemStateChanged(ItemEvent evt) alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState()); } + public void featureSettings_actionPerformed() + { + new FeatureSettings(viewport, alignPanel); + } + public void overviewMenuItem_actionPerformed() { if (alignPanel.overviewPanel != null) @@ -1904,6 +1944,11 @@ public void itemStateChanged(ItemEvent evt) seqLimits.setState(true); seqLimits.setLabel("Show Sequence Limits"); seqLimits.addItemListener(this); + featureSettings.setLabel("Feature Settings..."); + featureSettings.addActionListener(this); + sequenceFeatures.setLabel("Sequence Features"); + sequenceFeatures.addItemListener(this); + sequenceFeatures.setState(true); alignFrameMenuBar.add(fileMenu); alignFrameMenuBar.add(editMenu); @@ -1936,7 +1981,7 @@ public void itemStateChanged(ItemEvent evt) searchMenu.add(findMenuItem); viewMenu.add(font); viewMenu.addSeparator(); - viewMenu.add(seqLimits); + viewMenu.add(seqLimits); viewMenu.addSeparator(); viewMenu.add(wrapMenuItem); viewMenu.add(scaleAbove); @@ -1948,7 +1993,7 @@ public void itemStateChanged(ItemEvent evt) viewMenu.add(colourTextMenuItem); viewMenu.add(renderGapsMenuItem); viewMenu.add(annotationPanelMenuItem); - viewMenu.addSeparator(); + viewMenu.addSeparator(); viewMenu.add(overviewMenuItem); colourMenu.add(applyToAllGroups); colourMenu.addSeparator(); @@ -2057,6 +2102,8 @@ public void itemStateChanged(ItemEvent evt) PopupMenu filePopup, editPopup, searchPopup, viewPopup, colourPopup, calculatePopup, helpPopup; + MenuItem featureSettings = new MenuItem(); + CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem(); public void mousePressed(MouseEvent evt) {