From: gmungoc Date: Tue, 7 Oct 2014 14:13:53 +0000 (+0100) Subject: JAL-1554 handle left-then-right click on sequence id X-Git-Tag: Jalview_2_9~169^2~22^2~18 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=3ab93880136a581ebf1e50e38e780c2b2141bca9 JAL-1554 handle left-then-right click on sequence id --- diff --git a/src/jalview/gui/IdPanel.java b/src/jalview/gui/IdPanel.java index ee779f7..7f2e669 100755 --- a/src/jalview/gui/IdPanel.java +++ b/src/jalview/gui/IdPanel.java @@ -20,19 +20,30 @@ */ package jalview.gui; -import java.awt.*; -import java.awt.event.*; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.io.SequenceAnnotationReport; +import jalview.util.UrlLink; + +import java.awt.BorderLayout; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; import java.util.List; import java.util.Vector; -import javax.swing.*; - -import jalview.datamodel.*; -import jalview.io.SequenceAnnotationReport; -import jalview.util.UrlLink; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.ToolTipManager; /** - * DOCUMENT ME! + * This panel hosts alignment sequence ids and responds to mouse clicks on them, + * as well as highlighting ids matched by a search from the Find menu. * * @author $author$ * @version $Revision$ @@ -63,9 +74,7 @@ public class IdPanel extends JPanel implements MouseListener, * Creates a new IdPanel object. * * @param av - * DOCUMENT ME! * @param parent - * DOCUMENT ME! */ public IdPanel(AlignViewport av, AlignmentPanel parent) { @@ -83,7 +92,8 @@ public class IdPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Respond to mouse movement by constructing tooltip text for the sequence id + * under the mouse. * * @param e * DOCUMENT ME! @@ -96,7 +106,7 @@ public class IdPanel extends JPanel implements MouseListener, if (seq > -1 && seq < av.getAlignment().getHeight()) { SequenceI sequence = av.getAlignment().getSequenceAt(seq); - StringBuffer tip = new StringBuffer(); + StringBuffer tip = new StringBuffer(64); seqAnnotReport .createSequenceAnnotationReport(tip, sequence, av.isShowDbRefs(), av.isShowNpFeats(), @@ -107,10 +117,10 @@ public class IdPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Responds to a mouse drag by selecting the sequences under the dragged + * region. * * @param e - * DOCUMENT ME! */ @Override public void mouseDragged(MouseEvent e) @@ -132,6 +142,9 @@ public class IdPanel extends JPanel implements MouseListener, alignPanel.paintAlignment(true); } + /** + * Response to the mouse wheel by scrolling the alignment panel. + */ @Override public void mouseWheelMoved(MouseWheelEvent e) { @@ -141,7 +154,6 @@ public class IdPanel extends JPanel implements MouseListener, if (e.isShiftDown()) { alignPanel.scrollRight(true); - } else { @@ -162,20 +174,28 @@ public class IdPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Handle a mouse click event. Currently only responds to a double-click. The + * action is to try to open a browser window at a URL that searches for the + * selected sequence id. The search URL is configured in Preferences | + * Connections | URL link from Sequence ID. For example: + * + * http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$ * * @param e - * DOCUMENT ME! */ @Override public void mouseClicked(MouseEvent e) { - if (e.getClickCount() < 2) + /* + * Ignore single click. Ignore 'left' click followed by 'right' click (user + * selects a row then its pop-up menu). + */ + if (e.getClickCount() < 2 || SwingUtilities.isRightMouseButton(e)) { return; } - java.util.Vector links = Preferences.sequenceURLLinks; + Vector links = Preferences.sequenceURLLinks; if (links == null || links.size() < 1) { return; @@ -231,7 +251,6 @@ public class IdPanel extends JPanel implements MouseListener, "Web browser not found", JOptionPane.WARNING_MESSAGE); ex.printStackTrace(); } - } /** @@ -276,22 +295,29 @@ public class IdPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Respond to a mouse press. Does nothing for (left) double-click as this is + * handled by mouseClicked(). + * + * Right mouse down - construct and show context menu. + * + * Ctrl-down or Shift-down - add to or expand current selection group if there + * is one. + * + * Mouse down - select this sequence. * * @param e - * DOCUMENT ME! */ @Override public void mousePressed(MouseEvent e) { - if (e.getClickCount() == 2) + if (e.getClickCount() == 2 && SwingUtilities.isLeftMouseButton(e)) { return; } int seq = alignPanel.seqPanel.findSeq(e); - if (javax.swing.SwingUtilities.isRightMouseButton(e)) + if (SwingUtilities.isRightMouseButton(e)) { Sequence sq = (Sequence) av.getAlignment().getSequenceAt(seq); // build a new links menu based on the current links + any non-positional @@ -341,10 +367,9 @@ public class IdPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Toggle whether the sequence is part of the current selection group. * * @param seq - * DOCUMENT ME! */ void selectSeq(int seq) { @@ -355,12 +380,11 @@ public class IdPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Add contiguous rows of the alignment to the current selection group. Does + * nothing if there is no selection group. * * @param start - * DOCUMENT ME! * @param end - * DOCUMENT ME! */ void selectSeqs(int start, int end) { @@ -392,10 +416,10 @@ public class IdPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Respond to mouse released. Refreshes the display and triggers broadcast of + * the new selection group to any listeners. * * @param e - * DOCUMENT ME! */ @Override public void mouseReleased(MouseEvent e) @@ -412,10 +436,10 @@ public class IdPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Highlight sequence ids that match the given list, and if necessary scroll + * to the start sequence of the list. * * @param list - * DOCUMENT ME! */ public void highlightSearchResults(List list) {