X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FScalePanel.java;h=7ed0146de4bb7babefd36e2c400d21fe5f5763d8;hb=7f7fc2e5533f7b00c86465f964e37c55bcf12fd7;hp=486b87a578c7b880c94369461b9ee0f0ad4c65c7;hpb=efc31b4a8d5cee63555586804a2b79c06bdb5a14;p=jalview.git diff --git a/src/jalview/gui/ScalePanel.java b/src/jalview/gui/ScalePanel.java index 486b87a..7ed0146 100755 --- a/src/jalview/gui/ScalePanel.java +++ b/src/jalview/gui/ScalePanel.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2006 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 @@ -32,7 +32,7 @@ import javax.swing.*; * @author $author$ * @version $Revision$ */ -public class ScalePanel extends JPanel +public class ScalePanel extends JPanel implements MouseMotionListener, MouseListener { protected int offy = 4; @@ -43,6 +43,7 @@ public class ScalePanel extends JPanel boolean stretchingGroup = false; int min; //used by mouseDragged to see if user int max; //used by mouseDragged to see if user + boolean mouseDragging = false; // wants to delete columns public ScalePanel(AlignViewport av, AlignmentPanel ap) @@ -50,25 +51,8 @@ public class ScalePanel extends JPanel this.av = av; this.ap = ap; - addMouseListener(new MouseAdapter() - { - public void mousePressed(MouseEvent evt) - { - doMousePressed(evt); - } - - public void mouseReleased(MouseEvent evt) - { - doMouseReleased(evt); - } - }); - addMouseMotionListener(new MouseMotionAdapter() - { - public void mouseDragged(MouseEvent evt) - { - doMouseDragged(evt); - } - }); + addMouseListener(this); + addMouseMotionListener(this); } /** @@ -76,35 +60,111 @@ public class ScalePanel extends JPanel * * @param evt DOCUMENT ME! */ - public void doMousePressed(MouseEvent evt) + public void mousePressed(MouseEvent evt) { - int x = evt.getX(); - int res = (x / av.getCharWidth()) + av.getStartRes(); - SequenceGroup sg = null; + int x = (evt.getX() / av.getCharWidth()) + av.getStartRes(); + final int res; + + if(av.hasHiddenColumns) + res = av.getColumnSelection().adjustForHiddenColumns(x); + else + res = x; min = res; max = res; - if (av.getColumnSelection().contains(res)) + if (SwingUtilities.isRightMouseButton(evt)) { - av.getColumnSelection().removeElement(res); - ap.annotationPanel.removeEditableColumn(res); + JPopupMenu pop = new JPopupMenu(); + if (reveal != null) + { + JMenuItem item = new JMenuItem("Reveal"); + item.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + av.showColumn(reveal[0]); + reveal = null; + ap.repaint(); + if (ap.overviewPanel != null) + ap.overviewPanel.updateOverviewImage(); + } + }); + pop.add(item); + + if (av.getColumnSelection().getHiddenColumns().size() > 1) + { + item = new JMenuItem("Reveal All"); + item.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + av.showAllHiddenColumns(); + reveal = null; + ap.repaint(); + if (ap.overviewPanel != null) + ap.overviewPanel.updateOverviewImage(); + } + }); + pop.add(item); + } + pop.show(this, evt.getX(), evt.getY()); + } + else if (av.getColumnSelection().contains(res)) + { + JMenuItem item = new JMenuItem("Hide Columns"); + item.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + av.hideColumns(res, res); + if(av.getSelectionGroup()!=null + && av.getSelectionGroup().getSize(false)==av.alignment.getHeight()) + av.setSelectionGroup(null); + + ap.repaint(); + if (ap.overviewPanel != null) + ap.overviewPanel.updateOverviewImage(); + } + }); + pop.add(item); + pop.show(this, evt.getX(), evt.getY()); + } } - else + else // LEFT MOUSE TO SELECT { - av.getColumnSelection().addElement(res); - sg = new SequenceGroup(); - - for (int i = 0; i < av.alignment.getSequences().size(); i++) + if (!evt.isControlDown() && !evt.isShiftDown()) + { + av.getColumnSelection().clear(); + } + + av.getColumnSelection().addElement(res); + SequenceGroup sg = new SequenceGroup(); + for (int i = 0; i < av.alignment.getSequences().size(); i++) + { + sg.addSequence(av.alignment.getSequenceAt(i), false); + } + + sg.setStartRes(res); + sg.setEndRes(res); + av.setSelectionGroup(sg); + + if(evt.isShiftDown()) + { + int min = Math.min(av.getColumnSelection().getMin(), res); + int max = Math.max(av.getColumnSelection().getMax(), res); + for (int i = min; i av.alignment.getWidth()) { - for (int i = 0; i < av.getColumnSelection().size(); i++) - { - ap.annotationPanel.addEditableColumn(av.getColumnSelection() - .columnAt(i)); - } + res = av.alignment.getWidth()-1; } + if(av.hasHiddenColumns) + res = av.getColumnSelection().adjustForHiddenColumns(res); + if (!stretchingGroup) { ap.repaint(); @@ -154,10 +214,22 @@ public class ScalePanel extends JPanel * * @param evt DOCUMENT ME! */ - public void doMouseDragged(MouseEvent evt) + public void mouseDragged(MouseEvent evt) { - int x = evt.getX(); - int res = (x / av.getCharWidth()) + av.getStartRes(); + mouseDragging = true; + + int res = (evt.getX() / av.getCharWidth()) + av.getStartRes(); + if(res<0) + res = 0; + + if(av.hasHiddenColumns) + res = av.getColumnSelection().adjustForHiddenColumns(res); + + + if(res> av.alignment.getWidth()) + { + res = av.alignment.getWidth()-1; + } if (res < min) { @@ -169,6 +241,8 @@ public class ScalePanel extends JPanel max = res; } + + SequenceGroup sg = av.getSelectionGroup(); if (sg != null) @@ -184,7 +258,7 @@ public class ScalePanel extends JPanel { sg.setEndRes(res); } - else if (res < sg.getStartRes()) + if (res < sg.getStartRes()) { sg.setStartRes(res); } @@ -194,7 +268,6 @@ public class ScalePanel extends JPanel if ((i < sg.getStartRes()) || (i > sg.getEndRes())) { av.getColumnSelection().removeElement(i); - ap.annotationPanel.removeEditableColumn(res); } else { @@ -206,6 +279,50 @@ public class ScalePanel extends JPanel } } + public void mouseEntered(MouseEvent evt) + { + if(mouseDragging) + ap.seqPanel.scrollCanvas(null); + } + + public void mouseExited(MouseEvent evt) + { + if(mouseDragging) + ap.seqPanel.scrollCanvas(evt); + } + + public void mouseClicked(MouseEvent evt){} + + public void mouseMoved(MouseEvent evt) + { + if(!av.hasHiddenColumns) + return; + + int res = (evt.getX() / av.getCharWidth()) + av.getStartRes(); + + res = av.getColumnSelection().adjustForHiddenColumns(res); + + reveal = null; + for(int i=0; i