From caf13e6a9dc82023cd8648420201e5ad60ce0393 Mon Sep 17 00:00:00 2001 From: jprocter Date: Tue, 18 Jan 2011 10:33:11 +0000 Subject: [PATCH] refactored VamsasListener to allow the source of the event to be passed to handlers --- src/jalview/appletgui/AlignViewport.java | 3 +- src/jalview/appletgui/SeqPanel.java | 2 +- src/jalview/bin/JalviewLite.java | 4 +- src/jalview/gui/AlignViewport.java | 3 +- src/jalview/gui/SeqPanel.java | 2 +- src/jalview/gui/VamsasApplication.java | 9 +-- src/jalview/javascript/MouseOverListener.java | 60 ++++++++++++++------ .../structure/StructureSelectionManager.java | 8 +-- src/jalview/structure/VamsasListener.java | 11 +++- src/jalview/structure/VamsasSource.java | 14 +++++ 10 files changed, 83 insertions(+), 33 deletions(-) create mode 100644 src/jalview/structure/VamsasSource.java diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index cd7857e..0dc60d1 100755 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -26,8 +26,9 @@ import jalview.bin.*; import jalview.datamodel.*; import jalview.schemes.*; import jalview.structure.SelectionSource; +import jalview.structure.VamsasSource; -public class AlignViewport implements SelectionSource +public class AlignViewport implements SelectionSource, VamsasSource { int startRes; diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 98dcc07..e6ed8f2 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -632,7 +632,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, { String tmp = sequence.hashCode() + index + ""; if (lastMessage == null || !lastMessage.equals(tmp)) - ssm.mouseOverSequence(sequence, index, pos); + ssm.mouseOverSequence(sequence, index, pos, av); lastMessage = tmp; } diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index c972025..dd2bf70 100755 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -177,12 +177,12 @@ public class JalviewLite extends Applet .toLowerCase().indexOf("false") > -1)) { StructureSelectionManager.getStructureSelectionManager() - .mouseOverVamsasSequence(sq, sq.findIndex(apos)); + .mouseOverVamsasSequence(sq, sq.findIndex(apos), null); } else { StructureSelectionManager.getStructureSelectionManager() - .mouseOverVamsasSequence(sq, apos); + .mouseOverVamsasSequence(sq, apos, null); } } diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 033b3bc..d0c5674 100755 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -48,6 +48,7 @@ import jalview.datamodel.*; import jalview.schemes.*; import jalview.structure.SelectionSource; import jalview.structure.StructureSelectionManager; +import jalview.structure.VamsasSource; /** * DOCUMENT ME! @@ -55,7 +56,7 @@ import jalview.structure.StructureSelectionManager; * @author $author$ * @version $Revision$ */ -public class AlignViewport implements SelectionSource +public class AlignViewport implements SelectionSource, VamsasSource { private static final int RIGHT_JUSTIFY = 1; diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 7502812..fdcfaca 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -601,7 +601,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (lastMessage == null || !lastMessage.equals(tmp)) { // System.err.println("mouseOver Sequence: "+tmp); - ssm.mouseOverSequence(sequence, index, pos); + ssm.mouseOverSequence(sequence, index, pos, av); } lastMessage = tmp; } diff --git a/src/jalview/gui/VamsasApplication.java b/src/jalview/gui/VamsasApplication.java index efd94de..cd9a529 100644 --- a/src/jalview/gui/VamsasApplication.java +++ b/src/jalview/gui/VamsasApplication.java @@ -27,6 +27,7 @@ import jalview.structure.SelectionListener; import jalview.structure.SelectionSource; import jalview.structure.StructureSelectionManager; import jalview.structure.VamsasListener; +import jalview.structure.VamsasSource; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -61,7 +62,7 @@ import uk.ac.vamsas.objects.core.Seg; * @author jimp * */ -public class VamsasApplication implements SelectionSource +public class VamsasApplication implements SelectionSource,VamsasSource { IClient vclient = null; @@ -756,7 +757,7 @@ public class VamsasApplication implements SelectionSource final IPickManager pm = vclient.getPickManager(); final StructureSelectionManager ssm = StructureSelectionManager .getStructureSelectionManager(); - final SelectionSource me = this; + final VamsasApplication me = this; pm.registerMessageHandler(new IMessageHandler() { String last = null; @@ -789,7 +790,7 @@ public class VamsasApplication implements SelectionSource // bound to "+jvobj+" at "+mm.getPosition()); // position is character position in aligned sequence ssm.mouseOverVamsasSequence((SequenceI) jvobj, - mm.getPosition()); + mm.getPosition(), me); } } if (message instanceof uk.ac.vamsas.client.picking.SelectionMessage) @@ -957,7 +958,7 @@ public class VamsasApplication implements SelectionSource int i = -1; - public void mouseOver(SequenceI seq, int index) + public void mouseOver(SequenceI seq, int index, VamsasSource source) { if (jv2vobj == null) return; diff --git a/src/jalview/javascript/MouseOverListener.java b/src/jalview/javascript/MouseOverListener.java index c2ae6ef..224c6d6 100644 --- a/src/jalview/javascript/MouseOverListener.java +++ b/src/jalview/javascript/MouseOverListener.java @@ -1,49 +1,74 @@ package jalview.javascript; +import java.util.Vector; + import jalview.appletgui.AlignFrame; import jalview.bin.JalviewLite; import jalview.datamodel.SequenceI; import jalview.structure.VamsasListener; +import jalview.structure.VamsasSource; import netscape.javascript.JSObject; -public class MouseOverListener extends JSFunctionExec implements VamsasListener,JsCallBack +public class MouseOverListener extends JSFunctionExec implements + VamsasListener, JsCallBack { AlignFrame _af; + String _listener; + SequenceI last = null; int i = -1; - public void mouseOver(SequenceI seq, int index) + public void mouseOver(SequenceI seq, int index, VamsasSource source) { if (seq != last || i != index) { - // this should really be a trace message. - // Cache.log.debug("Mouse over " + v.getId() + " bound to " - // + seq + " at " + index); - last = seq; - i = index; - try { - executeJavascriptFunction(_listener, new Object[] { _af, seq.getDisplayId(false), ""+(1+i)}); - } catch (Exception ex) + // this should really be a trace message. + // Cache.log.debug("Mouse over " + v.getId() + " bound to " + // + seq + " at " + index); + last = seq; + i = index; + AlignFrame src = null; + try + { + Vector win; + if (source != null) { - - System.err.println("JalviewLite javascript error: Couldn't send mouseOver with handler '"+_listener+"'"); - if (ex instanceof netscape.javascript.JSException) + if (source instanceof jalview.appletgui.AlignViewport + && ((jalview.appletgui.AlignViewport) source).applet.currentAlignFrame.viewport == source) { - System.err.println("Javascript Exception: "+((netscape.javascript.JSException)ex).getMessage()); + // should be valid if it just generated an event! + src = ((jalview.appletgui.AlignViewport) source).applet.currentAlignFrame; + } - ex.printStackTrace(); + } + executeJavascriptFunction(_listener, new Object[] + { src, seq.getDisplayId(false), "" + (1 + i) }); + } catch (Exception ex) + { + + System.err + .println("JalviewLite javascript error: Couldn't send mouseOver with handler '" + + _listener + "'"); + if (ex instanceof netscape.javascript.JSException) + { + System.err.println("Javascript Exception: " + + ((netscape.javascript.JSException) ex).getMessage()); + } + ex.printStackTrace(); } } } - - public MouseOverListener(JalviewLite applet, AlignFrame af, String listener) + + public MouseOverListener(JalviewLite applet, AlignFrame af, + String listener) { super(applet); _af = af; _listener = listener; } + @Override public AlignFrame getAlignFrame() { @@ -56,5 +81,4 @@ public class MouseOverListener extends JSFunctionExec implements VamsasListener, return _listener; } - } diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 0cd3094..c4566d8 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -363,7 +363,7 @@ public class StructureSelectionManager * the sequence position (if -1, seq.findPosition is called to * resolve the residue number) */ - public void mouseOverSequence(SequenceI seq, int indexpos, int index) + public void mouseOverSequence(SequenceI seq, int indexpos, int index, VamsasSource source) { boolean hasSequenceListeners = handlingVamsasMo || seqmappings != null; SearchResults results = null; @@ -447,7 +447,7 @@ public class StructureSelectionManager // pass the mouse over and absolute position onto the // VamsasListener(s) ((VamsasListener) listeners.elementAt(i)) - .mouseOver(seq, indexpos); + .mouseOver(seq, indexpos, source); } } } @@ -468,14 +468,14 @@ public class StructureSelectionManager * @param position * in an alignment sequence */ - public void mouseOverVamsasSequence(SequenceI sequenceI, int position) + public void mouseOverVamsasSequence(SequenceI sequenceI, int position, VamsasSource source) { handlingVamsasMo = true; long msg = sequenceI.hashCode() * (1 + position); if (lastmsg != msg) { lastmsg = msg; - mouseOverSequence(sequenceI, position, -1); + mouseOverSequence(sequenceI, position, -1, source); } handlingVamsasMo = false; } diff --git a/src/jalview/structure/VamsasListener.java b/src/jalview/structure/VamsasListener.java index fa1f13e..c8f801b 100644 --- a/src/jalview/structure/VamsasListener.java +++ b/src/jalview/structure/VamsasListener.java @@ -19,7 +19,16 @@ package jalview.structure; import jalview.datamodel.SequenceI; +/** + * The vamsasListener allows peers to receive mouseOver events from any Jalview alignment window. + * @author JimP + * + * @history Version 1 released for Jalview 2.4. + * @history Version 2 mouseOver refactored to include an additional parameter allowing the source of the event to be passed to the handler. + * + * + */ public interface VamsasListener { - public void mouseOver(SequenceI seq, int index); + public void mouseOver(SequenceI seq, int index, VamsasSource source); } diff --git a/src/jalview/structure/VamsasSource.java b/src/jalview/structure/VamsasSource.java new file mode 100644 index 0000000..50e7278 --- /dev/null +++ b/src/jalview/structure/VamsasSource.java @@ -0,0 +1,14 @@ +package jalview.structure; + + +/** + * an object that can generate mouseover events for VamsasListeners. This is purely a tag for the + * moment, but there may be more interrogative methods in future. + * + */ + +public interface VamsasSource +{ + + +} -- 1.7.10.2