{\r
viewport = new AlignViewport(al);\r
\r
+ if(viewport.vconsensus==null)\r
+ {\r
+ //Out of memory caluclating consensus.\r
+ BLOSUM62Colour.setEnabled(false);\r
+ PIDColour.setEnabled(false);\r
+ conservationMenuItem.setEnabled(false);\r
+ modifyConservation.setEnabled(false);\r
+ abovePIDThreshold.setEnabled(false);\r
+ modifyPID.setEnabled(false);\r
+ }\r
+\r
alignPanel = new AlignmentPanel(this, viewport);\r
alignPanel.annotationPanel.adjustPanelHeight();\r
alignPanel.annotationSpaceFillerHolder.setPreferredSize(alignPanel.\r
}\r
});\r
\r
+\r
addServiceListeners();\r
}\r
\r
{\r
if (viewport.getSelectionGroup() == null)\r
{\r
+ System.out.println("null here");\r
return;\r
}\r
\r
SequenceGroup sg = viewport.getSelectionGroup();\r
\r
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
- StringBuffer buffer = new StringBuffer();\r
\r
Hashtable orderedSeqs = new Hashtable();\r
+ SequenceI [] seqs = new SequenceI[sg.getSize()];\r
\r
for (int i = 0; i < sg.getSize(); i++)\r
{\r
index++;\r
}\r
}\r
+\r
+\r
//FIND START RES\r
//Returns residue following index if gap\r
startRes = seq.findPosition(sg.getStartRes());\r
endRes += seq.getStart() - 1;\r
}\r
\r
- buffer.append(seq.getName() + "\t" +\r
- startRes + "\t" +\r
- endRes + "\t" +\r
- seq.getSequence(sg.getStartRes(),\r
- sg.getEndRes() + 1) + "\n");\r
+ seqs[i] = new Sequence(seq.getName(),\r
+ seq.getSequence(sg.getStartRes(), sg.getEndRes()+1),\r
+ startRes,\r
+ endRes);\r
}\r
\r
- c.setContents(new StringSelection(buffer.toString()), null);\r
+ System.out.println("BLOBL"+FastaFile.print(seqs));\r
+\r
+ c.setContents(new StringSelection(FastaFile.print(seqs)), null);\r
}\r
\r
/**\r
}\r
\r
String str = (String) contents.getTransferData(DataFlavor.stringFlavor);\r
- StringTokenizer st = new StringTokenizer(str);\r
- ArrayList seqs = new ArrayList();\r
\r
- while (st.hasMoreElements())\r
- {\r
- String name = st.nextToken();\r
- int start = Integer.parseInt(st.nextToken());\r
- int end = Integer.parseInt(st.nextToken());\r
- Sequence sequence = new Sequence(name, st.nextToken(), start,\r
- end);\r
+ String format = IdentifyFile.Identify(str, "Paste");\r
+ SequenceI[] sequences = FormatAdapter.readFile(str, "Paste", format);\r
\r
- if (!newAlignment)\r
- {\r
- viewport.alignment.addSequence(sequence);\r
- }\r
- else\r
- {\r
- seqs.add(sequence);\r
- }\r
- }\r
\r
if (newAlignment)\r
{\r
- SequenceI[] newSeqs = new SequenceI[seqs.size()];\r
- seqs.toArray(newSeqs);\r
-\r
- AlignFrame af = new AlignFrame(new Alignment(newSeqs));\r
+ AlignFrame af = new AlignFrame(new Alignment(sequences));\r
String newtitle = new String("Copied sequences");\r
\r
if (title.startsWith("Copied sequences"))\r
}\r
else\r
{\r
+ //!newAlignment\r
+ for (int i = 0; i < sequences.length; i++)\r
+ viewport.alignment.addSequence(sequences[i]);\r
+\r
viewport.setEndSeq(viewport.alignment.getHeight());\r
viewport.alignment.getWidth();\r
viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
*/\r
protected void delete_actionPerformed(ActionEvent e)\r
{\r
- boolean seqsdeleted = false;\r
\r
if (viewport.getSelectionGroup() == null)\r
{\r
\r
if (seq.getSequence().length() < 1)\r
{\r
- seqsdeleted = true;\r
viewport.getAlignment().deleteSequence(seq);\r
}\r
else\r
viewport.setSelectionGroup(null);\r
viewport.alignment.deleteGroup(sg);\r
\r
- if (seqsdeleted)\r
- {\r
- viewport.firePropertyChange("alignment", null,\r
+ viewport.firePropertyChange("alignment", null,\r
viewport.getAlignment().getSequences());\r
- }\r
+\r
\r
\r
if (viewport.getAlignment().getHeight() < 1)\r
{\r
seqs = viewport.getSelectionGroup().sequences;\r
start = viewport.getSelectionGroup().getStartRes();\r
- end = viewport.getSelectionGroup().getEndRes();\r
+ end = viewport.getSelectionGroup().getEndRes()+1;\r
}\r
else\r
{\r
current = (SequenceI) seqs.elementAt(i);\r
jSize = current.getLength();\r
\r
+ // Removing a range is much quicker than removing gaps\r
+ // one by one for long sequences\r
int j = start;\r
+ int rangeStart=-1, rangeEnd=-1;\r
\r
do\r
{\r
if (jalview.util.Comparison.isGap(current.getCharAt(j)))\r
{\r
- current.deleteCharAt(j);\r
- j--;\r
- jSize--;\r
+ if(rangeStart==-1)\r
+ {\r
+ rangeStart = j;\r
+ rangeEnd = j+1;\r
+ }\r
+ else\r
+ {\r
+ rangeEnd++;\r
+ }\r
+ j++;\r
+ }\r
+ else\r
+ {\r
+ if(rangeStart>-1)\r
+ {\r
+ current.deleteChars(rangeStart, rangeEnd);\r
+ j-=rangeEnd-rangeStart;\r
+ jSize-=rangeEnd-rangeStart;\r
+ rangeStart = -1;\r
+ rangeEnd = -1;\r
+ }\r
+ else\r
+ j++;\r
}\r
- j++;\r
}\r
while (j < end && j < jSize);\r
+ if(rangeStart>-1)\r
+ {\r
+ current.deleteChars(rangeStart, rangeEnd);\r
+ }\r
}\r
\r
viewport.setStartRes(seq.findIndex(startRes)-1);\r
\r
-\r
viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
}\r
\r
public void alignmentChanged()\r
{\r
- viewport.updateConsensus();\r
- viewport.updateConservation();\r
+ if(viewport.vconsensus!=null)\r
+ {\r
+ viewport.updateConsensus();\r
+ viewport.updateConservation();\r
+ }\r
resetAllColourSchemes();\r
+ if(alignPanel.overviewPanel!=null)\r
+ alignPanel.overviewPanel.updateOverviewImage();\r
+\r
alignPanel.repaint();\r
}\r
\r
return;\r
}\r
\r
- try\r
- {\r
PCAPanel pcaPanel = new PCAPanel(viewport, null);\r
JInternalFrame frame = new JInternalFrame();\r
frame.setContentPane(pcaPanel);\r
Desktop.addInternalFrame(frame, "Principal component analysis",\r
400, 400);\r
- }\r
- catch (java.lang.OutOfMemoryError ex)\r
- {\r
- JOptionPane.showInternalMessageDialog(this,\r
- "Too many sequences selected\nfor Principal Component Analysis!!",\r
- "Out of memory",\r
- JOptionPane.WARNING_MESSAGE);\r
- }\r
}\r
\r
/**\r
}\r
;\r
});\r
- viewport.addPropertyChangeListener(new java.beans.PropertyChangeListener()\r
- {\r
- public void propertyChange(PropertyChangeEvent evt)\r
- {\r
- if (evt.getPropertyName().equals("alignment"))\r
- {\r
- treePanel.getTree().UpdatePlaceHolders( (Vector) evt.getNewValue());\r
- treePanel.repaint();\r
- }\r
- }\r
- });\r
}\r
\r
/**\r