From df9b85c1cf39894039018499fe802406cc37f209 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Wed, 12 Jul 2006 11:20:59 +0000 Subject: [PATCH] sequences are private in SequenceGroup --- src/jalview/analysis/AlignmentSorter.java | 2 +- src/jalview/appletgui/APopupMenu.java | 20 ++-- src/jalview/appletgui/AlignFrame.java | 43 ++++---- src/jalview/appletgui/FeatureRenderer.java | 8 +- src/jalview/appletgui/Finder.java | 6 +- src/jalview/appletgui/IdCanvas.java | 4 +- src/jalview/appletgui/PCAPanel.java | 6 +- src/jalview/appletgui/PairwiseAlignPanel.java | 2 +- src/jalview/appletgui/RedundancyPanel.java | 6 +- src/jalview/appletgui/RotatableCanvas.java | 4 +- src/jalview/appletgui/SeqCanvas.java | 6 +- src/jalview/appletgui/SeqPanel.java | 22 ++-- src/jalview/appletgui/TreeCanvas.java | 5 +- src/jalview/datamodel/Alignment.java | 12 +-- src/jalview/datamodel/AlignmentI.java | 9 -- src/jalview/datamodel/HiddenSequences.java | 14 ++- src/jalview/datamodel/Sequence.java | 3 +- src/jalview/datamodel/SequenceGroup.java | 48 ++++++++- src/jalview/gui/AlignFrame.java | 88 ++++++++-------- src/jalview/gui/AlignViewport.java | 6 ++ src/jalview/gui/AlignmentPanel.java | 36 +++++-- src/jalview/gui/AnnotationPanel.java | 115 +++++++++++---------- src/jalview/gui/DasSourceBrowser.java | 70 +++++++------ src/jalview/gui/Finder.java | 6 +- src/jalview/gui/IdCanvas.java | 123 ++++++++++++----------- src/jalview/gui/IdPanel.java | 22 ---- src/jalview/gui/Jalview2XML.java | 4 +- src/jalview/gui/Jalview2XML_V1.java | 2 +- src/jalview/gui/PCAPanel.java | 6 +- src/jalview/gui/PairwiseAlignPanel.java | 2 +- src/jalview/gui/PopupMenu.java | 81 +++++++++++---- src/jalview/gui/RedundancyPanel.java | 6 +- src/jalview/gui/RotatableCanvas.java | 7 +- src/jalview/gui/ScalePanel.java | 8 +- src/jalview/gui/SeqCanvas.java | 30 ++++-- src/jalview/gui/SeqPanel.java | 134 ++++++++++++------------- src/jalview/gui/TreeCanvas.java | 5 +- 37 files changed, 544 insertions(+), 427 deletions(-) diff --git a/src/jalview/analysis/AlignmentSorter.java b/src/jalview/analysis/AlignmentSorter.java index 20101dc..c2814b8 100755 --- a/src/jalview/analysis/AlignmentSorter.java +++ b/src/jalview/analysis/AlignmentSorter.java @@ -184,7 +184,7 @@ public class AlignmentSorter { SequenceGroup sg2 = (SequenceGroup) groups.elementAt(j); - if (sg.getSize() > sg2.getSize()) + if (sg.getSize(false) > sg2.getSize(false)) { groups.insertElementAt(sg, j); diff --git a/src/jalview/appletgui/APopupMenu.java b/src/jalview/appletgui/APopupMenu.java index 1c9b3cd..3401cc4 100755 --- a/src/jalview/appletgui/APopupMenu.java +++ b/src/jalview/appletgui/APopupMenu.java @@ -82,7 +82,7 @@ public class APopupMenu SequenceGroup sg = ap.av.getSelectionGroup(); - if (sg != null && sg.getSize()>0) + if (sg != null && sg.getSize(false)>0) { showText.setState(sg.getDisplayText()); showColourText.setState(sg.getColourText()); @@ -209,12 +209,14 @@ public class APopupMenu SequenceGroup sg = ap.av.getSelectionGroup(); if (sg != null) { - for (int g = 0; g < sg.getSize(); g++) + for (int g = 0; g < sg.getSize(true); g++) { if (source == toggleCase) - sg.getSequenceAt(g).toggleCase(sg.getStartRes(), sg.getEndRes() + 1); + ((SequenceI) sg.getSequences(true).elementAt(g)) + .toggleCase(sg.getStartRes(), sg.getEndRes() + 1); else - sg.getSequenceAt(g).changeCase(source == toUpper, sg.getStartRes(), + ((SequenceI) sg.getSequences(true).elementAt(g)) + .changeCase(source == toUpper, sg.getStartRes(), sg.getEndRes() + 1); } ap.seqPanel.seqCanvas.repaint(); @@ -333,7 +335,7 @@ public class APopupMenu protected void clustalColour_actionPerformed() { SequenceGroup sg = getGroup(); - sg.cs = new ClustalxColourScheme(sg.sequences, ap.av.alignment.getWidth()); + sg.cs = new ClustalxColourScheme(sg.getSequences(true), ap.av.alignment.getWidth()); refresh(); } @@ -393,7 +395,7 @@ public class APopupMenu if (abovePIDColour.getState()) { - sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, ap.av.alignment.getWidth())); int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup().getName()); @@ -421,7 +423,7 @@ public class APopupMenu { SequenceGroup sg = getGroup(); sg.cs = new PIDColourScheme(); - sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, ap.av.alignment.getWidth())); refresh(); } @@ -432,7 +434,7 @@ public class APopupMenu sg.cs = new Blosum62ColourScheme(); - sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, ap.av.alignment.getWidth())); refresh(); @@ -455,7 +457,7 @@ public class APopupMenu Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.sequences, 0, + sg.getSequences(true), 0, ap.av.alignment.getWidth()); c.calculate(); diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 93f48ee..495469c 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -647,13 +647,13 @@ public void itemStateChanged(ItemEvent evt) for (int i = 1; i < viewport.alignment.getHeight(); i++) { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) + if (!sg.getSequences(false).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - if (sg.sequences.contains(temp)) + if (sg.getSequences(false).contains(temp)) { continue; } @@ -667,13 +667,13 @@ public void itemStateChanged(ItemEvent evt) for (int i = viewport.alignment.getHeight() - 2; i > -1; i--) { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) + if (!sg.getSequences(true).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.sequences.contains(temp)) + if (sg.getSequences(true).contains(temp)) { continue; } @@ -697,7 +697,7 @@ public void itemStateChanged(ItemEvent evt) SequenceGroup sg = viewport.getSelectionGroup(); copiedSequences = new StringBuffer(); Hashtable orderedSeqs = new Hashtable(); - for (int i = 0; i < sg.getSize(); i++) + for (int i = 0; i < sg.getSize(false); i++) { SequenceI seq = sg.getSequenceAt(i); int index = viewport.alignment.findIndex(seq); @@ -707,7 +707,7 @@ public void itemStateChanged(ItemEvent evt) int index = 0, startRes, endRes; char ch; - for (int i = 0; i < sg.getSize(); i++) + for (int i = 0; i < sg.getSize(false); i++) { SequenceI seq = null; @@ -853,10 +853,10 @@ public void itemStateChanged(ItemEvent evt) SequenceGroup sg = viewport.getSelectionGroup(); boolean allSequences = false; - if(sg.sequences.size()==viewport.alignment.getHeight()) + if(sg.getSize(false)==viewport.alignment.getHeight()) allSequences = true; - for (int i = 0; i < sg.sequences.size(); i++) + for (int i = 0; i < sg.getSize(false); i++) { SequenceI seq = sg.getSequenceAt(i); int index = viewport.getAlignment().findIndex(seq); @@ -1037,10 +1037,10 @@ public void itemStateChanged(ItemEvent evt) int start=0, end = viewport.alignment.getWidth(); if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().sequences != null - && viewport.getSelectionGroup().sequences.size()>0) + && viewport.getSelectionGroup().getSequences(false) != null + && viewport.getSelectionGroup().getSize(false)>0) { - seqs = viewport.getSelectionGroup().sequences; + seqs = viewport.getSelectionGroup().getSequences(true); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes()+1; } @@ -1146,7 +1146,8 @@ public void itemStateChanged(ItemEvent evt) SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s); if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme) { - ((ClustalxColourScheme)sg.cs).resetClustalX(sg.sequences, sg.getWidth()); + ((ClustalxColourScheme)sg.cs).resetClustalX( + sg.getSequences(true), sg.getWidth()); } sg.recalcConservation(); } @@ -1382,7 +1383,7 @@ public void itemStateChanged(ItemEvent evt) } if (cs instanceof ClustalxColourScheme) { - sg.cs = new ClustalxColourScheme(sg.sequences, sg.getWidth()); + sg.cs = new ClustalxColourScheme(sg.getSequences(true), sg.getWidth()); } else { @@ -1402,7 +1403,7 @@ public void itemStateChanged(ItemEvent evt) || cs instanceof Blosum62ColourScheme) { sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); - sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, sg.getWidth())); + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, sg.getWidth())); } else sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus()); @@ -1411,7 +1412,7 @@ public void itemStateChanged(ItemEvent evt) { Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.sequences, 0, + sg.getSequences(true), 0, viewport.alignment.getWidth() - 1); c.calculate(); c.verdict(false, viewport.ConsPercGaps); @@ -1529,7 +1530,7 @@ public void itemStateChanged(ItemEvent evt) public void pairwiseAlignmentMenuItem_actionPerformed() { - if (viewport.getSelectionGroup().getSize() > 1) + if (viewport.getSelectionGroup().getSize(false) > 1) { Frame frame = new Frame(); frame.add(new PairwiseAlignPanel(alignPanel)); @@ -1559,8 +1560,8 @@ public void itemStateChanged(ItemEvent evt) } if ( (viewport.getSelectionGroup() != null && - viewport.getSelectionGroup().getSize() < 4 && - viewport.getSelectionGroup().getSize() > 0) + viewport.getSelectionGroup().getSize(false) < 4 && + viewport.getSelectionGroup().getSize(false) > 0) || viewport.getAlignment().getHeight() < 4) { return; @@ -1620,9 +1621,11 @@ public void itemStateChanged(ItemEvent evt) final TreePanel tp; if (viewport.getSelectionGroup() != null && - viewport.getSelectionGroup().getSize() > 3) + viewport.getSelectionGroup().getSize(false) > 3) { - tp = new TreePanel(viewport, viewport.getSelectionGroup().sequences, type, + tp = new TreePanel(viewport, + viewport.getSelectionGroup().getSequences(false), + type, pwType, 0, viewport.alignment.getWidth()); } diff --git a/src/jalview/appletgui/FeatureRenderer.java b/src/jalview/appletgui/FeatureRenderer.java index 0f9f393..551dea7 100755 --- a/src/jalview/appletgui/FeatureRenderer.java +++ b/src/jalview/appletgui/FeatureRenderer.java @@ -400,10 +400,10 @@ public class FeatureRenderer { void setTransparency(Graphics g, float value) { - Graphics2D g2 = (Graphics2D) g; - g2.setComposite( - AlphaComposite.getInstance( - AlphaComposite.SRC_OVER, value)); + // Graphics2D g2 = (Graphics2D) g; + // g2.setComposite( + // AlphaComposite.getInstance( + // AlphaComposite.SRC_OVER, value)); } } diff --git a/src/jalview/appletgui/Finder.java b/src/jalview/appletgui/Finder.java index 570241d..47b756d 100755 --- a/src/jalview/appletgui/Finder.java +++ b/src/jalview/appletgui/Finder.java @@ -143,7 +143,7 @@ public class Finder extends Panel implements ActionListener int res = Integer.parseInt(searchString); found = true; - if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize() < 1) + if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize(false) < 1) { seq = (Sequence) av.getAlignment().getSequenceAt(0); } @@ -166,7 +166,7 @@ public class Finder extends Panel implements ActionListener SequenceGroup selection = av.getSelectionGroup(); if (selection != null) { - if (selection.getSize() < 1 || + if (selection.getSize(false) < 1 || (selection.getEndRes() - selection.getStartRes() < 2)) { selection = null; @@ -178,7 +178,7 @@ public class Finder extends Panel implements ActionListener seq = (Sequence) av.alignment.getSequenceAt(seqIndex); - if (selection != null && !selection.sequences.contains(seq)) + if (selection != null && !selection.getSequences(false).contains(seq)) { seqIndex++; resIndex = 0; diff --git a/src/jalview/appletgui/IdCanvas.java b/src/jalview/appletgui/IdCanvas.java index 44ba2e0..f7f1b20 100755 --- a/src/jalview/appletgui/IdCanvas.java +++ b/src/jalview/appletgui/IdCanvas.java @@ -59,7 +59,7 @@ public class IdCanvas gg.setColor(Color.white); } else if (av.getSelectionGroup() != null && - av.getSelectionGroup().sequences.contains(s)) + av.getSelectionGroup().getSequences(false).contains(s)) { gg.setColor(Color.lightGray); gg.fillRect(0, ((i - starty) * charHeight) + ypos, @@ -234,7 +234,7 @@ public class IdCanvas } else if (av.getSelectionGroup() != null && - av.getSelectionGroup().sequences.contains(av.alignment. + av.getSelectionGroup().getSequences(false).contains(av.alignment. getSequenceAt(i))) { currentColor = Color.lightGray; diff --git a/src/jalview/appletgui/PCAPanel.java b/src/jalview/appletgui/PCAPanel.java index a75de06..849a0a9 100755 --- a/src/jalview/appletgui/PCAPanel.java +++ b/src/jalview/appletgui/PCAPanel.java @@ -57,10 +57,10 @@ public class PCAPanel } this.av = av; - if (av.getSelectionGroup()!=null && av.getSelectionGroup().getSize() > 3) + if (av.getSelectionGroup()!=null && av.getSelectionGroup().getSize(false) > 3) { - seqs = new Sequence[av.getSelectionGroup().getSize()]; - for (int i = 0; i < av.getSelectionGroup().getSize(); i++) + seqs = new Sequence[av.getSelectionGroup().getSize(false)]; + for (int i = 0; i < av.getSelectionGroup().getSize(false); i++) { seqs[i] = av.getSelectionGroup().getSequenceAt(i); } diff --git a/src/jalview/appletgui/PairwiseAlignPanel.java b/src/jalview/appletgui/PairwiseAlignPanel.java index 0dd3253..d0b0c98 100755 --- a/src/jalview/appletgui/PairwiseAlignPanel.java +++ b/src/jalview/appletgui/PairwiseAlignPanel.java @@ -47,7 +47,7 @@ public class PairwiseAlignPanel float scores[][] = new float[ap.av.alignment.getHeight()][ap.av.alignment. getHeight()]; double totscore = 0; - int count = ap.av.getSelectionGroup().getSize(); + int count = ap.av.getSelectionGroup().getSize(false); int acount = 0; Sequence seq; diff --git a/src/jalview/appletgui/RedundancyPanel.java b/src/jalview/appletgui/RedundancyPanel.java index 2732612..c71fe29 100755 --- a/src/jalview/appletgui/RedundancyPanel.java +++ b/src/jalview/appletgui/RedundancyPanel.java @@ -101,10 +101,10 @@ public class RedundancyPanel extends SliderPanel implements Runnable, WindowList originalSequences = new Vector(); originalColours = new Hashtable(); - if ( (sg != null) && (sg.getSize() >= 1)) + if ( (sg != null) && (sg.getSize(false) >= 1)) { - height = sg.getSize(); - for (int i = 0; i < sg.getSize(); i++) + height = sg.getSize(false); + for (int i = 0; i < sg.getSize(false); i++) { sel.addElement(sg.getSequenceAt(i)); } diff --git a/src/jalview/appletgui/RotatableCanvas.java b/src/jalview/appletgui/RotatableCanvas.java index 370de5f..f6cbddd 100755 --- a/src/jalview/appletgui/RotatableCanvas.java +++ b/src/jalview/appletgui/RotatableCanvas.java @@ -382,7 +382,7 @@ public class RotatableCanvas if (av.getSelectionGroup() != null) { - if (av.getSelectionGroup().sequences.contains( ( (SequencePoint) points. + if (av.getSelectionGroup().getSequences(false).contains( ( (SequencePoint) points. elementAt(i)).sequence)) { g.setColor(Color.gray); @@ -577,7 +577,7 @@ public class RotatableCanvas { if (av != null) { - if (!av.getSelectionGroup().sequences.contains(sp.sequence)) + if (!av.getSelectionGroup().getSequences(false).contains(sp.sequence)) { av.getSelectionGroup().addSequence(sp.sequence, true); } diff --git a/src/jalview/appletgui/SeqCanvas.java b/src/jalview/appletgui/SeqCanvas.java index 02c9990..0df4322 100755 --- a/src/jalview/appletgui/SeqCanvas.java +++ b/src/jalview/appletgui/SeqCanvas.java @@ -519,12 +519,12 @@ public class SeqCanvas } if ( (sx <= (endRes-startRes)*av.charWidth) && - group.sequences.contains(av.alignment.getSequenceAt( + group.getSequences(false).contains(av.alignment.getSequenceAt( i))) { if ( (bottom == -1) && (i >= alHeight || - !group.sequences.contains( + !group.getSequences(false).contains( av.alignment.getSequenceAt(i + 1)))) { bottom = sy + av.charHeight; @@ -533,7 +533,7 @@ public class SeqCanvas if (!inGroup) { if (((top == -1) && (i == 0)) || - !group.sequences.contains( + !group.getSequences(false).contains( av.alignment.getSequenceAt(i - 1))) { top = sy; diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 5ff10ce..6869964 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -187,7 +187,7 @@ public class SeqPanel SequenceGroup sg = av.selectionGroup; //Find the top and bottom of this group int min = av.alignment.getHeight(), max = 0; - for(int i=0; i max) @@ -223,7 +223,7 @@ public class SeqPanel else { // Now add any sequences between min and max - sg.sequences.removeAllElements(); + sg.getSequences(false).removeAllElements(); for (int i = min; i < max; i++) { sg.addSequence(av.alignment.getSequenceAt(i), false); @@ -720,7 +720,7 @@ public class SeqPanel //Are we editing within a selection group? if (groupEditing - || (sg != null && sg.sequences.contains(seq))) + || (sg != null && sg.getSequences(false).contains(seq))) { fixedColumns = true; @@ -771,7 +771,7 @@ public class SeqPanel fixedRight--) { blank = true; - for (int s = 0; s < sg.getSize(); s++) + for (int s = 0; s < sg.getSize(false); s++) { seq = sg.getSequenceAt(s); for (int j = 0; j < startres - lastres; j++) @@ -790,7 +790,7 @@ public class SeqPanel if (!blank) { - if(sg.getSize() == av.alignment.getHeight()) + if(sg.getSize(false) == av.alignment.getHeight()) { //We can still insert gaps if the selectionGroup //contains all the sequences @@ -812,7 +812,7 @@ public class SeqPanel /// Are we able to delete? // ie are all columns blank? - for (int s = 0; s < sg.getSize(); s++) + for (int s = 0; s < sg.getSize(false); s++) { seq = sg.getSequenceAt(s); @@ -835,7 +835,7 @@ public class SeqPanel } - for (int i = 0; i < sg.getSize(); i++) + for (int i = 0; i < sg.getSize(false); i++) { seq = sg.getSequenceAt(i); @@ -1058,7 +1058,7 @@ public class SeqPanel } } - else if (!stretchGroup.sequences.contains(sequence) + else if (!stretchGroup.getSequences(false).contains(sequence) || stretchGroup.getStartRes() > res || stretchGroup.getEndRes() < res) { @@ -1171,8 +1171,8 @@ public class SeqPanel { if (stretchGroup.cs instanceof ClustalxColourScheme) { - ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup. - sequences, + ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX( + stretchGroup.getSequences(true), stretchGroup.getWidth()); } @@ -1275,7 +1275,7 @@ public class SeqPanel Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq); - if (stretchGroup.sequences.contains(nextSeq)) + if (stretchGroup.getSequences(false).contains(nextSeq)) { stretchGroup.deleteSequence(seq, false); } diff --git a/src/jalview/appletgui/TreeCanvas.java b/src/jalview/appletgui/TreeCanvas.java index e3f6c3c..af1d752 100755 --- a/src/jalview/appletgui/TreeCanvas.java +++ b/src/jalview/appletgui/TreeCanvas.java @@ -188,7 +188,7 @@ public class TreeCanvas // Colour selected leaves differently SequenceGroup selected = av.getSelectionGroup(); if (selected != null && - selected.sequences.contains( (SequenceI) node.element())) + selected.getSequences(false).contains( (SequenceI) node.element())) { g.setColor(Color.gray); @@ -523,7 +523,8 @@ public class TreeCanvas { Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.sequences, sg.getStartRes(), + sg.getSequences(false), + sg.getStartRes(), sg.getEndRes()); c.calculate(); diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index daae7c5..070b927 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -279,19 +279,13 @@ public class Alignment implements AlignmentI /** */ - public SequenceGroup findGroup(int i) - { - return findGroup(getSequenceAt(i)); - } - - /** */ public SequenceGroup findGroup(SequenceI s) { for (int i = 0; i < this.groups.size(); i++) { SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if (sg.sequences.contains(s)) + if (sg.getSequences(false).contains(s)) { return sg; } @@ -315,14 +309,14 @@ public class Alignment implements AlignmentI for (int i = 0; i < gSize; i++) { SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if(sg==null || sg.sequences==null) + if(sg==null || sg.getSequences(false)==null) { this.deleteGroup(sg); gSize--; continue; } - if (sg.sequences.contains(s)) + if (sg.getSequences(false).contains(s)) { temp.addElement(sg); } diff --git a/src/jalview/datamodel/AlignmentI.java b/src/jalview/datamodel/AlignmentI.java index 19b5b1c..dbf3c35 100755 --- a/src/jalview/datamodel/AlignmentI.java +++ b/src/jalview/datamodel/AlignmentI.java @@ -162,15 +162,6 @@ public interface AlignmentI public void removeGaps(); - /** - * Finds group that sequence at index i in alignment is part of. - * - * @param i Index in alignment. - * - * @return First group found for sequence at position i. WARNING : - * Sequences may be members of several groups. This method is incomplete. - */ - public SequenceGroup findGroup(int i); /** * Finds group that given sequence is part of. diff --git a/src/jalview/datamodel/HiddenSequences.java b/src/jalview/datamodel/HiddenSequences.java index 3a5946c..8436120 100755 --- a/src/jalview/datamodel/HiddenSequences.java +++ b/src/jalview/datamodel/HiddenSequences.java @@ -49,12 +49,22 @@ public class HiddenSequences alignment.deleteSequence(sequence); } + public void showAll() + { + for(int i=0; i0) + if(repSequence!=null + && repSequence.getHiddenSequences()==null + && alignmentIndex>0) repSequence = alignment.getSequenceAt(alignmentIndex-1); - if(repSequence.getHiddenSequences()==null) + + if(repSequence!=null + && repSequence.getHiddenSequences()==null) repSequence = null; int start = adjustForHiddenSeqs(alignmentIndex-1); diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 0dec805..50b1e2b 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -624,11 +624,10 @@ public class Sequence implements SequenceI public void showHiddenSequence(SequenceI seq) { hiddenSequences.deleteSequence(seq, false); - if (hiddenSequences.getSize() < 1) + if (hiddenSequences.getSize(false) < 1) { hiddenSequences = null; } - } public void changeCase(boolean toUpper, int start, int end) diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index 6de42b9..ecdf2bc 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -41,9 +41,7 @@ public class SequenceGroup boolean displayBoxes; boolean displayText; boolean colourText; - - /** DOCUMENT ME!! */ - public Vector sequences = new Vector(); + private Vector sequences = new Vector(); int width = -1; /** DOCUMENT ME!! */ @@ -115,6 +113,33 @@ public class SequenceGroup endRes = end; } + public Vector getSequences(boolean includeHidden) + { + if(!includeHidden) + return sequences; + else + { + Vector allSequences = new Vector(); + SequenceI seq; + for (int i = 0; i < sequences.size(); i++) + { + seq = (SequenceI) sequences.elementAt(i); + allSequences.addElement(seq); + if (seq.getHiddenSequences() != null) + { + for (int h = 0; h < seq.getHiddenSequences().getSize(false); h++) + { + allSequences.addElement( + seq.getHiddenSequences().getSequenceAt(h) + ); + } + } + } + + return allSequences; + } + } + /** * DOCUMENT ME! * @@ -344,9 +369,24 @@ public class SequenceGroup * * @return DOCUMENT ME! */ - public int getSize() + public int getSize(boolean includeHidden) { + if(!includeHidden) return sequences.size(); + else + { + int total = sequences.size(); + SequenceI seq; + for (int i = 0; i < sequences.size(); i++) + { + seq = (SequenceI) sequences.elementAt(i); + if (seq.getHiddenSequences() != null) + { + total += seq.getHiddenSequences().getSize(false); + } + } + return total; + } } /** diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 4678c51..e59ee59 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -204,11 +204,6 @@ public class AlignFrame alignPanel.seqPanel.seqCanvas.fr.featuresAdded(); alignPanel.repaint(); } - else - { - System.out.println("No Features found for " + - evt.getDasSource().getNickname()); - } } Hashtable progressBars; @@ -595,14 +590,14 @@ public class AlignFrame { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) + if (!sg.getSequences(false).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - if (sg.sequences.contains(temp)) + if (sg.getSequences(false).contains(temp)) { continue; } @@ -617,14 +612,14 @@ public class AlignFrame { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) + if (!sg.getSequences(false).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.sequences.contains(temp)) + if (sg.getSequences(false).contains(temp)) { continue; } @@ -656,9 +651,9 @@ public class AlignFrame Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); Hashtable orderedSeqs = new Hashtable(); - SequenceI[] seqs = new SequenceI[sg.getSize()]; + SequenceI[] seqs = new SequenceI[sg.getSize(false)]; - for (int i = 0; i < sg.getSize(); i++) + for (int i = 0; i < sg.getSize(false); i++) { SequenceI seq = sg.getSequenceAt(i); int index = viewport.alignment.findIndex(seq); @@ -668,7 +663,7 @@ public class AlignFrame int index = 0, startRes, endRes; char ch; - for (int i = 0; i < sg.getSize(); i++) + for (int i = 0; i < sg.getSize(false); i++) { SequenceI seq = null; @@ -942,7 +937,7 @@ public class AlignFrame HistoryItem.HIDE)); - for (int i = 0; i < sg.sequences.size(); i++) + for (int i = 0; i < sg.getSize(false); i++) { SequenceI seq = sg.getSequenceAt(i); int index = viewport.getAlignment().findIndex(seq); @@ -950,7 +945,7 @@ public class AlignFrame seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1); // If the cut affects all sequences, remove highlighted columns - if (sg.sequences.size() == viewport.alignment.getHeight()) + if (sg.getSize(false) == viewport.alignment.getHeight()) { viewport.getColumnSelection().removeElements(sg.getStartRes(), sg.getEndRes() + 1); @@ -1035,6 +1030,7 @@ public class AlignFrame viewport.setSelectionGroup(null); alignPanel.seqPanel.seqCanvas.highlightSearchResults(null); alignPanel.idPanel.idCanvas.searchResults = null; + alignPanel.repaint(); PaintRefresher.Refresh(null, viewport.alignment); } @@ -1187,10 +1183,10 @@ public class AlignFrame int end = viewport.alignment.getWidth(); if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().sequences != null - && viewport.getSelectionGroup().sequences.size() > 0) + && viewport.getSelectionGroup().getSequences(true) != null + && viewport.getSelectionGroup().getSize(true) > 0) { - seqs = viewport.getSelectionGroup().sequences; + seqs = viewport.getSelectionGroup().getSequences(true); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes()+1; } @@ -1302,7 +1298,8 @@ public class AlignFrame SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s); if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme) { - ((ClustalxColourScheme)sg.cs).resetClustalX(sg.sequences, sg.getWidth()); + ((ClustalxColourScheme)sg.cs).resetClustalX( + sg.getSequences(true), sg.getWidth()); } sg.recalcConservation(); } @@ -1467,12 +1464,20 @@ public class AlignFrame new DBRefFetcher(viewport.alignment, this); } - public void fetchSeqFeatures_actionPerformed(ActionEvent e) + public void defaultDASSource_actionPerformed(ActionEvent e) { - new DasSequenceFeatureFetcher(viewport.alignment, - this); - viewport.setShowSequenceFeatures(true); - showSeqFeatures.setSelected(true); + new DasSequenceFeatureFetcher(viewport.alignment, this); + viewport.setShowSequenceFeatures(true); + showSeqFeatures.setSelected(true); + } + + public void modifyDASSource_actionPerformed(ActionEvent e) + { + DasSourceBrowser dsb = new DasSourceBrowser(); + JInternalFrame frame = new JInternalFrame(); + frame.setContentPane(dsb); + Desktop.addInternalFrame(frame, "Modify DAS Source", + 600,370); } @@ -1725,7 +1730,8 @@ public class AlignFrame if (cs instanceof ClustalxColourScheme) { - sg.cs = new ClustalxColourScheme(sg.sequences, sg.getWidth()); + sg.cs = new ClustalxColourScheme( + sg.getSequences(true), sg.getWidth()); } else if (cs instanceof UserColourScheme) { @@ -1749,9 +1755,10 @@ public class AlignFrame sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); - sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, - sg.getWidth())); - } + sg.cs.setConsensus(AAFrequency.calculate( + sg.getSequences(true), 0, + sg.getWidth())); + } else sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus()); @@ -1760,7 +1767,7 @@ public class AlignFrame { Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.sequences, 0, + sg.getSequences(true), 0, viewport.alignment.getWidth() - 1); c.calculate(); c.verdict(false, viewport.ConsPercGaps); @@ -2011,7 +2018,7 @@ public class AlignFrame public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e) { if ( (viewport.getSelectionGroup() == null) || - (viewport.getSelectionGroup().getSize() < 2)) + (viewport.getSelectionGroup().getSize(false) < 2)) { JOptionPane.showInternalMessageDialog(this, "You must select at least 2 sequences.", @@ -2034,8 +2041,8 @@ public class AlignFrame public void PCAMenuItem_actionPerformed(ActionEvent e) { if ( ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize() < 4) && - (viewport.getSelectionGroup().getSize() > 0)) || + (viewport.getSelectionGroup().getSize(false) < 4) && + (viewport.getSelectionGroup().getSize(false) > 0)) || (viewport.getAlignment().getHeight() < 4)) { JOptionPane.showInternalMessageDialog(this, @@ -2113,15 +2120,15 @@ public class AlignFrame TreePanel tp; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize() > 3)) + (viewport.getSelectionGroup().getSize(false) > 3)) { int s = 0; SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ - while (s < sg.sequences.size()) + while (s < sg.getSize(false)) { - if ( ( (SequenceI) sg.sequences.elementAt(s++)).getLength() < + if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() < sg.getEndRes()) { JOptionPane.showMessageDialog(Desktop.desktop, @@ -2137,7 +2144,8 @@ public class AlignFrame title = title + " on region"; tp = new TreePanel(viewport, - viewport.getSelectionGroup().sequences, type, pwType, + viewport.getSelectionGroup().getSequences(false), + type, pwType, sg.getStartRes(), sg.getEndRes()); } else @@ -2252,12 +2260,12 @@ public class AlignFrame SequenceI[] msa = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize() > 1)) + (viewport.getSelectionGroup().getSize(false) > 1)) { // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface! SequenceGroup seqs = viewport.getSelectionGroup(); int sz; - msa = new SequenceI[sz = seqs.getSize()]; + msa = new SequenceI[sz = seqs.getSize(false)]; for (int i = 0; i < sz; i++) { @@ -2293,19 +2301,19 @@ public class AlignFrame SequenceI[] msa = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize() > 0)) + (viewport.getSelectionGroup().getSize(false) > 0)) { // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface! SequenceGroup seqs = viewport.getSelectionGroup(); - if ( (seqs.getSize() == 1) || !viewport.alignment.isAligned()) + if ( (seqs.getSize(false) == 1) || !viewport.alignment.isAligned()) { seq = (SequenceI) seqs.getSequenceAt(0); } else { int sz; - msa = new SequenceI[sz = seqs.getSize()]; + msa = new SequenceI[sz = seqs.getSize(false)]; for (int i = 0; i < sz; i++) { diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index d4ba5ea..edbfde5 100755 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -1133,6 +1133,12 @@ public class AlignViewport hasHiddenRows = false; } + public void showAllHiddenSeqs() + { + alignment.getHiddenSequences().showAll(); + hasHiddenRows = false; + } + public int adjustForHiddenSeqs(int alignmentIndex) { return alignment.getHiddenSequences().adjustForHiddenSeqs(alignmentIndex); diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 3e38254..2451a96 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -113,8 +113,7 @@ public class AlignmentPanel extends GAlignmentPanel switch (evt.getKeyCode()) { case 27: // escape key - av.setSelectionGroup(null); - repaint(); + alignFrame.deselectAllSequenceMenuItem_actionPerformed(null); break; @@ -698,8 +697,14 @@ public class AlignmentPanel extends GAlignmentPanel if (av.getWrapAlignment()) { - int max = av.alignment.getWidth() / - seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) +1; + int maxwidth = av.alignment.getWidth(); + + if (av.hasHiddenColumns) + maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1; + + int max = maxwidth / + seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) + + 1; vscroll.setMaximum(max); @@ -839,7 +844,7 @@ public class AlignmentPanel extends GAlignmentPanel for (int i = startSeq; i < endSeq; i++) { if ( (av.getSelectionGroup() != null) && - av.getSelectionGroup().sequences.contains( + av.getSelectionGroup().getSequences(false).contains( av.getAlignment().getSequenceAt(i))) { currentColor = Color.gray; @@ -918,10 +923,15 @@ public class AlignmentPanel extends GAlignmentPanel int idWidth = calculateIdWidth().width + 4; + int maxwidth = av.alignment.getWidth(); + if (av.hasHiddenColumns) + maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1; + + int resWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(pwidth - idWidth); - int totalHeight = cHeight * (av.alignment.getWidth() / resWidth + 1); + int totalHeight = cHeight * (maxwidth / resWidth + 1); pg.setColor(Color.white); pg.fillRect(0, 0, pwidth, pheight); @@ -986,8 +996,12 @@ public class AlignmentPanel extends GAlignmentPanel void makeAlignmentImage(int type, File file) { + int maxwidth = av.alignment.getWidth(); + if (av.hasHiddenColumns) + maxwidth = av.getColumnSelection().findColumnPosition(maxwidth); + int height = ( (av.alignment.getHeight() + 1) * av.charHeight) + 30; - int width = idPanel.getWidth() + (av.alignment.getWidth() * av.charWidth); + int width = idPanel.getWidth() + (maxwidth * av.charWidth); if (idPanel.getWidth() == 0) { width += calculateIdWidth().getWidth() + 4; @@ -1002,7 +1016,6 @@ public class AlignmentPanel extends GAlignmentPanel width = alignFrame.getWidth() - 22; } else - width = seqPanel.getWidth() + idPanel.getWidth(); } @@ -1235,7 +1248,12 @@ public class AlignmentPanel extends GAlignmentPanel + hgap + annotationHeight; - int height = ( (av.alignment.getWidth() / chunkWidth) + 1) * cHeight; + int maxwidth = av.alignment.getWidth(); + if (av.hasHiddenColumns) + maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1; + + + int height = ( (maxwidth / chunkWidth) + 1) * cHeight; return height; } diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index bf1372e..b0027a8 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -671,8 +671,8 @@ public class AnnotationPanel extends JPanel implements MouseListener, AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation(); - int x = 0; - int y = 0; + int x = 0, y = 0; + int column=0; char lastSS; int lastSSX; int iconOffset = av.charHeight / 2; @@ -694,7 +694,6 @@ public class AnnotationPanel extends JPanel implements MouseListener, lastSS = ' '; lastSSX = 0; - if (row.graph>0) { if(row.graphGroup>-1 && graphGroupDrawn[ row.graphGroup ] ) @@ -718,18 +717,20 @@ public class AnnotationPanel extends JPanel implements MouseListener, iconOffset = 0; } - int column = startRes; - - while (column < endRes) + x = 0; + while (x < endRes-startRes) { if (av.hasHiddenColumns) { - column = av.getColumnSelection().adjustForHiddenColumns(column); + column = av.getColumnSelection().adjustForHiddenColumns(startRes+x); if (column > row.annotations.length-1) { break; } } + else + column = startRes+x; + if ((row.annotations.length <= column) || (row.annotations[column] == null)) @@ -741,7 +742,6 @@ public class AnnotationPanel extends JPanel implements MouseListener, validRes = true; } - x = (column - startRes) * av.charWidth; if (activeRow == i) { @@ -755,7 +755,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, if (v == column) { - g.fillRect((column - startRes) * av.charWidth, y, + g.fillRect(x * av.charWidth, y, av.charWidth, row.height); } } @@ -773,7 +773,8 @@ public class AnnotationPanel extends JPanel implements MouseListener, if (column == 0 || row.graph>0) { - g.drawString(row.annotations[column].displayCharacter, x+charOffset, + g.drawString(row.annotations[column].displayCharacter, + x*av.charWidth+charOffset, y + iconOffset + 3); } else if ( @@ -784,8 +785,9 @@ public class AnnotationPanel extends JPanel implements MouseListener, (row.annotations[column].displayCharacter.length() <2 && row.annotations[column].secondaryStructure==' '))) { - g.drawString(row.annotations[column].displayCharacter, x+charOffset, - y + iconOffset + 3); + g.drawString(row.annotations[column].displayCharacter, + x*av.charWidth+charOffset, + y + iconOffset + 3); } } @@ -803,13 +805,13 @@ public class AnnotationPanel extends JPanel implements MouseListener, //Off by 1 offset when drawing rects and ovals //to offscreen image on the MAC g.fillRoundRect(lastSSX, y + 4 + iconOffset, - x - lastSSX, 7, 8, 8); + x*av.charWidth - lastSSX, 7, 8, 8); break; } int sCol = (lastSSX / av.charWidth) + startRes; int x1 = lastSSX; - int x2 = x; + int x2 = x*av.charWidth; if(sCol==0 || row.annotations[sCol-1]==null || @@ -822,7 +824,10 @@ public class AnnotationPanel extends JPanel implements MouseListener, if(row.annotations[column]==null || row.annotations[column].secondaryStructure!='H') { - g.fillArc(x-av.charWidth, y+4+iconOffset, av.charWidth, 7, 270,180); + g.fillArc(x*av.charWidth-av.charWidth, + y+4+iconOffset, + av.charWidth, + 7, 270,180); x2 -= av.charWidth/2; } @@ -832,8 +837,10 @@ public class AnnotationPanel extends JPanel implements MouseListener, case 'E': g.setColor(SHEET_COLOUR); g.fillRect(lastSSX, y + 4 + iconOffset, - x - lastSSX - 4, 7); - g.fillPolygon(new int[] { x - 5, x - 5, x }, + x*av.charWidth - lastSSX - 4, 7); + g.fillPolygon(new int[] { x*av.charWidth - 5, + x*av.charWidth - 5, + x*av.charWidth }, new int[] { y + iconOffset, y + 14 + iconOffset, @@ -846,7 +853,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, default: g.setColor(Color.gray); g.fillRect(lastSSX, y + 6 + iconOffset, - x - lastSSX, 2); + x*av.charWidth - lastSSX, 2); break; } @@ -860,17 +867,17 @@ public class AnnotationPanel extends JPanel implements MouseListener, lastSS = ' '; } - lastSSX = x; + lastSSX = x*av.charWidth; } } - column++; + x++; } if(column>=row.annotations.length) column = row.annotations.length-1; - x += av.charWidth; + x ++; if (row.hasIcons) { @@ -883,7 +890,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, //Off by 1 offset when drawing rects and ovals //to offscreen image on the MAC g.fillRoundRect(lastSSX, y + 4 + iconOffset, - x - lastSSX, 7, 8, 8); + x*av.charWidth - lastSSX, 7, 8, 8); break; } @@ -918,9 +925,11 @@ public class AnnotationPanel extends JPanel implements MouseListener, || row.annotations[endRes].secondaryStructure != 'E') { g.fillRect(lastSSX, y + 4 + iconOffset, - x - lastSSX - 4, 7); + x*av.charWidth - lastSSX - 4, 7); g.fillPolygon(new int[] - {x - 5, x - 5, x}, + {x*av.charWidth - 5, + x*av.charWidth - 5, + x*av.charWidth}, new int[] { y + iconOffset, y + 14 + iconOffset, @@ -929,7 +938,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, } else g.fillRect(lastSSX, y + 4 + iconOffset, - x - lastSSX, 7); + x*av.charWidth - lastSSX, 7); break; @@ -937,7 +946,8 @@ public class AnnotationPanel extends JPanel implements MouseListener, default: g.setColor(Color.gray); if(!av.wrapAlignment || endRes==av.endRes) - g.fillRect(lastSSX, y + 6 + iconOffset, x - lastSSX, 2); + g.fillRect(lastSSX, y + 6 + iconOffset, + x*av.charWidth - lastSSX, 2); break; } @@ -1033,24 +1043,25 @@ public class AnnotationPanel extends JPanel implements MouseListener, eRes = Math.min(eRes, aa.annotations.length); - int column = sRes; + int column; int aaMax = aa.annotations.length-1; - while( column < eRes ) + while( x < eRes - sRes ) { + column = sRes + x; if(av.hasHiddenColumns) { column = av.getColumnSelection().adjustForHiddenColumns(column); - if(column > aaMax) - { - break; - } + } + + if (column > aaMax) + { + break; } if(aa.annotations[column]==null || aa.annotations[column-1]==null) { - x+=av.charWidth; - column ++; + x++; continue; } @@ -1059,12 +1070,10 @@ public class AnnotationPanel extends JPanel implements MouseListener, y1 = y - (int) (((aa.annotations[column-1].value-min) / range) * graphHeight); y2 = y - (int) (((aa.annotations[column].value-min) / range) * graphHeight); - g.drawLine(x-av.charWidth/2, y1, x+av.charWidth/2, y2); - x += av.charWidth; - - column++; - + g.drawLine(x*av.charWidth-av.charWidth/2, y1, x*av.charWidth+av.charWidth/2, y2); + x ++; } + if(aa.threshold!=null) { g.setColor(aa.threshold.colour); @@ -1090,12 +1099,10 @@ public class AnnotationPanel extends JPanel implements MouseListener, eRes = Math.min(eRes, aa.annotations.length); - int x=0, y1, y2; + int x=0, y1=y, y2=y; float range = max - min; - y1 = y2 = y; - if(min<0) y2 = y - (int)((0-min / (range))*aa.graphHeight); @@ -1103,25 +1110,25 @@ public class AnnotationPanel extends JPanel implements MouseListener, g.drawLine(x,y2,(eRes-sRes)*av.charWidth,y2); - - int column = sRes; + int column; int aaMax = aa.annotations.length-1; - while( column < eRes ) + while( x < eRes-sRes ) { + column = sRes + x; if(av.hasHiddenColumns) { column = av.getColumnSelection().adjustForHiddenColumns(column); - if(column > aaMax) - { + } + + if(column > aaMax) + { break; - } } if (aa.annotations[column] == null) { - x += av.charWidth; - column ++; + x ++; continue; } @@ -1129,12 +1136,11 @@ public class AnnotationPanel extends JPanel implements MouseListener, y1 = y - (int) (((aa.annotations[column].value-min) / (range)) * aa.graphHeight); if(y1-y2>0) - g.fillRect(x, y2, av.charWidth, y1-y2 ); + g.fillRect(x*av.charWidth, y2, av.charWidth, y1-y2 ); else - g.fillRect(x, y1, av.charWidth, y2-y1 ); + g.fillRect(x*av.charWidth, y1, av.charWidth, y2-y1 ); - x += av.charWidth; - column ++; + x ++ ; } if(aa.threshold!=null) @@ -1155,6 +1161,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, // used by overview window public void drawGraph(Graphics g, AlignmentAnnotation aa, int width, int y, int sRes, int eRes) { + eRes = Math.min(eRes, aa.annotations.length); g.setColor(Color.white); g.fillRect(0, 0, width, y); g.setColor(new Color(0, 0, 180)); diff --git a/src/jalview/gui/DasSourceBrowser.java b/src/jalview/gui/DasSourceBrowser.java index 0f4cf5f..afacb41 100755 --- a/src/jalview/gui/DasSourceBrowser.java +++ b/src/jalview/gui/DasSourceBrowser.java @@ -51,9 +51,9 @@ public class DasSourceBrowser extends GDasSourceBrowser displayFullDetails(null); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - capabilities.addListSelectionListener(this); - coords1.addListSelectionListener(this); - coords2.addListSelectionListener(this); + filter1.addListSelectionListener(this); + filter2.addListSelectionListener(this); + filter3.addListSelectionListener(this); //Ask to be notified of selection changes. ListSelectionModel rowSM = table.getSelectionModel(); @@ -273,49 +273,53 @@ public class DasSourceBrowser extends GDasSourceBrowser private void setCapabilities(DasSource[] sources) { - Vector vcapabilities = new Vector(); - Vector vcoords = new Vector(); - Vector vcoords2 = new Vector(); + Vector authority = new Vector(); + Vector type = new Vector(); + Vector label = new Vector(); - vcapabilities.addElement("All"); - vcoords.addElement("All"); - vcoords2.addElement("All"); + authority.addElement("Any"); + type.addElement("Any"); + label.addElement("Any"); + label.addElement("NOT IMPLEMENTED YET"); + filter3.setEnabled(false); for (int i = 0; i < sources.length; i++) { DasSource ds = sources[i]; - String[] scap = ds.getCapabilities(); - for (int s = 0; s < scap.length; s++) - { - if (!vcapabilities.contains(scap[s])) - { - vcapabilities.addElement(scap[s]); - } - } DasCoordinateSystem[] dcs = ds.getCoordinateSystem(); for (int j = 0; j < dcs.length; j++) { - if (!vcoords.contains(dcs[j].getCategory())) - vcoords.addElement(dcs[j].getCategory()); + if (!type.contains(dcs[j].getCategory())) + type.addElement(dcs[j].getCategory()); + + if (!authority.contains(dcs[j].getName())) + authority.addElement(dcs[j].getName()); + } - if (!vcoords2.contains(dcs[j].getName())) - vcoords2.addElement(dcs[j].getName()); + String[] slabels = ds.getLabels(); + for (int s = 0; s < slabels.length; s++) + { + if (!label.contains(slabels[s])) + { + label.addElement(slabels[s]); + } } + } - capabilities.setListData(vcapabilities); - coords1.setListData(vcoords); - coords2.setListData(vcoords2); + filter1.setListData(authority); + filter2.setListData(type); + filter3.setListData(label); javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { - capabilities.setSelectedIndex(0); - coords1.setSelectedIndex(0); - coords2.setSelectedIndex(0); + filter1.setSelectedIndex(0); + filter2.setSelectedIndex(0); + filter3.setSelectedIndex(0); } }); } @@ -553,7 +557,7 @@ public class DasSourceBrowser extends GDasSourceBrowser { ds = dasSources[i]; - if (!selectedInList(capabilities, ds.getCapabilities())) + if (!selectedInList(filter3, ds.getLabels())) { continue; } @@ -561,10 +565,10 @@ public class DasSourceBrowser extends GDasSourceBrowser DasCoordinateSystem[] dcs = ds.getCoordinateSystem(); for (int j = 0; j < dcs.length; j++) { - if (selectedInList(coords1, new String[] - {dcs[j].getCategory()}) - && selectedInList(coords2, new String[] - {dcs[j].getName()})) + if (selectedInList(filter1, new String[] + {dcs[j].getName()}) + && selectedInList(filter2, new String[] + {dcs[j].getCategory()})) { names.add(ds.getNickname()); selected.add(new Boolean( @@ -590,7 +594,7 @@ public class DasSourceBrowser extends GDasSourceBrowser Object[] selection = list.getSelectedValues(); for (int i = 0; i < selection.length; i++) { - if (selection[i].equals("All")) + if (selection[i].equals("Any")) return true; for (int j = 0; j < items.length; j++) diff --git a/src/jalview/gui/Finder.java b/src/jalview/gui/Finder.java index 49a9656..e0ceeef 100755 --- a/src/jalview/gui/Finder.java +++ b/src/jalview/gui/Finder.java @@ -173,7 +173,7 @@ public class Finder extends GFinder { int res = Integer.parseInt(searchString); found = true; - if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize() < 1) + if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize(false) < 1) { seq = (Sequence) av.getAlignment().getSequenceAt(0); } @@ -196,7 +196,7 @@ public class Finder extends GFinder if (selection != null) { - if ((selection.getSize() < 1) || + if ((selection.getSize(false) < 1) || ((selection.getEndRes() - selection.getStartRes()) < 2)) { selection = null; @@ -207,7 +207,7 @@ public class Finder extends GFinder { seq = (Sequence) av.alignment.getSequenceAt(seqIndex); - if ((selection != null) && !selection.sequences.contains(seq)) + if ((selection != null) && !selection.getSequences(false).contains(seq)) { seqIndex++; resIndex = 0; diff --git a/src/jalview/gui/IdCanvas.java b/src/jalview/gui/IdCanvas.java index 214f218..a05c6c0 100755 --- a/src/jalview/gui/IdCanvas.java +++ b/src/jalview/gui/IdCanvas.java @@ -78,7 +78,7 @@ public class IdCanvas extends JPanel gg.setColor(Color.white); } else if ((av.getSelectionGroup() != null) && - av.getSelectionGroup().sequences.contains(s)) + av.getSelectionGroup().getSequences(false).contains(s)) { gg.setColor(Color.lightGray); gg.fillRect(0, ((i - starty) * charHeight) + ypos, getWidth(), @@ -201,6 +201,7 @@ public class IdCanvas extends JPanel { Font italic = new Font(av.getFont().getName(), Font.ITALIC, av.getFont().getSize()); + gg.setFont(italic); if (av.antiAlias) @@ -212,6 +213,12 @@ public class IdCanvas extends JPanel if (av.getWrapAlignment()) { + int maxwidth = av.alignment.getWidth(); + int alheight = av.alignment.getHeight(); + + if (av.hasHiddenColumns) + maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1; + int annotationHeight = 0; AnnotationLabels labels = null; @@ -226,78 +233,67 @@ public class IdCanvas extends JPanel if (av.scaleAboveWrapped) hgap += av.charHeight; - int cHeight = av.getAlignment().getHeight() * av.charHeight + int cHeight = alheight * av.charHeight + hgap + annotationHeight; - int rowSize = av.getEndRes() - av.getStartRes(); + int rowSize = av.getEndRes() - av.getStartRes(); + // Draw the rest of the panels for (int ypos = hgap, row = av.startRes; - (ypos <= getHeight()) && (row < av.alignment.getWidth()); + (ypos <= getHeight()) && (row < maxwidth); ypos += cHeight, row += rowSize) { - for (int i = starty; i < av.alignment.getHeight(); i++) + for (int i = starty; i < alheight; i++) + { + if (av.hasHiddenRows) { - - SequenceI s = av.alignment.getSequenceAt(i); - gg.setFont(italic); - drawIdString(gg, s, i, 0, ypos); + setHiddenFont(i, starty); } + else + gg.setFont(italic); + + SequenceI s = av.alignment.getSequenceAt(i); + drawIdString(gg, s, i, 0, ypos); + } if(labels!=null) { - gg.translate(0, ypos+(av.getAlignment().getHeight() * av.charHeight)); + gg.translate(0, ypos+(alheight * av.charHeight)); labels.drawComponent(gg, getWidth()); - gg.translate(0, -ypos-(av.getAlignment().getHeight() * av.charHeight)); - + gg.translate(0, -ypos-(alheight * av.charHeight)); } } } else { //Now draw the id strings - int tmp, hiddenIndex = starty; - boolean markHidden = false; for (int i = starty; i < endy; i++) { if (av.hasHiddenRows) { - tmp = av.adjustForHiddenSeqs(i); - if(hiddenIndex != tmp) - { - hiddenIndex = tmp; - markHidden = true; - } - else - markHidden = false; - - hiddenIndex++; + setHiddenFont(i, starty); } - if(av.hasHiddenRows && av.alignment.getSequenceAt(i).getHiddenSequences()!=null) - { - currentTextColor = Color.blue; - } - else // Selected sequence colours - if ((searchResults != null) && - searchResults.contains(av.alignment.getSequenceAt(i))) + if ( (searchResults != null) && + searchResults.contains(av.alignment.getSequenceAt(i))) { - currentColor = Color.black; - currentTextColor = Color.white; + currentColor = Color.black; + currentTextColor = Color.white; } - else if ((av.getSelectionGroup() != null) && - av.getSelectionGroup().sequences.contains( - av.alignment.getSequenceAt(i))) + else if ( (av.getSelectionGroup() != null) && + av.getSelectionGroup().getSequences(false).contains( + av.alignment.getSequenceAt(i))) { - currentColor = Color.lightGray; - currentTextColor = Color.black; + currentColor = Color.lightGray; + currentTextColor = Color.black; } else { - currentColor = av.alignment.getSequenceAt(i).getColor(); - currentTextColor = Color.black; + currentColor = av.alignment.getSequenceAt(i).getColor(); + currentTextColor = Color.black; } gg.setColor(currentColor); @@ -305,22 +301,6 @@ public class IdCanvas extends JPanel gg.fillRect(0, (i - starty) * av.charHeight, getWidth(), av.charHeight); - if (markHidden) - { - gg.setColor(Color.blue); - // gg.drawLine(0, (i-starty)*av.charHeight, getWidth(),(i-starty)*av.charHeight); - gg.fillPolygon(new int[] { getWidth() - av.charHeight, - getWidth() - av.charHeight, - getWidth() }, - new int[] - { - (i-starty)*av.charHeight -av.charHeight/4, - (i-starty)*av.charHeight +av.charHeight/4, - (i-starty)*av.charHeight - }, 3); - - } - gg.setColor(currentTextColor); String string = av.alignment.getSequenceAt(i).getDisplayId( av.getShowJVSuffix()); @@ -330,12 +310,37 @@ public class IdCanvas extends JPanel (av.charHeight / 5)); } - // add a border - // gg.setColor(Color.cyan); - // gg.fillRect(getWidth() - 4, 0, 4, getHeight()); } } + void setHiddenFont(int i, int starty) + { + Font italic = new Font(av.getFont().getName(), Font.ITALIC, + av.getFont().getSize()); + Font bold = new Font(av.getFont().getName(), Font.BOLD, + av.getFont().getSize()); + + int tmp, hiddenIndex = starty; + tmp = av.adjustForHiddenSeqs(i); + + if (av.adjustForHiddenSeqs(i - 1) == tmp - 1) + { + hiddenIndex = tmp; + } + + if (hiddenIndex != tmp) + { + hiddenIndex = tmp; + } + + hiddenIndex++; + + if (av.alignment.getSequenceAt(i).getHiddenSequences() != null) + gg.setFont(bold); + else + gg.setFont(italic); + } + /** * DOCUMENT ME! * diff --git a/src/jalview/gui/IdPanel.java b/src/jalview/gui/IdPanel.java index 0322bdd..d1dc11d 100755 --- a/src/jalview/gui/IdPanel.java +++ b/src/jalview/gui/IdPanel.java @@ -106,28 +106,6 @@ public class IdPanel extends JPanel implements MouseListener, tip.append(""); setToolTipText(tip.toString()); } - - if(av.hasHiddenRows) - { - if(av.adjustForHiddenSeqs(seq) - - av.adjustForHiddenSeqs(seq-1)>1) - { - JPopupMenu pop = new JPopupMenu(); - JMenuItem item = new JMenuItem("Reveal"); - item.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - av.showSequence(seq); - alignPanel.repaint(); - if(alignPanel.overviewPanel!=null) - alignPanel.overviewPanel.updateOverviewImage(); - } - }); - pop.add(item); - pop.show(this, e.getX(), e.getY()); - } - } } diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index f79a158..ca6e9f4 100755 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -429,7 +429,7 @@ public class Jalview2XML groups[i].setDisplayText(sg.getDisplayText()); groups[i].setColourText(sg.getColourText()); - for (int s = 0; s < sg.getSize(); s++) + for (int s = 0; s < sg.getSize(false); s++) { jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence) sg.getSequenceAt(s); int index = seqids.indexOf(seq); @@ -915,7 +915,7 @@ public class Jalview2XML if (groups[i].getConsThreshold() != 0) { jalview.analysis.Conservation c = new jalview.analysis.Conservation("All", - ResidueProperties.propHash, 3, sg.sequences, 0, + ResidueProperties.propHash, 3, sg.getSequences(false), 0, sg.getWidth() - 1); c.calculate(); c.verdict(false, 25); diff --git a/src/jalview/gui/Jalview2XML_V1.java b/src/jalview/gui/Jalview2XML_V1.java index d84b8db..1ccf7e6 100755 --- a/src/jalview/gui/Jalview2XML_V1.java +++ b/src/jalview/gui/Jalview2XML_V1.java @@ -318,7 +318,7 @@ public class Jalview2XML_V1 if (groups[i].getConsThreshold() != 0) { jalview.analysis.Conservation c = new jalview.analysis.Conservation("All", - ResidueProperties.propHash, 3, sg.sequences, 0, + ResidueProperties.propHash, 3, sg.getSequences(false), 0, sg.getWidth() - 1); c.calculate(); c.verdict(false, 25); diff --git a/src/jalview/gui/PCAPanel.java b/src/jalview/gui/PCAPanel.java index e680dde..64253b4 100755 --- a/src/jalview/gui/PCAPanel.java +++ b/src/jalview/gui/PCAPanel.java @@ -59,11 +59,11 @@ public class PCAPanel extends GPCAPanel implements Runnable boolean sameLength = true; if ((av.getSelectionGroup() != null) && - (av.getSelectionGroup().getSize() > 3)) + (av.getSelectionGroup().getSize(false) > 3)) { - seqs = new Sequence[av.getSelectionGroup().getSize()]; + seqs = new Sequence[av.getSelectionGroup().getSize(false)]; int length = av.getSelectionGroup().getSequenceAt(0).getLength(); - for (int i = 0; i < av.getSelectionGroup().getSize(); i++) + for (int i = 0; i < av.getSelectionGroup().getSize(false); i++) { seqs[i] = av.getSelectionGroup().getSequenceAt(i); if(seqs[i].getLength()!=length) diff --git a/src/jalview/gui/PairwiseAlignPanel.java b/src/jalview/gui/PairwiseAlignPanel.java index 76c75cb..5e719f2 100755 --- a/src/jalview/gui/PairwiseAlignPanel.java +++ b/src/jalview/gui/PairwiseAlignPanel.java @@ -52,7 +52,7 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel Vector selsubset = new Vector(); - for (int i = 0, j = av.getSelectionGroup().getSize(); i < j; i++) + for (int i = 0, j = av.getSelectionGroup().getSize(false); i < j; i++) { if (av.getAlignment().getSequences().contains(av.getSelectionGroup() .getSequenceAt(i))) diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index 480b195..34ffd4c 100755 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -143,7 +143,7 @@ public class PopupMenu extends JPopupMenu } } - /* menuItem = new JMenuItem("Hide Sequences"); + menuItem = new JMenuItem("Hide Sequences"); menuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) @@ -153,7 +153,8 @@ public class PopupMenu extends JPopupMenu }); sequenceMenu.add(menuItem); - if(ap.av.getSelectionGroup() !=null && ap.av.getSelectionGroup().getSize()>1) + if(ap.av.getSelectionGroup() !=null + && ap.av.getSelectionGroup().getSize(false)>1) { menuItem = new JMenuItem("Represent Group with " + seq.getName()); menuItem.addActionListener(new java.awt.event.ActionListener() @@ -164,7 +165,46 @@ public class PopupMenu extends JPopupMenu } }); sequenceMenu.add(menuItem); - }*/ + } + + if (ap.av.hasHiddenRows) + { + final int index = ap.av.alignment.findIndex(seq); + + if (ap.av.adjustForHiddenSeqs(index) - + ap.av.adjustForHiddenSeqs(index - 1) > 1) + { + menuItem = new JMenuItem("Reveal"); + menuItem.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + ap.av.showSequence(index); + ap.repaint(); + if (ap.overviewPanel != null) + ap.overviewPanel.updateOverviewImage(); + } + }); + sequenceMenu.add(menuItem); + } + + menuItem = new JMenuItem("Reveal All"); + menuItem.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + ap.av.showAllHiddenSeqs(); + ap.repaint(); + if (ap.overviewPanel != null) + ap.overviewPanel.updateOverviewImage(); + } + }); + + sequenceMenu.add(menuItem); + + + + } } @@ -607,7 +647,7 @@ public class PopupMenu extends JPopupMenu protected void clustalColour_actionPerformed(ActionEvent e) { SequenceGroup sg = getGroup(); - sg.cs = new ClustalxColourScheme(sg.sequences, + sg.cs = new ClustalxColourScheme(sg.getSequences(true), ap.av.alignment.getWidth()); refresh(); } @@ -713,7 +753,8 @@ public class PopupMenu extends JPopupMenu if (abovePIDColour.isSelected()) { - sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, + sg.cs.setConsensus(AAFrequency.calculate( + sg.getSequences(true), 0, ap.av.alignment.getWidth())); int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, @@ -759,7 +800,7 @@ public class PopupMenu extends JPopupMenu { SequenceGroup sg = getGroup(); sg.cs = new PIDColourScheme(); - sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, ap.av.alignment.getWidth())); refresh(); } @@ -775,7 +816,7 @@ public class PopupMenu extends JPopupMenu sg.cs = new Blosum62ColourScheme(); - sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, ap.av.alignment.getWidth())); refresh(); @@ -806,7 +847,8 @@ public class PopupMenu extends JPopupMenu if (conservationMenuItem.isSelected()) { Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, sg.sequences, 0, + ResidueProperties.propHash, 3, + sg.getSequences(true), 0, ap.av.alignment.getWidth()); c.calculate(); @@ -861,9 +903,9 @@ public class PopupMenu extends JPopupMenu SequenceGroup sg = getGroup(); StringBuffer sb = new StringBuffer(); - for (int i = 0; i < sg.sequences.size(); i++) + for (int i = 0; i < sg.getSize(false); i++) { - Sequence tmp = (Sequence) sg.sequences.get(i); + Sequence tmp = (Sequence) sg.getSequences(false).elementAt(i); sb.append(tmp.getSequence(sg.getStartRes(), sg.getEndRes() + 1)); sb.append("\n"); } @@ -1030,14 +1072,14 @@ public class PopupMenu extends JPopupMenu void hideSequences(boolean representGroup) { SequenceGroup sg = ap.av.getSelectionGroup(); - if(sg==null || sg.getSize()<1) + if(sg==null || sg.getSize(false)<1) { ap.av.hideSequence(sequence); return; } int index = 0; - while(index < sg.sequences.size()) + while(index < sg.getSize(false)) { if(representGroup && sg.getSequenceAt(index)!=sequence) { @@ -1071,9 +1113,10 @@ public class PopupMenu extends JPopupMenu if(sg==null) return; - for(int g=0; g= 1)) + if ( (sg != null) && (sg.getSize(false) >= 1)) { - height = sg.getSize(); - for (int i = 0; i < sg.getSize(); i++) + height = sg.getSize(false); + for (int i = 0; i < sg.getSize(false); i++) { sel.addElement(sg.getSequenceAt(i)); } diff --git a/src/jalview/gui/RotatableCanvas.java b/src/jalview/gui/RotatableCanvas.java index 724b9fb..8af3d65 100755 --- a/src/jalview/gui/RotatableCanvas.java +++ b/src/jalview/gui/RotatableCanvas.java @@ -411,7 +411,7 @@ public class RotatableCanvas extends JPanel implements MouseListener, if (av.getSelectionGroup() != null) { - if (av.getSelectionGroup().sequences.contains( + if (av.getSelectionGroup().getSequences(false).contains( ((SequencePoint) points.elementAt(i)).sequence)) { g.setColor(Color.gray); @@ -669,8 +669,6 @@ public class RotatableCanvas extends JPanel implements MouseListener, */ public void rectSelect(int x1, int y1, int x2, int y2) { - boolean changedSel = false; - for (int i = 0; i < npoint; i++) { SequencePoint sp = (SequencePoint) points.elementAt(i); @@ -683,9 +681,8 @@ public class RotatableCanvas extends JPanel implements MouseListener, { if (av != null) { - if (!av.getSelectionGroup().sequences.contains(sp.sequence)) + if (!av.getSelectionGroup().getSequences(false).contains(sp.sequence)) { - changedSel = true; av.getSelectionGroup().addSequence(sp.sequence, true); } } diff --git a/src/jalview/gui/ScalePanel.java b/src/jalview/gui/ScalePanel.java index 9add747..b3d7cda 100755 --- a/src/jalview/gui/ScalePanel.java +++ b/src/jalview/gui/ScalePanel.java @@ -73,7 +73,7 @@ public class ScalePanel extends JPanel implements MouseMotionListener, MouseList min = res; max = res; - /* if(reveal != null && SwingUtilities.isRightMouseButton(evt)) + if(reveal != null && SwingUtilities.isRightMouseButton(evt)) { JPopupMenu pop = new JPopupMenu(); JMenuItem item = new JMenuItem("Reveal"); @@ -110,10 +110,10 @@ public class ScalePanel extends JPanel implements MouseMotionListener, MouseList pop.show(this, evt.getX(), evt.getY()); } - else*/ + else if (av.getColumnSelection().contains(res)) { - /* if( SwingUtilities.isRightMouseButton(evt)) + if( SwingUtilities.isRightMouseButton(evt)) { JPopupMenu pop = new JPopupMenu(); JMenuItem item = new JMenuItem("Hide Columns"); @@ -131,7 +131,7 @@ public class ScalePanel extends JPanel implements MouseMotionListener, MouseList pop.show(this, evt.getX(), evt.getY()); } - else*/ + else { av.getColumnSelection().removeElement(res); av.setSelectionGroup(null); diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index 15c15c3..c4de7cd 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -133,9 +133,16 @@ public class SeqCanvas extends JComponent ypos += av.charHeight; if(av.hasHiddenColumns) - startx = av.getColumnSelection().adjustForHiddenColumns(startx); + { + startx = av.getColumnSelection().adjustForHiddenColumns(startx); + endx = av.getColumnSelection().adjustForHiddenColumns(endx); + } - // EAST SCALE + int maxwidth = av.alignment.getWidth(); + if (av.hasHiddenColumns) + maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1; + + // WEST SCALE for (int i = 0; i < av.alignment.getHeight(); i++) { SequenceI seq = av.alignment.getSequenceAt(i); @@ -404,7 +411,6 @@ public class SeqCanvas extends JComponent public void drawWrappedPanel(Graphics g, int canvasWidth, int canvasHeight, int startRes) { - AlignmentI al = av.getAlignment(); FontMetrics fm = getFontMetrics(av.getFont()); @@ -435,14 +441,18 @@ public class SeqCanvas extends JComponent int endx; int ypos = hgap; + int maxwidth = av.alignment.getWidth(); + + if(av.hasHiddenColumns) + maxwidth = av.getColumnSelection().findColumnPosition(maxwidth)-1; - while ((ypos <= canvasHeight) && (startRes < av.alignment.getWidth())) + while ((ypos <= canvasHeight) && (startRes < maxwidth)) { endx = startRes + cWidth -1; - if (endx > al.getWidth()) + if (endx > maxwidth) { - endx = al.getWidth(); + endx = maxwidth; } g.setFont(av.getFont()); @@ -689,11 +699,11 @@ public class SeqCanvas extends JComponent } if ( (sx <= (endRes-startRes)*av.charWidth) && - group.sequences.contains(av.alignment.getSequenceAt( - i))) + group.getSequences(false). + contains(av.alignment.getSequenceAt(i))) { if ((bottom == -1) && - !group.sequences.contains( + !group.getSequences(false).contains( av.alignment.getSequenceAt(i + 1))) { bottom = sy + av.charHeight; @@ -702,7 +712,7 @@ public class SeqCanvas extends JComponent if (!inGroup) { if (((top == -1) && (i == 0)) || - !group.sequences.contains( + !group.getSequences(false).contains( av.alignment.getSequenceAt(i - 1))) { top = sy; diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index af1302e..4135cb0 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -308,7 +308,7 @@ public class SeqPanel extends JPanel implements MouseListener, SequenceGroup sg = av.selectionGroup; //Find the top and bottom of this group int min = av.alignment.getHeight(), max = 0; - for(int i=0; i max) @@ -344,7 +344,7 @@ public class SeqPanel extends JPanel implements MouseListener, else { // Now add any sequences between min and max - sg.sequences.clear(); + sg.getSequences(false).clear(); for (int i = min; i < max; i++) { sg.addSequence(av.alignment.getSequenceAt(i), false); @@ -425,7 +425,6 @@ public class SeqPanel extends JPanel implements MouseListener, editOccurred(); - endEditing(); ap.repaint(); } @@ -729,25 +728,29 @@ public class SeqPanel extends JPanel implements MouseListener, boolean fixedColumns = false; SequenceGroup sg = av.getSelectionGroup(); - if(groupEditing && sg==null) - return; if (!groupEditing && av.hasHiddenRows) { - //This needs to check all the sequences in a group edit,m - // not just the startseq if (av.alignment.getSequenceAt(startseq).getHiddenSequences() != null) { groupEditing = true; } } + //No group, but the sequence may represent a group + if (groupEditing + && sg == null + && av.alignment.getSequenceAt(startseq).getHiddenSequences() == null) + { + groupEditing = false; + } + SequenceI seq = av.alignment.getSequenceAt(startseq); StringBuffer message = new StringBuffer(); if (groupEditing) message.append("Edit group:"); else - message.append("Edit sequence: "+seq.getName()); + message.append("Edit sequence: "+seq.getName()); if(insertGap) message.append(" insert "); @@ -760,10 +763,19 @@ public class SeqPanel extends JPanel implements MouseListener, //Are we editing within a selection group? if (groupEditing - || (sg != null && sg.sequences.contains(seq))) + || (sg != null && sg.getSequences(true).contains(seq))) { fixedColumns = true; + //sg might be null as the user may only see 1 sequence, + //but the sequence represents a group + if (sg == null) + { + sg = new SequenceGroup(null, null, false, false, false, 0, + av.alignment.getWidth()-1); + sg.addSequence(av.alignment.getSequenceAt(startseq), false); + } + fixedLeft = sg.getStartRes(); fixedRight = sg.getEndRes(); @@ -789,64 +801,48 @@ public class SeqPanel extends JPanel implements MouseListener, } - - if(av.hasHiddenColumns) - { - fixedColumns = true; - int y1 = av.getColumnSelection().getHiddenBoundaryLeft(startres); - int y2 = av.getColumnSelection().getHiddenBoundaryRight(startres); - - if( ( insertGap && startres>y1 && lastresy2) ) - { - endEditing(); - return; - } - - if(fixedRightfixedLeft && fixedLeft==-1) - fixedLeft = y1; - } - - if (groupEditing) + if(av.hasHiddenColumns ) { + fixedColumns = true; + int y1 = av.getColumnSelection().getHiddenBoundaryLeft(startres); + int y2 = av.getColumnSelection().getHiddenBoundaryRight(startres); - /*if (av.hasHiddenRows) - { - //sg might be null as the user may only see 1 sequence - if (sg == null) + if ( (insertGap && startres > y1 && lastres < y1) + || (!insertGap && startres < y2 && lastres > y2)) { - sg = new SequenceGroup(); - sg.addSequence(av.alignment.getSequenceAt(startseq), false); + endEditing(); + return; } - SequenceGroup tmp = new SequenceGroup(); - - //Do any of the sequences have hidden associates? - for (int s = 0; s < sg.getSize(); s++) + //System.out.print(y1+" "+y2+" "+fixedLeft+" "+fixedRight+"~~"); + //Selection spans a hidden region + if(fixedLefty2 || fixedRight==-1)) { - seq = sg.getSequenceAt(s); - tmp.addSequence(seq, false); - if (seq.getHiddenSequences() != null) + if(startres>=y2) { - for (int h = 0; h < seq.getHiddenSequences().getSize(); h++) - tmp.addSequence(seq.getHiddenSequences().getSequenceAt(h), - false); + System.out.println("left of line"); + fixedLeft = y2; } + else + { + System.out.println("right of line"); + fixedRight = y2 - 1; + } } - - sg = tmp; - }*/ - // int blankColumn = -1; + } + if (groupEditing) + { // drag to right if (insertGap) { //If the user has selected the whole sequence, and is dragging to // the right, we can still extend the alignment and selectionGroup - if(sg.getStartRes() == 0 && sg.getEndRes() + 1 == av.alignment.getWidth()) + if( sg.getStartRes() == 0 + && sg.getEndRes() == fixedRight + && sg.getEndRes() == av.alignment.getWidth()-1 + ) { sg.setEndRes(av.alignment.getWidth() + startres - lastres); fixedRight = sg.getEndRes(); @@ -861,9 +857,9 @@ public class SeqPanel extends JPanel implements MouseListener, fixedRight--) { blank = true; - for (int s = 0; s < sg.getSize(); s++) + for (int s = 0; s < sg.getSize(true); s++) { - seq = sg.getSequenceAt(s); + seq = (SequenceI)sg.getSequences(true).elementAt(s); for (int j = 0; j < startres - lastres; j++) { if (!jalview.util.Comparison.isGap( @@ -880,7 +876,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (!blank) { - if(sg.getSize() == av.alignment.getHeight()) + if(sg.getSize(false) == av.alignment.getHeight()) { //We can still insert gaps if the selectionGroup //contains all the sequences @@ -902,9 +898,9 @@ public class SeqPanel extends JPanel implements MouseListener, /// Are we able to delete? // ie are all columns blank? - for (int s = 0; s < sg.getSize(); s++) + for (int s = 0; s < sg.getSize(true); s++) { - seq = sg.getSequenceAt(s); + seq = (SequenceI)sg.getSequences(true).elementAt(s); for (int j = startres; j < lastres; j++) { @@ -925,9 +921,9 @@ public class SeqPanel extends JPanel implements MouseListener, } - for (int i = 0; i < sg.getSize(); i++) + for (int i = 0; i < sg.getSize(true); i++) { - seq = sg.getSequenceAt(i); + seq = (SequenceI) sg.getSequences(true).elementAt(i); if (insertGap) { @@ -968,17 +964,19 @@ public class SeqPanel extends JPanel implements MouseListener, { if (fixedColumns && fixedRight != -1) { - if (sg.getStartRes() == 0 - && sg.getEndRes() + 1 == av.alignment.getWidth() + /*if (sg!=null && + sg.getStartRes() == 0 + && sg.getEndRes() == fixedRight && !jalview.util.Comparison.isGap(seq.getCharAt(fixedRight))) { + System.out.println("still here"); //Single sequence edit, whole sequence selected, //extend the selection group sg.setEndRes(av.alignment.getWidth() -1 + startres - lastres); fixedColumns = false; insertChar(j, seq); } - else + else*/ insertChar(j, seq, fixedRight); } else @@ -1219,7 +1217,7 @@ public class SeqPanel extends JPanel implements MouseListener, stretchGroup = null; } } - else if (!stretchGroup.sequences.contains(sequence) || + else if (!stretchGroup.getSequences(false).contains(sequence) || (stretchGroup.getStartRes() > res) || (stretchGroup.getEndRes() < res)) { @@ -1257,7 +1255,7 @@ public class SeqPanel extends JPanel implements MouseListener, { Vector allFeatures = getAllFeaturesAtRes(sequence.getDatasetSequence(), sequence.findPosition(res)); - Vector links = new Vector();; + Vector links = new Vector(); for (int i = 0; i < allFeatures.size(); i++) { SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(i); @@ -1270,9 +1268,9 @@ public class SeqPanel extends JPanel implements MouseListener, } } + jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null, links); + pop.show(this, evt.getX(), evt.getY()); - jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null, links); - pop.show(this, evt.getX(), evt.getY()); } else if (stretchGroup == null) { @@ -1332,8 +1330,8 @@ public class SeqPanel extends JPanel implements MouseListener, { if (stretchGroup.cs instanceof ClustalxColourScheme) { - ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup. - sequences, + ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX( + stretchGroup.getSequences(true), stretchGroup.getWidth()); } @@ -1439,7 +1437,7 @@ public class SeqPanel extends JPanel implements MouseListener, Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq); - if (stretchGroup.sequences.contains(nextSeq)) + if (stretchGroup.getSequences(false).contains(nextSeq)) { stretchGroup.deleteSequence(seq, false); } diff --git a/src/jalview/gui/TreeCanvas.java b/src/jalview/gui/TreeCanvas.java index 944aa73..1628f58 100755 --- a/src/jalview/gui/TreeCanvas.java +++ b/src/jalview/gui/TreeCanvas.java @@ -228,7 +228,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, SequenceGroup selected = av.getSelectionGroup(); if ((selected != null) && - selected.sequences.contains((SequenceI) node.element())) + selected.getSequences(false).contains((SequenceI) node.element())) { g.setColor(Color.gray); @@ -758,7 +758,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, && av.getGlobalColourScheme().conservationApplied()) { Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, sg.sequences, + ResidueProperties.propHash, 3, + sg.getSequences(false), sg.getStartRes(), sg.getEndRes()); c.calculate(); -- 1.7.10.2