package jalview.gui; import java.awt.*; import java.awt.event.*; import jalview.datamodel.*; import javax.swing.*; public class IdPanel extends JPanel implements MouseListener, MouseMotionListener { protected IdCanvas idCanvas; protected AlignViewport av; protected AlignmentPanel alignPanel; protected int offy; public int width; public int lastid; SequenceGroup selectedSequenceGroup; public IdPanel(AlignViewport av, AlignmentPanel parent) { this.av = av; alignPanel = parent; idCanvas = new IdCanvas(av); setLayout(new BorderLayout()); add(idCanvas, BorderLayout.CENTER); addMouseListener(this); addMouseMotionListener(this); } public void mouseMoved(MouseEvent e) {} public void selectSeqs(int start, int end) { if (end < start) { int tmp = start; start = end; end = tmp; } for (int i = start; i <= end; i++) { SequenceI pickedSeq = av.getAlignment().getSequenceAt(i); if (av.getSelection().contains(pickedSeq)) { av.getSelection().removeElement(pickedSeq); selectedSequenceGroup.deleteSequence(pickedSeq); } else { av.getSelection().addElement(pickedSeq); if(selectedSequenceGroup==null) { selectedSequenceGroup = new SequenceGroup(); av.setRubberbandGroup( selectedSequenceGroup ); // av.alignment.addGroup( selectedSequenceGroup ); selectedSequenceGroup.setStartRes(0); selectedSequenceGroup.setEndRes( pickedSeq.getSequence().length()); } selectedSequenceGroup.addSequence( pickedSeq ); } } alignPanel.seqPanel.seqCanvas.paintFlag=true; alignPanel.repaint(); repaint(); } public void mouseDragged(MouseEvent e) { int y = e.getY(); if(av.getWrapAlignment()) y-=2*av.charHeight; int seq = av.getIndex(y); if (seq < lastid) selectSeqs(lastid - 1, seq); else if (seq > lastid) selectSeqs(lastid + 1, seq); lastid = seq; return; } public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { int y = e.getY(); if(av.getWrapAlignment()) y-=2*av.charHeight; int seq = av.getIndex(y); String id = av.getAlignment().getSequenceAt(seq).getName(); try{ jalview.util.BrowserLauncher.openURL( "http://srs.ebi.ac.uk/srs7bin/cgi-bin/wgetz?-e+[swall-id:" + id + "]+-vn+2"); }catch(Exception ex){ex.printStackTrace();} } } public void mouseEntered(MouseEvent e) { } public void mouseExited (MouseEvent e) { } public void mousePressed(MouseEvent e) { if (e.getClickCount() == 2) return; int y = e.getY(); if(av.getWrapAlignment()) y-=2*av.charHeight; int seq = av.getIndex(y); if (javax.swing.SwingUtilities.isRightMouseButton(e)) { jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(alignPanel, av.getAlignment().getSequenceAt(seq)); pop.show(this, e.getX(), y); return; } if(av.getRubberbandGroup()!=null && (av.getRubberbandGroup().getSize() == av.getSelection().size())) selectedSequenceGroup = av.getRubberbandGroup(); if (selectedSequenceGroup == null) { selectedSequenceGroup = new SequenceGroup(); av.setRubberbandGroup(selectedSequenceGroup); } selectedSequenceGroup.setStartRes(0); selectedSequenceGroup.setEndRes(av.getAlignment().getWidth() - 1); if (seq != -1) selectSeqs(seq, seq); lastid = seq; return; } public void mouseReleased(MouseEvent e) { lastid = -1; PaintRefresher.Refresh(this); selectedSequenceGroup = null; } }