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