X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureSelectionManager.java;h=47973d0c3c92e3589a92f4f4ace86c21df2cdbad;hb=8d04f607fa312a59a69ec6e92a40a5ea5189b8cb;hp=d33c380cf3109ffabb543ee02ce092c3b3da57b4;hpb=95bf0ccfad1458a77d30394f4b60b40a9794dd9c;p=jalview.git diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index d33c380..47973d0 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -1,17 +1,17 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * + * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) + * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -259,6 +259,7 @@ public class StructureSelectionManager public void mouseOverStructure(int pdbResNum, String chain, String pdbfile) { + boolean hasSequenceListeners = handlingVamsasMo || seqmappings != null; SearchResults results = null; for (int i = 0; i < listeners.size(); i++) { @@ -267,41 +268,62 @@ public class StructureSelectionManager if (results == null) { results = new SearchResults(); - - for (int j = 0; j < mappings.length; j++) + } + int indexpos; + for (int j = 0; j < mappings.length; j++) + { + if (mappings[j].pdbfile.equals(pdbfile) + && mappings[j].pdbchain.equals(chain)) { - if (mappings[j].pdbfile.equals(pdbfile) - && mappings[j].pdbchain.equals(chain)) + indexpos = mappings[j].getSeqPos(pdbResNum); + results.addResult(mappings[j].sequence, indexpos, indexpos); + // construct highlighted sequence list + if (seqmappings != null) { - results.addResult(mappings[j].sequence, mappings[j] - .getSeqPos(pdbResNum), mappings[j] - .getSeqPos(pdbResNum)); + + Enumeration e = seqmappings.elements(); + while (e.hasMoreElements()) + + { + ((AlignedCodonFrame) e.nextElement()).markMappedRegion( + mappings[j].sequence, indexpos, results); + } } } } - if (results.getSize() > 0) - { - ((SequenceListener) listeners.elementAt(i)) - .highlightSequence(results); - } - + } + } + if (results.getSize() > 0) + { + for (int i = 0; i < listeners.size(); i++) + { + Object li = listeners.elementAt(i); + if (li instanceof SequenceListener) + ((SequenceListener) li).highlightSequence(results); } } } Vector seqmappings = null; // should be a simpler list of mapped seuqence + /** * highlight regions associated with a position (indexpos) in seq - * @param seq the sequeence that the mouse over occured on - * @param indexpos the absolute position being mouseovered in seq (0 to seq.length()) - * @param index the sequence position (if -1, seq.findPosition is called to resolve the residue number) + * + * @param seq + * the sequeence that the mouse over occured on + * @param indexpos + * the absolute position being mouseovered in seq (0 to + * seq.length()) + * @param index + * the sequence position (if -1, seq.findPosition is called to + * resolve the residue number) */ public void mouseOverSequence(SequenceI seq, int indexpos, int index) { boolean hasSequenceListeners = handlingVamsasMo || seqmappings != null; SearchResults results = null; - if (index==-1) - index=seq.findPosition(indexpos); + if (index == -1) + index = seq.findPosition(indexpos); StructureListener sl; int atomNo = 0; for (int i = 0; i < listeners.size(); i++) @@ -312,7 +334,8 @@ public class StructureSelectionManager for (int j = 0; j < mappings.length; j++) { - if (mappings[j].sequence == seq || mappings[j].sequence==seq.getDatasetSequence()) + if (mappings[j].sequence == seq + || mappings[j].sequence == seq.getDatasetSequence()) { atomNo = mappings[j].getAtomNum(index); @@ -329,9 +352,9 @@ public class StructureSelectionManager if (relaySeqMappings && hasSequenceListeners && listeners.elementAt(i) instanceof SequenceListener) { - // DEBUG - //System.err.println("relay Seq " + seq.getDisplayId(false) + " " + - // index); + // DEBUG + // System.err.println("relay Seq " + seq.getDisplayId(false) + " " + + // index); if (results == null) { @@ -340,7 +363,7 @@ public class StructureSelectionManager { // construct highlighted sequence list - if (seqmappings!=null) + if (seqmappings != null) { Enumeration e = seqmappings.elements(); while (e.hasMoreElements()) @@ -369,11 +392,14 @@ public class StructureSelectionManager else if (listeners.elementAt(i) instanceof VamsasListener && !handlingVamsasMo) { - // DEBUG - //System.err.println("Vamsas from Seq " + seq.getDisplayId(false) + " " + + // DEBUG + // System.err.println("Vamsas from Seq " + seq.getDisplayId(false) + " + // " + // index); - // pass the mouse over and absolute position onto the VamsasListener(s) - ((VamsasListener) listeners.elementAt(i)).mouseOver(seq, indexpos); + // pass the mouse over and absolute position onto the + // VamsasListener(s) + ((VamsasListener) listeners.elementAt(i)) + .mouseOver(seq, indexpos); } } } @@ -384,23 +410,26 @@ public class StructureSelectionManager * handled */ boolean handlingVamsasMo = false; - long lastmsg=0; + + long lastmsg = 0; + /** * as mouseOverSequence but only route event to SequenceListeners * * @param sequenceI - * @param position in an alignment sequence + * @param position + * in an alignment sequence */ public void mouseOverVamsasSequence(SequenceI sequenceI, int position) { handlingVamsasMo = true; - long msg = sequenceI.hashCode()*(1+position); - if (lastmsg!=msg) + long msg = sequenceI.hashCode() * (1 + position); + if (lastmsg != msg) { lastmsg = msg; mouseOverSequence(sequenceI, position, -1); } - handlingVamsasMo = false; + handlingVamsasMo = false; } public Annotation[] colourSequenceFromStructure(SequenceI seq, @@ -557,4 +586,34 @@ public class StructureSelectionManager { modifySeqMappingList(true, codonFrames); } + + Vector sel_listeners = new Vector(); + public void addSelectionListener(SelectionListener selecter) + { + if (!sel_listeners.contains(selecter)) + { + sel_listeners.addElement(selecter); + } + } + public void removeSelectionListener(SelectionListener toremove) + { + if (sel_listeners.contains(toremove)) + { + sel_listeners.removeElement(toremove); + } + } + public synchronized void sendSelection(jalview.datamodel.SequenceGroup selection, jalview.datamodel.ColumnSelection colsel, SelectionSource source) + { + if (sel_listeners!=null && sel_listeners.size()>0) + { + Enumeration listeners = sel_listeners.elements(); + while (listeners.hasMoreElements()) + { + SelectionListener slis = ((SelectionListener) listeners.nextElement()); + if (slis!=source) { + slis.selection(selection, colsel, source); + }; + } + } + } }