\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
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
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
}\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
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
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
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
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
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
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
\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