{\r
SequenceGroup sg2 = (SequenceGroup) groups.elementAt(j);\r
\r
- if (sg.getSize() > sg2.getSize())\r
+ if (sg.getSize(false) > sg2.getSize(false))\r
{\r
groups.insertElementAt(sg, j);\r
\r
\r
SequenceGroup sg = ap.av.getSelectionGroup();\r
\r
- if (sg != null && sg.getSize()>0)\r
+ if (sg != null && sg.getSize(false)>0)\r
{\r
showText.setState(sg.getDisplayText());\r
showColourText.setState(sg.getColourText());\r
SequenceGroup sg = ap.av.getSelectionGroup();\r
if (sg != null)\r
{\r
- for (int g = 0; g < sg.getSize(); g++)\r
+ for (int g = 0; g < sg.getSize(true); g++)\r
{\r
if (source == toggleCase)\r
- sg.getSequenceAt(g).toggleCase(sg.getStartRes(), sg.getEndRes() + 1);\r
+ ((SequenceI) sg.getSequences(true).elementAt(g))\r
+ .toggleCase(sg.getStartRes(), sg.getEndRes() + 1);\r
else\r
- sg.getSequenceAt(g).changeCase(source == toUpper, sg.getStartRes(),\r
+ ((SequenceI) sg.getSequences(true).elementAt(g))\r
+ .changeCase(source == toUpper, sg.getStartRes(),\r
sg.getEndRes() + 1);\r
}\r
ap.seqPanel.seqCanvas.repaint();\r
protected void clustalColour_actionPerformed()\r
{\r
SequenceGroup sg = getGroup();\r
- sg.cs = new ClustalxColourScheme(sg.sequences, ap.av.alignment.getWidth());\r
+ sg.cs = new ClustalxColourScheme(sg.getSequences(true), ap.av.alignment.getWidth());\r
refresh();\r
}\r
\r
\r
if (abovePIDColour.getState())\r
{\r
- sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0,\r
ap.av.alignment.getWidth()));\r
int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs,\r
getGroup().getName());\r
{\r
SequenceGroup sg = getGroup();\r
sg.cs = new PIDColourScheme();\r
- sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0,\r
ap.av.alignment.getWidth()));\r
refresh();\r
}\r
\r
sg.cs = new Blosum62ColourScheme();\r
\r
- sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0,\r
ap.av.alignment.getWidth()));\r
\r
refresh();\r
\r
Conservation c = new Conservation("Group",\r
ResidueProperties.propHash, 3,\r
- sg.sequences, 0,\r
+ sg.getSequences(true), 0,\r
ap.av.alignment.getWidth());\r
\r
c.calculate();\r
for (int i = 1; i < viewport.alignment.getHeight(); i++)\r
{\r
SequenceI seq = viewport.alignment.getSequenceAt(i);\r
- if (!sg.sequences.contains(seq))\r
+ if (!sg.getSequences(false).contains(seq))\r
{\r
continue;\r
}\r
\r
SequenceI temp = viewport.alignment.getSequenceAt(i - 1);\r
- if (sg.sequences.contains(temp))\r
+ if (sg.getSequences(false).contains(temp))\r
{\r
continue;\r
}\r
for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)\r
{\r
SequenceI seq = viewport.alignment.getSequenceAt(i);\r
- if (!sg.sequences.contains(seq))\r
+ if (!sg.getSequences(true).contains(seq))\r
{\r
continue;\r
}\r
\r
SequenceI temp = viewport.alignment.getSequenceAt(i + 1);\r
- if (sg.sequences.contains(temp))\r
+ if (sg.getSequences(true).contains(temp))\r
{\r
continue;\r
}\r
SequenceGroup sg = viewport.getSelectionGroup();\r
copiedSequences = new StringBuffer();\r
Hashtable orderedSeqs = new Hashtable();\r
- for (int i = 0; i < sg.getSize(); i++)\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
SequenceI seq = sg.getSequenceAt(i);\r
int index = viewport.alignment.findIndex(seq);\r
int index = 0, startRes, endRes;\r
char ch;\r
\r
- for (int i = 0; i < sg.getSize(); i++)\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
SequenceI seq = null;\r
\r
\r
SequenceGroup sg = viewport.getSelectionGroup();\r
boolean allSequences = false;\r
- if(sg.sequences.size()==viewport.alignment.getHeight())\r
+ if(sg.getSize(false)==viewport.alignment.getHeight())\r
allSequences = true;\r
\r
- for (int i = 0; i < sg.sequences.size(); i++)\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
SequenceI seq = sg.getSequenceAt(i);\r
int index = viewport.getAlignment().findIndex(seq);\r
int start=0, end = viewport.alignment.getWidth();\r
\r
if (viewport.getSelectionGroup() != null\r
- && viewport.getSelectionGroup().sequences != null\r
- && viewport.getSelectionGroup().sequences.size()>0)\r
+ && viewport.getSelectionGroup().getSequences(false) != null\r
+ && viewport.getSelectionGroup().getSize(false)>0)\r
{\r
- seqs = viewport.getSelectionGroup().sequences;\r
+ seqs = viewport.getSelectionGroup().getSequences(true);\r
start = viewport.getSelectionGroup().getStartRes();\r
end = viewport.getSelectionGroup().getEndRes()+1;\r
}\r
SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);\r
if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)\r
{\r
- ((ClustalxColourScheme)sg.cs).resetClustalX(sg.sequences, sg.getWidth());\r
+ ((ClustalxColourScheme)sg.cs).resetClustalX(\r
+ sg.getSequences(true), sg.getWidth());\r
}\r
sg.recalcConservation();\r
}\r
}\r
if (cs instanceof ClustalxColourScheme)\r
{\r
- sg.cs = new ClustalxColourScheme(sg.sequences, sg.getWidth());\r
+ sg.cs = new ClustalxColourScheme(sg.getSequences(true), sg.getWidth());\r
}\r
else\r
{\r
|| cs instanceof Blosum62ColourScheme)\r
{\r
sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus());\r
- sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, sg.getWidth()));\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, sg.getWidth()));\r
}\r
else\r
sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());\r
{\r
Conservation c = new Conservation("Group",\r
ResidueProperties.propHash, 3,\r
- sg.sequences, 0,\r
+ sg.getSequences(true), 0,\r
viewport.alignment.getWidth() - 1);\r
c.calculate();\r
c.verdict(false, viewport.ConsPercGaps);\r
\r
public void pairwiseAlignmentMenuItem_actionPerformed()\r
{\r
- if (viewport.getSelectionGroup().getSize() > 1)\r
+ if (viewport.getSelectionGroup().getSize(false) > 1)\r
{\r
Frame frame = new Frame();\r
frame.add(new PairwiseAlignPanel(alignPanel));\r
}\r
\r
if ( (viewport.getSelectionGroup() != null &&\r
- viewport.getSelectionGroup().getSize() < 4 &&\r
- viewport.getSelectionGroup().getSize() > 0)\r
+ viewport.getSelectionGroup().getSize(false) < 4 &&\r
+ viewport.getSelectionGroup().getSize(false) > 0)\r
|| viewport.getAlignment().getHeight() < 4)\r
{\r
return;\r
\r
final TreePanel tp;\r
if (viewport.getSelectionGroup() != null &&\r
- viewport.getSelectionGroup().getSize() > 3)\r
+ viewport.getSelectionGroup().getSize(false) > 3)\r
{\r
- tp = new TreePanel(viewport, viewport.getSelectionGroup().sequences, type,\r
+ tp = new TreePanel(viewport,\r
+ viewport.getSelectionGroup().getSequences(false),\r
+ type,\r
pwType,\r
0, viewport.alignment.getWidth());\r
}\r
{\r
void setTransparency(Graphics g, float value)\r
{\r
- Graphics2D g2 = (Graphics2D) g;\r
- g2.setComposite(\r
- AlphaComposite.getInstance(\r
- AlphaComposite.SRC_OVER, value));\r
+ // Graphics2D g2 = (Graphics2D) g;\r
+ // g2.setComposite(\r
+ // AlphaComposite.getInstance(\r
+ // AlphaComposite.SRC_OVER, value));\r
}\r
}\r
\r
int res = Integer.parseInt(searchString);\r
found = true;\r
\r
- if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize() < 1)\r
+ if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize(false) < 1)\r
{\r
seq = (Sequence) av.getAlignment().getSequenceAt(0);\r
}\r
SequenceGroup selection = av.getSelectionGroup();\r
if (selection != null)\r
{\r
- if (selection.getSize() < 1 ||\r
+ if (selection.getSize(false) < 1 ||\r
(selection.getEndRes() - selection.getStartRes() < 2))\r
{\r
selection = null;\r
\r
seq = (Sequence) av.alignment.getSequenceAt(seqIndex);\r
\r
- if (selection != null && !selection.sequences.contains(seq))\r
+ if (selection != null && !selection.getSequences(false).contains(seq))\r
{\r
seqIndex++;\r
resIndex = 0;\r
gg.setColor(Color.white);\r
}\r
else if (av.getSelectionGroup() != null &&\r
- av.getSelectionGroup().sequences.contains(s))\r
+ av.getSelectionGroup().getSequences(false).contains(s))\r
{\r
gg.setColor(Color.lightGray);\r
gg.fillRect(0, ((i - starty) * charHeight) + ypos,\r
}\r
else if (av.getSelectionGroup() != null\r
&&\r
- av.getSelectionGroup().sequences.contains(av.alignment.\r
+ av.getSelectionGroup().getSequences(false).contains(av.alignment.\r
getSequenceAt(i)))\r
{\r
currentColor = Color.lightGray;\r
}\r
\r
this.av = av;\r
- if (av.getSelectionGroup()!=null && av.getSelectionGroup().getSize() > 3)\r
+ if (av.getSelectionGroup()!=null && av.getSelectionGroup().getSize(false) > 3)\r
{\r
- seqs = new Sequence[av.getSelectionGroup().getSize()];\r
- for (int i = 0; i < av.getSelectionGroup().getSize(); i++)\r
+ seqs = new Sequence[av.getSelectionGroup().getSize(false)];\r
+ for (int i = 0; i < av.getSelectionGroup().getSize(false); i++)\r
{\r
seqs[i] = av.getSelectionGroup().getSequenceAt(i);\r
}\r
float scores[][] = new float[ap.av.alignment.getHeight()][ap.av.alignment.\r
getHeight()];\r
double totscore = 0;\r
- int count = ap.av.getSelectionGroup().getSize();\r
+ int count = ap.av.getSelectionGroup().getSize(false);\r
\r
int acount = 0;\r
Sequence seq;\r
originalSequences = new Vector();\r
originalColours = new Hashtable();\r
\r
- if ( (sg != null) && (sg.getSize() >= 1))\r
+ if ( (sg != null) && (sg.getSize(false) >= 1))\r
{\r
- height = sg.getSize();\r
- for (int i = 0; i < sg.getSize(); i++)\r
+ height = sg.getSize(false);\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
sel.addElement(sg.getSequenceAt(i));\r
}\r
\r
if (av.getSelectionGroup() != null)\r
{\r
- if (av.getSelectionGroup().sequences.contains( ( (SequencePoint) points.\r
+ if (av.getSelectionGroup().getSequences(false).contains( ( (SequencePoint) points.\r
elementAt(i)).sequence))\r
{\r
g.setColor(Color.gray);\r
{\r
if (av != null)\r
{\r
- if (!av.getSelectionGroup().sequences.contains(sp.sequence))\r
+ if (!av.getSelectionGroup().getSequences(false).contains(sp.sequence))\r
{\r
av.getSelectionGroup().addSequence(sp.sequence, true);\r
}\r
}\r
\r
if ( (sx <= (endRes-startRes)*av.charWidth) &&\r
- group.sequences.contains(av.alignment.getSequenceAt(\r
+ group.getSequences(false).contains(av.alignment.getSequenceAt(\r
i)))\r
{\r
if ( (bottom == -1) &&\r
(i >= alHeight ||\r
- !group.sequences.contains(\r
+ !group.getSequences(false).contains(\r
av.alignment.getSequenceAt(i + 1))))\r
{\r
bottom = sy + av.charHeight;\r
if (!inGroup)\r
{\r
if (((top == -1) && (i == 0)) ||\r
- !group.sequences.contains(\r
+ !group.getSequences(false).contains(\r
av.alignment.getSequenceAt(i - 1)))\r
{\r
top = sy;\r
SequenceGroup sg = av.selectionGroup;\r
//Find the top and bottom of this group\r
int min = av.alignment.getHeight(), max = 0;\r
- for(int i=0; i<sg.getSize(); i++)\r
+ for(int i=0; i<sg.getSize(false); i++)\r
{\r
int index = av.alignment.findIndex( sg.getSequenceAt(i) );\r
if(index > max)\r
else\r
{\r
// Now add any sequences between min and max\r
- sg.sequences.removeAllElements();\r
+ sg.getSequences(false).removeAllElements();\r
for (int i = min; i < max; i++)\r
{\r
sg.addSequence(av.alignment.getSequenceAt(i), false);\r
\r
//Are we editing within a selection group?\r
if (groupEditing\r
- || (sg != null && sg.sequences.contains(seq)))\r
+ || (sg != null && sg.getSequences(false).contains(seq)))\r
{\r
fixedColumns = true;\r
\r
fixedRight--)\r
{\r
blank = true;\r
- for (int s = 0; s < sg.getSize(); s++)\r
+ for (int s = 0; s < sg.getSize(false); s++)\r
{\r
seq = sg.getSequenceAt(s);\r
for (int j = 0; j < startres - lastres; j++)\r
\r
if (!blank)\r
{\r
- if(sg.getSize() == av.alignment.getHeight())\r
+ if(sg.getSize(false) == av.alignment.getHeight())\r
{\r
//We can still insert gaps if the selectionGroup\r
//contains all the sequences\r
/// Are we able to delete?\r
// ie are all columns blank?\r
\r
- for (int s = 0; s < sg.getSize(); s++)\r
+ for (int s = 0; s < sg.getSize(false); s++)\r
{\r
seq = sg.getSequenceAt(s);\r
\r
}\r
\r
\r
- for (int i = 0; i < sg.getSize(); i++)\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
seq = sg.getSequenceAt(i);\r
\r
}\r
}\r
\r
- else if (!stretchGroup.sequences.contains(sequence)\r
+ else if (!stretchGroup.getSequences(false).contains(sequence)\r
|| stretchGroup.getStartRes() > res\r
|| stretchGroup.getEndRes() < res)\r
{\r
{\r
if (stretchGroup.cs instanceof ClustalxColourScheme)\r
{\r
- ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup.\r
- sequences,\r
+ ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(\r
+ stretchGroup.getSequences(true),\r
stretchGroup.getWidth());\r
}\r
\r
\r
Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);\r
\r
- if (stretchGroup.sequences.contains(nextSeq))\r
+ if (stretchGroup.getSequences(false).contains(nextSeq))\r
{\r
stretchGroup.deleteSequence(seq, false);\r
}\r
// Colour selected leaves differently\r
SequenceGroup selected = av.getSelectionGroup();\r
if (selected != null &&\r
- selected.sequences.contains( (SequenceI) node.element()))\r
+ selected.getSequences(false).contains( (SequenceI) node.element()))\r
{\r
g.setColor(Color.gray);\r
\r
{\r
Conservation c = new Conservation("Group",\r
ResidueProperties.propHash, 3,\r
- sg.sequences, sg.getStartRes(),\r
+ sg.getSequences(false),\r
+ sg.getStartRes(),\r
sg.getEndRes());\r
\r
c.calculate();\r
\r
\r
/** */\r
- public SequenceGroup findGroup(int i)\r
- {\r
- return findGroup(getSequenceAt(i));\r
- }\r
-\r
- /** */\r
public SequenceGroup findGroup(SequenceI s)\r
{\r
for (int i = 0; i < this.groups.size(); i++)\r
{\r
SequenceGroup sg = (SequenceGroup) groups.elementAt(i);\r
\r
- if (sg.sequences.contains(s))\r
+ if (sg.getSequences(false).contains(s))\r
{\r
return sg;\r
}\r
for (int i = 0; i < gSize; i++)\r
{\r
SequenceGroup sg = (SequenceGroup) groups.elementAt(i);\r
- if(sg==null || sg.sequences==null)\r
+ if(sg==null || sg.getSequences(false)==null)\r
{\r
this.deleteGroup(sg);\r
gSize--;\r
continue;\r
}\r
\r
- if (sg.sequences.contains(s))\r
+ if (sg.getSequences(false).contains(s))\r
{\r
temp.addElement(sg);\r
}\r
public void removeGaps();\r
\r
\r
- /**\r
- * Finds group that sequence at index i in alignment is part of.\r
- *\r
- * @param i Index in alignment.\r
- *\r
- * @return First group found for sequence at position i. WARNING :\r
- * Sequences may be members of several groups. This method is incomplete.\r
- */\r
- public SequenceGroup findGroup(int i);\r
\r
/**\r
* Finds group that given sequence is part of.\r
alignment.deleteSequence(sequence);\r
}\r
\r
+ public void showAll()\r
+ {\r
+ for(int i=0; i<alignment.getHeight()+hiddenSequences.size(); i++)\r
+ showSequence(i);\r
+ }\r
+\r
public void showSequence(int alignmentIndex)\r
{\r
SequenceI repSequence = alignment.getSequenceAt(alignmentIndex);\r
- if(repSequence.getHiddenSequences()==null && alignmentIndex>0)\r
+ if(repSequence!=null\r
+ && repSequence.getHiddenSequences()==null\r
+ && alignmentIndex>0)\r
repSequence = alignment.getSequenceAt(alignmentIndex-1);\r
- if(repSequence.getHiddenSequences()==null)\r
+\r
+ if(repSequence!=null\r
+ && repSequence.getHiddenSequences()==null)\r
repSequence = null;\r
\r
int start = adjustForHiddenSeqs(alignmentIndex-1);\r
public void showHiddenSequence(SequenceI seq)\r
{\r
hiddenSequences.deleteSequence(seq, false);\r
- if (hiddenSequences.getSize() < 1)\r
+ if (hiddenSequences.getSize(false) < 1)\r
{\r
hiddenSequences = null;\r
}\r
-\r
}\r
\r
public void changeCase(boolean toUpper, int start, int end)\r
boolean displayBoxes;\r
boolean displayText;\r
boolean colourText;\r
-\r
- /** DOCUMENT ME!! */\r
- public Vector sequences = new Vector();\r
+ private Vector sequences = new Vector();\r
int width = -1;\r
\r
/** DOCUMENT ME!! */\r
endRes = end;\r
}\r
\r
+ public Vector getSequences(boolean includeHidden)\r
+ {\r
+ if(!includeHidden)\r
+ return sequences;\r
+ else\r
+ {\r
+ Vector allSequences = new Vector();\r
+ SequenceI seq;\r
+ for (int i = 0; i < sequences.size(); i++)\r
+ {\r
+ seq = (SequenceI) sequences.elementAt(i);\r
+ allSequences.addElement(seq);\r
+ if (seq.getHiddenSequences() != null)\r
+ {\r
+ for (int h = 0; h < seq.getHiddenSequences().getSize(false); h++)\r
+ {\r
+ allSequences.addElement(\r
+ seq.getHiddenSequences().getSequenceAt(h)\r
+ );\r
+ }\r
+ }\r
+ }\r
+\r
+ return allSequences;\r
+ }\r
+ }\r
+\r
/**\r
* DOCUMENT ME!\r
*\r
*\r
* @return DOCUMENT ME!\r
*/\r
- public int getSize()\r
+ public int getSize(boolean includeHidden)\r
{\r
+ if(!includeHidden)\r
return sequences.size();\r
+ else\r
+ {\r
+ int total = sequences.size();\r
+ SequenceI seq;\r
+ for (int i = 0; i < sequences.size(); i++)\r
+ {\r
+ seq = (SequenceI) sequences.elementAt(i);\r
+ if (seq.getHiddenSequences() != null)\r
+ {\r
+ total += seq.getHiddenSequences().getSize(false);\r
+ }\r
+ }\r
+ return total;\r
+ }\r
}\r
\r
/**\r
alignPanel.seqPanel.seqCanvas.fr.featuresAdded();\r
alignPanel.repaint();\r
}\r
- else\r
- {\r
- System.out.println("No Features found for " +\r
- evt.getDasSource().getNickname());\r
- }\r
}\r
\r
Hashtable progressBars;\r
{\r
SequenceI seq = viewport.alignment.getSequenceAt(i);\r
\r
- if (!sg.sequences.contains(seq))\r
+ if (!sg.getSequences(false).contains(seq))\r
{\r
continue;\r
}\r
\r
SequenceI temp = viewport.alignment.getSequenceAt(i - 1);\r
\r
- if (sg.sequences.contains(temp))\r
+ if (sg.getSequences(false).contains(temp))\r
{\r
continue;\r
}\r
{\r
SequenceI seq = viewport.alignment.getSequenceAt(i);\r
\r
- if (!sg.sequences.contains(seq))\r
+ if (!sg.getSequences(false).contains(seq))\r
{\r
continue;\r
}\r
\r
SequenceI temp = viewport.alignment.getSequenceAt(i + 1);\r
\r
- if (sg.sequences.contains(temp))\r
+ if (sg.getSequences(false).contains(temp))\r
{\r
continue;\r
}\r
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
\r
Hashtable orderedSeqs = new Hashtable();\r
- SequenceI[] seqs = new SequenceI[sg.getSize()];\r
+ SequenceI[] seqs = new SequenceI[sg.getSize(false)];\r
\r
- for (int i = 0; i < sg.getSize(); i++)\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
SequenceI seq = sg.getSequenceAt(i);\r
int index = viewport.alignment.findIndex(seq);\r
int index = 0, startRes, endRes;\r
char ch;\r
\r
- for (int i = 0; i < sg.getSize(); i++)\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
SequenceI seq = null;\r
\r
HistoryItem.HIDE));\r
\r
\r
- for (int i = 0; i < sg.sequences.size(); i++)\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
SequenceI seq = sg.getSequenceAt(i);\r
int index = viewport.getAlignment().findIndex(seq);\r
seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1);\r
\r
// If the cut affects all sequences, remove highlighted columns\r
- if (sg.sequences.size() == viewport.alignment.getHeight())\r
+ if (sg.getSize(false) == viewport.alignment.getHeight())\r
{\r
viewport.getColumnSelection().removeElements(sg.getStartRes(),\r
sg.getEndRes() + 1);\r
viewport.setSelectionGroup(null);\r
alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);\r
alignPanel.idPanel.idCanvas.searchResults = null;\r
+ alignPanel.repaint();\r
PaintRefresher.Refresh(null, viewport.alignment);\r
}\r
\r
int end = viewport.alignment.getWidth();\r
\r
if (viewport.getSelectionGroup() != null\r
- && viewport.getSelectionGroup().sequences != null\r
- && viewport.getSelectionGroup().sequences.size() > 0)\r
+ && viewport.getSelectionGroup().getSequences(true) != null\r
+ && viewport.getSelectionGroup().getSize(true) > 0)\r
{\r
- seqs = viewport.getSelectionGroup().sequences;\r
+ seqs = viewport.getSelectionGroup().getSequences(true);\r
start = viewport.getSelectionGroup().getStartRes();\r
end = viewport.getSelectionGroup().getEndRes()+1;\r
}\r
SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);\r
if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)\r
{\r
- ((ClustalxColourScheme)sg.cs).resetClustalX(sg.sequences, sg.getWidth());\r
+ ((ClustalxColourScheme)sg.cs).resetClustalX(\r
+ sg.getSequences(true), sg.getWidth());\r
}\r
sg.recalcConservation();\r
}\r
new DBRefFetcher(viewport.alignment, this);\r
}\r
\r
- public void fetchSeqFeatures_actionPerformed(ActionEvent e)\r
+ public void defaultDASSource_actionPerformed(ActionEvent e)\r
{\r
- new DasSequenceFeatureFetcher(viewport.alignment,\r
- this);\r
- viewport.setShowSequenceFeatures(true);\r
- showSeqFeatures.setSelected(true);\r
+ new DasSequenceFeatureFetcher(viewport.alignment, this);\r
+ viewport.setShowSequenceFeatures(true);\r
+ showSeqFeatures.setSelected(true);\r
+ }\r
+\r
+ public void modifyDASSource_actionPerformed(ActionEvent e)\r
+ {\r
+ DasSourceBrowser dsb = new DasSourceBrowser();\r
+ JInternalFrame frame = new JInternalFrame();\r
+ frame.setContentPane(dsb);\r
+ Desktop.addInternalFrame(frame, "Modify DAS Source",\r
+ 600,370);\r
}\r
\r
\r
\r
if (cs instanceof ClustalxColourScheme)\r
{\r
- sg.cs = new ClustalxColourScheme(sg.sequences, sg.getWidth());\r
+ sg.cs = new ClustalxColourScheme(\r
+ sg.getSequences(true), sg.getWidth());\r
}\r
else if (cs instanceof UserColourScheme)\r
{\r
sg.cs.setThreshold(threshold,\r
viewport.getIgnoreGapsConsensus());\r
\r
- sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
- sg.getWidth()));\r
- }\r
+ sg.cs.setConsensus(AAFrequency.calculate(\r
+ sg.getSequences(true), 0,\r
+ sg.getWidth()));\r
+ }\r
else\r
sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());\r
\r
{\r
Conservation c = new Conservation("Group",\r
ResidueProperties.propHash, 3,\r
- sg.sequences, 0,\r
+ sg.getSequences(true), 0,\r
viewport.alignment.getWidth() - 1);\r
c.calculate();\r
c.verdict(false, viewport.ConsPercGaps);\r
public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)\r
{\r
if ( (viewport.getSelectionGroup() == null) ||\r
- (viewport.getSelectionGroup().getSize() < 2))\r
+ (viewport.getSelectionGroup().getSize(false) < 2))\r
{\r
JOptionPane.showInternalMessageDialog(this,\r
"You must select at least 2 sequences.",\r
public void PCAMenuItem_actionPerformed(ActionEvent e)\r
{\r
if ( ( (viewport.getSelectionGroup() != null) &&\r
- (viewport.getSelectionGroup().getSize() < 4) &&\r
- (viewport.getSelectionGroup().getSize() > 0)) ||\r
+ (viewport.getSelectionGroup().getSize(false) < 4) &&\r
+ (viewport.getSelectionGroup().getSize(false) > 0)) ||\r
(viewport.getAlignment().getHeight() < 4))\r
{\r
JOptionPane.showInternalMessageDialog(this,\r
TreePanel tp;\r
\r
if ( (viewport.getSelectionGroup() != null) &&\r
- (viewport.getSelectionGroup().getSize() > 3))\r
+ (viewport.getSelectionGroup().getSize(false) > 3))\r
{\r
int s = 0;\r
SequenceGroup sg = viewport.getSelectionGroup();\r
\r
/* Decide if the selection is a column region */\r
- while (s < sg.sequences.size())\r
+ while (s < sg.getSize(false))\r
{\r
- if ( ( (SequenceI) sg.sequences.elementAt(s++)).getLength() <\r
+ if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() <\r
sg.getEndRes())\r
{\r
JOptionPane.showMessageDialog(Desktop.desktop,\r
\r
title = title + " on region";\r
tp = new TreePanel(viewport,\r
- viewport.getSelectionGroup().sequences, type, pwType,\r
+ viewport.getSelectionGroup().getSequences(false),\r
+ type, pwType,\r
sg.getStartRes(), sg.getEndRes());\r
}\r
else\r
SequenceI[] msa = null;\r
\r
if ( (viewport.getSelectionGroup() != null) &&\r
- (viewport.getSelectionGroup().getSize() > 1))\r
+ (viewport.getSelectionGroup().getSize(false) > 1))\r
{\r
// JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!\r
SequenceGroup seqs = viewport.getSelectionGroup();\r
int sz;\r
- msa = new SequenceI[sz = seqs.getSize()];\r
+ msa = new SequenceI[sz = seqs.getSize(false)];\r
\r
for (int i = 0; i < sz; i++)\r
{\r
SequenceI[] msa = null;\r
\r
if ( (viewport.getSelectionGroup() != null) &&\r
- (viewport.getSelectionGroup().getSize() > 0))\r
+ (viewport.getSelectionGroup().getSize(false) > 0))\r
{\r
// JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface!\r
SequenceGroup seqs = viewport.getSelectionGroup();\r
\r
- if ( (seqs.getSize() == 1) || !viewport.alignment.isAligned())\r
+ if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned())\r
{\r
seq = (SequenceI) seqs.getSequenceAt(0);\r
}\r
else\r
{\r
int sz;\r
- msa = new SequenceI[sz = seqs.getSize()];\r
+ msa = new SequenceI[sz = seqs.getSize(false)];\r
\r
for (int i = 0; i < sz; i++)\r
{\r
hasHiddenRows = false;\r
}\r
\r
+ public void showAllHiddenSeqs()\r
+ {\r
+ alignment.getHiddenSequences().showAll();\r
+ hasHiddenRows = false;\r
+ }\r
+\r
public int adjustForHiddenSeqs(int alignmentIndex)\r
{\r
return alignment.getHiddenSequences().adjustForHiddenSeqs(alignmentIndex);\r
switch (evt.getKeyCode())\r
{\r
case 27: // escape key\r
- av.setSelectionGroup(null);\r
- repaint();\r
+ alignFrame.deselectAllSequenceMenuItem_actionPerformed(null);\r
\r
break;\r
\r
\r
if (av.getWrapAlignment())\r
{\r
- int max = av.alignment.getWidth() /\r
- seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) +1;\r
+ int maxwidth = av.alignment.getWidth();\r
+\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
+ int max = maxwidth /\r
+ seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) +\r
+ 1;\r
\r
\r
vscroll.setMaximum(max);\r
for (int i = startSeq; i < endSeq; i++)\r
{\r
if ( (av.getSelectionGroup() != null) &&\r
- av.getSelectionGroup().sequences.contains(\r
+ av.getSelectionGroup().getSequences(false).contains(\r
av.getAlignment().getSequenceAt(i)))\r
{\r
currentColor = Color.gray;\r
\r
int idWidth = calculateIdWidth().width + 4;\r
\r
+ int maxwidth = av.alignment.getWidth();\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
+\r
int resWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(pwidth -\r
idWidth);\r
\r
- int totalHeight = cHeight * (av.alignment.getWidth() / resWidth + 1);\r
+ int totalHeight = cHeight * (maxwidth / resWidth + 1);\r
\r
pg.setColor(Color.white);\r
pg.fillRect(0, 0, pwidth, pheight);\r
\r
void makeAlignmentImage(int type, File file)\r
{\r
+ int maxwidth = av.alignment.getWidth();\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth);\r
+\r
int height = ( (av.alignment.getHeight() + 1) * av.charHeight) + 30;\r
- int width = idPanel.getWidth() + (av.alignment.getWidth() * av.charWidth);\r
+ int width = idPanel.getWidth() + (maxwidth * av.charWidth);\r
if (idPanel.getWidth() == 0)\r
{\r
width += calculateIdWidth().getWidth() + 4;\r
width = alignFrame.getWidth() - 22;\r
}\r
else\r
-\r
width = seqPanel.getWidth() + idPanel.getWidth();\r
\r
}\r
+ hgap\r
+ annotationHeight;\r
\r
- int height = ( (av.alignment.getWidth() / chunkWidth) + 1) * cHeight;\r
+ int maxwidth = av.alignment.getWidth();\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
+\r
+ int height = ( (maxwidth / chunkWidth) + 1) * cHeight;\r
\r
return height;\r
}\r
\r
AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();\r
\r
- int x = 0;\r
- int y = 0;\r
+ int x = 0, y = 0;\r
+ int column=0;\r
char lastSS;\r
int lastSSX;\r
int iconOffset = av.charHeight / 2;\r
lastSS = ' ';\r
lastSSX = 0;\r
\r
-\r
if (row.graph>0)\r
{\r
if(row.graphGroup>-1 && graphGroupDrawn[ row.graphGroup ] )\r
iconOffset = 0;\r
}\r
\r
- int column = startRes;\r
-\r
- while (column < endRes)\r
+ x = 0;\r
+ while (x < endRes-startRes)\r
{\r
if (av.hasHiddenColumns)\r
{\r
- column = av.getColumnSelection().adjustForHiddenColumns(column);\r
+ column = av.getColumnSelection().adjustForHiddenColumns(startRes+x);\r
if (column > row.annotations.length-1)\r
{\r
break;\r
}\r
}\r
+ else\r
+ column = startRes+x;\r
+\r
\r
if ((row.annotations.length <= column) ||\r
(row.annotations[column] == null))\r
validRes = true;\r
}\r
\r
- x = (column - startRes) * av.charWidth;\r
\r
if (activeRow == i)\r
{\r
\r
if (v == column)\r
{\r
- g.fillRect((column - startRes) * av.charWidth, y,\r
+ g.fillRect(x * av.charWidth, y,\r
av.charWidth, row.height);\r
}\r
}\r
\r
if (column == 0 || row.graph>0)\r
{\r
- g.drawString(row.annotations[column].displayCharacter, x+charOffset,\r
+ g.drawString(row.annotations[column].displayCharacter,\r
+ x*av.charWidth+charOffset,\r
y + iconOffset + 3);\r
}\r
else if (\r
(row.annotations[column].displayCharacter.length() <2 &&\r
row.annotations[column].secondaryStructure==' ')))\r
{\r
- g.drawString(row.annotations[column].displayCharacter, x+charOffset,\r
- y + iconOffset + 3);\r
+ g.drawString(row.annotations[column].displayCharacter,\r
+ x*av.charWidth+charOffset,\r
+ y + iconOffset + 3);\r
}\r
}\r
\r
//Off by 1 offset when drawing rects and ovals\r
//to offscreen image on the MAC\r
g.fillRoundRect(lastSSX, y + 4 + iconOffset,\r
- x - lastSSX, 7, 8, 8);\r
+ x*av.charWidth - lastSSX, 7, 8, 8);\r
break;\r
}\r
\r
int sCol = (lastSSX / av.charWidth) + startRes;\r
int x1 = lastSSX;\r
- int x2 = x;\r
+ int x2 = x*av.charWidth;\r
\r
if(sCol==0 ||\r
row.annotations[sCol-1]==null ||\r
if(row.annotations[column]==null ||\r
row.annotations[column].secondaryStructure!='H')\r
{\r
- g.fillArc(x-av.charWidth, y+4+iconOffset, av.charWidth, 7, 270,180);\r
+ g.fillArc(x*av.charWidth-av.charWidth,\r
+ y+4+iconOffset,\r
+ av.charWidth,\r
+ 7, 270,180);\r
x2 -= av.charWidth/2;\r
}\r
\r
case 'E':\r
g.setColor(SHEET_COLOUR);\r
g.fillRect(lastSSX, y + 4 + iconOffset,\r
- x - lastSSX - 4, 7);\r
- g.fillPolygon(new int[] { x - 5, x - 5, x },\r
+ x*av.charWidth - lastSSX - 4, 7);\r
+ g.fillPolygon(new int[] { x*av.charWidth - 5,\r
+ x*av.charWidth - 5,\r
+ x*av.charWidth },\r
new int[]\r
{\r
y + iconOffset, y + 14 + iconOffset,\r
default:\r
g.setColor(Color.gray);\r
g.fillRect(lastSSX, y + 6 + iconOffset,\r
- x - lastSSX, 2);\r
+ x*av.charWidth - lastSSX, 2);\r
\r
break;\r
}\r
lastSS = ' ';\r
}\r
\r
- lastSSX = x;\r
+ lastSSX = x*av.charWidth;\r
}\r
}\r
-\r
column++;\r
+ x++;\r
}\r
\r
if(column>=row.annotations.length)\r
column = row.annotations.length-1;\r
\r
- x += av.charWidth;\r
+ x ++;\r
\r
if (row.hasIcons)\r
{\r
//Off by 1 offset when drawing rects and ovals\r
//to offscreen image on the MAC\r
g.fillRoundRect(lastSSX, y + 4 + iconOffset,\r
- x - lastSSX, 7, 8, 8);\r
+ x*av.charWidth - lastSSX, 7, 8, 8);\r
break;\r
}\r
\r
|| row.annotations[endRes].secondaryStructure != 'E')\r
{\r
g.fillRect(lastSSX, y + 4 + iconOffset,\r
- x - lastSSX - 4, 7);\r
+ x*av.charWidth - lastSSX - 4, 7);\r
g.fillPolygon(new int[]\r
- {x - 5, x - 5, x},\r
+ {x*av.charWidth - 5,\r
+ x*av.charWidth - 5,\r
+ x*av.charWidth},\r
new int[]\r
{\r
y + iconOffset, y + 14 + iconOffset,\r
}\r
else\r
g.fillRect(lastSSX, y + 4 + iconOffset,\r
- x - lastSSX, 7);\r
+ x*av.charWidth - lastSSX, 7);\r
\r
break;\r
\r
default:\r
g.setColor(Color.gray);\r
if(!av.wrapAlignment || endRes==av.endRes)\r
- g.fillRect(lastSSX, y + 6 + iconOffset, x - lastSSX, 2);\r
+ g.fillRect(lastSSX, y + 6 + iconOffset,\r
+ x*av.charWidth - lastSSX, 2);\r
\r
break;\r
}\r
\r
eRes = Math.min(eRes, aa.annotations.length);\r
\r
- int column = sRes;\r
+ int column;\r
int aaMax = aa.annotations.length-1;\r
\r
- while( column < eRes )\r
+ while( x < eRes - sRes )\r
{\r
+ column = sRes + x;\r
if(av.hasHiddenColumns)\r
{\r
column = av.getColumnSelection().adjustForHiddenColumns(column);\r
- if(column > aaMax)\r
- {\r
- break;\r
- }\r
+ }\r
+\r
+ if (column > aaMax)\r
+ {\r
+ break;\r
}\r
\r
if(aa.annotations[column]==null || aa.annotations[column-1]==null)\r
{\r
- x+=av.charWidth;\r
- column ++;\r
+ x++;\r
continue;\r
}\r
\r
y1 = y - (int) (((aa.annotations[column-1].value-min) / range) * graphHeight);\r
y2 = y - (int) (((aa.annotations[column].value-min) / range) * graphHeight);\r
\r
- g.drawLine(x-av.charWidth/2, y1, x+av.charWidth/2, y2);\r
- x += av.charWidth;\r
-\r
- column++;\r
-\r
+ g.drawLine(x*av.charWidth-av.charWidth/2, y1, x*av.charWidth+av.charWidth/2, y2);\r
+ x ++;\r
}\r
+\r
if(aa.threshold!=null)\r
{\r
g.setColor(aa.threshold.colour);\r
\r
eRes = Math.min(eRes, aa.annotations.length);\r
\r
- int x=0, y1, y2;\r
+ int x=0, y1=y, y2=y;\r
\r
float range = max - min;\r
\r
- y1 = y2 = y;\r
-\r
if(min<0)\r
y2 = y - (int)((0-min / (range))*aa.graphHeight);\r
\r
\r
g.drawLine(x,y2,(eRes-sRes)*av.charWidth,y2);\r
\r
-\r
- int column = sRes;\r
+ int column;\r
int aaMax = aa.annotations.length-1;\r
\r
- while( column < eRes )\r
+ while( x < eRes-sRes )\r
{\r
+ column = sRes + x;\r
if(av.hasHiddenColumns)\r
{\r
column = av.getColumnSelection().adjustForHiddenColumns(column);\r
- if(column > aaMax)\r
- {\r
+ }\r
+\r
+ if(column > aaMax)\r
+ {\r
break;\r
- }\r
}\r
\r
if (aa.annotations[column] == null)\r
{\r
- x += av.charWidth;\r
- column ++;\r
+ x ++;\r
continue;\r
}\r
\r
y1 = y - (int) (((aa.annotations[column].value-min) / (range)) * aa.graphHeight);\r
\r
if(y1-y2>0)\r
- g.fillRect(x, y2, av.charWidth, y1-y2 );\r
+ g.fillRect(x*av.charWidth, y2, av.charWidth, y1-y2 );\r
else\r
- g.fillRect(x, y1, av.charWidth, y2-y1 );\r
+ g.fillRect(x*av.charWidth, y1, av.charWidth, y2-y1 );\r
\r
- x += av.charWidth;\r
- column ++;\r
+ x ++ ;\r
\r
}\r
if(aa.threshold!=null)\r
// used by overview window\r
public void drawGraph(Graphics g, AlignmentAnnotation aa, int width, int y, int sRes, int eRes)\r
{\r
+ eRes = Math.min(eRes, aa.annotations.length);\r
g.setColor(Color.white);\r
g.fillRect(0, 0, width, y);\r
g.setColor(new Color(0, 0, 180));\r
displayFullDetails(null);\r
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
\r
- capabilities.addListSelectionListener(this);\r
- coords1.addListSelectionListener(this);\r
- coords2.addListSelectionListener(this);\r
+ filter1.addListSelectionListener(this);\r
+ filter2.addListSelectionListener(this);\r
+ filter3.addListSelectionListener(this);\r
\r
//Ask to be notified of selection changes.\r
ListSelectionModel rowSM = table.getSelectionModel();\r
\r
private void setCapabilities(DasSource[] sources)\r
{\r
- Vector vcapabilities = new Vector();\r
- Vector vcoords = new Vector();\r
- Vector vcoords2 = new Vector();\r
+ Vector authority = new Vector();\r
+ Vector type = new Vector();\r
+ Vector label = new Vector();\r
\r
- vcapabilities.addElement("All");\r
- vcoords.addElement("All");\r
- vcoords2.addElement("All");\r
+ authority.addElement("Any");\r
+ type.addElement("Any");\r
+ label.addElement("Any");\r
+ label.addElement("NOT IMPLEMENTED YET");\r
+ filter3.setEnabled(false);\r
\r
for (int i = 0; i < sources.length; i++)\r
{\r
DasSource ds = sources[i];\r
- String[] scap = ds.getCapabilities();\r
- for (int s = 0; s < scap.length; s++)\r
- {\r
- if (!vcapabilities.contains(scap[s]))\r
- {\r
- vcapabilities.addElement(scap[s]);\r
- }\r
- }\r
\r
DasCoordinateSystem[] dcs = ds.getCoordinateSystem();\r
\r
for (int j = 0; j < dcs.length; j++)\r
{\r
- if (!vcoords.contains(dcs[j].getCategory()))\r
- vcoords.addElement(dcs[j].getCategory());\r
+ if (!type.contains(dcs[j].getCategory()))\r
+ type.addElement(dcs[j].getCategory());\r
+\r
+ if (!authority.contains(dcs[j].getName()))\r
+ authority.addElement(dcs[j].getName());\r
+ }\r
\r
- if (!vcoords2.contains(dcs[j].getName()))\r
- vcoords2.addElement(dcs[j].getName());\r
+ String[] slabels = ds.getLabels();\r
+ for (int s = 0; s < slabels.length; s++)\r
+ {\r
+ if (!label.contains(slabels[s]))\r
+ {\r
+ label.addElement(slabels[s]);\r
+ }\r
}\r
+\r
}\r
\r
- capabilities.setListData(vcapabilities);\r
- coords1.setListData(vcoords);\r
- coords2.setListData(vcoords2);\r
+ filter1.setListData(authority);\r
+ filter2.setListData(type);\r
+ filter3.setListData(label);\r
\r
javax.swing.SwingUtilities.invokeLater(new Runnable()\r
{\r
public void run()\r
{\r
- capabilities.setSelectedIndex(0);\r
- coords1.setSelectedIndex(0);\r
- coords2.setSelectedIndex(0);\r
+ filter1.setSelectedIndex(0);\r
+ filter2.setSelectedIndex(0);\r
+ filter3.setSelectedIndex(0);\r
}\r
});\r
}\r
{\r
ds = dasSources[i];\r
\r
- if (!selectedInList(capabilities, ds.getCapabilities()))\r
+ if (!selectedInList(filter3, ds.getLabels()))\r
{\r
continue;\r
}\r
DasCoordinateSystem[] dcs = ds.getCoordinateSystem();\r
for (int j = 0; j < dcs.length; j++)\r
{\r
- if (selectedInList(coords1, new String[]\r
- {dcs[j].getCategory()})\r
- && selectedInList(coords2, new String[]\r
- {dcs[j].getName()}))\r
+ if (selectedInList(filter1, new String[]\r
+ {dcs[j].getName()})\r
+ && selectedInList(filter2, new String[]\r
+ {dcs[j].getCategory()}))\r
{\r
names.add(ds.getNickname());\r
selected.add(new Boolean(\r
Object[] selection = list.getSelectedValues();\r
for (int i = 0; i < selection.length; i++)\r
{\r
- if (selection[i].equals("All"))\r
+ if (selection[i].equals("Any"))\r
return true;\r
\r
for (int j = 0; j < items.length; j++)\r
{\r
int res = Integer.parseInt(searchString);\r
found = true;\r
- if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize() < 1)\r
+ if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize(false) < 1)\r
{\r
seq = (Sequence) av.getAlignment().getSequenceAt(0);\r
}\r
\r
if (selection != null)\r
{\r
- if ((selection.getSize() < 1) ||\r
+ if ((selection.getSize(false) < 1) ||\r
((selection.getEndRes() - selection.getStartRes()) < 2))\r
{\r
selection = null;\r
{\r
seq = (Sequence) av.alignment.getSequenceAt(seqIndex);\r
\r
- if ((selection != null) && !selection.sequences.contains(seq))\r
+ if ((selection != null) && !selection.getSequences(false).contains(seq))\r
{\r
seqIndex++;\r
resIndex = 0;\r
gg.setColor(Color.white);\r
}\r
else if ((av.getSelectionGroup() != null) &&\r
- av.getSelectionGroup().sequences.contains(s))\r
+ av.getSelectionGroup().getSequences(false).contains(s))\r
{\r
gg.setColor(Color.lightGray);\r
gg.fillRect(0, ((i - starty) * charHeight) + ypos, getWidth(),\r
{\r
Font italic = new Font(av.getFont().getName(), Font.ITALIC,\r
av.getFont().getSize());\r
+\r
gg.setFont(italic);\r
\r
if (av.antiAlias)\r
\r
if (av.getWrapAlignment())\r
{\r
+ int maxwidth = av.alignment.getWidth();\r
+ int alheight = av.alignment.getHeight();\r
+\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
int annotationHeight = 0;\r
AnnotationLabels labels = null;\r
\r
if (av.scaleAboveWrapped)\r
hgap += av.charHeight;\r
\r
- int cHeight = av.getAlignment().getHeight() * av.charHeight\r
+ int cHeight = alheight * av.charHeight\r
+ hgap\r
+ annotationHeight;\r
\r
- int rowSize = av.getEndRes() - av.getStartRes();\r
+ int rowSize = av.getEndRes() - av.getStartRes();\r
+\r
\r
// Draw the rest of the panels\r
for (int ypos = hgap, row = av.startRes;\r
- (ypos <= getHeight()) && (row < av.alignment.getWidth());\r
+ (ypos <= getHeight()) && (row < maxwidth);\r
ypos += cHeight, row += rowSize)\r
{\r
- for (int i = starty; i < av.alignment.getHeight(); i++)\r
+ for (int i = starty; i < alheight; i++)\r
+ {\r
+ if (av.hasHiddenRows)\r
{\r
-\r
- SequenceI s = av.alignment.getSequenceAt(i);\r
- gg.setFont(italic);\r
- drawIdString(gg, s, i, 0, ypos);\r
+ setHiddenFont(i, starty);\r
}\r
+ else\r
+ gg.setFont(italic);\r
+\r
+ SequenceI s = av.alignment.getSequenceAt(i);\r
+ drawIdString(gg, s, i, 0, ypos);\r
+ }\r
\r
if(labels!=null)\r
{\r
- gg.translate(0, ypos+(av.getAlignment().getHeight() * av.charHeight));\r
+ gg.translate(0, ypos+(alheight * av.charHeight));\r
labels.drawComponent(gg, getWidth());\r
- gg.translate(0, -ypos-(av.getAlignment().getHeight() * av.charHeight));\r
-\r
+ gg.translate(0, -ypos-(alheight * av.charHeight));\r
}\r
}\r
}\r
else\r
{\r
//Now draw the id strings\r
- int tmp, hiddenIndex = starty;\r
- boolean markHidden = false;\r
for (int i = starty; i < endy; i++)\r
{\r
if (av.hasHiddenRows)\r
{\r
- tmp = av.adjustForHiddenSeqs(i);\r
- if(hiddenIndex != tmp)\r
- {\r
- hiddenIndex = tmp;\r
- markHidden = true;\r
- }\r
- else\r
- markHidden = false;\r
-\r
- hiddenIndex++;\r
+ setHiddenFont(i, starty);\r
}\r
\r
- if(av.hasHiddenRows && av.alignment.getSequenceAt(i).getHiddenSequences()!=null)\r
- {\r
- currentTextColor = Color.blue;\r
- }\r
- else\r
// Selected sequence colours\r
- if ((searchResults != null) &&\r
- searchResults.contains(av.alignment.getSequenceAt(i)))\r
+ if ( (searchResults != null) &&\r
+ searchResults.contains(av.alignment.getSequenceAt(i)))\r
{\r
- currentColor = Color.black;\r
- currentTextColor = Color.white;\r
+ currentColor = Color.black;\r
+ currentTextColor = Color.white;\r
}\r
- else if ((av.getSelectionGroup() != null) &&\r
- av.getSelectionGroup().sequences.contains(\r
- av.alignment.getSequenceAt(i)))\r
+ else if ( (av.getSelectionGroup() != null) &&\r
+ av.getSelectionGroup().getSequences(false).contains(\r
+ av.alignment.getSequenceAt(i)))\r
{\r
- currentColor = Color.lightGray;\r
- currentTextColor = Color.black;\r
+ currentColor = Color.lightGray;\r
+ currentTextColor = Color.black;\r
}\r
else\r
{\r
- currentColor = av.alignment.getSequenceAt(i).getColor();\r
- currentTextColor = Color.black;\r
+ currentColor = av.alignment.getSequenceAt(i).getColor();\r
+ currentTextColor = Color.black;\r
}\r
\r
gg.setColor(currentColor);\r
gg.fillRect(0, (i - starty) * av.charHeight, getWidth(),\r
av.charHeight);\r
\r
- if (markHidden)\r
- {\r
- gg.setColor(Color.blue);\r
- // gg.drawLine(0, (i-starty)*av.charHeight, getWidth(),(i-starty)*av.charHeight);\r
- gg.fillPolygon(new int[] { getWidth() - av.charHeight,\r
- getWidth() - av.charHeight,\r
- getWidth() },\r
- new int[]\r
- {\r
- (i-starty)*av.charHeight -av.charHeight/4,\r
- (i-starty)*av.charHeight +av.charHeight/4,\r
- (i-starty)*av.charHeight\r
- }, 3);\r
-\r
- }\r
-\r
gg.setColor(currentTextColor);\r
\r
String string = av.alignment.getSequenceAt(i).getDisplayId( av.getShowJVSuffix());\r
(av.charHeight / 5));\r
}\r
\r
- // add a border\r
- // gg.setColor(Color.cyan);\r
- // gg.fillRect(getWidth() - 4, 0, 4, getHeight());\r
}\r
}\r
\r
+ void setHiddenFont(int i, int starty)\r
+ {\r
+ Font italic = new Font(av.getFont().getName(), Font.ITALIC,\r
+ av.getFont().getSize());\r
+ Font bold = new Font(av.getFont().getName(), Font.BOLD,\r
+ av.getFont().getSize());\r
+\r
+ int tmp, hiddenIndex = starty;\r
+ tmp = av.adjustForHiddenSeqs(i);\r
+\r
+ if (av.adjustForHiddenSeqs(i - 1) == tmp - 1)\r
+ {\r
+ hiddenIndex = tmp;\r
+ }\r
+\r
+ if (hiddenIndex != tmp)\r
+ {\r
+ hiddenIndex = tmp;\r
+ }\r
+\r
+ hiddenIndex++;\r
+\r
+ if (av.alignment.getSequenceAt(i).getHiddenSequences() != null)\r
+ gg.setFont(bold);\r
+ else\r
+ gg.setFont(italic);\r
+ }\r
+\r
/**\r
* DOCUMENT ME!\r
*\r
tip.append("</html>");\r
setToolTipText(tip.toString());\r
}\r
-\r
- if(av.hasHiddenRows)\r
- {\r
- if(av.adjustForHiddenSeqs(seq) -\r
- av.adjustForHiddenSeqs(seq-1)>1)\r
- {\r
- JPopupMenu pop = new JPopupMenu();\r
- JMenuItem item = new JMenuItem("Reveal");\r
- item.addActionListener(new ActionListener()\r
- {\r
- public void actionPerformed(ActionEvent e)\r
- {\r
- av.showSequence(seq);\r
- alignPanel.repaint();\r
- if(alignPanel.overviewPanel!=null)\r
- alignPanel.overviewPanel.updateOverviewImage();\r
- }\r
- });\r
- pop.add(item);\r
- pop.show(this, e.getX(), e.getY());\r
- }\r
- }\r
}\r
\r
\r
groups[i].setDisplayText(sg.getDisplayText());\r
groups[i].setColourText(sg.getColourText());\r
\r
- for (int s = 0; s < sg.getSize(); s++)\r
+ for (int s = 0; s < sg.getSize(false); s++)\r
{\r
jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence) sg.getSequenceAt(s);\r
int index = seqids.indexOf(seq);\r
if (groups[i].getConsThreshold() != 0)\r
{\r
jalview.analysis.Conservation c = new jalview.analysis.Conservation("All",\r
- ResidueProperties.propHash, 3, sg.sequences, 0,\r
+ ResidueProperties.propHash, 3, sg.getSequences(false), 0,\r
sg.getWidth() - 1);\r
c.calculate();\r
c.verdict(false, 25);\r
if (groups[i].getConsThreshold() != 0)\r
{\r
jalview.analysis.Conservation c = new jalview.analysis.Conservation("All",\r
- ResidueProperties.propHash, 3, sg.sequences, 0,\r
+ ResidueProperties.propHash, 3, sg.getSequences(false), 0,\r
sg.getWidth() - 1);\r
c.calculate();\r
c.verdict(false, 25);\r
boolean sameLength = true;\r
\r
if ((av.getSelectionGroup() != null) &&\r
- (av.getSelectionGroup().getSize() > 3))\r
+ (av.getSelectionGroup().getSize(false) > 3))\r
{\r
- seqs = new Sequence[av.getSelectionGroup().getSize()];\r
+ seqs = new Sequence[av.getSelectionGroup().getSize(false)];\r
int length = av.getSelectionGroup().getSequenceAt(0).getLength();\r
- for (int i = 0; i < av.getSelectionGroup().getSize(); i++)\r
+ for (int i = 0; i < av.getSelectionGroup().getSize(false); i++)\r
{\r
seqs[i] = av.getSelectionGroup().getSequenceAt(i);\r
if(seqs[i].getLength()!=length)\r
\r
Vector selsubset = new Vector();\r
\r
- for (int i = 0, j = av.getSelectionGroup().getSize(); i < j; i++)\r
+ for (int i = 0, j = av.getSelectionGroup().getSize(false); i < j; i++)\r
{\r
if (av.getAlignment().getSequences().contains(av.getSelectionGroup()\r
.getSequenceAt(i)))\r
}\r
}\r
\r
- /* menuItem = new JMenuItem("Hide Sequences");\r
+ menuItem = new JMenuItem("Hide Sequences");\r
menuItem.addActionListener(new java.awt.event.ActionListener()\r
{\r
public void actionPerformed(ActionEvent e)\r
});\r
sequenceMenu.add(menuItem);\r
\r
- if(ap.av.getSelectionGroup() !=null && ap.av.getSelectionGroup().getSize()>1)\r
+ if(ap.av.getSelectionGroup() !=null\r
+ && ap.av.getSelectionGroup().getSize(false)>1)\r
{\r
menuItem = new JMenuItem("Represent Group with " + seq.getName());\r
menuItem.addActionListener(new java.awt.event.ActionListener()\r
}\r
});\r
sequenceMenu.add(menuItem);\r
- }*/\r
+ }\r
+\r
+ if (ap.av.hasHiddenRows)\r
+ {\r
+ final int index = ap.av.alignment.findIndex(seq);\r
+\r
+ if (ap.av.adjustForHiddenSeqs(index) -\r
+ ap.av.adjustForHiddenSeqs(index - 1) > 1)\r
+ {\r
+ menuItem = new JMenuItem("Reveal");\r
+ menuItem.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ ap.av.showSequence(index);\r
+ ap.repaint();\r
+ if (ap.overviewPanel != null)\r
+ ap.overviewPanel.updateOverviewImage();\r
+ }\r
+ });\r
+ sequenceMenu.add(menuItem);\r
+ }\r
+\r
+ menuItem = new JMenuItem("Reveal All");\r
+ menuItem.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ ap.av.showAllHiddenSeqs();\r
+ ap.repaint();\r
+ if (ap.overviewPanel != null)\r
+ ap.overviewPanel.updateOverviewImage();\r
+ }\r
+ });\r
+\r
+ sequenceMenu.add(menuItem);\r
+\r
+\r
+\r
+ }\r
\r
\r
}\r
protected void clustalColour_actionPerformed(ActionEvent e)\r
{\r
SequenceGroup sg = getGroup();\r
- sg.cs = new ClustalxColourScheme(sg.sequences,\r
+ sg.cs = new ClustalxColourScheme(sg.getSequences(true),\r
ap.av.alignment.getWidth());\r
refresh();\r
}\r
\r
if (abovePIDColour.isSelected())\r
{\r
- sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
+ sg.cs.setConsensus(AAFrequency.calculate(\r
+ sg.getSequences(true), 0,\r
ap.av.alignment.getWidth()));\r
\r
int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs,\r
{\r
SequenceGroup sg = getGroup();\r
sg.cs = new PIDColourScheme();\r
- sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0,\r
ap.av.alignment.getWidth()));\r
refresh();\r
}\r
\r
sg.cs = new Blosum62ColourScheme();\r
\r
- sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0,\r
ap.av.alignment.getWidth()));\r
\r
refresh();\r
if (conservationMenuItem.isSelected())\r
{\r
Conservation c = new Conservation("Group",\r
- ResidueProperties.propHash, 3, sg.sequences, 0,\r
+ ResidueProperties.propHash, 3,\r
+ sg.getSequences(true), 0,\r
ap.av.alignment.getWidth());\r
\r
c.calculate();\r
SequenceGroup sg = getGroup();\r
StringBuffer sb = new StringBuffer();\r
\r
- for (int i = 0; i < sg.sequences.size(); i++)\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
- Sequence tmp = (Sequence) sg.sequences.get(i);\r
+ Sequence tmp = (Sequence) sg.getSequences(false).elementAt(i);\r
sb.append(tmp.getSequence(sg.getStartRes(), sg.getEndRes() + 1));\r
sb.append("\n");\r
}\r
void hideSequences(boolean representGroup)\r
{\r
SequenceGroup sg = ap.av.getSelectionGroup();\r
- if(sg==null || sg.getSize()<1)\r
+ if(sg==null || sg.getSize(false)<1)\r
{\r
ap.av.hideSequence(sequence);\r
return;\r
}\r
\r
int index = 0;\r
- while(index < sg.sequences.size())\r
+ while(index < sg.getSize(false))\r
{\r
if(representGroup && sg.getSequenceAt(index)!=sequence)\r
{\r
if(sg==null)\r
return;\r
\r
- for(int g=0; g<sg.getSize(); g++)\r
+ for(int g=0; g<sg.getSize(true); g++)\r
{\r
- sg.getSequenceAt(g).changeCase(true, sg.getStartRes(), sg.getEndRes()+1);\r
+ ( (SequenceI)sg.getSequences(true).elementAt(g))\r
+ .changeCase(true, sg.getStartRes(), sg.getEndRes()+1);\r
}\r
ap.repaint();\r
}\r
if(sg==null)\r
return;\r
\r
- for(int g=0; g<sg.getSize(); g++)\r
+ for(int g=0; g<sg.getSize(true); g++)\r
{\r
- sg.getSequenceAt(g).changeCase(false, sg.getStartRes(), sg.getEndRes()+1);\r
+ ( (SequenceI)sg.getSequences(true).elementAt(g))\r
+ .changeCase(false, sg.getStartRes(), sg.getEndRes()+1);\r
}\r
ap.repaint();\r
}\r
if (sg == null)\r
return;\r
\r
- for (int g = 0; g < sg.getSize(); g++)\r
+ for (int g = 0; g < sg.getSize(true); g++)\r
{\r
- sg.getSequenceAt(g).toggleCase(sg.getStartRes(), sg.getEndRes() + 1);\r
+ ( (SequenceI)sg.getSequences(true).elementAt(g))\r
+ .toggleCase(sg.getStartRes(), sg.getEndRes() + 1);\r
}\r
\r
ap.repaint();\r
originalSequences = new Vector();\r
originalColours = new Hashtable();\r
\r
- if ( (sg != null) && (sg.getSize() >= 1))\r
+ if ( (sg != null) && (sg.getSize(false) >= 1))\r
{\r
- height = sg.getSize();\r
- for (int i = 0; i < sg.getSize(); i++)\r
+ height = sg.getSize(false);\r
+ for (int i = 0; i < sg.getSize(false); i++)\r
{\r
sel.addElement(sg.getSequenceAt(i));\r
}\r
\r
if (av.getSelectionGroup() != null)\r
{\r
- if (av.getSelectionGroup().sequences.contains(\r
+ if (av.getSelectionGroup().getSequences(false).contains(\r
((SequencePoint) points.elementAt(i)).sequence))\r
{\r
g.setColor(Color.gray);\r
*/\r
public void rectSelect(int x1, int y1, int x2, int y2)\r
{\r
- boolean changedSel = false;\r
-\r
for (int i = 0; i < npoint; i++)\r
{\r
SequencePoint sp = (SequencePoint) points.elementAt(i);\r
{\r
if (av != null)\r
{\r
- if (!av.getSelectionGroup().sequences.contains(sp.sequence))\r
+ if (!av.getSelectionGroup().getSequences(false).contains(sp.sequence))\r
{\r
- changedSel = true;\r
av.getSelectionGroup().addSequence(sp.sequence, true);\r
}\r
}\r
min = res;\r
max = res;\r
\r
- /* if(reveal != null && SwingUtilities.isRightMouseButton(evt))\r
+ if(reveal != null && SwingUtilities.isRightMouseButton(evt))\r
{\r
JPopupMenu pop = new JPopupMenu();\r
JMenuItem item = new JMenuItem("Reveal");\r
pop.show(this, evt.getX(), evt.getY());\r
\r
}\r
- else*/\r
+ else\r
if (av.getColumnSelection().contains(res))\r
{\r
- /* if( SwingUtilities.isRightMouseButton(evt))\r
+ if( SwingUtilities.isRightMouseButton(evt))\r
{\r
JPopupMenu pop = new JPopupMenu();\r
JMenuItem item = new JMenuItem("Hide Columns");\r
pop.show(this, evt.getX(), evt.getY());\r
\r
}\r
- else*/\r
+ else\r
{\r
av.getColumnSelection().removeElement(res);\r
av.setSelectionGroup(null);\r
ypos += av.charHeight;\r
\r
if(av.hasHiddenColumns)\r
- startx = av.getColumnSelection().adjustForHiddenColumns(startx);\r
+ {\r
+ startx = av.getColumnSelection().adjustForHiddenColumns(startx);\r
+ endx = av.getColumnSelection().adjustForHiddenColumns(endx);\r
+ }\r
\r
- // EAST SCALE\r
+ int maxwidth = av.alignment.getWidth();\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
+ // WEST SCALE\r
for (int i = 0; i < av.alignment.getHeight(); i++)\r
{\r
SequenceI seq = av.alignment.getSequenceAt(i);\r
public void drawWrappedPanel(Graphics g, int canvasWidth, int canvasHeight,\r
int startRes)\r
{\r
-\r
AlignmentI al = av.getAlignment();\r
\r
FontMetrics fm = getFontMetrics(av.getFont());\r
\r
int endx;\r
int ypos = hgap;\r
+ int maxwidth = av.alignment.getWidth();\r
+\r
+ if(av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth)-1;\r
\r
- while ((ypos <= canvasHeight) && (startRes < av.alignment.getWidth()))\r
+ while ((ypos <= canvasHeight) && (startRes < maxwidth))\r
{\r
endx = startRes + cWidth -1;\r
\r
- if (endx > al.getWidth())\r
+ if (endx > maxwidth)\r
{\r
- endx = al.getWidth();\r
+ endx = maxwidth;\r
}\r
\r
g.setFont(av.getFont());\r
}\r
\r
if ( (sx <= (endRes-startRes)*av.charWidth) &&\r
- group.sequences.contains(av.alignment.getSequenceAt(\r
- i)))\r
+ group.getSequences(false).\r
+ contains(av.alignment.getSequenceAt(i)))\r
{\r
if ((bottom == -1) &&\r
- !group.sequences.contains(\r
+ !group.getSequences(false).contains(\r
av.alignment.getSequenceAt(i + 1)))\r
{\r
bottom = sy + av.charHeight;\r
if (!inGroup)\r
{\r
if (((top == -1) && (i == 0)) ||\r
- !group.sequences.contains(\r
+ !group.getSequences(false).contains(\r
av.alignment.getSequenceAt(i - 1)))\r
{\r
top = sy;\r
SequenceGroup sg = av.selectionGroup;\r
//Find the top and bottom of this group\r
int min = av.alignment.getHeight(), max = 0;\r
- for(int i=0; i<sg.getSize(); i++)\r
+ for(int i=0; i<sg.getSize(false); i++)\r
{\r
int index = av.alignment.findIndex( sg.getSequenceAt(i) );\r
if(index > max)\r
else\r
{\r
// Now add any sequences between min and max\r
- sg.sequences.clear();\r
+ sg.getSequences(false).clear();\r
for (int i = min; i < max; i++)\r
{\r
sg.addSequence(av.alignment.getSequenceAt(i), false);\r
\r
editOccurred();\r
\r
- endEditing();\r
ap.repaint();\r
}\r
\r
boolean fixedColumns = false;\r
SequenceGroup sg = av.getSelectionGroup();\r
\r
- if(groupEditing && sg==null)\r
- return;\r
\r
if (!groupEditing && av.hasHiddenRows)\r
{\r
- //This needs to check all the sequences in a group edit,m\r
- // not just the startseq\r
if (av.alignment.getSequenceAt(startseq).getHiddenSequences() != null)\r
{\r
groupEditing = true;\r
}\r
}\r
\r
+ //No group, but the sequence may represent a group\r
+ if (groupEditing\r
+ && sg == null\r
+ && av.alignment.getSequenceAt(startseq).getHiddenSequences() == null)\r
+ {\r
+ groupEditing = false;\r
+ }\r
+\r
SequenceI seq = av.alignment.getSequenceAt(startseq);\r
StringBuffer message = new StringBuffer();\r
if (groupEditing)\r
message.append("Edit group:");\r
else\r
- message.append("Edit sequence: "+seq.getName());\r
+ message.append("Edit sequence: "+seq.getName());\r
\r
if(insertGap)\r
message.append(" insert ");\r
\r
//Are we editing within a selection group?\r
if (groupEditing\r
- || (sg != null && sg.sequences.contains(seq)))\r
+ || (sg != null && sg.getSequences(true).contains(seq)))\r
{\r
fixedColumns = true;\r
\r
+ //sg might be null as the user may only see 1 sequence,\r
+ //but the sequence represents a group\r
+ if (sg == null)\r
+ {\r
+ sg = new SequenceGroup(null, null, false, false, false, 0,\r
+ av.alignment.getWidth()-1);\r
+ sg.addSequence(av.alignment.getSequenceAt(startseq), false);\r
+ }\r
+\r
fixedLeft = sg.getStartRes();\r
fixedRight = sg.getEndRes();\r
\r
}\r
\r
\r
-\r
- if(av.hasHiddenColumns)\r
- {\r
- fixedColumns = true;\r
- int y1 = av.getColumnSelection().getHiddenBoundaryLeft(startres);\r
- int y2 = av.getColumnSelection().getHiddenBoundaryRight(startres);\r
-\r
- if( ( insertGap && startres>y1 && lastres<y1)\r
- || (!insertGap && startres<y2 && lastres>y2) )\r
- {\r
- endEditing();\r
- return;\r
- }\r
-\r
- if(fixedRight<y2 && fixedRight==-1 && y2!=startres)\r
- fixedRight = y2 -1;\r
- if(y1>fixedLeft && fixedLeft==-1)\r
- fixedLeft = y1;\r
- }\r
-\r
- if (groupEditing)\r
+ if(av.hasHiddenColumns )\r
{\r
+ fixedColumns = true;\r
+ int y1 = av.getColumnSelection().getHiddenBoundaryLeft(startres);\r
+ int y2 = av.getColumnSelection().getHiddenBoundaryRight(startres);\r
\r
- /*if (av.hasHiddenRows)\r
- {\r
- //sg might be null as the user may only see 1 sequence\r
- if (sg == null)\r
+ if ( (insertGap && startres > y1 && lastres < y1)\r
+ || (!insertGap && startres < y2 && lastres > y2))\r
{\r
- sg = new SequenceGroup();\r
- sg.addSequence(av.alignment.getSequenceAt(startseq), false);\r
+ endEditing();\r
+ return;\r
}\r
\r
- SequenceGroup tmp = new SequenceGroup();\r
-\r
- //Do any of the sequences have hidden associates?\r
- for (int s = 0; s < sg.getSize(); s++)\r
+ //System.out.print(y1+" "+y2+" "+fixedLeft+" "+fixedRight+"~~");\r
+ //Selection spans a hidden region\r
+ if(fixedLeft<y1 && (fixedRight>y2 || fixedRight==-1))\r
{\r
- seq = sg.getSequenceAt(s);\r
- tmp.addSequence(seq, false);\r
- if (seq.getHiddenSequences() != null)\r
+ if(startres>=y2)\r
{\r
- for (int h = 0; h < seq.getHiddenSequences().getSize(); h++)\r
- tmp.addSequence(seq.getHiddenSequences().getSequenceAt(h),\r
- false);\r
+ System.out.println("left of line");\r
+ fixedLeft = y2;\r
}\r
+ else\r
+ {\r
+ System.out.println("right of line");\r
+ fixedRight = y2 - 1;\r
+ }\r
}\r
-\r
- sg = tmp;\r
- }*/\r
- // int blankColumn = -1;\r
+ }\r
\r
\r
+ if (groupEditing)\r
+ {\r
// drag to right\r
if (insertGap)\r
{\r
//If the user has selected the whole sequence, and is dragging to\r
// the right, we can still extend the alignment and selectionGroup\r
- if(sg.getStartRes() == 0 && sg.getEndRes() + 1 == av.alignment.getWidth())\r
+ if( sg.getStartRes() == 0\r
+ && sg.getEndRes() == fixedRight\r
+ && sg.getEndRes() == av.alignment.getWidth()-1\r
+ )\r
{\r
sg.setEndRes(av.alignment.getWidth() + startres - lastres);\r
fixedRight = sg.getEndRes();\r
fixedRight--)\r
{\r
blank = true;\r
- for (int s = 0; s < sg.getSize(); s++)\r
+ for (int s = 0; s < sg.getSize(true); s++)\r
{\r
- seq = sg.getSequenceAt(s);\r
+ seq = (SequenceI)sg.getSequences(true).elementAt(s);\r
for (int j = 0; j < startres - lastres; j++)\r
{\r
if (!jalview.util.Comparison.isGap(\r
\r
if (!blank)\r
{\r
- if(sg.getSize() == av.alignment.getHeight())\r
+ if(sg.getSize(false) == av.alignment.getHeight())\r
{\r
//We can still insert gaps if the selectionGroup\r
//contains all the sequences\r
/// Are we able to delete?\r
// ie are all columns blank?\r
\r
- for (int s = 0; s < sg.getSize(); s++)\r
+ for (int s = 0; s < sg.getSize(true); s++)\r
{\r
- seq = sg.getSequenceAt(s);\r
+ seq = (SequenceI)sg.getSequences(true).elementAt(s);\r
\r
for (int j = startres; j < lastres; j++)\r
{\r
}\r
\r
\r
- for (int i = 0; i < sg.getSize(); i++)\r
+ for (int i = 0; i < sg.getSize(true); i++)\r
{\r
- seq = sg.getSequenceAt(i);\r
+ seq = (SequenceI) sg.getSequences(true).elementAt(i);\r
\r
if (insertGap)\r
{\r
{\r
if (fixedColumns && fixedRight != -1)\r
{\r
- if (sg.getStartRes() == 0\r
- && sg.getEndRes() + 1 == av.alignment.getWidth()\r
+ /*if (sg!=null &&\r
+ sg.getStartRes() == 0\r
+ && sg.getEndRes() == fixedRight\r
&& !jalview.util.Comparison.isGap(seq.getCharAt(fixedRight)))\r
{\r
+ System.out.println("still here");\r
//Single sequence edit, whole sequence selected,\r
//extend the selection group\r
sg.setEndRes(av.alignment.getWidth() -1 + startres - lastres);\r
fixedColumns = false;\r
insertChar(j, seq);\r
}\r
- else\r
+ else*/\r
insertChar(j, seq, fixedRight);\r
}\r
else\r
stretchGroup = null;\r
}\r
}\r
- else if (!stretchGroup.sequences.contains(sequence) ||\r
+ else if (!stretchGroup.getSequences(false).contains(sequence) ||\r
(stretchGroup.getStartRes() > res) ||\r
(stretchGroup.getEndRes() < res))\r
{\r
{\r
Vector allFeatures = getAllFeaturesAtRes(sequence.getDatasetSequence(),\r
sequence.findPosition(res));\r
- Vector links = new Vector();;\r
+ Vector links = new Vector();\r
for (int i = 0; i < allFeatures.size(); i++)\r
{\r
SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(i);\r
}\r
}\r
\r
+ jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null, links);\r
+ pop.show(this, evt.getX(), evt.getY());\r
\r
- jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null, links);\r
- pop.show(this, evt.getX(), evt.getY());\r
}\r
else if (stretchGroup == null)\r
{\r
{\r
if (stretchGroup.cs instanceof ClustalxColourScheme)\r
{\r
- ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup.\r
- sequences,\r
+ ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(\r
+ stretchGroup.getSequences(true),\r
stretchGroup.getWidth());\r
}\r
\r
\r
Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);\r
\r
- if (stretchGroup.sequences.contains(nextSeq))\r
+ if (stretchGroup.getSequences(false).contains(nextSeq))\r
{\r
stretchGroup.deleteSequence(seq, false);\r
}\r
SequenceGroup selected = av.getSelectionGroup();\r
\r
if ((selected != null) &&\r
- selected.sequences.contains((SequenceI) node.element()))\r
+ selected.getSequences(false).contains((SequenceI) node.element()))\r
{\r
g.setColor(Color.gray);\r
\r
&& av.getGlobalColourScheme().conservationApplied())\r
{\r
Conservation c = new Conservation("Group",\r
- ResidueProperties.propHash, 3, sg.sequences,\r
+ ResidueProperties.propHash, 3,\r
+ sg.getSequences(false),\r
sg.getStartRes(), sg.getEndRes());\r
\r
c.calculate();\r